From d2c8884aa6a6a8a0ad5a5770f9afbc24d27c4e80 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:50:00 +0000 Subject: [PATCH 01/44] Packaging now works. Updated the DESCRIPTION --- .Rbuildignore | 2 + DESCRIPTION | 4 +- NAMESPACE | 4 ++ R/AAA.R | 53 ++++++++++++++++++ R/simulation_flow_check.R | 1 + rEpiabm.Rproj | 17 ++++++ .../simulation_flow_SIR_plot.png | Bin 189166 -> 94356 bytes 7 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 .Rbuildignore create mode 100644 R/AAA.R create mode 100644 rEpiabm.Rproj diff --git a/.Rbuildignore b/.Rbuildignore new file mode 100644 index 0000000..91114bf --- /dev/null +++ b/.Rbuildignore @@ -0,0 +1,2 @@ +^.*\.Rproj$ +^\.Rproj\.user$ diff --git a/DESCRIPTION b/DESCRIPTION index 8f4073c..ff464f7 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -20,7 +20,7 @@ Config/reticulate: list( packages = list( list(package = "numpy", pip = TRUE), - list(package = "pandas", pip = TRUE), + list(package = "pandas", pip = TRUE), list(package = "matplotlib", pip = TRUE), list( package = "pyEpiabm", @@ -29,3 +29,5 @@ Config/reticulate: ) ) ) +Roxygen: list(markdown = TRUE) +RoxygenNote: 7.3.2 diff --git a/NAMESPACE b/NAMESPACE index c950c17..b651308 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1 +1,5 @@ +# Generated by roxygen2: do not edit by hand + +import(ggplot2) +import(here) import(reticulate) diff --git a/R/AAA.R b/R/AAA.R new file mode 100644 index 0000000..83e46bf --- /dev/null +++ b/R/AAA.R @@ -0,0 +1,53 @@ +local <- new.env() + +.onAttach <- function(libname, pkgname) { + if(!grepl(x = R.Version()$arch, pattern = "64")){ + warning("This package only works on 64bit architectures due to dependencies. You are not running a 64bit version of R.") + } +} + +.onLoad <- function(libname, pkgname) { + reticulate::configure_environment(pkgname) + + # Load required Python modules + oldwd <- getwd() + on.exit(setwd(oldwd)) + + # Import core Python dependencies + os <- reticulate::import("os", convert = TRUE, delay_load = TRUE) + logging <- reticulate::import("logging", convert = TRUE, delay_load = TRUE) + pd <- reticulate::import("pandas", convert = TRUE, delay_load = TRUE) + plt <- reticulate::import("matplotlib.pyplot", convert = TRUE, delay_load = TRUE) + pe <- reticulate::import("pyEpiabm", convert = TRUE, delay_load = TRUE) + + # Assign imported modules to parent environment + assign("os", value = os, envir = parent.env(local)) + assign("logging", value = logging, envir = parent.env(local)) + assign("pd", value = pd, envir = parent.env(local)) + assign("plt", value = plt, envir = parent.env(local)) + assign("pe", value = pe, envir = parent.env(local)) + + # Set up default parameters + simulation_params <- list( + pop_params = list( + population_size = as.integer(100), + cell_number = as.integer(2), + microcell_number = as.integer(2), + household_number = as.integer(5), + place_number = as.integer(2) + ), + sim_params = list( + simulation_start_time = as.integer(0), + simulation_end_time = as.integer(60), + initial_infected_number = as.integer(10), + include_waning = TRUE + ) + ) + + assign("default_params", value = simulation_params, envir = parent.env(local)) +} + +#' @import reticulate +#' @import here +#' @import ggplot2 +NULL \ No newline at end of file diff --git a/R/simulation_flow_check.R b/R/simulation_flow_check.R index e0ee6a1..55e720a 100644 --- a/R/simulation_flow_check.R +++ b/R/simulation_flow_check.R @@ -4,6 +4,7 @@ # Import dependencies library(reticulate) +use_condaenv("rEpiabm") library(here) os <- import("os") diff --git a/rEpiabm.Rproj b/rEpiabm.Rproj new file mode 100644 index 0000000..21a4da0 --- /dev/null +++ b/rEpiabm.Rproj @@ -0,0 +1,17 @@ +Version: 1.0 + +RestoreWorkspace: Default +SaveWorkspace: Default +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: pdfLaTeX + +BuildType: Package +PackageUseDevtools: Yes +PackageInstallArgs: --no-multiarch --with-keep.source diff --git a/simulation_outputs/simulation_flow_SIR_plot.png b/simulation_outputs/simulation_flow_SIR_plot.png index 9975830f47bf09c6ae54ad0cbfb8454beb08bd24..5f43b63580066f05e29bfa5cdd0f51a0caa20db9 100644 GIT binary patch literal 94356 zcmeFZcUY5I_bwdA!dQ@b$AVIwF~aB|pa@7G$FXE+N=I4{kxmc{9fCT-J0dU!r9-e$ z5<1cepivNMDufyc2!aMkD24zb$+w>rbbjaj|6SKPC)YI)WM}WSSGm`{)_Rz~FPNMY z-zK#U27`$s&i`QsgKe*d!Nk7*ehc`Q0?gfD@NLUw!*hRt@8Gp^x()-rZS^~E8vuhT zAB6tf5d7325C%H{L;P{dA~<7aIOM*oWrWHcBcHbQ%8#{n8}2C{Kl5|;4&|6Xj{opL z4z?%bht1c5k12}k46vMOB@=wKS9NYE4Q+-^*^^JCf;pdAfl&ZQfsMV zSS4C_g9`2{RXt)bAY~@CmBBu`an{{a@v48ZY5F*46@Bzmc1&c08~@A{&79S?5a?}+ zAtBNJpDR_$eT)Z3c5pG+`eUs%pXqJH;Fdaco=bN?eP?E+*b( zx)%o;vGi1ORLabQiGzqDL|IEzmm7LVQ|%2AcBb00 za;C-$!*DUh8dMVz-ufBgh?^Lb>$M*sUE*&D^FFtUvH`r^cYhqa7D-z3L5$p|?Oqad z%PS4TTIXzg!>|vVt-`K(V0r2U<+>`3)?6KXwX`d?*wcv_|4eK(r&I-D4Y4w~Co`4L z<@Ou<8)1u?C6l~Q&POL>;t(U$m|B;Jysd)6z}KdK_9OfQ@P2{Q%o=!XU0zif7Nybi zYvN4bsZ5k+fkAy7n&Dx?db4vW^Gzf|*)vb?nk@B}-qrVCrYst{l`-t2D3`_{reC9T zg_}Ynqe}eQ zm@twT=KUF>^EEGQvSP@q-Nmf&m$bkFLR{B*Mx@;YesDQnjx1EW&VkXLknjiUpE=Xf zpOq>4V-0W>j}!y7))%%tvRfpdYPEBFjJVlN_IbGe234XCakZmj-f1aMS#a~A4I6@> zcU#7mqic$p+4SVZH8&q$c&mBng|N3H_pTH;bF~77&tnN#@1hQ3nHX9gH&K!_Z;WVo zd#hHkhqt28RDYe8nw0x=YWR5Tiuj_=?@bW_SaI>ibM5GZ`6h!rKOcGl{Be0fU9AQe zi7hNI5GcPX@Q)_G>o}L1C(zacusFpUg;rNYC&J$=!Bb*TQ)+T&%A)cS$=+sQPOY{y zR8gFPdRwUQY&X%_(o&OI-H!*I&X=8N?Zy@uE!4uTnR!dudOfO|d5ze_{whH(~1g8kZ@z$}5Ik#ctLc2}*`5Drl)BL^9}z zg$_6aa-l~pVJ0?d6NeC;Cd@2`5mSkCvNai7f3USQm9us2daiue1Uu0?-yt({-y}-P zvp$a`<#wW{|0zjIATIPZf+dM~Gl;gsw(Ka&w-|dL>J(E|O4k#gb{vS|c6#(raU%M2 z$sOWh%5s?5h>Det&-#A6=1YZr@m=!WCA_-YJd8IMrQVZ98_byS3Hd?{^h!43>Kmhn z|C#vjJUUFHo?E$-rGKC`T7#u*zM0zf=hP`yqLil|kt9_<%s3rEDIS*7j_BfqE8vDp zxCJ{ye>K}YJFVWy$Uch=uc_p|+1a;oUEKD+bKd%=PQ;8Ci@#A7qnvv$b27ps587+V3AuCB<&}USWqkv z?xGr&p~M*GO~i7Ru4LE5hiJ5udwC;#0Ck7RFl0A+Ag7|4oaIpo{`op7r#P#Zp|_J& zD218^XKoY(&x7#d^9%ho-kz^B|2eYHj#W|P`{Wfm-{gTWb3vIllRVLsG_Q_`?Da9P zsMS1Vdn{JUFws7f7Bchl8bU*1pdwbU3$buRx%W`(P53mnzPycz@OQ^bC$7^!bd#lk$mIa2j4GB5Xe62JN>);xy?h2;=TP!b)*}`UfT{(LQBD z648L0NHDv7C@3qD9^F+2$MmUUBJjI<#axwIW4r=T=ch1?V1J*r=S4c9Juc>%uN$pN zUR0B^`BQ?yMya;2uag%e)q+z6$!ERfDN-A|W!FcBZU>WXy< zd)9K@*SEil$p$u`Hl6iLNcWt!+t}1{q6gErgLwyTtx+%p!oufEIR-0#qJWxog`u(J z8yX+^Pb%rdIfa@!=h>Ic%Kg1K^;fk9Mtjn-I_Zdp!IGub_O%w>Ty;_6qoeb2Zzd11kDh@zQ)vjgXocdWZy zcgF_S@zx|c2gAA<=USF-p4-CeAd!l4!JYQ>lEcR_4EG>$orzMby47(+D1!-J(Jwy0 z8Rz#b&uDyd%+bEF+UNG}oXSRe<|f}Cg;-FoAJZDmx+Tcts+0i3XK_c^N2U?sZKRnj(tF&kPZa>U95@!lsjl#}gCvIHI z)H%-CI!F4^k3l9UM6t88S~b-vbwfMC)_iBV2A+BIf9?0IZwSOF@=Qe1fjldvle_IC zM!kG{9yb7=SfWFojtVm<3c9jda;>;xm!Cn|SXS;cTVC&A?XXvIkd&W6^%yt3o5Pxs zkfuc-?}W)y{ZO1gRs-+CYw{oVT5MpwJAqque=d|-j18N} zBp>-L)Shukx;oZuvnw@~wrR@Q-$8-5pZF{eZTdz9w<+Qbw$5#!ZBc4+B$M9gHg%#s z^TA|y9;V!x-c{Ehpwx;(18wH(%e<%U`pgYmkq{41+nkms(74j7?m- z)V4eVH!vxC7)Zr?cmloduc*m!gNgtcOzP;q>wJV%y&YzL`-mo7OU?3!)zthKsVXLA z?$ONc=9v>*iiP5jC=}hOOuzLNqDV?!f=~*VH(BUSs-YUA2g9{GYD3*udCctOJ>mg4 zkd|Gsn7?!ZMVlurs1-4C{aonvmt&ROJ6zcwrQAb4|5B zWrCxJN23yGM*AkzY!z0{W2>IEXC_S;dvFKBJ$>o}*BVq5SLBZ_su=mN?pCLbE&1d} z>hSp}1;gxt z!*rb-XI_x;HO9^8FpRFT#H@DtLpm**O=D5?+9DVQ zDtG8RzR*tGJ>}4w65{GLd?F>`yg!OGo$E^Tqi6dd{C%;f%{HI5lg*rnLF~+&&Z$*R znjlrwPz}*$VTr4UyD-DIM9D;B1a=15PTv4OKMDpH6*RaDb zRB_#~7K#B~&sZDFDXc6F#*k|g`x)Wz%dRiLx|OTJKH>fftUwE&@QXfc`Gd<(jJPmE z&ap^rP#!_msyQg5zCa^xoq+<)*Q=INk zOe5sfs%Edx)EepEZutD<(=D^xR7Lx=k-s9VG}_6giS)DGhba=h%`W1snG(dhqcx@_RM)mqS{9qa>mSneot4Qa9f`>@?h{3+%&Hv(^eX%W^5{u=)53SYOW)( zK?+*GwxSfZ4sf<+^_l)?iapIPF*OL+Z)HnQvWyo}cd)3R;|{F=vfJq9e}Vn9VxIcN zofjiDN&9KU_e5qECd`Mj`#4IQ*sv=Bwb&4lz`gAEI=8|VraOz`>^9D}Ew(jUjv1KU{xHog(uj0! z>+8xV2D)Hz9d8Bl82v2ZME12$o#}J%gz0&GL#fHi-0s{eg%IxUVh#>2*5#~{S*zSS zIY{~YsFQrg6_2*%T?o0EF|M^{`>ak|+OJZRX;~jtPPD6MJ{yiVc`?sStVx_W>_9hU zh%cmiGgAkb_ao%G7tn;*oV?N^4SlTyE+*Q#*O9=};3p55du)^rq@IA!H%{PsIg@gX z03#BmS&s1zWni?>d)SeEJ(|T>YCf*jzZ!Pbsqx9uC62}CfmM4F#X^3sd&_&c7MHR{1jsWE`NSu72cAo9f9lQ3-#DY|0CzqJf;ZW zfeE}L1xzNX5VEjrV46>?jEs)t8;k!X`UMT{NYP(sA^Gl~c1LeXa{#pEKug@LK_}+7ku2x==1I8Lw4J zH2seW7K2!D3cbLa&HwIcVFPwTQ7=!gukujH7_hG^mN-?CY+|2G`{T1!m#P16`0iXq z(7Z5AU~y03=llquoGOgH6b26oBCWOLRP&19yq*$PzAQcLJT_6Mn%4lA?3+Ammf0|p ze+I$LapuZ8^gKHL+O4dJn^AwHH4+i%mC80z;H_2GW@|)xV8QB6!#&pphKDrVuUv3` zF@M4?v0isLb4@30!ZbH;i0<*86nK;USCD3pN@BPc$KX&+`YuZ1L_~$Ub*}b}dNf_j zr|0vRO)R)psdGmq+|vTML;5~wzsf+959hSYcXm)?yITwxf=R89p8GvSv`w^ zP|gAJ*50~j7u|BG-rk7Y6HY$JMd;<#`=RLz5!Ubt`gss6YS32ex`UgqQ@|=y`4J! z4lbW@nS*6UK+Op!da!rkqKGG0i7vnSt`0NU<~a7>$MF)y$iYG&{8Lop!F^{(*0b18Ez z+)1lrHMaKC*FFyN7p3!y9(}}W{RcWmS*_T*S)6V3R}TB>P*fPUz8I7uXzz6O zT5<534G4NxPK-&BW>wA9UoD3QPQ-E|Gg@<(x_}O`!-@8O8c3VCYjNYXPMAf2A=JHjx7??Lr5gKVNNf3s zES(nOv+)<8pfoDGwsWcRaBCtqJYugp-Iz(_AY-N@lP0p^eb-B;5)yTfwwl)2gau)p zj2BoA1wPDo@Wxb{+x?OK6KYyxbR*7UA3esk;be!`Z1e=5D`(#m;2vpo0iIyG$B1W= ztR9&)aTN46_t1}qbq`*s(QNfFuMfP2JrvMys8eKER^!Z_fe%gQ#W=x30mxUZHhP$T=LO)}ouwrF#syg9# zYcxFhkk-l8c|_K+$k{~NtqlepkGr}hvEjcGw~i$|)fVTBBeEV$Jb`y1&~H{>fC6#b z1I)43r>PDlL^^F=k7dHF*HyF}<-Ud2!9xzTvJ&mnC)yDD1|t$2&DU)+7e) z8;`c;Ce~ML7+CtreT|U+_wN5M4MdsjzU2$s=UYXMWGf@Ao^{6Ey=z}_{quXC%mqUj zOtpCJORho0``52umlg&DQ6pG~#AL6(J$;J?z+o~`hh9D2Us_tKSYb3=9=@{BwX@(S z&|Y`b@ELseNU6<1q4~_kHNSx}SE|evQ`m19sKjgX`?YQ1+QEYdae2nL`}{WLWE0pw zAokI+`!r?YV;k#FKIsV<7e8|`;~nTK{s?i`6djD??pHUCj!P*1$4@Luw*Pgu^fy|I z5;Q!8{}T1nPki1a{ITi64}M=08Vvc%_tjsUaWK{0f_A5H@xE;Wt}gs>$7TU@7XBE0 zQveCVA5Wj+vsmFzQ4a;JW8shg?^vNCz_ zge2oFO^p_4Z~}JiPi#zLc*QSw(6N##+=;;oFNWL|y{|fnatyc`CSPD*vp_~<-Mcc@ z-*5A-bx_@__ilkBah0b~qt&XDD3dvH46$^+48&7o#N2Z+OhYJ>M!uEzjX%Ft`Hrp^ z_+qP~jQ#Fc=W6X8y(!i6lrkkuqbq#`J`Dov&o+v?ZBlX(IBHLTy`T}ymm?dsi4x}i z@y!Eve0;p4UMy4bke173uuc9sS#*!wbYHO((RaAk$rQb?N_|!zIkr_Xql9Nq{w91r zO-futBy|C!~U zqh~J4lsS{4yRKg>`lZdEdGOYwW!l~CcRrLQjUA3C`qnH#z$_Pbzv4NTU1>cv-CI~! zn$GMB8(EY~zw+*7@ViH63{pKh`uqDOE=9L6%fHEoP4++d;WD@1c@(@>i=O5N&kk1D z)gA@AU|XtopzP`bXDd^CXP$MNG`jDP&+>nBIAPOZn8P<_MJg)+s2w8wT2y`63)>xb z(F+_O7I#;7!S9E@edIyM$1pMbgKc5TY9siwt@9U2CjK zU;a+l@X_|`Oy2-znR!ZWF0=r` zlx@4K02XQv>%Ju8l z`|gUp4|6C^_N||9ey6w8KOON}wJtKB)qplMp-N+Y!;9c35aqKUyi87Nju+yF5+WEahT zRzA5pUF<~BZdmNp(PR<+hrh{xw_Q@%TMv!m0ioNMrxuzvO3Vx#r})3xW3Ag?{H>Y- zPBle*Z|~oFC`hr!E&QbaY(<}Prbh=b_Vc48mH)+)<#)PbF&X>3hijSr8ol+%53!Ga zQJxO?76==5`N{w2YU`*wkG{AYqdH714jZ1{o8-FE{P#TAHahZ~;Th}`7&81++NIA1 z4I&Q0Ea_u$p(8Q$l?7`A00iUDvc=`OH-^eJ6X!VpibfRhz7I3yU6IvFZPfIA$*wid z0QYi>ZObR`89bJ(AKe^lUF^u=!cn*s$Zfo)9(|*t-x{}8OWYHe)(8jqf!;O#=$B4v z^|kR#f>q&aj3vR!p%VH0W(PnR*AGm9ybLwmO1s1){@Wc4zz)g&xtW2X&KGyfyQdBv zZ9R-IIe&chb)4%;E!cXEDf6#;rUPJ&a;glR9R!2=&<}qra#sLacqP^!X#EdDPPuI% z4JdM?%(ZPL*(q{GWy?h&0z}%@93YSV>2_$P1Fj=cDG!4M!rPK_&tn@`31N%aWZe^= z0%1{F2S!K40KgmQwSF$ozxMfQ@(8Hyn~QCy(L&Qq)-5!_-4sI5Sfbbvn9=Fr%Va=f zpviuhh)oSz(C<&&&NuNg@GT)iAyjhkN73)DUXZ(Yq$lzcR&NVs2lP7~RS}cQK2>9f zO@6wqQhvDkrVl~`zT$~3ONiS5Q%$Jn%(5CIax>pNJttF&ep?8dPV3BWpY>i)gn&Ig zv6(|Q*IlpyiQ&43eWzW(GePaAQDH+leTuf)pY&l-H3voXZ_%+vsr7UI&DogB($VK| z$=q#~PN}<1ydj*<7S7ngqZW=w&Lyq|;xDlOM(nLD{WJ)lg4g_Vm_7q-4K_CyQ9{+? z`=&!;f)oHBN&v-@SB z?R0+^k;Xuqj}H-!iC|owR8fjF2M?NLB=4p&+}xmLZ`Us#_{&EZYzCJ0Y{{*v{6OnR zu(1J0nBUc9mhS_a^cz9xf#-4phXQse)^%w6L zyT{w$QQT$;#Tq!cg_F@8p9pV$yI5N=i3K7AeS852T_!`s&~wNc?sYQ~r&5U+hqbG1mG}$XZnT!|lA~ zgv7FO!^HXsSmE_?E*xjH$D0>wc7LN_RCQIP#kb}kO%RUvCko(QvVLmqrq;RJDlk7E zrtiP5##hf)p*uxo{gPm`$J5|wD;)^AGF1eZ1Q$PCBr9BZRJ5+>L7ifVEgs3f=%du1 zG$9$`^LN&uYqEdetJt56Q-H7?7C^o+fVJp(zr}MU; zvIm}$j|lX1c_)tOG+vm0vg{$B{m1wEuJqG!_N$~OhU_Gf!~Y#%pCGZ6L1Rc8H;CCgzz`P#$rDd=?faN zB_xp1_@795LNRDf9q-#UXakxnjfVcdX5j=}CZA5tycV5`g@62Dk^2nyU}715MmiR> z7%6Z`#aA4mxsi^d@@TSV;V|TnU*LvAHhy8)ghMOm&DO%?rTKg>B}lj-AOn;`t%o81 zwvyi744%#c{v(b3Fea2w6}44ZU@iV(3)fPx%;P*o1p2tV>p*lGE|fm0uD}SUxc`U> zF%U3a@LYfh1{HCe?XdQcud67$vXM{cpPYSLSap?bJaP^T=9N9%7x362n=ivqpsF6G ze{w?c^HkudVVir+QF@^yI*9_IRIqW;OUiBLD$hU@!1 zp&V`n)5_jR`}Ej`6mStk?1$(2>iiJ=O+s|zp&JYT1(Di~oq5-M69->$$0opE8FOa% zP#HBMGH|rTzo4==SG$n2@T7lGB;7`#b0hzI{|wd*L?ABh%9O_5;S`{v`6tzd2_1Z2 zcu_t+4KaDF;RCqV7LN#G8VKp`wCqfAb@+#Eis=M^CED zg&V5ELknN@6eD2|W<0BT6aP^JEYU6ks~ZL$;LWM~p*Snys4=rTId|l*o#Z0whNW z*+Dq9`Y2T!v?`i!9%{_m?JC+)Ow=qedJKGNGX(1Qt~>+TLWpypg}RwRio$No$Hc^p z)QP+BFd!p0b0srCE&-bX4iQ!*Q?EQ&pjRPqqw=R~WxSt7xnTr*|9 z%rRq!kXr+GaL~+~v_tCQS8t5*&qSWv#vkLtN-j2|3YCkL^W`*Jnj{Iy>ONkWAo20< zNc>=H$`mRiszP&wpj`z7Pb4_UKdjPxFz94SGTy#J0Nw%S0-Z%wsOy($UvRJ(#>C$+ zwYIhr^IC5DIZ?3J@I#?Gyj*n)L$7vMF3IEEvO~?mo4!83Y0;5-BCXYpoU};r0!p}$ zsnzn9Nq$IMkkYRgD$Vc3F9Kk0DpJoPTevqq3!MS_u(pOS5Fj3;q{=5Kuna%ZMG1FL zGnaur)ClHN`&QGzyI9ZV3DK#)9~Nz=s-IVzr+r~I-DPx=w#WF@Qc#bovT!%0+d}OY zvw%J_JsxkqkU8lj}&S5v&dMVo6lJ!TS!_1@GKos#-5k~xC?U<7_Yc^ENRaa-#eo!a)b*@fojHRzo8@1tDcMA_YJG^pJ47JhZ;{hIt6g64pUj3K$A#MQ{_9_X zXpAQPZ0_@46>C(XqXkLPN|v8ZVH&9d&uY3P-B?juUHc@oUuL6Ifuog!6|pY*n$WRe z^dAKljH*!kHXeg4RPr3ZiATRGp*t7E&EF&6pgp2-19pVh)|P48ki>-W1RMQBbQN-Q zH{MNs&k!a&>jur3>`I>Ysz!^BH2Fn%q=TCbzQr=xO47ou^VszWbY5+Jw1kQN3^0x%!%2dA>ueE*GMkPF4dHdQK8TqC zLWxy)vV9o+Oq2vFKj;e2y(v6*3-G^p(2f?=XM?&yLum4I+8rtV$`4Ayh4I3Lv2m>8 ztRV|;%mnb1d`Ac3liF)Hp3~!1EMmM)*3u3LmkTvn(snnDfb%#~VNkddnXn>{m$XnR z94i;8vgtdapmi^oOK8|)ZpbIFYo6mJ2P@8*^?U#;*(A_-)3&(W6Fwe|&sINsrnr2f zs)KysKuQ*6p{PSb?N}khuY(Ngi(Zo1h{G4Zr>qr`KE2cBMpydIdXo7@3&U;ksnX*@DPadVA7>mj_TLgLYRdTHjt4uUtH~x;dK9r(nqBi-N%1i>xuFe8hSrt_dt!ZlKetn=`IW2i*i1o~H}&mre7xF08zY#MZ85>i+0AB-moq$% zR5U({R#7^^uOneFFN6TQ;?=UuiA3!%GD72}8$r?%q)CEh3?GPK$RL64q8c@`EFCia z*?-R^(U8nqsfIF|ASb{I!~`Lk=UH#fOrzZcXEy6QIylPW#|GE8;Rpo#4R8uyW}=z| z$c>iglI1*z;gzAMndboiSl>=XxSbP0d0>o->+y3Ra29wE(r(rk&3|iCIG;*JG3Mrm z-pmSqS7I;l1@F>%F}&pL+#HS8mn zZi(C;$0{l+l2curyGNVytPWX873>ZZ$W#d>+BdYit8xuCdQYRJlW@Xez7Ulv-vFm@ zW2&i11X*<9$0FLgK-Up^g~tiPWN4xhAL$yyb}AgBD(MKK66U8X-2LTp0GTl}H@7Cm z#kuARM1wVmWJj(w(4LZkXsfioB%FZi!1{#%A?+LP&Wxr#OO0tPP|h2R|LDfgIH2|w z5SXSd(p`DnlF+y9q!xT`uV1(5>M-hm1)@oNQtXHYq3!J?V{(mpxVPx)Q96(L9^aG` z8p*t$TKAY-?iI|~wjj6|j3-o$#@l5A*Z5!lH2NAR)hzz8rpm8AI0W(p^KNBgLy!40Z`t z_*o0Q3ZP>*LDNDaGo<>Vc2%^B^4A4|pe~tg)&qQpksbnI+f!WLHc~;b!zf*lb&$gx z6>^ALkPG^hIK%Oju)R3yD~L{HTwJ3)M^i_4?UFdAWafn6vrT$J#iU7LYF8VBf|oh8 zpd^vYo!lUZSew)1L6*fuOP#v)HLGN)=5@o+^AoLPVK(vxoNnrSHv^q7pG_GnL@8V& zP1lL}H_d5f5Tx!XpX2)3wYAy-lVcpRN{`>ry4e%~LaSCy7gM|AH0k-FP55$|@&Ay$ zJi~**_0ao(hqAGbK3Ez!O9Z%@hsXKnwXnh zgPC4o^z^!0pS-u5a>KY3MTUIQrkaY+svvRBsMiOGA~I?hW!w9LndxIE3Hz*jggg$Bt}~+>xc^!Sh8;$y@?VzuIY>S+!syN z0RyArOFn7yH^|)yHT{ivI9R4MxSU94Fy{QuFbz~RL9-Nkm7M2az*qZtz=-vD36{U` z?ec4ydIaZDbd@FVN%XbPU~U1uqHY5u?j?_hSR25O|m*|3JX;Sf4 z@)e-Oo6Xm6<4wKhYSfx(h3ZL4h)|3z6GiCk~F43`x%L3NTAxUFWJmr za%Hl$b?ysBAkJ!=;VJyA~2nKvNJ^YBH54K9=O0c3N}x7@dYuU%ux4j0+p<4uAvFeby#vYkGv7WRf}_fXjEZku4aDh>Zgt3cUcQ^Nt=6r>pOwP#Yi> zH&sfT7H5$G-#%vz`1W!YbYOP0ov1*9^~*uWEW4u(TTt?p#z(;JO}+bLXlzg)f|8^_ zqicAnl;42qD-^PCSV<;`P;ph6!udg(PJ+;Tn=1Ep;Uh}{k4xDTQ&Z<#Jn|NJGPTFA z<&G#1+L=6;?ccrb!zD0))`~!7YC7EXCk^)`EUYb^Y>_2(;|7+XhK#lp6Gr2*6i}bJ zOsW=xa4pZ-9sw+hB!LPhtIxvQz%BlUigmI3;9ag;q=xVVDG4Ch5AW>C=qjLFNBD0B zeiId^nq|Qmr@f~ghKd<(Jz%^GQVk`-Y8nQU1|+h7ceyl$u*5HJDX!yM2@zIM5EA`*8)h6FEG6gc9iXdTb`%Fv!;$!x0! zV5|O)W;FsRxV?B>tu6GtB9Fn|NMpbxM1kLA1t3wQbu3<`dI(}W;bagk6bny-Ms1(? zhhFJ_&RX}*&5Kw&Y?J^=ip}+17i2+$aCj{4mrW?SVdpo|HM= zXU*?!%!#TVnBPqZVI~1$@GSnjzxlxva3_#}3UYpDKP9^W#30tSF^2-wwe5GbS0Xr!6#4>Qg zP=t$+b2d!^#;DN&l4shs;|%*iknTr2?-xS zvo2*?%jRXBoO(M1`g4ty(dm-Ag(XCk!&wl9e?S<~fUyK-Le|Am9ULw>*bIX}m&X5! zKdmm~D9S0YK+xnx?vhQ_;yXL&S6s}bT6puGYi)_Q>O0}%)tK|OO$X96gg<|jr^|KW z=NmvL4GWTP$$ay}{Psu><_zr%=nfNhT3PqZm5S<67!oQ()7^pR8rxC!fL^hU-MNHb zpDJ-n&O7wm`O7M(OB6A4o%_6#+8#dlFJ5i5b3?Le!b$s5uDcoqBv3EAQ6S3Ky% zX>8jGEX-;Le~yP?=P*|48g=rk>OVRThcC`m#3U3SClAjx0K*!Fm;WgEI4p>-68U^z z#&YBMQsFPa6DZ>2B#_Asvv_OWjcBq5JqJV))Z?5|zx!*aux4qJf-L;jFD$N4-N%Oq zKonF_HS><-ZoDA@mmjUeTPtF^fl?hn!c$R!3qum28`Gd<$ih69_zu?O8JAGB)1s@e zli!MIrride9qu@uBowct0g46m6#=EIdmS9g+z!wWGa-1<`YBi+%W z9HBXoRf48IE)C(WElu%q^9#usF5abWR&V2Jfu=CRkLRFQxBUJ|~2qoV@wT2~*L86kP?hhHn@L3N6BV8|=ya0`ii9*3?^h zkUB69;!d{0i3`Xmp!d|IpraemfQoY?&kaCo2X!KK$ikENlvbd%g=>xu0ZdLp`S^a3 zib1;+nFu+wM=Tqsq63IGNPgeWVroGQNPAUBtOF+UAOwKkPzK;aTyZ%XSoR*jA3P{? zTD|~;-M4uuDlQiwO__wI&pS$3`)~uqsFBvv3~N1TSn?QjEuV&>fx-+x@8heQdLe)B z_p^)ZLx<-(02q%dmSS0%dLOCa*`pU^PGc-V2h&3wXDec`u>L>6<#Tl2&p%z_5Viqd z_dOPAhrWhJFnvI0w=~oPoWc4!r~o8d9bCOz2skAVn!_wjq2%=hYS+m^Iscn>G0484 zOIY$5;vq%zcAm==h=-S48Gj5o&lxfY@QUkbS9D3Vgwncd=ODl|)~tI@%sEPDI6|nL zw`vvk*U~_5sFf^1sbQumDi)X$;5Ub?`*M zL+p$J-7u-2FQ7?+xj_OLf>hG*z*l&c(K@2}1|Y<-5R7Y5tj1&T0r52!fF#>^fezRo zU?h=BJ`4t7#^Bu<^>F`ngGYt^2Eca9Ic*V;S1UG)S%PGg#xOWKVo!Voh+@1{^EyR< znSlNaQd%ZI>w5dZmLOPE#j$@ipNGMXzG*&#WVH!o?aJq%9_Dz~SC#Dow$spmRQsg1 zI&=NlWCy-re_psuZV>_J&4zbfG0NRQ@n!gk1TU=Y?zQwI)6wIaP+&t9;=T|g{5nf%B} ze*dEB_qZ^;BB(UF2qsxBpCb4?%}+Fz1kqi0A1LW4a9D=Zc&d81^C1sFg?g6@0S!Jx zCIN>vW0pa+lOstqh63e+G8C(^2X!d31n%Vlkh3+qg8i925ECu}b>qlI*#bvfQu0@K zvN;HDUdbtIe zlSOw?`3s8@hp0`WNU@_Pac-89Ag9agv^334R`*j`zxYBk2vO^HfHXcF% zvJ!PvO~0NW5wHJu5#g-~9q=#3S|QgS(yH)^omz91K)uC;s@Ch;d6rVsZPX3!DJnH1~k1InmjM8t1Fw9Q)qi4#{JpvXlY>g zKF|g%!vZGEf60IbN54i4K~XNi3gC+dWqFh)LFf(&t}n{(iF6g0xAO$GDgPBE%is5P z`^pXVtcxT`YwQ*n@}a18x*W`;&F+R705=Rd3T#nr{Arf|34AS&uZO-Ms z(xpPsd20G_x6zE#2fAI0QjU$H&MJ6P7xI(#xd*g^YRMYFQKYYgn=y+)i*=ZWu@iN? zKtBHioO<@$)lUAJ%WHI+C3z$@#sJUt5HF`**(kht2?4tJr@3}p5d8hH@r?umLG7yC zh;^nDX?DHU1@r5JmI2brzU8?#`2fBFcJe1MizMJt=^>ym<16lDBkCK2qajj!wtO=S zACQ#w9cb?DV_B#aL?S20CTSk(;lZM28z@-hfWJt~j*R*8-kZZ<8T)u;q0Kv4lD%_9 zt}!CbR4YQBe%(jC6C{^2KY-xATK{B~0dCCj4DKlF7TyF#F^AAks=>^`Aix83v`Vfv zD_S&Gkx0*J7>BQl+4Vb+&Pu2luPfmeU@-FpD5i)TD|NN8Pz3JCqtK0M0>#+u0yAVU zJSsJ0Ih~fOPN@|2MPV?-Xn=2pplmm&Ztk|mf|&9h&j+nV30%ms1@pd?e%&`~p@dO* zbvxa1N=a`stclY6P}_p@x}9{C9HMUj?ZPBz;ZBBM73T9{@Mlk~baFsoHO5h#VdF0t zYl8N}ZNN<`$tKb!tfSCo_RUjPyvs2$n2V&gWYHJ_hP()r2S~BKNGaRn5{i|F#>Q@w z8`t}zU@yq22JWSni_-!6s?m!btuu8O=W@v^eX8pt1K^U7PG*G8a;BMWWo^w$4LNDA zM~t>x?~KEcrI5ii>Yj6cQqQV{TF@=~P4gY?W`RnKfJ%Jrzxv862v@&G(aFw}7L87N zk&|PUv?;F?&R)=%;lHBdpdLYa<{Rg7JF^Y2q}e{g6x|QwA&#k?5w-(iu(l`A8ZQuO zRZyg1P~m}0I}kut;wtum>pMX$-pc;DkF>{v0Q&Vf_dNR5P6?G_Zp+83BCoR%2d+6J zq-6z7%l`%Qg8N`NW+C}6jVwS>OP}Kt3}kCFDj#&uvqGwiw2PyQ*LⅈDHne7!~`p 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�VER+kECjO$EgC*c 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 neyfyUDgOTt^oA=p Date: Thu, 31 Oct 2024 13:21:46 +0000 Subject: [PATCH 02/44] Commented out the environment line --- R/simulation_flow_check.R | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/R/simulation_flow_check.R b/R/simulation_flow_check.R index 55e720a..0870de0 100644 --- a/R/simulation_flow_check.R +++ b/R/simulation_flow_check.R @@ -4,14 +4,15 @@ # Import dependencies library(reticulate) -use_condaenv("rEpiabm") +# replace the line below with your virtual python environment +# use_condaenv("rEpiabm") library(here) -os <- import("os") -logging <- import("logging") -pd <- import("pandas") -plt <- import("matplotlib.pyplot") -pe <- import("pyEpiabm") +os <- import("os", delay_load = TRUE) +logging <- import("logging", delay_load = TRUE) +pd <- import("pandas", delay_load = TRUE) +plt <- import("matplotlib.pyplot", delay_load = TRUE) +pe <- import("pyEpiabm", delay_load = TRUE) # Set working directory for relative directory references base_dir <- here() From 110d6c41069f66a2312413e7b7068d0cb55f15d5 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Thu, 31 Oct 2024 13:43:23 +0000 Subject: [PATCH 03/44] Imported the library instead of calling conda --- DESCRIPTION | 2 +- R/AAA.R | 53 --------------------------------------- R/simulation_flow_check.R | 4 +-- R/zzz.R | 48 +++++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 56 deletions(-) delete mode 100644 R/AAA.R create mode 100644 R/zzz.R diff --git a/DESCRIPTION b/DESCRIPTION index ff464f7..5d3a5be 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -30,4 +30,4 @@ Config/reticulate: ) ) Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.2 +RoxygenNote: 7.2.0 \ No newline at end of file diff --git a/R/AAA.R b/R/AAA.R deleted file mode 100644 index 83e46bf..0000000 --- a/R/AAA.R +++ /dev/null @@ -1,53 +0,0 @@ -local <- new.env() - -.onAttach <- function(libname, pkgname) { - if(!grepl(x = R.Version()$arch, pattern = "64")){ - warning("This package only works on 64bit architectures due to dependencies. You are not running a 64bit version of R.") - } -} - -.onLoad <- function(libname, pkgname) { - reticulate::configure_environment(pkgname) - - # Load required Python modules - oldwd <- getwd() - on.exit(setwd(oldwd)) - - # Import core Python dependencies - os <- reticulate::import("os", convert = TRUE, delay_load = TRUE) - logging <- reticulate::import("logging", convert = TRUE, delay_load = TRUE) - pd <- reticulate::import("pandas", convert = TRUE, delay_load = TRUE) - plt <- reticulate::import("matplotlib.pyplot", convert = TRUE, delay_load = TRUE) - pe <- reticulate::import("pyEpiabm", convert = TRUE, delay_load = TRUE) - - # Assign imported modules to parent environment - assign("os", value = os, envir = parent.env(local)) - assign("logging", value = logging, envir = parent.env(local)) - assign("pd", value = pd, envir = parent.env(local)) - assign("plt", value = plt, envir = parent.env(local)) - assign("pe", value = pe, envir = parent.env(local)) - - # Set up default parameters - simulation_params <- list( - pop_params = list( - population_size = as.integer(100), - cell_number = as.integer(2), - microcell_number = as.integer(2), - household_number = as.integer(5), - place_number = as.integer(2) - ), - sim_params = list( - simulation_start_time = as.integer(0), - simulation_end_time = as.integer(60), - initial_infected_number = as.integer(10), - include_waning = TRUE - ) - ) - - assign("default_params", value = simulation_params, envir = parent.env(local)) -} - -#' @import reticulate -#' @import here -#' @import ggplot2 -NULL \ No newline at end of file diff --git a/R/simulation_flow_check.R b/R/simulation_flow_check.R index 0870de0..30efd19 100644 --- a/R/simulation_flow_check.R +++ b/R/simulation_flow_check.R @@ -3,9 +3,9 @@ # # Import dependencies + library(reticulate) -# replace the line below with your virtual python environment -# use_condaenv("rEpiabm") +library(rEpiabm) library(here) os <- import("os", delay_load = TRUE) diff --git a/R/zzz.R b/R/zzz.R new file mode 100644 index 0000000..461540b --- /dev/null +++ b/R/zzz.R @@ -0,0 +1,48 @@ +# In zzz.R +local <- new.env() + +.onLoad <- function(libname, pkgname) { + # Configure reticulate to use any available Python + reticulate::configure_environment(pkgname) + + # The required Python packages will be installed automatically based on + # Config/reticulate in DESCRIPTION if they're not found + + # Import dependencies with error handling + tryCatch({ + os <- reticulate::import("os", delay_load = TRUE) + logging <- reticulate::import("logging", delay_load = TRUE) + pd <- reticulate::import("pandas", delay_load = TRUE) + plt <- reticulate::import("matplotlib.pyplot", delay_load = TRUE) + pe <- reticulate::import("pyEpiabm", delay_load = TRUE) + + # Assign to package environment + assign("os", os, envir = parent.env(local)) + assign("logging", logging, envir = parent.env(local)) + assign("pd", pd, envir = parent.env(local)) + assign("plt", plt, envir = parent.env(local)) + assign("pe", pe, envir = parent.env(local)) + + }, error = function(e) { + warning(sprintf("Error loading Python dependencies: %s\nPlease ensure Python is installed and accessible.", e$message)) + }) +} + +# Function to verify Python environment +#' @export +check_python_env <- function() { + python_path <- reticulate::py_config()$python + + cat(sprintf("Python version: %s\n", reticulate::py_version())) + cat(sprintf("Python path: %s\n", python_path)) + + required_packages <- c("os", "logging", "pandas", "matplotlib", "pyEpiabm") + + for (pkg in required_packages) { + if (reticulate::py_module_available(pkg)) { + cat(sprintf("✓ %s is available\n", pkg)) + } else { + cat(sprintf("✗ %s is not available\n", pkg)) + } + } +} \ No newline at end of file From 3d276930044db435fc07408a9a1d666495f33469 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Thu, 31 Oct 2024 13:53:23 +0000 Subject: [PATCH 04/44] Adjusted pkgdown.yaml to create Python Env --- .github/workflows/pkgdown.yaml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 41633c1..5dcddad 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -28,9 +28,16 @@ jobs: extra-packages: any::pkgdown, local::., any::XML needs: website - - name: Build site - run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE) + - uses: actions/setup-python@v2 + with: + python-version: '3.10' + + - name: Setup r-reticulate env + run: reticulate::virtualenv_create("r-reticulate", Sys.which("python")) shell: Rscript {0} + + - name: Build site + run: Rscript -e "pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE)" - name: Deploy to GitHub pages if: github.event_name != 'pull_request' From a0459812fc6ef45d6fd129b10caa774c6c556035 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Thu, 31 Oct 2024 14:02:46 +0000 Subject: [PATCH 05/44] Ammended pkgdown to work on pull request --- .github/workflows/pkgdown.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 5dcddad..107319c 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -3,6 +3,9 @@ on: push: branches: [main, master] + pull_request: + branches: + - '**' release: types: [published] workflow_dispatch: From 7b40bdc7b752f379f704003a59ace7e0519d1b9f Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Thu, 31 Oct 2024 14:20:11 +0000 Subject: [PATCH 06/44] Ammended MacOS testing --- .github/workflows/test_macos.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.github/workflows/test_macos.yml b/.github/workflows/test_macos.yml index 40cab78..df24a08 100644 --- a/.github/workflows/test_macos.yml +++ b/.github/workflows/test_macos.yml @@ -28,6 +28,12 @@ jobs: with: r-version: ${{ matrix.R }} Ncpus: 2 + + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" - name: Query dependencies run: | @@ -51,6 +57,24 @@ jobs: remotes::install_cran("rcmdcheck") shell: Rscript {0} + - name: setup r-reticulate venv + shell: Rscript {0} + run: | + + library(reticulate) + + path_to_venv <- virtualenv_create( + envname = "r-reticulate", + python = Sys.which("python"), # placed on PATH by the setup-python action + packages = c( + "pandas", "matplotlib", "numpy" + ) + ) + + writeLines( + paste0("RETICULATE_PYTHON=", virtualenv_python(path_to_venv)), + Sys.getenv("GITHUB_ENV")) + - name: Check env: _R_CHECK_CRAN_INCOMING_REMOTE_: false From 607a854f76f6883582e588a10d7a3dc769ecf81a Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Thu, 31 Oct 2024 14:44:24 +0000 Subject: [PATCH 07/44] Ammended the .Rbuildignore --- .Rbuildignore | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.Rbuildignore b/.Rbuildignore index 91114bf..2029fa5 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,2 +1,10 @@ ^.*\.Rproj$ ^\.Rproj\.user$ +^\.travis\.yml$ +^codecov\.yml$ +^CRAN-RELEASE$ +^cran-comments\.md$ +^\.github$ +^doc$ +^Meta$ +.lintr \ No newline at end of file From 9d580d71d36a787812226e5c56be8ea87876d60f Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Thu, 31 Oct 2024 15:40:16 +0000 Subject: [PATCH 08/44] Commented out the rEpiabm line --- R/simulation_flow_check.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/simulation_flow_check.R b/R/simulation_flow_check.R index 30efd19..21ce5a3 100644 --- a/R/simulation_flow_check.R +++ b/R/simulation_flow_check.R @@ -5,7 +5,7 @@ library(reticulate) -library(rEpiabm) +#library(rEpiabm) library(here) os <- import("os", delay_load = TRUE) From 9735f13c502df569a0aacff7c056a1a25db9f90f Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Thu, 31 Oct 2024 16:34:54 +0000 Subject: [PATCH 09/44] Creating a workaround by creating a py env --- DESCRIPTION | 16 ++-- NAMESPACE | 3 - R/simulation_flow_check.R | 4 +- R/zzz.R | 166 ++++++++++++++++++++++++++++++++------ 4 files changed, 154 insertions(+), 35 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 5d3a5be..482c635 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -12,22 +12,22 @@ Encoding: UTF-8 Archs: x64 SystemRequirements: Python (>= 2.7.0) Suggests: tinytest -Imports: ggplot2, here -Depends: - reticulate (>= 1.14), - R (>= 3.3.0) +Imports: + ggplot2, + here, + reticulate (>= 1.14) +Depends: R (>= 3.3.0) Config/reticulate: list( packages = list( list(package = "numpy", pip = TRUE), - list(package = "pandas", pip = TRUE), + list(package = "pandas", pip = TRUE), list(package = "matplotlib", pip = TRUE), list( package = "pyEpiabm", pip = TRUE, - pip_options = "--index-url git+https://github.com/SABS-R3-Epidemiology/epiabm.git@main#egg=pyEpiabm&subdirectory=pyEpiabm" + pip_options = "--extra-index-url https://github.com/SABS-R3-Epidemiology/epiabm.git@main#egg=pyEpiabm&subdirectory=pyEpiabm" ) ) ) -Roxygen: list(markdown = TRUE) -RoxygenNote: 7.2.0 \ No newline at end of file +RoxygenNote: 7.3.2 diff --git a/NAMESPACE b/NAMESPACE index b651308..6ae9268 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,5 +1,2 @@ # Generated by roxygen2: do not edit by hand -import(ggplot2) -import(here) -import(reticulate) diff --git a/R/simulation_flow_check.R b/R/simulation_flow_check.R index 21ce5a3..acff90a 100644 --- a/R/simulation_flow_check.R +++ b/R/simulation_flow_check.R @@ -2,7 +2,9 @@ # Example simulation script with data output # # Import dependencies - +source("R/zzz.R") +initialize_python_env() +check_python_env() library(reticulate) #library(rEpiabm) diff --git a/R/zzz.R b/R/zzz.R index 461540b..a550b31 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -1,48 +1,168 @@ -# In zzz.R +# Environment setup and management functions for R package local <- new.env() +#' Create and configure Python environment +#' @param env_name Character. Name of the virtual environment to create +#' @param python_version Character. Python version to use (e.g., "3.8") +#' @return Logical indicating success +#' @keywords internal +create_python_env <- function(env_name = "r-py-env", python_version = "3.8") { + tryCatch({ + # Check if virtualenv package is available + if (!reticulate::virtualenv_exists(env_name)) { + message(sprintf("Creating new Python virtual environment: %s", env_name)) + reticulate::virtualenv_create( + envname = env_name, + version = python_version, + packages = "pip" + ) + } + + # Activate the environment + reticulate::use_virtualenv(env_name, required = TRUE) + return(TRUE) + }, error = function(e) { + warning(sprintf("Failed to create/activate Python environment: %s", e$message)) + return(FALSE) + }) +} + .onLoad <- function(libname, pkgname) { - # Configure reticulate to use any available Python + # Create and activate Python environment + env_success <- create_python_env() + + if (!env_success) { + warning("Failed to set up Python environment. Some functionality may be limited.") + return() + } + + # Configure reticulate to use the package's environment reticulate::configure_environment(pkgname) - # The required Python packages will be installed automatically based on - # Config/reticulate in DESCRIPTION if they're not found + # Install required packages if not present + ensure_python_dependencies() # Import dependencies with error handling tryCatch({ - os <- reticulate::import("os", delay_load = TRUE) - logging <- reticulate::import("logging", delay_load = TRUE) - pd <- reticulate::import("pandas", delay_load = TRUE) - plt <- reticulate::import("matplotlib.pyplot", delay_load = TRUE) - pe <- reticulate::import("pyEpiabm", delay_load = TRUE) - - # Assign to package environment - assign("os", os, envir = parent.env(local)) - assign("logging", logging, envir = parent.env(local)) - assign("pd", pd, envir = parent.env(local)) - assign("plt", plt, envir = parent.env(local)) - assign("pe", pe, envir = parent.env(local)) - + load_python_modules() }, error = function(e) { - warning(sprintf("Error loading Python dependencies: %s\nPlease ensure Python is installed and accessible.", e$message)) + warning(sprintf("Error loading Python dependencies: %s\nPlease run check_python_env() to diagnose issues.", e$message)) }) } -# Function to verify Python environment +#' Ensure all required Python dependencies are installed +#' @keywords internal +ensure_python_dependencies <- function() { + required_packages <- list( + list(package = "numpy", pip = TRUE), + list(package = "pandas", pip = TRUE), + list(package = "matplotlib", pip = TRUE), + list(package = "pyEpiabm", pip = TRUE, + pip_options = "--index-url git+https://github.com/SABS-R3-Epidemiology/epiabm.git@main#egg=pyEpiabm&subdirectory=pyEpiabm") + ) + + # Check and install each package if needed + for (pkg_info in required_packages) { + pkg_name <- pkg_info$package + if (!reticulate::py_module_available(pkg_name)) { + message(sprintf("Installing required Python package: %s", pkg_name)) + + tryCatch({ + if (!is.null(pkg_info$pip_options)) { + reticulate::py_install(pkg_info$pip_options, pip = TRUE) + } else { + reticulate::py_install(pkg_name, pip = pkg_info$pip) + } + }, error = function(e) { + warning(sprintf("Failed to install %s: %s", pkg_name, e$message)) + }) + } + } +} + +#' Load Python modules into package environment +#' @keywords internal +load_python_modules <- function() { + # Define modules to load + modules <- list( + os = "os", + logging = "logging", + pd = "pandas", + plt = "matplotlib.pyplot", + pe = "pyEpiabm" + ) + + # Import each module + for (var_name in names(modules)) { + module_name <- modules[[var_name]] + tryCatch({ + module <- reticulate::import(module_name, delay_load = TRUE) + assign(var_name, module, envir = parent.env(local)) + }, error = function(e) { + warning(sprintf("Failed to load module %s: %s", module_name, e$message)) + }) + } +} + +#' Check Python environment and package availability #' @export check_python_env <- function() { - python_path <- reticulate::py_config()$python + # Get Python configuration + python_config <- reticulate::py_config() + # Print Python information cat(sprintf("Python version: %s\n", reticulate::py_version())) - cat(sprintf("Python path: %s\n", python_path)) + cat(sprintf("Python path: %s\n", python_config$python)) + cat(sprintf("virtualenv: %s\n", if(is.null(python_config$virtualenv)) "None" else python_config$virtualenv)) + + # Check required packages + required_packages <- c("numpy", "pandas", "matplotlib", "pyEpiabm") - required_packages <- c("os", "logging", "pandas", "matplotlib", "pyEpiabm") + cat("\nPackage Status:\n") + pkg_status <- list() for (pkg in required_packages) { if (reticulate::py_module_available(pkg)) { - cat(sprintf("✓ %s is available\n", pkg)) + # Try to get version information + tryCatch({ + version <- reticulate::py_eval(sprintf("__import__('%s').__version__", pkg)) + cat(sprintf("✓ %s (version %s)\n", pkg, version)) + pkg_status[[pkg]] <- TRUE + }, error = function(e) { + cat(sprintf("✓ %s (version unknown)\n", pkg)) + pkg_status[[pkg]] <- TRUE + }) } else { cat(sprintf("✗ %s is not available\n", pkg)) + pkg_status[[pkg]] <- FALSE } } + + # Return invisibly whether all packages are available + invisible(all(unlist(pkg_status))) +} + +#' Initialize or repair Python environment +#' @param force Logical. If TRUE, recreates the environment even if it exists +#' @export +initialize_python_env <- function(force = FALSE) { + env_name <- "r-py-env" + + if (force && reticulate::virtualenv_exists(env_name)) { + message("Removing existing Python environment...") + reticulate::virtualenv_remove(env_name) + } + + # Create and activate environment + if (create_python_env(env_name)) { + message("Python environment successfully created/activated") + + # Install dependencies + ensure_python_dependencies() + + # Check environment + check_python_env() + } else { + stop("Failed to initialize Python environment") + } } \ No newline at end of file From 87742872d134e16900d5611efd8c969dd60f0e34 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 10:53:55 +0000 Subject: [PATCH 10/44] Created workaround in zzz.R that passed locally --- NAMESPACE | 2 + R/zzz.R | 71 ++++++++++++++++++++----------- man/check_python_env.Rd | 11 +++++ man/create_python_env.Rd | 20 +++++++++ man/ensure_python_dependencies.Rd | 12 ++++++ man/initialize_python_env.Rd | 14 ++++++ man/load_python_modules.Rd | 12 ++++++ 7 files changed, 117 insertions(+), 25 deletions(-) create mode 100644 man/check_python_env.Rd create mode 100644 man/create_python_env.Rd create mode 100644 man/ensure_python_dependencies.Rd create mode 100644 man/initialize_python_env.Rd create mode 100644 man/load_python_modules.Rd diff --git a/NAMESPACE b/NAMESPACE index 6ae9268..d9e4281 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,2 +1,4 @@ # Generated by roxygen2: do not edit by hand +export(check_python_env) +export(initialize_python_env) diff --git a/R/zzz.R b/R/zzz.R index a550b31..e29a210 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -6,15 +6,18 @@ local <- new.env() #' @param python_version Character. Python version to use (e.g., "3.8") #' @return Logical indicating success #' @keywords internal -create_python_env <- function(env_name = "r-py-env", python_version = "3.8") { +create_python_env <- function(env_name = "r-py-env", python_version = "3.9") { tryCatch({ # Check if virtualenv package is available if (!reticulate::virtualenv_exists(env_name)) { message(sprintf("Creating new Python virtual environment: %s", env_name)) + + # Create virtual environment with system site packages to help with SSL reticulate::virtualenv_create( envname = env_name, version = python_version, - packages = "pip" + packages = "pip", + system_site_packages = TRUE ) } @@ -53,31 +56,49 @@ create_python_env <- function(env_name = "r-py-env", python_version = "3.8") { #' Ensure all required Python dependencies are installed #' @keywords internal ensure_python_dependencies <- function() { - required_packages <- list( - list(package = "numpy", pip = TRUE), - list(package = "pandas", pip = TRUE), - list(package = "matplotlib", pip = TRUE), - list(package = "pyEpiabm", pip = TRUE, - pip_options = "--index-url git+https://github.com/SABS-R3-Epidemiology/epiabm.git@main#egg=pyEpiabm&subdirectory=pyEpiabm") - ) + # Upgrade pip + reticulate::py_run_string(" +import sys +import subprocess +subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'pip']) + ") - # Check and install each package if needed - for (pkg_info in required_packages) { - pkg_name <- pkg_info$package - if (!reticulate::py_module_available(pkg_name)) { - message(sprintf("Installing required Python package: %s", pkg_name)) - - tryCatch({ - if (!is.null(pkg_info$pip_options)) { - reticulate::py_install(pkg_info$pip_options, pip = TRUE) - } else { - reticulate::py_install(pkg_name, pip = pkg_info$pip) - } - }, error = function(e) { - warning(sprintf("Failed to install %s: %s", pkg_name, e$message)) - }) - } + # Install required packages + reticulate::py_run_string(" +import sys +import subprocess + +# Install basic packages +packages = ['numpy', 'pandas', 'matplotlib'] +for package in packages: + subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', package]) + +# Install pyEpiabm from GitHub +subprocess.check_call([ + sys.executable, '-m', 'pip', 'install', '--upgrade', + 'git+https://github.com/SABS-R3-Epidemiology/epiabm.git@main#egg=pyEpiabm&subdirectory=pyEpiabm' +]) + ") + + # Verify installations + result <- reticulate::py_run_string(" +import importlib.util + +packages = ['numpy', 'pandas', 'matplotlib', 'pyEpiabm'] +missing = [] + +for package in packages: + if importlib.util.find_spec(package) is None: + missing.append(package) + +print('Missing packages:', missing if missing else 'None') + ") + + if (length(result$missing) > 0) { + stop("Failed to install required packages: ", paste(result$missing, collapse = ", ")) } + + message("All required packages installed successfully") } #' Load Python modules into package environment diff --git a/man/check_python_env.Rd b/man/check_python_env.Rd new file mode 100644 index 0000000..abb0efc --- /dev/null +++ b/man/check_python_env.Rd @@ -0,0 +1,11 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/zzz.R +\name{check_python_env} +\alias{check_python_env} +\title{Check Python environment and package availability} +\usage{ +check_python_env() +} +\description{ +Check Python environment and package availability +} diff --git a/man/create_python_env.Rd b/man/create_python_env.Rd new file mode 100644 index 0000000..d8c0399 --- /dev/null +++ b/man/create_python_env.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/zzz.R +\name{create_python_env} +\alias{create_python_env} +\title{Create and configure Python environment} +\usage{ +create_python_env(env_name = "r-py-env", python_version = "3.9") +} +\arguments{ +\item{env_name}{Character. Name of the virtual environment to create} + +\item{python_version}{Character. Python version to use (e.g., "3.8")} +} +\value{ +Logical indicating success +} +\description{ +Create and configure Python environment +} +\keyword{internal} diff --git a/man/ensure_python_dependencies.Rd b/man/ensure_python_dependencies.Rd new file mode 100644 index 0000000..20f0563 --- /dev/null +++ b/man/ensure_python_dependencies.Rd @@ -0,0 +1,12 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/zzz.R +\name{ensure_python_dependencies} +\alias{ensure_python_dependencies} +\title{Ensure all required Python dependencies are installed} +\usage{ +ensure_python_dependencies() +} +\description{ +Ensure all required Python dependencies are installed +} +\keyword{internal} diff --git a/man/initialize_python_env.Rd b/man/initialize_python_env.Rd new file mode 100644 index 0000000..55918ab --- /dev/null +++ b/man/initialize_python_env.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/zzz.R +\name{initialize_python_env} +\alias{initialize_python_env} +\title{Initialize or repair Python environment} +\usage{ +initialize_python_env(force = FALSE) +} +\arguments{ +\item{force}{Logical. If TRUE, recreates the environment even if it exists} +} +\description{ +Initialize or repair Python environment +} diff --git a/man/load_python_modules.Rd b/man/load_python_modules.Rd new file mode 100644 index 0000000..ec34d09 --- /dev/null +++ b/man/load_python_modules.Rd @@ -0,0 +1,12 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/zzz.R +\name{load_python_modules} +\alias{load_python_modules} +\title{Load Python modules into package environment} +\usage{ +load_python_modules() +} +\description{ +Load Python modules into package environment +} +\keyword{internal} From 675bfb6843905a6025b7ed7aad47ad5c72df8fd3 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 11:19:34 +0000 Subject: [PATCH 11/44] Ammended MacOS workflow --- .github/workflows/test_macos.yml | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test_macos.yml b/.github/workflows/test_macos.yml index df24a08..6139eb2 100644 --- a/.github/workflows/test_macos.yml +++ b/.github/workflows/test_macos.yml @@ -63,13 +63,28 @@ jobs: library(reticulate) - path_to_venv <- virtualenv_create( - envname = "r-reticulate", - python = Sys.which("python"), # placed on PATH by the setup-python action - packages = c( - "pandas", "matplotlib", "numpy" - ) - ) + reticulate::py_run_string(" + import sys + import subprocess + subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'pip']) + ") + + # Install required packages + reticulate::py_run_string(" + import sys + import subprocess + + # Install basic packages + packages = ['numpy', 'pandas', 'matplotlib'] + for package in packages: + subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', package]) + + # Install pyEpiabm from GitHub + subprocess.check_call([ + sys.executable, '-m', 'pip', 'install', '--upgrade', + 'git+https://github.com/SABS-R3-Epidemiology/epiabm.git@main#egg=pyEpiabm&subdirectory=pyEpiabm' + ]) + ") writeLines( paste0("RETICULATE_PYTHON=", virtualenv_python(path_to_venv)), From 7f95fc1dfe5a9f914ba2c736f327dc4d01cce4b9 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 11:21:26 +0000 Subject: [PATCH 12/44] Ammended MacOS workflow --- .github/workflows/test_macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_macos.yml b/.github/workflows/test_macos.yml index 6139eb2..531ff1a 100644 --- a/.github/workflows/test_macos.yml +++ b/.github/workflows/test_macos.yml @@ -3,7 +3,7 @@ name: "Unit tests: macOS" on: push: branches: - - main + - '**' pull_request: branches: - '**' From 14f64227660e4f6938ee7d31d76bba537b370365 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 11:29:43 +0000 Subject: [PATCH 13/44] Fix MacOS workflow to activate environment --- .github/workflows/test_macos.yml | 44 ++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/.github/workflows/test_macos.yml b/.github/workflows/test_macos.yml index 531ff1a..7aba11f 100644 --- a/.github/workflows/test_macos.yml +++ b/.github/workflows/test_macos.yml @@ -9,17 +9,15 @@ on: - '**' jobs: - test: name: tests on macOS with R ${{ matrix.R }} runs-on: macos-latest strategy: fail-fast: false matrix: - R: [ '4.1.0' ] + R: ['4.1.0'] steps: - - name: Checkout repository uses: actions/checkout@v2 @@ -29,7 +27,6 @@ jobs: r-version: ${{ matrix.R }} Ncpus: 2 - - name: Setup Python uses: actions/setup-python@v4 with: @@ -60,16 +57,15 @@ jobs: - name: setup r-reticulate venv shell: Rscript {0} run: | - library(reticulate) reticulate::py_run_string(" import sys import subprocess subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'pip']) - ") - - # Install required packages + ") + + # Install required packages reticulate::py_run_string(" import sys import subprocess @@ -84,11 +80,31 @@ jobs: sys.executable, '-m', 'pip', 'install', '--upgrade', 'git+https://github.com/SABS-R3-Epidemiology/epiabm.git@main#egg=pyEpiabm&subdirectory=pyEpiabm' ]) - ") - - writeLines( - paste0("RETICULATE_PYTHON=", virtualenv_python(path_to_venv)), - Sys.getenv("GITHUB_ENV")) + ") + + env_name <- "r-py-env" + python_version = "3.9" + tryCatch({ + # Check if virtualenv package is available + if (!reticulate::virtualenv_exists(env_name)) { + message(sprintf("Creating new Python virtual environment: %s", env_name)) + + # Create virtual environment with system site packages to help with SSL + reticulate::virtualenv_create( + envname = env_name, + version = python_version, + packages = "pip", + system_site_packages = TRUE + ) + } + + # Activate the environment + reticulate::use_virtualenv(env_name, required = TRUE) + return(TRUE) + }, error = function(e) { + warning(sprintf("Failed to create/activate Python environment: %s", e$message)) + return(FALSE) + }) - name: Check env: @@ -101,4 +117,4 @@ jobs: - name: Show testthat output if: always() run: find check -name 'testthat.Rout*' -exec cat '{}' \; || true - shell: bash + shell: bash \ No newline at end of file From 2ccf7783d86dbd9d4b9e2f31e9639fff8e6e99c3 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 12:00:51 +0000 Subject: [PATCH 14/44] Using simulation dataframe instead of tidyr --- R/simulation_flow_check.R | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/R/simulation_flow_check.R b/R/simulation_flow_check.R index acff90a..e36e6b1 100644 --- a/R/simulation_flow_check.R +++ b/R/simulation_flow_check.R @@ -9,6 +9,7 @@ check_python_env() library(reticulate) #library(rEpiabm) library(here) +library(tidyr) os <- import("os", delay_load = TRUE) logging <- import("logging", delay_load = TRUE) @@ -100,6 +101,9 @@ df <- pd$read_csv(filename) # Convert pandas dataframe to R dataframe df_r <- as.data.frame(df) +print(df) +print(df_r) + # Load library for plotting library(ggplot2) @@ -109,13 +113,15 @@ status_columns <- c("InfectionStatus.Susceptible", "InfectionStatus.Recovered", "InfectionStatus.Dead") -df_long <- data.frame( - time = rep(df_r$time, length(status_columns)), - Status = factor(rep(status_columns, each = nrow(df_r)), - levels = status_columns, - labels = c("Susceptible", "Infected", "Recovered", "Dead")), - Count = unlist(df_r[status_columns]) -) +df_long <- df_r %>% + pivot_longer( + cols = all_of(status_columns), + names_to = "Status", + values_to = "Count" + ) %>% + mutate(Status = factor(Status, + levels = status_columns, + labels = c("Susceptible", "Infected", "Recovered", "Dead"))) # Create the plot p <- ggplot(df_long, aes(x = time, y = Count, color = Status)) + From 04a30e855e8577f6138a032daa00666f1cd15ada Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 12:10:18 +0000 Subject: [PATCH 15/44] Fixed the tidyr --- R/simulation_flow_check.R | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/R/simulation_flow_check.R b/R/simulation_flow_check.R index e36e6b1..2edc904 100644 --- a/R/simulation_flow_check.R +++ b/R/simulation_flow_check.R @@ -113,15 +113,15 @@ status_columns <- c("InfectionStatus.Susceptible", "InfectionStatus.Recovered", "InfectionStatus.Dead") -df_long <- df_r %>% - pivot_longer( - cols = all_of(status_columns), - names_to = "Status", - values_to = "Count" - ) %>% - mutate(Status = factor(Status, +df_long <- pivot_longer( + df_r, + cols = all_of(status_columns), + names_to = "Status", + values_to = "Count" +) +df_long$Status <- factor(df_long$Status, levels = status_columns, - labels = c("Susceptible", "Infected", "Recovered", "Dead"))) + labels = c("Susceptible", "Infected", "Recovered", "Dead")) # Create the plot p <- ggplot(df_long, aes(x = time, y = Count, color = Status)) + From 65739ccaff202c64b78fac3d1c3797b4428736ec Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 12:18:00 +0000 Subject: [PATCH 16/44] Included tidyr into DESCRIPTION --- DESCRIPTION | 1 + 1 file changed, 1 insertion(+) diff --git a/DESCRIPTION b/DESCRIPTION index 482c635..22fd7a9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -15,6 +15,7 @@ Suggests: tinytest Imports: ggplot2, here, + tidyr, reticulate (>= 1.14) Depends: R (>= 3.3.0) Config/reticulate: From 100a6bb453416857da4a3c81517e9931f9a48232 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 12:23:26 +0000 Subject: [PATCH 17/44] Removed print statements --- R/simulation_flow_check.R | 3 --- 1 file changed, 3 deletions(-) diff --git a/R/simulation_flow_check.R b/R/simulation_flow_check.R index 2edc904..28f08d7 100644 --- a/R/simulation_flow_check.R +++ b/R/simulation_flow_check.R @@ -101,9 +101,6 @@ df <- pd$read_csv(filename) # Convert pandas dataframe to R dataframe df_r <- as.data.frame(df) -print(df) -print(df_r) - # Load library for plotting library(ggplot2) From 818147992d34ed2412a3fe3843aec22ee635f8b1 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 12:31:06 +0000 Subject: [PATCH 18/44] Ammended simulation flow check to read R directly --- R/simulation_flow_check.R | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/R/simulation_flow_check.R b/R/simulation_flow_check.R index 28f08d7..4990237 100644 --- a/R/simulation_flow_check.R +++ b/R/simulation_flow_check.R @@ -96,12 +96,8 @@ sim$compress_csv() # Create dataframe for plots filename <- here("simulation_outputs", "output.csv") -df <- pd$read_csv(filename) +df <- read.csv(filename) -# Convert pandas dataframe to R dataframe -df_r <- as.data.frame(df) - -# Load library for plotting library(ggplot2) # Reshape the data from wide to long format using base R @@ -111,7 +107,7 @@ status_columns <- c("InfectionStatus.Susceptible", "InfectionStatus.Dead") df_long <- pivot_longer( - df_r, + df, cols = all_of(status_columns), names_to = "Status", values_to = "Count" From a2a6437e78b28495582066f058d1256aaf5e7538 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 13:52:33 +0000 Subject: [PATCH 19/44] Updated yaml files --- .github/workflows/pkgdown.yaml | 3 ++- .github/workflows/test_ubuntu.yml | 2 +- .github/workflows/test_windows.yml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 107319c..74288a3 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -2,7 +2,8 @@ # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help on: push: - branches: [main, master] + branches: + - '**' pull_request: branches: - '**' diff --git a/.github/workflows/test_ubuntu.yml b/.github/workflows/test_ubuntu.yml index cc6209c..b8d90be 100644 --- a/.github/workflows/test_ubuntu.yml +++ b/.github/workflows/test_ubuntu.yml @@ -3,7 +3,7 @@ name: "Unit tests: Ubuntu" on: push: branches: - - main + - '**' pull_request: branches: - '**' diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 3656a2c..e69c025 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -3,7 +3,7 @@ name: "Unit tests: Windows" on: push: branches: - - main + - '**' pull_request: branches: - '**' From 150c1898e1ef6bd3869df1ad39f2401cca162d86 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 14:09:07 +0000 Subject: [PATCH 20/44] Updated test_windows.yml with x64 architecture --- .github/workflows/test_windows.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index e69c025..42fbabf 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -28,6 +28,7 @@ jobs: with: r-version: ${{ matrix.R }} Ncpus: 2 + architecture: 'x64' - name: Query dependencies run: | From 941a6bb12c8310ab47f940196a05bf98e4b1a5e5 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 14:18:30 +0000 Subject: [PATCH 21/44] Switched windows to 32-bit (x86 architecture) --- .github/workflows/test_windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 42fbabf..8d9af30 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -28,7 +28,7 @@ jobs: with: r-version: ${{ matrix.R }} Ncpus: 2 - architecture: 'x64' + architecture: 'x86' - name: Query dependencies run: | From 61ec97ff8090cb9a284b540e62a121621ac3783c Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 14:29:24 +0000 Subject: [PATCH 22/44] Made sure that Python is 64 bit in the yml --- .github/workflows/test_windows.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 8d9af30..7e620de 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -9,7 +9,6 @@ on: - '**' jobs: - test: name: tests on Windows with R ${{ matrix.R }} runs-on: windows-latest @@ -19,7 +18,6 @@ jobs: R: [ '4.1.0' ] steps: - - name: Checkout repository uses: actions/checkout@v2 @@ -28,15 +26,21 @@ jobs: with: r-version: ${{ matrix.R }} Ncpus: 2 - architecture: 'x86' - + architecture: 'x64' # Changed from 'x86' to 'x64' + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.9' + architecture: 'x64' + - name: Query dependencies run: | install.packages('remotes') saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) shell: Rscript {0} - - name: cache R installed packages + - name: Cache R packages uses: actions/cache@v2.1.7 id: cache with: @@ -44,7 +48,7 @@ jobs: ${{ env.R_LIBS_USER }} key: ${{ runner.os }}-R${{ matrix.R }}-2-${{ hashFiles('.github/depends.Rds') }} restore-keys: ${{ runner.os }}-R${{ matrix.R }}-2- - + - name: Install packages run: | install.packages(c("devtools")) @@ -63,4 +67,4 @@ jobs: - name: Show testthat output if: always() run: find check -name 'testthat.Rout*' -exec cat '{}' \; || true - shell: bash + shell: bash \ No newline at end of file From 3c8ac8a486cdfb7548f4e630439cc8723c386fe2 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 14:38:16 +0000 Subject: [PATCH 23/44] Changed from 64 bit compilers to 32 bit ones --- .github/workflows/test_windows.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 7e620de..997427f 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -26,13 +26,13 @@ jobs: with: r-version: ${{ matrix.R }} Ncpus: 2 - architecture: 'x64' # Changed from 'x86' to 'x64' + architecture: 'x86' - name: Setup Python uses: actions/setup-python@v4 with: python-version: '3.9' - architecture: 'x64' + architecture: 'x86' - name: Query dependencies run: | From a56cfcd32ba41a6cd1954ee3720e914e6024dfc8 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 14:47:59 +0000 Subject: [PATCH 24/44] Disabled the multiarch --- .github/workflows/test_windows.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 997427f..79312a7 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -26,13 +26,8 @@ jobs: with: r-version: ${{ matrix.R }} Ncpus: 2 - architecture: 'x86' - - - name: Setup Python - uses: actions/setup-python@v4 - with: - python-version: '3.9' - architecture: 'x86' + architecture: 'x64' + multiarch: false - name: Query dependencies run: | From 7d9faa4880760418afe7c7553532e26bfe4c8578 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 15:01:41 +0000 Subject: [PATCH 25/44] .Rbuildignore updated --- .Rbuildignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.Rbuildignore b/.Rbuildignore index 2029fa5..0c91843 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -7,4 +7,5 @@ ^\.github$ ^doc$ ^Meta$ +^windows/i386/* .lintr \ No newline at end of file From a99924a95e288fb22b33ef40f85894ab5dd6843d Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 15:24:43 +0000 Subject: [PATCH 26/44] Updated the DESCRIPTION and the ignore file --- .Rbuildignore | 3 ++- DESCRIPTION | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index 0c91843..0107785 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -7,5 +7,6 @@ ^\.github$ ^doc$ ^Meta$ -^windows/i386/* +^windows\\i386\* +^i386\.*$ .lintr \ No newline at end of file diff --git a/DESCRIPTION b/DESCRIPTION index 22fd7a9..d81b1ca 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -3,8 +3,8 @@ Type: Package Title: R-Wrapper of Epiabm Version: 0.0.2 Authors@R: c( - person('Anita', 'Applegarth', role = c('aut', 'cre', 'cph'), email = 'anita.applegarth@reub.ox.ac.uk'), - person('Kingsley', 'Oguma', role = 'aut', email = "kemukperuo@gmail.com") + person('Anita', 'Applegarth', role = c('aut', 'cre', 'cph'), email = 'anita.applegarth@reuben.ox.ac.uk'), + person('Kingsley', 'Oguma', role = c('aut', 'cre', 'cph'), email = "kemukperuo@gmail.com") ) Description: Wraps the epiabm Python module in R. License: BSD_3_clause From b18717005a690320eb6e5f526e21206eea8d314b Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 15:29:59 +0000 Subject: [PATCH 27/44] Fixed Description --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index d81b1ca..a84cef2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -4,7 +4,7 @@ Title: R-Wrapper of Epiabm Version: 0.0.2 Authors@R: c( person('Anita', 'Applegarth', role = c('aut', 'cre', 'cph'), email = 'anita.applegarth@reuben.ox.ac.uk'), - person('Kingsley', 'Oguma', role = c('aut', 'cre', 'cph'), email = "kemukperuo@gmail.com") + person('Kingsley', 'Oguma', role = 'aut', email = "kemukperuo@gmail.com") ) Description: Wraps the epiabm Python module in R. License: BSD_3_clause From 89e732693d99ce857d7d08fd441feecd698497ad Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 15:43:05 +0000 Subject: [PATCH 28/44] New attempt to get R working for windows --- .github/workflows/test_windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 79312a7..2087b01 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -56,7 +56,7 @@ jobs: _R_CHECK_CRAN_INCOMING_REMOTE_: false run: | options(crayon.enabled = TRUE) - rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "error", check_dir = "check") + "C:\Program Files\R\R-4.1.0\bin\x64\Rscript.exe" -e "rcmdcheck::rcmdcheck(args = c('--no-manual', '--as-cran'), error_on = 'error', check_dir = 'check')" shell: Rscript {0} - name: Show testthat output From 9e7d85f99ca50ee51555a30b4b2b7420e348deed Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 15:51:15 +0000 Subject: [PATCH 29/44] Updated rcmdcheck with multiarch --- .github/workflows/test_windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 2087b01..0a0d603 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -56,7 +56,7 @@ jobs: _R_CHECK_CRAN_INCOMING_REMOTE_: false run: | options(crayon.enabled = TRUE) - "C:\Program Files\R\R-4.1.0\bin\x64\Rscript.exe" -e "rcmdcheck::rcmdcheck(args = c('--no-manual', '--as-cran'), error_on = 'error', check_dir = 'check')" + rcmdcheck::rcmdcheck(args = c(“--no-manual”, “--as-cran”, “--no-multiarch”), error_on = “error”, check_dir = “check”) shell: Rscript {0} - name: Show testthat output From e350ec630cc7befea4645492df47bd21bba38562 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:00:48 +0000 Subject: [PATCH 30/44] Fixed quotation error in windows yml --- .github/workflows/test_windows.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 0a0d603..96b6746 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -12,6 +12,15 @@ jobs: test: name: tests on Windows with R ${{ matrix.R }} runs-on: windows-latest + env: + R_ARCH: x64 + R_CHECK_SKIP_ARCH_CHECK: true + _R_CHECK_CRAN_INCOMING_REMOTE_: false + _R_CHECK_FORCE_SUGGESTS_: false + _R_CHECK_SYSTEM_CLOCK_: false + NOT_CRAN: true + _R_CHECK_INSTALL_ARCH_: false + R_INSTALL_ARG: --no-multiarch strategy: fail-fast: false matrix: @@ -52,11 +61,9 @@ jobs: shell: Rscript {0} - name: Check - env: - _R_CHECK_CRAN_INCOMING_REMOTE_: false run: | options(crayon.enabled = TRUE) - rcmdcheck::rcmdcheck(args = c(“--no-manual”, “--as-cran”, “--no-multiarch”), error_on = “error”, check_dir = “check”) + rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran", "--no-multiarch"), error_on = "error", check_dir = "check") shell: Rscript {0} - name: Show testthat output From da8deb01b9c354df655c69828f6cab349f543963 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:09:41 +0000 Subject: [PATCH 31/44] Rolled back windows.yml --- .github/workflows/test_windows.yml | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 96b6746..79312a7 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -12,15 +12,6 @@ jobs: test: name: tests on Windows with R ${{ matrix.R }} runs-on: windows-latest - env: - R_ARCH: x64 - R_CHECK_SKIP_ARCH_CHECK: true - _R_CHECK_CRAN_INCOMING_REMOTE_: false - _R_CHECK_FORCE_SUGGESTS_: false - _R_CHECK_SYSTEM_CLOCK_: false - NOT_CRAN: true - _R_CHECK_INSTALL_ARCH_: false - R_INSTALL_ARG: --no-multiarch strategy: fail-fast: false matrix: @@ -61,9 +52,11 @@ jobs: shell: Rscript {0} - name: Check + env: + _R_CHECK_CRAN_INCOMING_REMOTE_: false run: | options(crayon.enabled = TRUE) - rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran", "--no-multiarch"), error_on = "error", check_dir = "check") + rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "error", check_dir = "check") shell: Rscript {0} - name: Show testthat output From 9c61fb8b87d3a58260c799da6a1c35daadd784ef Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 10:42:38 +0000 Subject: [PATCH 32/44] Changed the Cache R packages step to use v2 --- .github/workflows/test_windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 79312a7..bcdf026 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -36,7 +36,7 @@ jobs: shell: Rscript {0} - name: Cache R packages - uses: actions/cache@v2.1.7 + uses: actions/cache@v2 id: cache with: path: | From 220bb75a7c3c5a918aa99b515a4b4abd28ea6068 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 11:26:17 +0000 Subject: [PATCH 33/44] Made "Check" the first step --- .github/workflows/test_windows.yml | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index bcdf026..87ef7f6 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -18,6 +18,19 @@ jobs: R: [ '4.1.0' ] steps: + - name: Check + env: + _R_CHECK_CRAN_INCOMING_REMOTE_: false + run: | + options(crayon.enabled = TRUE) + rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "error", check_dir = "check") + shell: Rscript {0} + with: + r-version: ${{ matrix.R }} + Ncpus: 2 + architecture: 'x64' + multiarch: false + - name: Checkout repository uses: actions/checkout@v2 @@ -36,7 +49,7 @@ jobs: shell: Rscript {0} - name: Cache R packages - uses: actions/cache@v2 + uses: actions/cache@v2.17 id: cache with: path: | @@ -51,13 +64,6 @@ jobs: remotes::install_cran("rcmdcheck") shell: Rscript {0} - - name: Check - env: - _R_CHECK_CRAN_INCOMING_REMOTE_: false - run: | - options(crayon.enabled = TRUE) - rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "error", check_dir = "check") - shell: Rscript {0} - name: Show testthat output if: always() From 13fa3c79880db2c92db2d2fd82e96a5d8592048e Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 11:34:05 +0000 Subject: [PATCH 34/44] Moved the check step back to where it was --- .github/workflows/test_windows.yml | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 87ef7f6..0b0b344 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -18,19 +18,6 @@ jobs: R: [ '4.1.0' ] steps: - - name: Check - env: - _R_CHECK_CRAN_INCOMING_REMOTE_: false - run: | - options(crayon.enabled = TRUE) - rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "error", check_dir = "check") - shell: Rscript {0} - with: - r-version: ${{ matrix.R }} - Ncpus: 2 - architecture: 'x64' - multiarch: false - - name: Checkout repository uses: actions/checkout@v2 @@ -64,6 +51,18 @@ jobs: remotes::install_cran("rcmdcheck") shell: Rscript {0} + - name: Check + env: + _R_CHECK_CRAN_INCOMING_REMOTE_: false + run: | + options(crayon.enabled = TRUE) + rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "error", check_dir = "check") + shell: Rscript {0} + with: + r-version: ${{ matrix.R }} + Ncpus: 2 + architecture: 'x64' + multiarch: false - name: Show testthat output if: always() From 16005b9c485e1526889ef6653d2791af8c71d559 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 11:52:18 +0000 Subject: [PATCH 35/44] Updated macOS github action --- .github/workflows/test_macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_macos.yml b/.github/workflows/test_macos.yml index 7aba11f..15013bf 100644 --- a/.github/workflows/test_macos.yml +++ b/.github/workflows/test_macos.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup R uses: r-lib/actions/setup-r@v2 From aba9a02609c74f50eb494f8f3e468fd4aa3b730a Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 12:06:36 +0000 Subject: [PATCH 36/44] Ensuring that 64 bit architecture is rcmd --- .github/workflows/test_windows.yml | 7 +------ R/zzz.R | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 0b0b344..ca90b3b 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -26,7 +26,7 @@ jobs: with: r-version: ${{ matrix.R }} Ncpus: 2 - architecture: 'x64' + r-arch: 'x64' multiarch: false - name: Query dependencies @@ -58,11 +58,6 @@ jobs: options(crayon.enabled = TRUE) rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "error", check_dir = "check") shell: Rscript {0} - with: - r-version: ${{ matrix.R }} - Ncpus: 2 - architecture: 'x64' - multiarch: false - name: Show testthat output if: always() diff --git a/R/zzz.R b/R/zzz.R index e29a210..bd741c7 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -6,7 +6,7 @@ local <- new.env() #' @param python_version Character. Python version to use (e.g., "3.8") #' @return Logical indicating success #' @keywords internal -create_python_env <- function(env_name = "r-py-env", python_version = "3.9") { +create_python_env <- function(env_name = "r-reticulate", python_version = "3.9") { tryCatch({ # Check if virtualenv package is available if (!reticulate::virtualenv_exists(env_name)) { From 2fbf0c5c9e4e68158658feaf6ef4723710bb5716 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 12:10:00 +0000 Subject: [PATCH 37/44] Fixed the cache version for windows --- .github/workflows/test_windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index ca90b3b..379e450 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -36,7 +36,7 @@ jobs: shell: Rscript {0} - name: Cache R packages - uses: actions/cache@v2.17 + uses: actions/cache@v2.1.7 id: cache with: path: | From 27bf65d41b346f699c951d745de1343cf3f1acf4 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:22:38 +0000 Subject: [PATCH 38/44] Added verification steps for Windows and R --- .github/workflows/test_windows.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 379e450..f6de7ee 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -11,13 +11,21 @@ on: jobs: test: name: tests on Windows with R ${{ matrix.R }} - runs-on: windows-latest + runs-on: windows-latest-64 strategy: fail-fast: false matrix: R: [ '4.1.0' ] steps: + - name: Check Windows architecture + run: | + if (-not [Environment]::Is64BitOperatingSystem) { throw "Not 64-bit Windows" } + Write-Host "OS Architecture: $([Environment]::Is64BitOperatingSystem)" + Write-Host "Process Architecture: $([Environment]::Is64BitProcess)" + systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type" + shell: pwsh + - name: Checkout repository uses: actions/checkout@v2 @@ -29,6 +37,14 @@ jobs: r-arch: 'x64' multiarch: false + - name: Verify R architecture + run: | + Rscript -e "if(R.version$arch != 'x64') stop('R architecture is not 64-bit!')" + Rscript -e "cat('R Architecture:', R.version$arch, '\n')" + Rscript -e "cat('.Machine$sizeof.pointer:', .Machine$sizeof.pointer, '\n')" + Rscript -e "cat('Using R at:', R.home(), '\n')" + shell: cmd + - name: Query dependencies run: | install.packages('remotes') From 598a633622041692faccf6cc230ced51714df54f Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:35:55 +0000 Subject: [PATCH 39/44] Fixing MacOs --- .github/workflows/test_macos.yml | 74 +++++++++++--------------------- 1 file changed, 26 insertions(+), 48 deletions(-) diff --git a/.github/workflows/test_macos.yml b/.github/workflows/test_macos.yml index 15013bf..cd131a3 100644 --- a/.github/workflows/test_macos.yml +++ b/.github/workflows/test_macos.yml @@ -16,6 +16,7 @@ jobs: fail-fast: false matrix: R: ['4.1.0'] + python-version: ['3.10'] # Explicitly define Python version in matrix steps: - name: Checkout repository @@ -30,7 +31,8 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: "3.10" + python-version: ${{ matrix.python-version }} + cache: 'pip' - name: Query dependencies run: | @@ -38,7 +40,7 @@ jobs: saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) shell: Rscript {0} - - name: cache R installed packages + - name: Cache R packages uses: actions/cache@v2 id: cache with: @@ -54,61 +56,38 @@ jobs: remotes::install_cran("rcmdcheck") shell: Rscript {0} - - name: setup r-reticulate venv + - name: Setup Python environment shell: Rscript {0} run: | library(reticulate) - - reticulate::py_run_string(" - import sys - import subprocess - subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'pip']) - ") - # Install required packages - reticulate::py_run_string(" - import sys - import subprocess + # Use the GitHub Actions Python + Sys.setenv(RETICULATE_PYTHON = Sys.which("python")) - # Install basic packages - packages = ['numpy', 'pandas', 'matplotlib'] - for package in packages: - subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', package]) + # Install pip packages + system2("pip", c("install", "--upgrade", "pip")) + system2("pip", c("install", "--upgrade", "numpy", "pandas", "matplotlib")) + system2("pip", c("install", "--upgrade", "git+https://github.com/SABS-R3-Epidemiology/epiabm.git@main#egg=pyEpiabm&subdirectory=pyEpiabm")) - # Install pyEpiabm from GitHub - subprocess.check_call([ - sys.executable, '-m', 'pip', 'install', '--upgrade', - 'git+https://github.com/SABS-R3-Epidemiology/epiabm.git@main#egg=pyEpiabm&subdirectory=pyEpiabm' - ]) - ") + # Verify Python configuration + py_config <- reticulate::py_config() + message("Python configuration:") + message(paste("Python version:", py_config$version)) + message(paste("Python path:", py_config$python)) - env_name <- "r-py-env" - python_version = "3.9" - tryCatch({ - # Check if virtualenv package is available - if (!reticulate::virtualenv_exists(env_name)) { - message(sprintf("Creating new Python virtual environment: %s", env_name)) - - # Create virtual environment with system site packages to help with SSL - reticulate::virtualenv_create( - envname = env_name, - version = python_version, - packages = "pip", - system_site_packages = TRUE - ) - } - - # Activate the environment - reticulate::use_virtualenv(env_name, required = TRUE) - return(TRUE) - }, error = function(e) { - warning(sprintf("Failed to create/activate Python environment: %s", e$message)) - return(FALSE) - }) + # Test imports + reticulate::py_run_string(" + import numpy + import pandas + import matplotlib + import pyEpiabm + print('All required Python packages successfully imported') + ") - name: Check env: _R_CHECK_CRAN_INCOMING_REMOTE_: false + RETICULATE_PYTHON: ${{ env.pythonLocation }}/python run: | options(crayon.enabled = TRUE) rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "error", check_dir = "check") @@ -116,5 +95,4 @@ jobs: - name: Show testthat output if: always() - run: find check -name 'testthat.Rout*' -exec cat '{}' \; || true - shell: bash \ No newline at end of file + run: find check -name 'testthat.Rout*' -exec cat '{}' \; || true \ No newline at end of file From 54dfbba2bd9b21adf6720cedcc606408dad11155 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:42:38 +0000 Subject: [PATCH 40/44] MacOS yml changed to look like Ubuntu --- .github/workflows/test_macos.yml | 51 +++++++----------------------- .github/workflows/test_windows.yml | 2 +- 2 files changed, 12 insertions(+), 41 deletions(-) diff --git a/.github/workflows/test_macos.yml b/.github/workflows/test_macos.yml index cd131a3..c9b93cd 100644 --- a/.github/workflows/test_macos.yml +++ b/.github/workflows/test_macos.yml @@ -9,30 +9,29 @@ on: - '**' jobs: + test: name: tests on macOS with R ${{ matrix.R }} runs-on: macos-latest strategy: fail-fast: false matrix: - R: ['4.1.0'] - python-version: ['3.10'] # Explicitly define Python version in matrix + R: [ '4.1.0' ] steps: + - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v2 + + - name: Install build dependencies + run: | + brew install curl - name: Setup R uses: r-lib/actions/setup-r@v2 with: r-version: ${{ matrix.R }} Ncpus: 2 - - - name: Setup Python - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' - name: Query dependencies run: | @@ -40,7 +39,7 @@ jobs: saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) shell: Rscript {0} - - name: Cache R packages + - name: cache R installed packages uses: actions/cache@v2 id: cache with: @@ -56,38 +55,9 @@ jobs: remotes::install_cran("rcmdcheck") shell: Rscript {0} - - name: Setup Python environment - shell: Rscript {0} - run: | - library(reticulate) - - # Use the GitHub Actions Python - Sys.setenv(RETICULATE_PYTHON = Sys.which("python")) - - # Install pip packages - system2("pip", c("install", "--upgrade", "pip")) - system2("pip", c("install", "--upgrade", "numpy", "pandas", "matplotlib")) - system2("pip", c("install", "--upgrade", "git+https://github.com/SABS-R3-Epidemiology/epiabm.git@main#egg=pyEpiabm&subdirectory=pyEpiabm")) - - # Verify Python configuration - py_config <- reticulate::py_config() - message("Python configuration:") - message(paste("Python version:", py_config$version)) - message(paste("Python path:", py_config$python)) - - # Test imports - reticulate::py_run_string(" - import numpy - import pandas - import matplotlib - import pyEpiabm - print('All required Python packages successfully imported') - ") - - name: Check env: _R_CHECK_CRAN_INCOMING_REMOTE_: false - RETICULATE_PYTHON: ${{ env.pythonLocation }}/python run: | options(crayon.enabled = TRUE) rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "error", check_dir = "check") @@ -95,4 +65,5 @@ jobs: - name: Show testthat output if: always() - run: find check -name 'testthat.Rout*' -exec cat '{}' \; || true \ No newline at end of file + run: find check -name 'testthat.Rout*' -exec cat '{}' \; || true + shell: bash \ No newline at end of file diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index f6de7ee..9ee9372 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -11,7 +11,7 @@ on: jobs: test: name: tests on Windows with R ${{ matrix.R }} - runs-on: windows-latest-64 + runs-on: windows-latest strategy: fail-fast: false matrix: From d4ef53f96e54bb7700a312045c6ece25fcfad765 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:57:13 +0000 Subject: [PATCH 41/44] Used reticulate to install python 3.9 --- .github/workflows/test_macos.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test_macos.yml b/.github/workflows/test_macos.yml index c9b93cd..e094455 100644 --- a/.github/workflows/test_macos.yml +++ b/.github/workflows/test_macos.yml @@ -53,6 +53,7 @@ jobs: install.packages(c("devtools")) remotes::install_deps(dependencies = TRUE) remotes::install_cran("rcmdcheck") + reticulate::install_python(version = 3.9) shell: Rscript {0} - name: Check From 59b1ec5e2e418daacfcb23a118808a3146010e39 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 15:14:02 +0000 Subject: [PATCH 42/44] Changed pkgdown python to 3.9 --- .github/workflows/pkgdown.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 74288a3..63d525f 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -34,7 +34,7 @@ jobs: - uses: actions/setup-python@v2 with: - python-version: '3.10' + python-version: '3.9' - name: Setup r-reticulate env run: reticulate::virtualenv_create("r-reticulate", Sys.which("python")) From 0c21d71c18f7fd8a22777bc7a9a87f6f31b91995 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 15:33:17 +0000 Subject: [PATCH 43/44] Fixed syntax error with installing python --- .github/workflows/test_macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_macos.yml b/.github/workflows/test_macos.yml index e094455..3816760 100644 --- a/.github/workflows/test_macos.yml +++ b/.github/workflows/test_macos.yml @@ -53,7 +53,7 @@ jobs: install.packages(c("devtools")) remotes::install_deps(dependencies = TRUE) remotes::install_cran("rcmdcheck") - reticulate::install_python(version = 3.9) + reticulate::install_python(version = "3.9:latest") shell: Rscript {0} - name: Check From b514f21cce2bde32ba935a047e770dd4a18687c3 Mon Sep 17 00:00:00 2001 From: Kemuk <55699179+Kemuk@users.noreply.github.com> Date: Mon, 13 Jan 2025 16:05:13 +0000 Subject: [PATCH 44/44] Forcing windows to stick to 64 bit --- .github/workflows/test_windows.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 9ee9372..c2ad3d6 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -35,7 +35,6 @@ jobs: r-version: ${{ matrix.R }} Ncpus: 2 r-arch: 'x64' - multiarch: false - name: Verify R architecture run: | @@ -72,7 +71,7 @@ jobs: _R_CHECK_CRAN_INCOMING_REMOTE_: false run: | options(crayon.enabled = TRUE) - rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "error", check_dir = "check") + rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran" ,'--no-multiarch'), error_on = "error", check_dir = "check") shell: Rscript {0} - name: Show testthat output