From f3a01787fcc9e97e21b4bf4532138fe1cbcf90b5 Mon Sep 17 00:00:00 2001
From: Enzo De Carvalho Bittencourt <enzo.decarvalhobittencourt@ensiie.eu>
Date: Fri, 29 Sep 2023 15:35:30 +0200
Subject: [PATCH] updated with multiprocessing

---
 Random/__pycache__/graph.cpython-311.pyc | Bin 3608 -> 6734 bytes
 Random/graph.py                          |  57 +++++++++++++++++++-
 Random/main.py                           |  66 ++++++++++++++++++++---
 3 files changed, 116 insertions(+), 7 deletions(-)

diff --git a/Random/__pycache__/graph.cpython-311.pyc b/Random/__pycache__/graph.cpython-311.pyc
index 2aa0b3cb28e4111dd0991d20891f1d59472dc43b..c7675dbef627265d7065aaa70c3b625f417f1540 100644
GIT binary patch
delta 2512
zcmb7GO-vg{6yEX9+WX^mfIt!`1cyIkLP-LYrfPm#!cQOwwMx=fRU_nh7YAZ&cWl&z
zI>L!KaL56&{UKEvp&lp{4r%EjmD)-<RBA6NRvihgf|^UzOVpD7<bZnUduwb=(n{&m
z&gVBXZ}!d3``#N*mELZ4eX6Q52Xg6$ZTj!(q-zK1p7iYBZXe^`R5S;mQxgGI&32sg
zN|RcX?E_-eigorl-^QK#!uXP2H^zl(qn~UuQqZnI`%P#w9+01$bCStNf-#f#2m6g%
zwmaq3;7EcN{ShF+{UvjPIM#WwYpg5LwVYSD_!+;I-^21?l9iwt+PX8ss-S1ex?k(>
z3ou{g46B2I5@Va=QE3fmehQEgJ19J~KUT?Ntyn-BWB9Ih85A;FoY$P1y5O1t+j+FN
z<boWRr|rf=VXLtyy=$D1D@na^PA(sHqjT7gjC=a!JNFHCX7bKqQ}u_3B0i?~S$i`{
z-<o7?a3B<Lukj5H4GgzqI@<J5bRc$qjrO_^x*2YW*#OoYQC-(y=me{UuGePTgL*&@
zY0Qfz3YyS{NGPB(6$e}Zy<XY4ZLb_<ZXDT#Pz*4quxC&&MJPkq31He<UuWg05Itu>
z1<qFjM9~F)(z>Ki+L`-R>;*7+7Hvghg-*0W=UR`Q<Vv(ID<y{Pyi~R#tCx3AXwy~8
z<<+Y^Q9KVhfIkru?Z)@cW^&&U)t#iqP{m?$deI|3B(AtTm<`aN-S}48ZXA;(qd_hs
ziqRvFw6l6}Zi<;bu?Fa}JqUXd@POGqghqty*|H|+p6KvW)(nbKu2dDU=g=bOB%N@Q
z#jlx;vzi_WhGT3y&btxtTutgbr$?>j))BK782tAWbFA-<y$mKt(d@;=RmDl9Wh#wz
zkM$;cjlZ3BX|iT12xgdo7Fi!zsZ|=wnbb(k0n_Ue=O=H~?u~PhdV4PjF$hIQ2D9vs
z(>NCwkPT_kcq1WJ)Gr7#U^1UIBi!YEn_iH08t09BQW>!uHFC9*b*|ZA)I*3hCm9dK
z9mcQH7KoC}^V13@%P6NgG;szfJ&&}uM3Y9~SCbc%&EtgAI4CI2-i;WVBs?NuCLF{J
z81k{RI%9`mwaEv=fi>bz$9!}2yiS%6CaeHplx;<|5SLIZl1}Vn;7$9vsNWaNWj`K}
z>0l6YpI@J|TZys}b%sk#VIZcnUbY|fC^9UaAL;Z^g99OpFMaPoF=9R7pX*1%p8*ow
z3Uy>E+X|J&cfaqSs-7HtZ!jslr;CzuO_F+2)U!lA%WD2AM}#9JjpJlRR4$7XMN@R@
z)oYGf{>Jm)G~ImrtCp`@K0mZ1wkE~al-LRiJomvz*SMafg(+INL`w_NY4^pRv7SVa
zrH&6LX;F$6Ezu(5uCuE1*o5$*dPSY`Pd6p=JgGd-tUa06aI<rXwk2s>inf80epn5B
zg+EIP=!noPlHPqPl8#y=-SzY&)u<*c*k{1yeAX>+v|<xSv+Rvi%@H6mEL`gnr!$Za
z^O=;$=SJW)ny5(&a+>&9R1}P&C25l9&|CR0dXK^#VUZZ`iB05QC-IgX60;-l_P|G1
zQRWVtJkvEV&)Q(n6nw$R8J{Wm!@)2Mq<3-eut`q`hjr7gg<~<WwXs*wRzh+`W9Naf
z?V~X8Sk3Y(8?4_TJ?q4!d{7Tr>}6Piau|(-XWal#P`MyW<ssb{>hoa{Jc)+b9-#mK
z%V(S5UgZFuWOMU!@lLoEBsbg&k{fOX2`n>!gg!cca^m<z`^S}2`qjE?b;-hgRkIy8
z-&mp@N!pR39iSk$b9kSo{bO9O0IpB;PdaBI#~PEgF-03eNk103y)L6(t$quuhbe@H
zha%@qTPR|}UF<s@W+7Gt6Ra8m|7KYCpH<f}(>d#S<~Zv`RykM`4-AF1;h=tqoq~B}
wVe}K@y86=K7NV?jS*XazZWd~av73dKQtW2ofI`}#EaYH`LYi>kaj-V>57>M-MF0Q*

delta 681
zcmZXSO=uHA6vt<FcC-21c5NCH`{CLc>-v#{A5g`rNcB*#APUlhgqYo?)nv2GZiFsM
zy?K=Q4tnsYh&Qnw1uqI7MDdWz916X8QF2o7<h;cc!3XnW-v7;e``*lcKJjGIc#+Gc
ziL~hHxcf!#8AUqRo1N2?tHe(9?i`=?DIt%^UA91OyuPP~(i@sXL)QC#kuq4;Dv}$T
zWrW%=O2{n+59m><f|=M2pJ<+HuuTuc8(M%FrLWjJFxJn{$b^(!!F!4OWRNE2_~tJ*
z#!NdUnBNKoYqVDQsEoq)SpHFFq!QqHYiN9*^hDZiI4iX#uluXqmO=?m=|5>19%f6*
zq5@ylL(olrgSWXY7!(Td(U^jFMhboye7X6-dc{|J{c|GO=(PPhcWZ*yqEuXL&1+f_
zt5&N#fuGSATrXG)*CTbwnzuMM!WD@~4_w!g(zQ#rDiSTX>3R-4AKAYVsa4-=@*JKt
zB$n(9pGD^&0>|PeVwZ%_Z#%Bv>V!Ox(iCDEQAHFaWO5PrCBz=YgoIEoT<4Rxq3%Cf
zd!?dq3$A4H#rTr+zw_~vGIB(&;MnHkXqG}PtAS%y5@o5`87P-3m$65odEK_ZE)>rf
za=`k{4)@|lIlfwa&vB`jgkxs>62FsY+8w9ca?kR4sp0<;aClZaf7+m#0oj3NqPv3w
K6X^brxbPnbJf3I(

diff --git a/Random/graph.py b/Random/graph.py
index 38f1c6a..037ab66 100644
--- a/Random/graph.py
+++ b/Random/graph.py
@@ -11,6 +11,7 @@ def hist_distributivity_graph(N,RESOLUTION,seed,data):
     graphs histograms
     see values function in main module
     """
+    plt.clf()
     for name in data:
         print("building "+str(name)+" histogram...")
         xlabel= "Value"
@@ -41,6 +42,33 @@ def ecdf_graph(N,RESOLUTION,seed,data):
         graph.savefig(name+'_ecdf.png', bbox_inches='tight')
     return
 
+def compare_ecdf(N, RESOLUTION, seed, data):
+    """
+    Create graphs superposing  ecdf   
+    """
+    plt.clf()
+    BW = 0.337
+    name = "compare_ecdf_"
+    for e in data:
+        name += e+"_"
+    
+    #subdata = {k : data[k] for k in names}  
+    print("graphing "+str(name)+"...")
+    
+    xlabel = "Value"
+    ylabel = "Density"
+    title_name="N = "+str(N)+"\n seed = "+str(seed)
+    if N == 0:
+        title_name = "seed = "+str(seed)
+    graph=sns.displot(data,legend=True
+                        , kind="ecdf")
+    graph.set(title=title_name)
+    plt.xlabel(xlabel)
+    plt.ylabel(ylabel)
+    #plt.legend()
+    plt.savefig(name+'.png', bbox_inches='tight')    
+    return
+
 def compare(N, RESOLUTION, seed, data):
     """
     Create graphs superposing two, already generated,
@@ -66,6 +94,33 @@ def compare(N, RESOLUTION, seed, data):
     graph.set(title=title_name)
     plt.xlabel(xlabel)
     plt.ylabel(ylabel)
+    graph.axes.set
     plt.legend()
-    plt.savefig(name+'.png', bbox_inches='tight')    
+    plt.savefig(name+'.png', bbox_inches='tight')
     return
+
+def lineplot_wrap(data, xlabel, ylabel, title, iterN):
+    plt.clf()
+    print("graphing "+str(title)+"...")
+    for e in data:
+        plt.plot(iterN, data[e], marker="o", label="seed="+str(e))
+    #graph = sns.lineplot(data, legend=True, x=iterN)
+    plt.title(title)
+    plt.legend()
+    plt.xscale('log')
+    plt.xlabel(xlabel)
+    plt.ylabel(ylabel)
+    plt.savefig(title.replace(" ", "_")+".png", bbox_inches="tight")
+
+def lineplot_mean_alot(data, xlabel, ylabel, title, iterN):
+    plt.clf()
+    print("graphing "+str(title)+"...")
+    for e in data:
+        plt.plot(iterN, data[e], marker="o", alpha=0.05
+                 , color="red")
+    plt.plot(iterN, [0.5]*len(iterN), color="blue",linestyle='dotted')
+    plt.title(title)
+    plt.xscale('log')
+    plt.xlabel(xlabel)
+    plt.ylabel(ylabel)
+    plt.savefig(title+".png", bbox_inches="tight")
diff --git a/Random/main.py b/Random/main.py
index f10ead0..f6ba337 100755
--- a/Random/main.py
+++ b/Random/main.py
@@ -7,6 +7,7 @@ import stats
 import scipy
 import seaborn as sns
 import csv
+import multiprocessing
 
 #shut up stupid warnings from not "the-most-up-to-date" libraries
 import warnings
@@ -72,7 +73,7 @@ def write_stats(data, name):
     return
 
 def write_stats_chi(data, name, RES):
-    fields=["chi","p"] 
+    fields=["name","chi","p"] 
     val = stats.chisquared_uniform(data,RES)
     chi = val[0]
     p = val[1] 
@@ -86,16 +87,60 @@ def write_stats_chi(data, name, RES):
                     "p" : str(p)})
     return
 
-if __name__=="__main__":
-    ##INIT PARAMS##
+def mean_evolves(generator,number,iterN):
+    datas = {}   
+    for i in range(number):
+        seed = int(datetime.now().timestamp()+i)
+        sub_data = iteratives(iterN, seed, generator)
+        res = [] 
+        for a in sub_data:
+            res.append(np.mean(sub_data[a]))
+        datas[str(seed)] = res
+    return datas
+
+
+def pipeline(generator):
     N = 1000000
     RESOLUTION = 100
-    iterN = [100, 1000000, 100000000] 
+    iterN = [100,10000,1000000,100000000]
+    iterNmean = [100, 1000, 10000, 100000, 1000000]
+    seed = int(datetime.now().timestamp())
+    name_ = type(generator).__name__
+
+    sns.set_theme(style="darkgrid")
     
+    data=values(N,seed,[generator])
+
+    #generate a lot of diagrams
+    graph.hist_distributivity_graph(N,RESOLUTION,seed,data)
+    for name in data:
+        write_stats(data[name],name)
+        write_stats_chi(data[name],name,RESOLUTION)
+
+    data_iter = iteratives(iterN, seed, generator)
+    graph.compare(0, RESOLUTION, seed, data_iter)
+    graph.compare(0, RESOLUTION, seed, data_iter)
+
+    data_alot = mean_evolves(generator, 500, iterNmean)
+    graph.lineplot_mean_alot(data_alot, "Size", "Mean"
+    , "Mean values evolution for "+name_, iterNmean)
+
+
+if __name__=="__main__":
     #init generators
     generators = [ParkMiller(), KnuthLewis(), Marsaglia()
                   , LavauxJenssens(), Haynes(), MitchelMoore()
                   , MersenneTwister(), BlumBlumShub()]
+    for a in generators:
+        p = multiprocessing.Process(target=pipeline, args=[a])
+        p.start()
+
+    """
+    ##INIT PARAMS##
+    N = 1000000
+    RESOLUTION = 100
+    iterN = [100, 10000, 1000000, 100000000]  
+
     
     #init seed on timesystem 
     seed = int(datetime.now().timestamp())
@@ -104,8 +149,16 @@ if __name__=="__main__":
     sns.set_theme(style="darkgrid")
      
     #generate N random values for each RNG
-    data = values(N,seed,generators)
-    
+    #data = values(N,seed,generators)
+     
+    #graph.compare_ecdf(0, RESOLUTION, seed
+    #                   , iteratives([100,1000,1000000], seed, ParkMiller()))
+
+    a = mean_evolves(ParkMiller(), 500, [100,1000])
+    graph.lineplot_mean_alot(a, "Size", "Mean"
+                             , "Mean Value evolution for ParkMiller"
+                             ,[100,1000])
+
     #generate a lot of diagrams
     graph.hist_distributivity_graph(N,RESOLUTION,seed,data)
     for name in data:
@@ -116,3 +169,4 @@ if __name__=="__main__":
         
         graph.ecdf_graph(0, RESOLUTION, seed, data_iter)
         graph.compare(0, RESOLUTION, seed, data_iter)
+    """
-- 
GitLab