From 6387c0df703c3039a72c51d1e2dfca3d68202b9d Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sat, 18 Nov 2023 21:10:21 +0000 Subject: [PATCH] fix: reorder headers to fix compilation error --- examples/01_one_sample/example.c | 13 ++-- examples/03_gcc_nested_function/example.c | 52 +++++++-------- examples/04_sample_from_cdf_simple/example | Bin 22816 -> 22816 bytes examples/04_sample_from_cdf_simple/example.c | 2 +- examples/05_sample_from_cdf_beta/example | Bin 26896 -> 26896 bytes examples/06_gamma_beta/example.c | 33 +++++----- examples/07_ci_beta/example | Bin 22576 -> 22576 bytes examples/07_ci_beta/example.c | 13 ++-- examples/08_nuclear_war/example | Bin 26760 -> 22696 bytes examples/09_burn_10kg_fat/example | Bin 22624 -> 22608 bytes examples/09_burn_10kg_fat/example.c | 2 - examples/10_nuclear_recovery/example | Bin 22912 -> 22904 bytes examples/10_nuclear_recovery/example.c | 66 ++++++++++--------- examples/11_algebra/example | Bin 22496 -> 22528 bytes examples/12_algebra_and_conversion/example | Bin 22496 -> 22528 bytes examples/12_algebra_and_conversion/example.c | 14 ++-- examples/13_ergonomic_algebra/example | Bin 22496 -> 22528 bytes examples/13_ergonomic_algebra/example.c | 10 +-- examples/14_twitter_thread_example/example | Bin 22656 -> 22688 bytes examples/14_twitter_thread_example/example.c | 22 ++++--- examples/15_plotting-scratchpad/makefile | 3 + examples/16_100_lognormal_samples/example.c | 21 +++--- extra.c | 3 +- 23 files changed, 132 insertions(+), 122 deletions(-) create mode 100644 examples/15_plotting-scratchpad/makefile diff --git a/examples/01_one_sample/example.c b/examples/01_one_sample/example.c index c0ddd00..683414a 100644 --- a/examples/01_one_sample/example.c +++ b/examples/01_one_sample/example.c @@ -1,7 +1,7 @@ #include "../../squiggle.h" #include -#include #include +#include // Estimate functions double sample_0(uint64_t* seed) @@ -24,10 +24,11 @@ double sample_many(uint64_t* seed) return sample_to(2, 10, seed); } -int main(){ +int main() +{ // set randomness seed - uint64_t* seed = malloc(sizeof(uint64_t)); - *seed = 1000; // xorshift can't start with 0 + uint64_t* seed = malloc(sizeof(uint64_t)); + *seed = 1000; // xorshift can't start with 0 double p_a = 0.8; double p_b = 0.5; @@ -38,6 +39,6 @@ int main(){ double (*samplers[])(uint64_t*) = { sample_0, sample_1, sample_few, sample_many }; double result_one = sample_mixture(samplers, weights, n_dists, seed); - printf("result_one: %f\n", result_one); - free(seed); + printf("result_one: %f\n", result_one); + free(seed); } diff --git a/examples/03_gcc_nested_function/example.c b/examples/03_gcc_nested_function/example.c index 72eb925..226d94e 100644 --- a/examples/03_gcc_nested_function/example.c +++ b/examples/03_gcc_nested_function/example.c @@ -1,38 +1,38 @@ -#include -#include -#include #include "../../squiggle.h" +#include +#include +#include -int main(){ +int main() +{ // set randomness seed - uint64_t* seed = malloc(sizeof(uint64_t)); - *seed = 1000; // xorshift can't start with 0 + uint64_t* seed = malloc(sizeof(uint64_t)); + *seed = 1000; // xorshift can't start with 0 double p_a = 0.8; double p_b = 0.5; double p_c = p_a * p_b; int n_dists = 4; - - 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); } - + + 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); } + double (*samplers[])(uint64_t*) = { sample_0, sample_1, sample_few, sample_many }; - double weights[] = { 1 - p_c, p_c / 2, p_c / 4, p_c / 4 }; + double weights[] = { 1 - p_c, p_c / 2, p_c / 4, p_c / 4 }; - int n_samples = 1000000; - double* result_many = (double *) malloc(n_samples * sizeof(double)); - for(int i=0; i44M)a$kT@%*_}R_fI#YE3*{>=h delta 103 zcmZ3miE+Uu#tj+FA{v^#YyWSOlqgtwDs-~MRn<9%0yb@~VZNlwSiad`Q44M)ZXkT@%*__@v9I#YE3luIdk diff --git a/examples/04_sample_from_cdf_simple/example.c b/examples/04_sample_from_cdf_simple/example.c index ee24d34..05643fb 100644 --- a/examples/04_sample_from_cdf_simple/example.c +++ b/examples/04_sample_from_cdf_simple/example.c @@ -88,7 +88,7 @@ int main() printf("\nGetting some samples from sample_unit_normal\n"); clock_t begin_2 = clock(); - double* normal_samples = malloc(NUM_SAMPLES * sizeof(double)); + double* normal_samples = malloc(NUM_SAMPLES * sizeof(double)); for (int i = 0; i < NUM_SAMPLES; i++) { normal_samples[i] = sample_unit_normal(seed); // printf("%f\n", normal_sample); diff --git a/examples/05_sample_from_cdf_beta/example b/examples/05_sample_from_cdf_beta/example index 0c2cc5e1eee52fc6fd380e60456f6df2f2ff7db3..a604e4d882405c5076b34b6eb9b1f7a4fb4f9b58 100755 GIT binary patch delta 103 zcmbPmiE+Xu#tj+FBKq%6?QD1CtN5_`aAC+qNsUD^Rc|)eFdx!nEZc0atI5Q;Z*r#o rL&H@J3=A)2|NsBbFYm&@;L#hSQsB}2h9hG=NSqZ@{OsmxgQ*q(zg;QP delta 103 zcmbPmiE+Xu#tj+FBFkFN$?86ly`NT?XdI(%&-5sF&aBNf%!f1?%QxHWYBDkIpPZ@x r&~P;a1H((%|NsB<%eyczc=X1o6nHeh;mFtk5@*E}KexHsV5$WGTK*`e diff --git a/examples/06_gamma_beta/example.c b/examples/06_gamma_beta/example.c index 00330f2..428037c 100644 --- a/examples/06_gamma_beta/example.c +++ b/examples/06_gamma_beta/example.c @@ -11,8 +11,8 @@ int main() uint64_t* seed = malloc(sizeof(uint64_t)); *seed = 1000; // xorshift can't start with 0 - int n = 1000 * 1000; - /* + int n = 1000 * 1000; + /* for (int i = 0; i < n; i++) { double gamma_0 = sample_gamma(0.0, seed); // printf("sample_gamma(0.0): %f\n", gamma_0); @@ -20,26 +20,25 @@ int main() printf("\n"); */ - double* gamma_1_array = malloc(sizeof(double) * n); + double* gamma_1_array = malloc(sizeof(double) * n); for (int i = 0; i < n; i++) { double gamma_1 = sample_gamma(1.0, seed); // printf("sample_gamma(1.0): %f\n", gamma_1); - gamma_1_array[i] = gamma_1; + gamma_1_array[i] = gamma_1; } - printf("gamma(1) summary statistics = mean: %f, std: %f\n", array_mean(gamma_1_array, n), array_std(gamma_1_array, n)); - free(gamma_1_array); - printf("\n"); - - double* beta_1_2_array = malloc(sizeof(double) * n); - for (int i = 0; i < n; i++) { + printf("gamma(1) summary statistics = mean: %f, std: %f\n", array_mean(gamma_1_array, n), array_std(gamma_1_array, n)); + free(gamma_1_array); + printf("\n"); + + double* beta_1_2_array = malloc(sizeof(double) * n); + for (int i = 0; i < n; i++) { double beta_1_2 = sample_beta(1, 2.0, seed); // printf("sample_beta(1.0, 2.0): %f\n", beta_1_2); - beta_1_2_array[i] = beta_1_2; + beta_1_2_array[i] = beta_1_2; } - printf("beta(1,2) summary statistics: mean: %f, std: %f\n", array_mean(beta_1_2_array, n), array_std(beta_1_2_array, n)); - free(beta_1_2_array); - printf("\n"); - - free(seed); -} + printf("beta(1,2) summary statistics: mean: %f, std: %f\n", array_mean(beta_1_2_array, n), array_std(beta_1_2_array, n)); + free(beta_1_2_array); + printf("\n"); + free(seed); +} diff --git a/examples/07_ci_beta/example b/examples/07_ci_beta/example index 6b158785186d627b5670f4c1e20128b1aca7567f..7f379903184aa455f0a3d377c53f67982654c818 100755 GIT binary patch delta 103 zcmdn6fpG&6WiX2f%S8H^{3R-(fo!ZV*^N>6;u4&=5EcUdH{CDDI@>@ diff --git a/examples/07_ci_beta/example.c b/examples/07_ci_beta/example.c index c143602..6257c21 100644 --- a/examples/07_ci_beta/example.c +++ b/examples/07_ci_beta/example.c @@ -5,8 +5,9 @@ #include // Estimate functions -double beta_1_2_sampler(uint64_t* seed){ - return sample_beta(1, 2.0, seed); +double beta_1_2_sampler(uint64_t* seed) +{ + return sample_beta(1, 2.0, seed); } int main() @@ -15,8 +16,8 @@ int main() uint64_t* seed = malloc(sizeof(uint64_t)); *seed = 1000; // xorshift can't start with 0 - ci beta_1_2_ci_90 = get_90_confidence_interval(beta_1_2_sampler, seed); - printf("90%% confidence interval of beta(1,2) is [%f, %f]\n", beta_1_2_ci_90.low, beta_1_2_ci_90.high); - - free(seed); + ci beta_1_2_ci_90 = get_90_confidence_interval(beta_1_2_sampler, seed); + printf("90%% confidence interval of beta(1,2) is [%f, %f]\n", beta_1_2_ci_90.low, beta_1_2_ci_90.high); + + free(seed); } diff --git a/examples/08_nuclear_war/example b/examples/08_nuclear_war/example index 3c9ebb6bd9c0e8ab0a3bbab68c9ddacd1f3ef146..a70085ea74e1c0290bc4b51abfac05e59da7591b 100755 GIT binary patch delta 5825 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 SDrgw&c;DzP!$y5)Wc>#eIz-0+ delta 5874 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 diff --git a/examples/09_burn_10kg_fat/example b/examples/09_burn_10kg_fat/example index 036444cec7384797b6d6b730bf38497158e1cbbd..72b5d66c55b956ad15cb4a100de2a1d7664ce5e3 100755 GIT binary patch delta 5381 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 Ky|i#i{{I4ALI%?S diff --git a/examples/10_nuclear_recovery/example.c b/examples/10_nuclear_recovery/example.c index 76de52d..06a026f 100644 --- a/examples/10_nuclear_recovery/example.c +++ b/examples/10_nuclear_recovery/example.c @@ -7,34 +7,38 @@ double yearly_probability_nuclear_collapse(double year, uint64_t* seed) { - double successes = 0; - double failures = (year - 1960); - return sample_laplace(successes, failures, seed); - // ^ can change to (successes + 1)/(trials + 2) - // to get a probability, - // rather than sampling from a distribution over probabilities. + double successes = 0; + double failures = (year - 1960); + return sample_laplace(successes, failures, seed); + // ^ can change to (successes + 1)/(trials + 2) + // to get a probability, + // rather than sampling from a distribution over probabilities. } -double yearly_probability_nuclear_collapse_2023(uint64_t* seed){ - return yearly_probability_nuclear_collapse(2023, seed); +double yearly_probability_nuclear_collapse_2023(uint64_t* seed) +{ + return yearly_probability_nuclear_collapse(2023, seed); } -double yearly_probability_nuclear_collapse_after_recovery(double year, double rebuilding_period_length_years, uint64_t* seed){ - // assumption: nuclear - double successes = 1.0; - double failures = (year - rebuilding_period_length_years - 1960 - 1); - return sample_laplace(successes, failures, seed); +double yearly_probability_nuclear_collapse_after_recovery(double year, double rebuilding_period_length_years, uint64_t* seed) +{ + // assumption: nuclear + double successes = 1.0; + double failures = (year - rebuilding_period_length_years - 1960 - 1); + return sample_laplace(successes, failures, seed); } -double yearly_probability_nuclear_collapse_after_recovery_example(uint64_t* seed){ - double year = 2070; - double rebuilding_period_length_years =30; - // So, there was a nuclear collapse in 2040, - // then a recovery period of 30 years - // and it's now 2070 - return yearly_probability_nuclear_collapse_after_recovery(year, rebuilding_period_length_years, seed); +double yearly_probability_nuclear_collapse_after_recovery_example(uint64_t* seed) +{ + double year = 2070; + double rebuilding_period_length_years = 30; + // So, there was a nuclear collapse in 2040, + // then a recovery period of 30 years + // and it's now 2070 + return yearly_probability_nuclear_collapse_after_recovery(year, rebuilding_period_length_years, seed); } -double yearly_probability_nuclear_collapse_after_recovery_antiinductive(uint64_t* seed){ - return yearly_probability_nuclear_collapse(2023, seed)/2; +double yearly_probability_nuclear_collapse_after_recovery_antiinductive(uint64_t* seed) +{ + return yearly_probability_nuclear_collapse(2023, seed) / 2; } int main() @@ -45,8 +49,8 @@ int main() int num_samples = 1000000; - // Before a first nuclear collapse - printf("## Before the first nuclear collapse\n"); + // Before a first nuclear collapse + printf("## Before the first nuclear collapse\n"); ci ci_90_2023 = get_90_confidence_interval(yearly_probability_nuclear_collapse_2023, seed); printf("90%% confidence interval: [%f, %f]\n", ci_90_2023.low, ci_90_2023.high); @@ -54,10 +58,10 @@ int main() for (int i = 0; i < num_samples; i++) { yearly_probability_nuclear_collapse_2023_samples[i] = yearly_probability_nuclear_collapse_2023(seed); } - printf("mean: %f\n", array_mean(yearly_probability_nuclear_collapse_2023_samples, num_samples)); + printf("mean: %f\n", array_mean(yearly_probability_nuclear_collapse_2023_samples, num_samples)); - // After the first nuclear collapse - printf("\n## After the first nuclear collapse\n"); + // After the first nuclear collapse + printf("\n## After the first nuclear collapse\n"); ci ci_90_2070 = get_90_confidence_interval(yearly_probability_nuclear_collapse_after_recovery_example, seed); printf("90%% confidence interval: [%f, %f]\n", ci_90_2070.low, ci_90_2070.high); @@ -65,10 +69,10 @@ int main() for (int i = 0; i < num_samples; i++) { yearly_probability_nuclear_collapse_after_recovery_samples[i] = yearly_probability_nuclear_collapse_after_recovery_example(seed); } - printf("mean: %f\n", array_mean(yearly_probability_nuclear_collapse_after_recovery_samples, num_samples)); + printf("mean: %f\n", array_mean(yearly_probability_nuclear_collapse_after_recovery_samples, num_samples)); - // After the first nuclear collapse (antiinductive) - printf("\n## After the first nuclear collapse (antiinductive)\n"); + // After the first nuclear collapse (antiinductive) + printf("\n## After the first nuclear collapse (antiinductive)\n"); ci ci_90_antiinductive = get_90_confidence_interval(yearly_probability_nuclear_collapse_after_recovery_antiinductive, seed); printf("90%% confidence interval: [%f, %f]\n", ci_90_antiinductive.low, ci_90_antiinductive.high); @@ -76,7 +80,7 @@ int main() for (int i = 0; i < num_samples; i++) { yearly_probability_nuclear_collapse_after_recovery_antiinductive_samples[i] = yearly_probability_nuclear_collapse_after_recovery_antiinductive(seed); } - printf("mean: %f\n", array_mean(yearly_probability_nuclear_collapse_after_recovery_antiinductive_samples, num_samples)); + printf("mean: %f\n", array_mean(yearly_probability_nuclear_collapse_after_recovery_antiinductive_samples, num_samples)); free(seed); } diff --git a/examples/11_algebra/example b/examples/11_algebra/example index cdb046f4722f56ab0d4467950b15b7cc03037aef..b57bc51720b59e8441116c17946fe1314433490b 100755 GIT binary patch delta 3263 zcmb7HeNa@_6~FJn;x5SU^0{9wEZ^Yru^T~YgOgnYvgjJu1Oy#yVuHlPRGDZDrbO^# zNViIYIq7KgHP~rP$F?Je+88wnR%e>3wCFgd?Iec8uSW`qpslgm*WZ2bt&`e6IyvLM zbMEi_?s@l|d+y~qv`^^h6}s~U-;RPW3{_61NEIarC5DbE>ZqfyMo1TvTVA}?WA&&0 z`t_E!HyYy3ROP&SXJKDk)PPYuW~KRwo5UU~{VB0kf7!-Zpeue2J(P5gYLiL4 zZ1GbEnNn5@PtwMe?ATlXlI02065SjJmDp{`(a*1+Fqtc}^&HD|FeatkroW~%3onu{ zb-u8Kwx_-&9H!}(tk{LO)R{YNd?vM6rpC15jnXRGZ26%uK;xDT;*YH4wq(YdzEP?5 z)(CY;kcM|~!jzycD}Dj> z+Ct*RR1)o3hUfpOhW?m}?e3U2QW5oKdeojP?4(Y6jW9}s_H2uk!kB4uhsfB3sWCnl zBqXVer8q~Pu$N{yGKE)Yu_N8M20SVAA8N#>X^SIgY7h`=fmci4qu)C6L?MMfcYG$e z>CiNXVM?;%)jdGxr&;ZLuJf5#rdh3_^iu^eI|s<@Ocw`|$m?8`wls;)NeFUQ!%=De z9X`pd49(8j)Z?s-VW3DvUpw6i?@r3{aHqn-6uoqXa?@TADrk3_UCc=A`!H>rC>*Dn zjCX|dbT#8A!YXI6g{a(`Qa;m1S9aWR%?Q zLNR5OmbmYy*RsB!+&q=B53UQ0eZ(Ju@E20s2z`}RlWKrNIx-^59|LF78CcS?5%Oo} z7&_yWYNiy^n(WP@BaSAsN$iZJALq0c_rx-`J`vfKy$!3`R5EFLY2CkN*?(|7!k{;u zfW2pe;VXfzvMjnUcd1~euH3X(zd;EaKWv}_x$lcTdRm=#aN$OMBwQOTgqtwE^mBv@ zbTwwT1h$OmSAK-B=p=TCFH^|`NqGB%UGYOWL%}ZHNhl>bY4{2~mw%vrFNniVl*5!> z$(Iy~w2$Mu|HTJ5K8lx0Ivm4v{(x9j|&0lFRE$^A)&nk*DqzLMCHS|Zb=|Yei=RM!>6~W~J?UN1-f}^fqjAW4F3PeC+Ke@oLWfX-5Og=|eeD%Q=%Xybn9A?P7!->59JD8_oBlcC3<^PyYDWVwRlS7o^Ydgz)g{}S3fAbU4r@8;HFyIrg6_R3%b!8JaKY(OwQlHA=yB*EbO={y6LdfHR%jnC;~wZ< zXo-Gy-(jJE>Sp96JdP~6;LcN9~W0TvtrX~!L8?U*BD(-AQg^#fWN8Y z3-3Cn!4ZJtVkCH#(Y!^hH@d`mMzi0j=hayWe<`}+S=cOK^uVR(W+i@G;oEhC5@*fP zpMu#B8eQ`x^>r9N(2;L;Kq&7E&#sS#`qF<@5Pm~n&M7e*z(fISYNKlp=Gl(%SS*DF z7AVHu$64}LT5O*y;}qt*$2(5T;f=zE322@WGWxbGrXBFw;7!Dqd5TmYx>Jz?I$CKF zs`%4cuW@?qs;?H6=F$Y*Mf=4hVLxS5S%ePG_L9c#nXa;w{eZbg!yn61@eEb5-_a(_ z{gBVKWpR#}z{<7NXcRWUz3szV1T#KExa`81%cO?;3e~Z)2{04UVLZ1%w~9wr;??kO zd?;`!*Wx^&;pQ9__hHQCVFhRO?%V|1;~Hn2w+kdkoBJH?o@)_0`P24Jgp;mvlp_Ok zADy0S(H((Tt=dTvsx9q*!8ifyWFD1`7E$Di7R94Qi5$@D5j;cX6=KXK3cI50hPP;Si(F!7 zX@9_C8`8YI;9Mg6cZp{t$jZ}92{o3oOl(AgXk+GkvM2`5>+I6HCvrW{2CnXFJ)d9m zl*a2%Q{NP+-C7MdYj~CFX6+gt%2NT}7hGPU(=`^`uQcyt+N?#YlO5vkGMv!79h5Qe zh)(&_+4r}3%?5m8`)f-Kk>gZO8*2X`4E6czWFcOUZ!<3Zzak!5Q13Pb<|zO>Pn+sz O8FIDz!cM}&>Hh(vnP1WX delta 3387 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 R?bAmY!nJl{r_{+Q{{j|7p+g z-Z}SoKJK~ao_qIk{jkt+MA+#Qg1ZVowbZzoMm6LVO014?`p7Y^Yle_1rqpIGN*;f@ zeeJu~LnG?kn)ypMzun!nA?Bz}d|jrJB)8Zh)9j?oBqlR9Vs|EZ@v8Qkl^&UXmNZq| zB-5#+uyBszl7r@(unBi2uA^CmPl+^q5aq0@V2GeGWAIsF4wpW-!6Qo@0oO`;fgv4AjwMhwa z|4N6)GqhRyk#LEIrS;-B68WVZtNm-;^dl*1I<8xSssC#_lb$zjGSv30ARU&1LMH{} z0$~9)%UMD>t&{VUZ>C`xrM>z>kyqlSG&(BJ5tfnQ@>*W_rylxIn&|S!Wx!T>nVxXv z3$M{uSDi3Gy)Lh`CzUb#<_?k9tR-og&A4)p%l31{6mj; zJB41%@FrXYhFN)$zem4^!%_NM#wWrdIx#-Oay(g6n$FR+@#(Gucep3^!=V>Z`K1Op z+#AW^&Jt!(z&$U^s<}Apxl!|JW#+fs$Ds`!?tvuQ=bjeVk%T;mZoB=?H%C?V)>h33 zK4ztl@-u(p?sxKevHi-V`>Gm_3`MKsFkN4-C?9_EcJ)TSDHH09~DsE)EaS;Dm~C>r_=$<`0nHUnHgu&?5g7dNud^DTDEh zy?aMs>^=SpM?O_H^wa0Lb!oexP)_!%>K}nKUa61tg*(d+S*R?3 zk>H@t{7matW-V;uk1cd8|G4Ne)5?PG_&A_?yjUvrNyYCW3i^qi;Av@@Bk9tf`p(2w z9Jl&T(|j;(G0Lqzdfs=e{Vf>Ya%1`StZJS?i?=PjrQh6onB%7Z#xHSv04Xb#ecb6q zj2RoXXWk1n)tF! zN_d4<7Nz;u-7p%_yuvGhPfD{*8_DK!6MJoD?NFuJ-)nUg>2%)68tS+x8}K} z6Q82_fkqk%EN@r7P}Kw+_H<<91K$Q-1>W!v*(u z@IBxT6DGvfSq0t--Uxmk{8{iy+{Qb=yTK2F`_Lf6ls)N;P)Ii>6*!;dWdPxtWy5%` zQfZkaC!o!h&sFsqt^#qb2Us;NEt5=DkXmUYq-IDv=vQS~rVWtHbgIm6`W>W78Ys&! zUDWInCuc0~hjb8Kx?GFKn1geaCH6~Io%|4%0xSS*y@Bz0dAaujn}QfD#x2-9i)=WZ ztR7D_bUpOahsqo`b+n4${5y3Tq{Xd_Ss&=*r{@lNTlKp~UhM zQ!}KC6e|B=J3m?HF{(nvTOqUQHpdRJ)|S3Crq&h|!&X~*waxLE%^Zqn-1ZJ^JN^e- zT>8v|9Xku#CLVW{&GQsi!tqMr33oM|nko`Q4H!3Ktj%9zb8HctY#woj%@MMhc}?1& z|1I>-@i<{y04g&VtMTlB&P@9%rkSro3ZP%;t6*|hhovx%f>XmnWmjZsQ!LnLp&>zd zn?8H2L_P*T0huH`!lOJy&`R zE~H)1%FrfZ-vY(D77eOVA)T(4gc|;KHyJiZ@a@2<5%uP@47i7miplu-%&w7y4sKma zhV>g0bStfb5Dysml3X3n)){+;Ho^B4_my+Gjp$^RMmB~CyTrBaw~Po5d;@XXgE6O3 z0}mGIV{K0$CZWyv+Isyu9?hiGz<1)qf>Wgt=TQT9NBDQ zj407ldMAo!>vlyLbBe*PXgfKk?#Tw;U}RjVo3l&}XY^XFv$WK(X)`LNoetR58+eaV z+34-jLc40ErEP|`7oUBcqILW;WCwGx^ac%n@Y-b9@66SqKNy<52HxP+fi43-Msveb z-CKs%GbaCI2JRS>^Pdd7&8S=SCc8>U!;*a6(DH(FDlzu&249h&YHtTQ>!k7=Y=l#k znPbc#TF`|0fZ>x>l^d~JssODxgjR7vX_&k0IbXn`su jn(>*&iT~>opjl0ROL&F`uxqrb=@Co5abLJdn3we*eCA_~ delta 3409 zcmbVPeNa@_6~Fhfi@OW#F3ZZ>x3KIk?DFBFyDNgG>SR|@-XbV57$JjJVnjQ^NoW+(+Gxr_Y>i@3r-8PdRGl+)fDETpV%2Qd^#Fhd{`vB{SWJk4m3Gia6m( z+kB2X;T@YuzlGGSh@r(vh}e}e3`?`lz{3S0@Y#VLgI>FzJ`aDlKgzjtVA<3H)9DFW z9o*Kf;q`9!1-$-AA1iy_dbHGG)zG-k=HMKaBrc*|EG@Td+aQLU_ZpyO79f5W} zLRak-il`ro1vk}$C=_Ppp`jS=SJ#SZW$1Z$N?1l;gpUQEvFckjavOXn1XAzM#-OVq z=q#k`;Q?oiz61N6KE8h{A(p3iaI9=i8K-fCi`1Wn&z(hdFQnw;(<&&;aa)RTMjHKE zjhH_b>T`VQI>ow?)!7IgIYsmmyq0s8ehJUz<`{>wSg1z542N?a&Mh~XCvJ&Vt)a9| zA*`-rFqG@2yY{-4yB8=PnKjI&;kdNqHgmBmL#xZ51)E$8Q+sWg##(sO707HGljTd# zC`RaGkY0yxTt9R9&_Fo=(#%O&7URRo;#l=YTTfTsZjSB)!TSe#7~bx1jX z{PfKj1Pa&kHOaB3avKZ;01mz{i+Sj1vC6~;OSS8D#$@iGJ z^NL}^I>zgN$nRwQRZLkL|B5+vD7SRXl6NawAB#_-uSeW%dRW}8^B3ck7_am>!U+)< z6h9>%AIcEJ#}!SQqG%pQW-6*_YjuldI58?(rX6R;<}+*nQXe!=D{K#lJNrB}@u6tb zi54}__^F-eC^Hv7mPF$z=9IuQleqkf6v4dy?|lAaI_XM2B`lx6-h_vy`NRKHLfsc- z8M+H{xg!_ha6!eCaS5xJbrCKXlyaY50KqpG?18y71L^`l<_=weqk(zU0@niBf${U& z1u)=JKN+(;*xzC)#$=jKk6Kn|ICbnuG`!D>l?uU9S4Bu+@Qyjq2JP5QlF}~Raf_PR z6zhxV_!kyTx^f<#F0CpYa}yGMAQnFpT@j0a9j%YXCs&AF)6XM)e@)44b|$3f|IssC zx`*2vDuW#%d-~&>p7_c7^{wk>tR)0~6RL-MLs5`It?dWCl;w2nCk{;CgD7GK^ALLx z>k!AWAgzdVun?Vy1D9m^H8#d;^aWxk;v}Mkn43aK!!=nBA-;fEiRc)X$_3&!NIbCK7m?2d{&mDA407I zZkFY&B3Pilf6DSY?F}p^J93`OvOMb!t{Ax*cvDS64t9<=(51Mq~D1ntff;w4jw*G>v z!WFfd%+^I_LzTLy187r&{rKg7-43CLGQAMwWkyx>Dh4v!N2z&CDC#s930f8?{qCboRZekl+M} z&aa}qJ@NS~bqMF8!xXGK9ZW8;L;pfuD#cgdr~p%CA$<$NmAvo~#-fBLb+zmT-^-`a zT*)^}3Xw$&;qPadHi17%9Heg9zw=9R=^Vj79BdQskWAbk8&z)8{4hV>0A<7*=^;P8A+V8I9pMh5K!U>$s33*F3BKtJHyFev+H2#p5c?iGcm;_ZIFTwvDZO5KPKA*kc_4}lS=6Rpy`6tFR z3*-Bm#Syrt`t6?E)oYFTzejU@(3re9z3{904{3i-^9q?}j2P7b?4P3`Y+M;IhN@NO S4E%28Y-6g{OPt_c?*11cL6kHA diff --git a/examples/13_ergonomic_algebra/example.c b/examples/13_ergonomic_algebra/example.c index 6decb76..139173d 100644 --- a/examples/13_ergonomic_algebra/example.c +++ b/examples/13_ergonomic_algebra/example.c @@ -6,9 +6,9 @@ #include #define ln lognormal_params -#define to(...) convert_ci_to_lognormal_params((ci) __VA_ARGS__) -#define from(...) convert_lognormal_params_to_ci((ln) __VA_ARGS__) -#define times(a,b) algebra_product_lognormals(a,b) +#define to(...) convert_ci_to_lognormal_params((ci)__VA_ARGS__) +#define from(...) convert_lognormal_params_to_ci((ln)__VA_ARGS__) +#define times(a, b) algebra_product_lognormals(a, b) int main() { @@ -16,8 +16,8 @@ int main() uint64_t* seed = malloc(sizeof(uint64_t)); *seed = 1000; // xorshift can't start with 0 - ln a = to({.low = 1, .high = 10}); - ln b = to({.low = 5, .high = 500}); + ln a = to({ .low = 1, .high = 10 }); + ln b = to({ .low = 5, .high = 500 }); ln c = times(a, b); printf("Result: to(%f, %f)\n", from(c).low, from(c).high); diff --git a/examples/14_twitter_thread_example/example b/examples/14_twitter_thread_example/example index ace5b518f58fcbbdae2ff327167d38b56331f911..100c1dba5641e005a5a5ef19438c0953b8f0f957 100755 GIT binary patch delta 3315 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 #include -double sample_0(uint64_t* seed){ +double sample_0(uint64_t* seed) +{ return 0; } -double sample_1(uint64_t* seed){ +double sample_1(uint64_t* seed) +{ return 1; } -double sample_normal_mean_1_std_2(uint64_t* seed){ +double sample_normal_mean_1_std_2(uint64_t* seed) +{ return sample_normal(1, 2, seed); } -double sample_1_to_3(uint64_t* seed){ +double sample_1_to_3(uint64_t* seed) +{ return sample_to(1, 3, seed); } @@ -28,11 +32,11 @@ int main() int n_dists = 4; double weights[] = { 1, 2, 3, 4 }; - double (*samplers[])(uint64_t*) = { - sample_0, - sample_1, - sample_normal_mean_1_std_2, - sample_1_to_3 + double (*samplers[])(uint64_t*) = { + sample_0, + sample_1, + sample_normal_mean_1_std_2, + sample_1_to_3 }; int n_samples = 10; diff --git a/examples/15_plotting-scratchpad/makefile b/examples/15_plotting-scratchpad/makefile new file mode 100644 index 0000000..c374de9 --- /dev/null +++ b/examples/15_plotting-scratchpad/makefile @@ -0,0 +1,3 @@ +build: + +format: diff --git a/examples/16_100_lognormal_samples/example.c b/examples/16_100_lognormal_samples/example.c index 84156d2..d9e65a5 100644 --- a/examples/16_100_lognormal_samples/example.c +++ b/examples/16_100_lognormal_samples/example.c @@ -1,17 +1,18 @@ #include "../../squiggle.h" #include -#include #include +#include // Estimate functions -int main(){ +int main() +{ // set randomness seed - uint64_t* seed = malloc(sizeof(uint64_t)); - *seed = 1000; // xorshift can't start with 0 - - for(int i=0; i<100; i++){ - double sample = sample_lognormal(0,10, seed); - printf("%f\n", sample); - } - free(seed); + uint64_t* seed = malloc(sizeof(uint64_t)); + *seed = 1000; // xorshift can't start with 0 + + for (int i = 0; i < 100; i++) { + double sample = sample_lognormal(0, 10, seed); + printf("%f\n", sample); + } + free(seed); } diff --git a/extra.c b/extra.c index 9ad7e1f..94ae431 100644 --- a/extra.c +++ b/extra.c @@ -1,3 +1,4 @@ +#include "squiggle.h" #include #include #include @@ -6,7 +7,6 @@ #include #include #include -#include "squiggle.h" // math constants #define PI 3.14159265358979323846 // M_PI in gcc gnu99 @@ -58,7 +58,6 @@ ci get_90_confidence_interval(double (*sampler)(uint64_t*), uint64_t* seed) return result; } - // ## Sample from an arbitrary cdf struct box { int empty;