From 071bf00d7ab69fca045fbc7494c5d973f687fc6f Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Thu, 1 Dec 2022 16:10:29 +0000 Subject: [PATCH] fix: improve warnings for a check which should never fail --- C/samples/samples | Bin 24704 -> 24688 bytes C/samples/samples.c | 5 +++-- R/samples.R | 3 +++ js/samples.js | 3 +++ python/samples.py | 3 ++- 5 files changed, 11 insertions(+), 3 deletions(-) diff --git a/C/samples/samples b/C/samples/samples index daa280ab2e0e9993f026caa9b191bc350f20f5d2..f0e7e3aab955db8eaab9f0e51e4ca00345388425 100755 GIT binary patch delta 3510 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 delta 3427 zcmZ`*3s6+&6~6!O-QD}|0?P_4yFB884`_@aP?hDO%R^j11rs%*gonBaio6yGh;p|Y z5|Gex`&Xqiw#7`Q%{X~zS6fU=gRPC)PFtC2tD|WprZd4opb*Gy35Q2@m(Op$;5Z&ThW9%w1WC^_=`y@vG^REKDBH>b1O29&TRkHzZ&xf z6BoT(`j7P2uYB)Xh5vvy%dC};jj;3cHlXzzBb-Ea6h*eG_Wj5dQpoN^77~L$B`RM_ zMp&!OM*QrEZKs+rV_T*5B~P<7dz35+!Y=oqxF{J0a1X3`oHpSe)SX$3q_4jxdD=b5 z&A_GUn~wqk@D77_)*P<8s27A;v!!n&$bTK=qnro*6@8pr`rbmdp}rX~b>{mMZcx zB`>Jp1u?;bpM5Ph@r~G@zZSa;vEUiNNnY(qmQ@Pt1HB#$;+g|}Q$dD14D?N_Y<#9P`^n(Y zD=ImP1GcbS9!8o2dlKFShX#b61OhIwEnxeR!zWS@SVTfR*~-!qqRA91PDmp4tTiFpUISB& zsyX}-2j+G7H_1*W%qJFh0iI6wF+9DDB+e&)WC`$$VtI)R$R6eaY-D|jOGr0619*&0 zCax8yU=ntwG{V1ZLAa4kXsF+{bcuG}*$_d%cSsNO@g*&1YINcwIHV1 zAOZeiEMmPhg7QS)1-S;q(gP5?E~ZIqmq34t7a?XCTwny62<^lb^!tD%dJbg8l`09R zCm>hMREdrL6w{n4anOUTI?XQELQ646b!Acy)Qh<)anT!?>{5xF7NJa@O3LX)xH~al zC0nT*Nujk65^CrZSVk<0ECEta4`Pj5ov?+5VV`1^w9`*@KuS#e1wj_NXbOhb&%@?E z+JM7vFgF4@L=$kHGN~Md4$}{?Xrs9XNI$)cq$2cHNEoI!aD?sAdm%DHQ!!F$?*uYR zKSP0+)Op^bxhP#lE5Ub~?m$v)T(K0`7`5Q8H3k=u3Az>M*&!VOg^Pmb5$Nd*_BSD9 zTmlbqNth{`y`8=|a}22pS15DQujXGVF1akf@c!L(oz$ z{RA}3nT8~q3O(sz=E_)1GTCl;2H1Bq){_DDQHEVsAlI-w=1s^E=y`kvR+w;b2^4z3 zsp$ZDLniS74tpE)4XffYIcyShS95$6{VtBbf;9|z9RCb+@;SZ@H)bf{I0f?y5z9i@ z$C$K+2R=Yt#Bn)HVOY!YQS`ex9z~&Ij*sE=B^+PF#-$wp2=O|O`w_3_ScJ(98#vBJ zO}UH{HsVotA0lq${ymt}#&I~#;N^H0aXZIJnBT$idpKJs$IoHT%N$qXX>@U%gQwKZ z@d~`2{Typ>m!9|>^$q?6lVlz+BlgAOH?3Y8hi=+%@gRtY^+Pvlai|Ldkyine29~!n zTE@3IYLh_r+E7ZbJpSV3h2E$(fi#9Zmf63BN9xRYL)!^y4hpwJ;Bey!@2QMF$zgvnu(364y!OrQ&n z<`hVUjBC>2rxa4vUncnbQT4&M6QqW!KUPA>FJOV#|8d(rb|BNXu!RbO9ZsphhNq-e zuJ^{MZ3-4(M5|owjd_QSWyU*YxDQgW4pp?uSg$n;w_2kfq*n3C);Dn8B4a01iOR67 zw`wq<#CU{-Iql>oOLp$GWWlME=P9nKRc3mvudx$OM@Azi)|j~Wt6m7gTG$8H5`-fl z7>_H6O24ek}TU$-MJi#w92S#EnyW|@$we*=BRUOl&#h- z95XjaYpnQ9OjZSHyE=ctC&q)#GGg$YG>Y5a?S;%mIHyK&#i+U& z%XsrKIYt%E$Q@@7vyw>?dnVgv`nHMByEOVX%gc@;#q7oG+?Y9#BMbF=BY3N>ryWnR zce9t0A@)&rDY3HTocZJdbLXVQ7;!|a{>nU_>3&+!%!YGTli&KU=B(0@bY{+v3*A?u z(+V1ql<0`o=FiN3mOSfi?P%D&yV0|>&C}A>yt}P-Uur?Bw{~AkqsJ>$*R^>(Z60rR zV}rNd-(4`O@h26{iT=3KvxNBA #include -#define N 10000000 +#define N 1000000 /* * For very high values of N, you will want to increase the maximum stack trace, otherwise you will suffer a segmentation fault * In Ubuntu/bash you can do this with $ ulimit -Ss 256000 ## ~256Mbs @@ -89,9 +89,10 @@ void mixture(gsl_rng * r, double *dists[], double *weights, int n, double *resul } } if(index_found == 0) { - printf("\nThis shouldn't have happened"); + printf("\nThis shouldn't be able to happen"); // gsl_rng_free (r); // abort(); // this shouldn't have happened. + }else{ int sample_index = (int) floor(p_2 * N); results[i] = dists[index_counter][sample_index]; diff --git a/R/samples.R b/R/samples.R index 22f492d6..602463f0 100644 --- a/R/samples.R +++ b/R/samples.R @@ -25,6 +25,9 @@ mixture <- function(samples_list, weights_array, n=DEFAULT_N){ # note that this for(i in c(1:n)){ helper_which_list = which(cummulative_sums > helper_probs[i]) # helper_loc = ifelse(is.na(helper_which_list[1]), 1, helper_which_list[1]) + if(is.na(helper_which_list[1])){ + print("This should never happen") + } helper_loc = helper_which_list[1] target_samples = samples_list[[helper_loc]] result = sample(target_samples, 1) diff --git a/js/samples.js b/js/samples.js index c56f463a..b7a5c0dc 100644 --- a/js/samples.js +++ b/js/samples.js @@ -38,6 +38,9 @@ const mixture = (dists_array, weights_array, n = DEFAULT_N) => { const helper_probs = [...new Array(n)].map(_ => Math.random()) const results = helper_probs.map(p => { let match_index = cummulative_sums.findIndex(x => x > p) + if(match_index == -1){ + console.log("Error: This should never happen.") + } let target_loc = match_index // == -1 ? 0 : match_index let target_samples = dists_array[target_loc] return target_samples[Math.floor(Math.random() * target_samples.length)]; diff --git a/python/samples.py b/python/samples.py index 0c6ddeb8..e29208f6 100644 --- a/python/samples.py +++ b/python/samples.py @@ -32,7 +32,8 @@ def mixture(samples_list, weights_array, n=DEFAULT_N): helper_list = [j for j in range( len(cummulative_sums)) if cummulative_sums[j] > helper_probs[i]] if len(helper_list) == 0: - helper_loc = 0 + helper_loc = 0 # continue + print("This should never happen") else: helper_loc = helper_list[0] target_samples = samples_list[helper_loc]