From 0c130269ea3019db666b50364546621a648d5be2 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 15:29:27 +0200 Subject: [PATCH 01/37] Update environment.yml and setup.cfg to latest version of sphinx --- environment.yml | 5 ++--- setup.cfg | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/environment.yml b/environment.yml index e2d90f14896..a45df14902b 100644 --- a/environment.yml +++ b/environment.yml @@ -9,7 +9,7 @@ dependencies: - astropy=5 - black - bokeh=2 - - nbsphinx >=0.8.12,<0.9 + - nbsphinx - cython - graphviz - h5py @@ -34,7 +34,7 @@ dependencies: - scikit-learn - scipy - setuptools - - sphinx=3.5 + - sphinx - sphinx-automodapi - sphinx_rtd_theme - tomli @@ -47,5 +47,4 @@ dependencies: - zlib - zstandard - eventio>=1.9.1 - - jinja2=3.0 # for sphinx 3.5, remove when updating to 4.x - ffmpeg # for making movies in the documentation diff --git a/setup.cfg b/setup.cfg index 8085914b2d9..303997ce672 100644 --- a/setup.cfg +++ b/setup.cfg @@ -56,11 +56,10 @@ tests = docs = - sphinx ~=3.5 - jinja2 ~=3.0.2 # for sphinx 3.5, remove when upgrading sphinx + sphinx sphinx_rtd_theme sphinx_automodapi - nbsphinx ~=0.8.12 + nbsphinx numpydoc jupyter notebook From 501f2a9218982ee2f922337f9cc3873047cb9e16 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 15:31:02 +0200 Subject: [PATCH 02/37] Moved docs/_static/theme_overrides.css to docs/_static/ctapipe.css --- docs/_static/ctapipe.css | 47 ++++++++++++++++++++++++++++++++ docs/_static/theme_overrides.css | 13 --------- 2 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 docs/_static/ctapipe.css delete mode 100644 docs/_static/theme_overrides.css diff --git a/docs/_static/ctapipe.css b/docs/_static/ctapipe.css new file mode 100644 index 00000000000..243e4af60cd --- /dev/null +++ b/docs/_static/ctapipe.css @@ -0,0 +1,47 @@ +/* override table width restrictions */ +@media screen and (min-width: 767px) { + + .wy-table-responsive table td { + /* !important prevents the common CSS stylesheets from overriding + this as on RTD they are loaded after this stylesheet */ + white-space: normal !important; + } + + .wy-table-responsive { + overflow: visible !important; + } +} + +/* sphinx-design */ +.sd-card { + border-radius: 5px; + padding: 30px 10px 20px 10px; + margin: 10px 0px; +} + +.sd-card .sd-card-header .sd-card-text { + margin: 0px; +} + +.sd-card .sd-card-header { + border: none; + text-align: center; + font-size: var(--pst-font-size-h4); + font-weight: bold; + padding: 0.5rem 0rem 0.5rem 0rem; +} + +.sd-card .sd-card-footer { + border: none; +} + +.sd-card .sd-card-footer .sd-card-text { + max-width: 220px; + margin-left: auto; + margin-right: auto; +} + +html[data-theme="dark"] .sd-shadow-sm { + --sd-color-shadow: #6e6e6e; +} + diff --git a/docs/_static/theme_overrides.css b/docs/_static/theme_overrides.css deleted file mode 100644 index 63ee6cc74ce..00000000000 --- a/docs/_static/theme_overrides.css +++ /dev/null @@ -1,13 +0,0 @@ -/* override table width restrictions */ -@media screen and (min-width: 767px) { - - .wy-table-responsive table td { - /* !important prevents the common CSS stylesheets from overriding - this as on RTD they are loaded after this stylesheet */ - white-space: normal !important; - } - - .wy-table-responsive { - overflow: visible !important; - } -} From 135df800ae5a7701d2002b3ab5101b3c86759125 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 15:33:22 +0200 Subject: [PATCH 03/37] Added logos dark/light --- docs/ctapipe_logo.webp | Bin 0 -> 108648 bytes docs/ctapipe_logo_dark.webp | Bin 0 -> 99660 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/ctapipe_logo.webp create mode 100644 docs/ctapipe_logo_dark.webp diff --git a/docs/ctapipe_logo.webp b/docs/ctapipe_logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..bde5a0c7d4f69dc9ae46a2ba887e4b03f569b524 GIT binary patch literal 108648 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 z z#;JZ!S(j&7(BgK=gHAavf;#&h0wq7#Q3Xu6xGr`ursLAgd=STtbVLF=yLa>g8A7G{ z!EY~v;mw!6vD3e;hEu~vl4+$2N#8hRa^RkEpMwn^jMuWM9*;zyp52f25^NO2{aF zDD|5^@5$cR>1!+50p%j|BSPgZ=AB%+ zM_tzGWE`l0cuwfwMb_G+EnNKYw?kqrh~U$}(u57Osdxk-ur7j}@AL{G2+N|5GvR-r zq=g~QbrcT%fn4LVh2hzbq}%J8qL<{}M=`~>C34UFZapt=#8DuR6aG)sFWkPi>5I{! z;(LQAG1H(VD#TFqD)%vvgVMfX8yT+8p<3HN)pk1Wunn9W|8xPcuFQkL$vL+kVbyY?iX#J;M;4 zLJ3Id1SZxQWgL-_@j`qzDv3!3a@8~C8vtJd8IbX~Lx0c3lE~JtXwdZuO0r~vgO?gx zn@HyQ5Haag5%sJSeqbRHO$Q8wcSZIY2kk+~cIC-v-UUv?Qoj*_N3>NZ6Hf4<=&i+3 z=gsus&whtNnXcZhk_PVK3HIEJ#x{Rr7?LU}LwQPtaWE@Vni`7)lgKsE7dzizSQhia z3J<)O*@FO7wx6yv>?y%jglV$!X$5g^2bm}$zNH8Nj*b44vlPUES(DfZj)ghNSkV1Z z#KqO2_!Hgx>6o;@GfhiGS24EXP+k8ZDqx13PQO1mH&^m>Wc<-JnB?ELW>DzKhT$y zKZExPvAi13b3v z_E|l;jMhBiD1pR+08A~P&IA4N4mQYq4&zjTlTLfE&`+pfm8irCuC;w^W8URhZy^}K zfFvqmGvJzmJ-HFA^=sV%@Xo(oUa%66921nKIe(3LJZDHrqI16PI3EXaN{Eiu@kZj_ zB!$hrGFW?Zr%!ju$rM)Hl-bgX`BXAtaEbkhNkjjmCo-PCYPJjx$j@Y|XirOqV|sWE z+w}@@URh0Wm9Vk5K?G{@+;y|VP9;b_xIY!^)LG0lh`evA;GtTCsMBL!}X=c0wflc~IyQv#)2`KmAWRD_NGJ;dp zLMg#0C3eY2DoV!W5y!kgv7ky=^LbkiQPzXW2L()7V)62q7|p>9?r9F!$#663OH^@Y z5oFp>RPEGfF3?pR_@IA(Mh6(3;=!g?W=VAbS>p^=qe`&B8#_D_bZ%AyCa4+bW`+r0 zW%Q)chiY*m8T}SDFtwgk3Gzlxl1?!s$?&$}l{ZN|@ z7G`n(Tgc##F6&#)WH~T=z9Nm_1ofU+ikb=eR&Z^fqMRO(b#;@t8N;wC2HYFf!q5p$$>*-V%w?2k6W0rVt2cEA0MQ=#5HhXw6E^A5P=AIS9s{RV^c!3 z9YWOT@B#wYfip3>MMP*lVGG;cIVJ)e8F{+P(*rzT!sy%C4yi^$RFrOn|Amos{Ri6L z!>~{-8qZY=w!3LK#Ln;pKl{@I2HI`+ccd}~*XZVgF5-1$d;s?@eY)yW+=m;N5sKiv z-N5#JhtrpN$3+p{zeMw@Mt5PH9VX19AZAA)Fkp>Rbfab;aCoKrvo0E-Dc+eVrGtrnzo^Dr%)W@VnbLK zyD0ce)+wNqOjpV?yGu3W%Twq`Gy1=p@c?0SeM>MC0do`Va-g*uxD>JxMANS^bwT90 zWE17uPTv|?t5eYwL}jgZWIM^lZ3kmkw)>KT;a+yIFJJ|gLYV_xW@eGg?M5TPKY*r5 zz$Eg*%;ig#n=9+T7%!wKxl1#;nFn+lukF_`xgI9a8U!x#T}t^$q*0s)zq|(U1`T#` zT^HbS-a7YDqIG@SFQEeXBBpXM6z&M1CRoM}(>Yf3xVRxqdcX)3?c{y-I5t067L{t? ziF*4SAq869#xCewK=T;Az4r(dcUT{n}}Tk$$s_ zTLV!`c-X%XpxxZb)MR~u1FUgyP-tvp%XIGiH^k5UWvLPqx9H}nQA;{;@0^A&5R#G+ z*92+a{igW0`X01MAoM_v0MIGXbnQ)61s|B{n#ec@rx4{0EQ0>WFmXH%DuJeBUb@Kt zFN2O-KTK8SAT8ZpN_Te%NJ~pfOLuptbV+x&l;8V( z|FBrYtl`bQ_nmjnKKtwqux?gt`}pv1d38GX26t>7ch(i^iaafceil~cj}nI)I>ggm zNw8|h+SrR@P-IVA?Pr2;oh(kd2Br3m5Tzq~KFB0Y(X_^ee@yRy4?nI0MPDL)c#B0k*7X*D)K^^o2C1s1!|50KY!)n39Mu1Y z6NG~XSf%U5Qx?g3y%z;L0Ke_sGrDrBoAaoe z3pqCNS(W!U@W5PRc&-`!y}4MGFE@c+pN6TP1hXQ0e$3k}vlRc!p*n^MDEYF-eSa8E zw8itT?Xdht{R?r1X^h{WY9eremM8d8w`uFA1E=A0o=v@9aCF8aR9~ zy2A$9b(or0GpDrI>T80Uvw+6$zR222FSiDyNb28P4NEa_f=%mtm#z<|W0ANpJg_kU@I*yZek0ab+C6B}!mf9ghuBDB<}9t(+)PUoNAO># z>NQ#4?x8|?g3jnP$QPNAb8Si6NWBOYL6c+ezrPE$)O5W(zh-^iGoBJaCPjMBQQ?5S zM&y!7sO>j{2O2MPGDqo&3_#5|26t|XsZslj3Cs)~f2%ZkVr0_5YZC}S#?Xw;64y`y z3edH!{g&d%m4+;V)o0PXE2_CQ(B|+%!4;wQJZ;(GYgq^d@USb$;u(%D9%cVFXkT_F zqQ&2!>B?5&B?B29F-mN!jG>s;eVcuM-L|eUrRJH=^>1pDy)(l;c(yi+vJ=iOgYkCk zaBgUIar40QhA(IjfA=5ly7Vlvz&|biA2VQ>?YQcWvMH+$PXR8?fx?D9@>p2rglvDu zbp1l~9WHgoAAf1$!M?l%YNX-#f=`$7De3?t+A~ezXQbr+_!5vf{da@RdLxL(#u!Eu zTRIvtPytQ#gzJWo{_}Oe@ZizlM%FJUA_A>$yIFrx*<;>Hm{hIBR*!h&Nqi{&?Ho3&n(4TYQF~czA1G7jJhAGvyCYtV41(KlVc1UVz zCO}7@!CaJ3;zS)3ABLJniY)_FDu(TrUA1Kc06ovkDO0kdt9Q*k^(%~s$vip+#AEs5 z(~*U6@ltCFH23xz%2UT-+?U9Gk?mI47-|Rrs9WO&PCghB!$AlUfwA8W$Le)8;60hc zZ}ZfffIYI?81xrypeLW8UyX;T-xUMsicZ{k$Xv3IK@8q>*chM;=wnRNp_-Y;SpH}sdESl0o1;COjZEEyL)lv=krJIUW`f29+64GTga`4eV$$NKRQeHG zXf{~j_m8FJ0s^&2B>ue<_W)ko`5)?^X3ywk>3eKUz96`v;J&Ye-Ozja6s=Ib zemFe1{;M-o+_dS^>T_o@jB=M=O*IZ5@vxbg5j&&mGPeRgNBb{R3XkUI^4e2ybab9B zcD6mf#m*G3Mg=pwH_*bt&vg6GMEe%eSqqV#aO;>3wv#_AVc{P30v8}QfDKSStA+}0Qa%m0p(PgtrcRN?B^eiY6jLr-Q#28Uy- zlSWqw;B)b4-4;v+uEkB?mDjU>KXctfHg-4v65Y=iEY)i8jhz_jCs3vK2L}7Q!O0#8 z;+C6b-wO+EQ9bIsh>A-NQWQ=OnJv1+HGIIC_;pURxN|NN^}p3o@jRM+xPHYOom_iR z%W4iM3QoI=H>wf@C6o&oW8)-YA*1m0*oc6*bPuh;QFF=uZakh6Z7w=eeojQ2$QAeG zC=CZ1b$#|b&#sSBerG^eR2O9xL%TAC6hT$udOU#^2y#J*KVmdAA0ljFUddeEA@m~{ z(*TmEwND^*gTq})S~LQ&OeTjS$=TsMU_`^ZL_VaqN?^D`JsQ1} zM4JI1W5;xqOg)}okCQ0CoI(POBC0GZm-ovW>dDw6i@Oq6Qxo14%SOH$L{suG zAM9Mi^h70yttSbABMMzv$;;jbwg})snUne*u9-<(F$+YT)VC0Py_^jSS{e!&1lJiD zmmi4{Tw#{oq`i?C4)Rrl#C5!V?ow9$CRaM=Hg3OW85`UM+jT&=T#W#15Xc&FHm8P& z8^crMqxMQOLTP1quo3_^Me-!j%}4?kSF0-e1PxADw&extn)5g62yIOkUsHw_z>TZ| z69_&WapWv`dK`0nVtAp1kbuK(ulG1j*V!3NYgvUVo#vRjSrn3P^<4txHeZ&FoHXu! z9<{g9l1LtD&aeoZ*qD^n?zuyd46@ma_0v%g$|DD~YA zoW(0a<=@tj->?q$Z6()ohu^vB)sqREx%AvvezlLsmMtZS-%*B zi60{`Z})u!;AS*K94oe&FrarKbF51mFb6uen)4QRU-80PQd<9OIv@+H*d41|mLdl_ zNHS#(J;dTvewFzcsV>2YjjgN~T47l^B2x`hutkDHT#V|M25MD%Zt3Pm3}qt(25Qp2 zPkR6(hs_rdCh{;h8R}A^kfd6z5|5Xer_iRgF|x{~lBGhC0p#LY&0yvhAPCr1;sA;a zSG)wZ0zAYHHu1sJC{}2`V1EFv6Ip@;K?pW3Q=;-dXCdS=BxZFBYI{F*L*tAseu*DR z+jv8gD+(;Vr7anXrF!ZqHcZS6qQ%$VH7nX6dOFd@0HcsIQsf+sI)go?_gw(qJ9EW% z`+bA>MIhd8L-~)bq#pE$S7~CVHBCkGrVSyqpw2=BA7#ADMn%wwAa#9}c7iFGi&%pl z210O6ci_E_$>DIC~JHzyRPyHgBMF?z&zR67Yv;7F^ z>jv}k3v@(kdts0*Mwp;W&PwO+rpQF|fo_^}NqdRAhLnnD$PtP|JlsIscTwAiJv}o4 zcP;5ObY9!?PW)1`>V63R$Z`KNlO?;|z85^PMzgrMLm_2m^PKW0Fr z(TN1Dr4QrI4X4Iu@=F_98lu2LrdqHw1}g~hgIr^Ewsw=y?~MqBoNW?V1nnumnF(Z3 zmvCxuYiL|J63h#lqG&-Binnfy1r3+@j=yacto1`2T$wmg1Ik6l(J~iJK1HbO_T0%R z;)Y2pUL)0uX;|V-Is4h@#>6<{i93;=R`E}^j?Myd5J+p zls3@R@`tkdU~zICV-W%gTiq-t1IoumFm^&X(_Wu{LgB;@UTJsOBb%jt@@64iRd@ki zu|ZDbER`O6I?flSPWM=m8)CrIBS-P`Uw)tqb>BgLo59_jLv)LPrH^|#GuM%+DD!WR zbmwR8j^m%6U<0WkXR%ZqGX42n$?rOX0pV8hhJwv3Pjx;KUZjd*HnnB@sp6Ms^M3)Vcng^Z83s_cMI&^q4kJD*YZS>3HI_ zNPM>gDT;J$-QIq-*qRZ&6g9J;PF0gfrkw0I?SC(pl*l~YS7}Oa2umsYr-Q}9ZJ$}5SO(1 z#NFObH;1X7EZ`=EONtGGlQj5X$N@Yg;n7$$cw8|cQ-Pd;oU-0NU-iw}L{NE*yhiN$ z<>C0T+ITK-C&%GrY2TjH^od>>Ts@ZkBPqH2(2w_x_6Td$`yZ%p%r%>=dY+uOYpL~- z>pOM*RU9=H%P5hsTeyF+CSw$h8NwV+eI$$EcP7Q(d=9t$t(>1> z#UplM;HGP>j8}C&^A-=bZ4m){J<9@06VD+W{kHdcBsvq~^wz>80UySVl=ubt3}gY% z(sg+Y%j>{>3*k`}hmzuo&1M^WK{-%wt(!rFjN#IX>t}ZPd;>UNV)4_bJgVQmiYf4Cpw>IZjDoD0*7hnsOn^Jwx5ci;UDN|y}5 zP6w?feN@r$13T&;2Zn|ty*Ys)go!~#Hp#3m2$+;^6}uAOAQ|}M|NS*5A_wlm7Dniv zB(06CGCevQCBk^gdnufWX3=r#{9)Q%MU#A9|HfW=a+2H3r4@+aq>hbuhK!CM7tGXg z;o4t}9%dl$y?wNTDD1^(U-o~=+ix_(i)&dsWBP`gjXpeEuEUJb_KJ;VVM=K3GFk%% z=avke3EZcVBfUzdpU;E1k0^A_b#qVVy&i$sQPbQLcJNSF;vr$`M<#7}AjNy(?0_Kf zeeHdM?)j@wfW*Pujyt>9T>-g@3BA7$`v_L)3nQ-IAMbwMRlkQYC*pN?hVh<#Y5#}z z92IZV#xehpEwQ_JNA^!Ks~ya^GB+F6_&X}5p1~1zO5)A_N$^=Nqqupm^zS~Yod^aH zao?W3dq9Zx;DpOqniaKef4CA`%1gSZ79wU2W@`9g{T!KQ#C86u9XG%v(PeXX4WwM` zw$(YO76wF*)$(z9>4qJsFTvt?KL)Gi4`f)!8@0uWkEq!B`*LseAT!9jU`ic9;qb-! zf`gLXAij0T)MY{U5MyBQwPh)7w4sWNeQyg2yo;``{f&v48HmJN^xB5v4vgN&Btw6o*Stphwcwmml{n)ptR+M-g zWG-~orW2h{C8!MC&3aI;SP5K2*pYi+x$`rGO2r{2dG9o{cAw8V(Lvw(Me2sW|>&%DHO)u=T= z9X5Cqe!i-e1G%W^`H(b#@Dra@CCU`A+NQDA%G45P3ZW!v?ihUY1KcR9PyX|J(_g_8 zb`^v1x0?wTg>!b9(B0|3UVOy(0SDRQu-!F__B~6f@7^`TtL@18fA94%E~Ks`AhVmk z+H9f5k`%xMq->Yn4VL%OV5;`N1B40lsj1OArb5JwV4`6}{YL-S7aRbh?X_f5hciz+ zWR=l{d;73omUSB;@A;YF>r3}-9RP6`4=`+ z&#vqynbMU?iAw|+@WhN4q0tnDqQW6lQLcCuh-!e>gicT);`E_W1BjE6^W0y4WdG?E zRG-i&n3K@+ex{>_&YHsWXeob3=AXE5?IN|?+I#q%2zUUB6WLA;WDb&b>0UXS8v(F=t@GL2<194F$oAN?fYKl@WXJI8?RPS6sNF_g!)+ zE<3kR)99}VSm*n}xU8kiBC#v)OF z1^DRUfrPoiZ&sm}*8{G-{5zJ zCU919f;!1C=nrxXAYN+a5 zxyntR;y7#)-%(#)0(sE@GbX7uiVs{sPaYY|CeTKjm+VYgHxyRa+BSO2wib9sd&n4Z zqsfDn&f@Y$3KFf{R~82kfg1Q!>SmpAe)7 zt!;vhp-vk0CRs~(+4WVe1(S$JHl{0o;DC)0aqYEQ5#JFJ%Ic{@b*2AA(1DHYwdy4i z@UtA8{!tC=CttAeny-VeU$l)C;`yh8+S#L~2rmlX;g0`aBTJmSi&IyXOVROW^+mcPyX z5@jBLO;0RUi`KlVrsbh8X){q#;1XP@aysGygA%EkJ`7 zTacC?pgr98Y!%03M=W=}fxiW*_WL)H&9Le`c$%!P8&9{28%M1sFG91Jd3FC{^MNbA z60Z{k=xfUA)S0k*Ch>Z`N+T62V1NgW2hu25A2w`Qs4L_v{Ko1&X_SKaa(pe6;R1HF z5fzj-rDsTs*rA0QQMLM|X;VSR>g*443Ir-P2T;+hvx zj8|b`xv7Qz2zYNPzjF}9or#Pl8#(beL&pHF>rQTE^YgSx(yAC-msHGwK&3%xW^3>K zh}13+Kt);NoVzo!c_z?V#Ves#a+r4xt`(|ShYj;B`ZN#A=d@M8NSA3?=&Wy3V&vr(y z4P|%6WfH#@?fs=7X>yDVl`-XKI?CI?52@)FoY2?G$gcHWg^az2#6UHzyCfo#&G1$zDK{yp@hKJl_6&PwCTDfVB zzd*n(WrT438H^&}H@^!BM%)M!Y}I~?EP-3aJd{lhX0dn-;aPNU39}1WJXZ=nZF%?n znFjVOi`;R7uxWK{ze<@o)(M;4*?gN2A&sc6{)$?Fi<9jjYu`#xV3X8PJWe0w+K+Xu zCV83MBm;|%6yD%;erd=DhN8bccDQ@i+N)4NW)5986)D0i3B_O=I zX^Va!vk+4J{jN1!k8Q*T6X?<}eY+LK-i7K0OwbQfw2pe#0O;+R%&$R`yt2XVGi2CUE44O*VC5~4Oyie6r@TTBMoMb3* z;!+-%rxFsjDcHhhqSb{h!vU1$vz*N_Ia7G zcM%L*uDbJ0$`i4NAoNM|8HqA5+KEnx45N&M+1l1~@bX*sQ4(mt)VA^#bwBb6=iQ76ABU-9i}_=9B zrjm31o_8WHkIX>f`y&XPw3 zGOTqANje4DTsAzp#M&sZ+UO_qpi1MqWKlR@Bpovsk=1)5vzCGOb$gp2Abgu@SZj?j z388-ueaeu)r`L-58~s8=KmK95c>*cDMqH3L>sd!q&s& zT`&j$&9?yv>$RNb#42b{iF*G_*4&9*Pf+#rV<^qI6gqq^7+BDRKbF&yAcWp+5x$Eo zm))2QR{pf)Y+-~4XhRcaCvJ9{@tpFizV`()ZZY60f5g`cf%Bj<@HWI7O?IjRzjz!< zn}!W%*QyytBDk^vL^``fKki5DU!uxMb_V4KT%u!l;CZ|OWAJ5&VWft(>)Q3KPXU&c;t15dY~ zy+oq+;rvD7^+Lsf)77Rok?4|2c}HDpq(E25K{R4Ewp?Qs0IOMB-viCm?%T;@J6+-M z4KL3>IanUMP<^KXJ~=?5v2EXJ$AyS!8e^;NW4F}U*Y$^;1;GxmB_ur1rPYSI)R({g zvxf3ku|VGbSB8!rCw7rW9&pxQ zf|sw6&)!NpE_+P7N-=*fXZ5)_M5s8-CDHn$zKqZqf?skSO$F{&!~t!sq#!CbQfZIh zd#ZDU*1+<_q)g&3Gj{kkijmlSEh|x)9GnReF+kI@3#dP~EYt=x$=ECQ6qkrE;5;2Df&0RPA=M@HK9xGvA zmhG(Y<$PuP=~+M7EOqLNK&^|zk-Xt6DPgMKb%`&7-#+39D=S-Vit{JtoZugAp0AN zJnjAXv)w3Gyqvq2JaFh`XJAy=hf1af&nnF%fh{v$RU}uv4L7ik;zPBOz8^tl&Qc#i zP`~|xdwG2^V$O0zR^qiejo|rVi?dG~?6rW<@#>J%{g#nW_%*tZ3IwmOICvm7QYb<+^k9#p;|SbDKtxlw z(*vIRGPwtOmi-3_7Xl7dnawFtaDtY7oOgeRpk8LFdRmg78*%Fu^#l!I7^l-%LX6Be zis*JEqQD7TNQTwn1GsI#Dl6#?IophY%%YG>CTqe=(U)a|B_!|Tsk8&QjC_=jvs{d3Mb#EM!-31AXbE@||BypvsH8zxjMIsEfu`Nw0P%gzAP}oEV zPdx0ioVUwM7sr}aYB=>-eFQN*Mxz%IE^XK=<9&>z|C3L>GdGK#lJhVo@2^cgZL+Kd zz==aqbmrriLP6}wYEM4Z!I=C;;?J4L!uo+?5yU?8@~pm8cBwMO!J%KGSHGv}tJ$fh zyCbU6H7@*aXWa67r7EDNLZ(B}NNK3n;{5fxmA!K*v2v&Cogcm3emRE5WpkByJ*jX^ z7;tRk-S|5h!9@{zqvKA>yzZt2&FOzUQQBpQh={Ww*#+j6#O(U$Fk$NnqJ; z@Af*J?@boVt4o*H60X72=zoKNNyn~5i=VgwE@U>A1aRafe(^8rRdes;ESMUnk~TMHOzIF*eesSb)F z*66OKw7#Gp&XF1V%{~67lbYMi?F_2-t!%x$&N!);C{#tsFv=r_7v~{ej9}goDI>=p zuuR?k#`LSb1MCm}teyB}2;&e^L!d5BzXf6CM~nJMc`n5u%@)wUb}(BU57dxy3sq`s zT*X#-R4;4Cdl1)jwNXd;)@?6cd?0=A{@gL$sZbR%W&Be}tIM)oc#Q7Y%G*vHsF7_` zzxk=bN)f|}oM-J+ckux-ExcVZ#{&3Y$u}1B3A);=@3DfxFj@or_$S5QzV!@`)gzqkd$4RWJWuZF@3v zECnAI&}8gf^BGRJ2?z-@4X#bD^xyoL5Xsd$U)_sl=zj;T)rZt1CnLgLQaC<2hf{M) zuVh#~txL>T|Ab)$=TfkvX&_oZOqesK9KUXZh1+Yg-%oW{80go!Kwd2ZaV`^zKl^;0 zAu)7wq0=KbwlQ8)4$(bav)yGH4v3#KYU^OJ-SRKiaYvA$a-vU0wDAsc9t3OPpcwFo z^`^z|RS*{Br!aXR*RugUk^HB^2rKo0Z#n>6PT*s9$HAkP?WBaVya`uw(PQ%tSf`yh}lOlB(fkhlTHD?n!G=U-E=I-Q2Ny|r0ma!>H7Ypaf$12APuS-m+)e&xmUotFL)28Cc{6j{b7FN!xd)1;OSKMZws+ZD{^GTLGN#is~xf#`)#%PV7p?P(B01!u zqF?9#kbn5C$;1`2oh*ov>t|Jhj=@A47#^SuEf3FQ2K=C|?MevQ+6f=m+hYJdWI91` zm_85J=g^j)mdn1nF@B9i;#y&@3}?vC+2U>x>uq-Nb}?=?On}5p>r8P4pQ4#O-mcM4 zJ715#Gc&IQ+5ym2aS_Aj!&?W#r3%on?T=%&|6|zX%bMm8pEh|NXGwLKBKsYnwUFMZ z%7mf&J{^5O@5#fsUQ`-+9F1Gv{|=r;(EX`IGut~78&GyW5C8Y@O#o@4FMJ<#ue$fA zox@*wCI9X2>0k3>_rG(Mkni3R*K`>|8`==(d{n=g{Q*)FS#uU~I;^aOB>nBpQ3y9i z(dI)l%2K4yGcl-!DoS!lwy)|mn{5kkf<{ADDexb91F4u?)oznScDx=#15syo`%4@< zrLgK55&^KE3eD*|>({r)8;eQV+Fqac+6~>u#FnYGkSyoMB}}ec%GT|09{5k!!~B!B z_A25=uxKZB$VTgn)iP;fhP?NE4h#>*?!5mXrF+OWkLo@lh=h4P*{>NCQIsX1 z_y+W}x|#ou%byKk(>r1!MbUV@qQmjfiwaFJN-@~`4rO@)Up3$5Y1aA08)rr9a1n3E z`L4}z_>Qi=M((^OZ{!3g4^+&xf=l2d&AmtCSA#pUq(-m==A=VqX`-Eo4yUtJK)s+5 zQ95>nSH9OY_{KPBF>c%C%x5psv3pI`B{OqJvL}sH1tgYa5@y-@X%kSrUG+}BqswPG z_Yjwjp*GVlI`EBy>i%y`$)F4-hU51!f%sp$cgtsdW=!6UV}1Q_YUJ+k@D6i=sGc6{ zSYQ@C{i3CTc4<%usSoop(7J*U&%|Yez+eMoeZ#!$SPTD{A5pGt5tDnK6+YQ0w_f&8 zAGPNuX{RT~s6r44xR|GrPVlN}R;Nz*Kw@v0e%G_3hvghQY?D!dI42>j1l#EbT`aUB7gpTxK!w4=N%G<6~v=g2Qd*pn&&a~zQ zuI)BQdc#4SJC!G^QBy9O_s|8=F=nUdm9{i^xO^X_aBp{Fm6Q?hKb(gzHAa^#84(Em z!>_~9#}D?Hj73VKMQ8x2!FVrUHa-$gF(n!cdbs3V$Ufe?*MtNiH?0e$F_JI%j~j16 z4~F-*A>|Scl&Q-XQGLTOK%A%mp;Nn}x$)%6Zqt0T@Eb?V|0YtovC#Reo!YK)weYaU_EeE2+BiPOW#eo?D= zs)dIn`!xszb1kd1OJD>78)_Op@x@5-5DyNl)^8x{JC{3DSPmxtcoMfye z;|vtZ1!oqjg}pM%vHcNC!5^)AWSX_qH!i;tizv$ybV?W$6Yh(8i_vJe83B=pjm>PpSZb7xizAwCs@+gizn2y7Qz`MQaE~!1hbw+T7=>F|v_%VsIVUNJCC^q?bVaxO}v{PmM*a`cww^Y}}!4|8`a=40ck6kcBlcuIZP`5~lSr6$Z~) zg+XB>Gf8;OV&zZ?3=Hgu3#}p&O7IK07@rVo+R2WcEM9V!`|!ZhlP>b8cvnZ)7#wxO zLG4W9#cNj0P1-*3M)1hXII;CAQ*khvl`Fjxk4T_+Y9iRr&N|g+Wgb(zo z;M=>ruEqCT*GQkC(R87Aj^_NLLYUL)3HGdjHKW|_DB5k1wHn-*o2cgLFZPlXoDugKOl_{`G?Pv4+ z^50iz zt67$UBL7wG#2epDpw@WNW_;qyo4MEJJ^3V0zFVmVY7@132vp z77O-?9Yn|5`NXbF>bV=dbH{V8rq4FUS+60A-3{37TBjz?;U7LgoIZVh50~#mYBbh& zK_6AhlxebpN2hf_aLUK?ovi*$2wcWFHV4FfXhSN`8hQYH)Zb!|+yF~8;>Q$ER}$C{ zom~Zcu}x{h$s}`9kz7{IAj&FGfbesTa4+k@B5(&AzWxgruXB&~EPnD#IWIX`NX{S* zLw5E@c8>o5gkZ}rjp;w(m6PcJWBd*%^D+!@tEdp88?5duO0^)ln5FQ%k(4gohkcuP zryi$QOq}&&wTNvtNP}*flb%dbNH=d+&HPVQ9TC591K z!R;A!)YX?(-UnWPBx5uzCFn)e^^$( zZDin_htbjVXWgECA_a``l4}eGtJA;iDR)ZsBzQTtI2SUmDRO;%IWZ;|iBJQ;TQKS8 z4`#Z)T@>m~O)i87TvA&^1QUaWp;{cSlB@N-Lp zpBJbTQHiBtyPp*?f%txgDdrkRFc7Vw{UK9YHega>0RKo~JINOW>3Wtd2$)<-9K_y?| z&KG&+S9IuF$*N8hQx;ZGZf^vhtUdRtxRadb(#Zr92(`CydHbB6j=EP{wJ^}H6Nih( zMuuluMe{YsbE4)o?$3dXq?aT?&WTOMY3xOy4Z?n$rDTn|yx_&{{$1|Uq_jFwW|S6w zPp2*P*9R9FG&7uUN}oVtO$GI%YpsjUb`?M;pm1X~=40d2SIQF7x^HpI#8v`gHZWtG z%4>pe4XlBsH3}1EI@&W&bEX=SSdr>{3iN@10nN3&!zo`#T(ykCP#78yBPptI3a`-5 zycC(E;iD)EVOSvN(86Mda&UNhB>@e*OzpMShRjQ_&qQCVGB^1)4)nYyotHU#aG13> zm(ym^kr0i}nkzUacFB@q3nx1rE2vn@0qxNm-q+J0W+N(tg2CU&D`2W}f21`vk|l#5 zh&sHH<$sYpHEzqW{xBolaj!NLITF)PhTL}>t%Z+a0?rte=M7uc=vil_i{jYq+c9j* zvGMAojDSyFK9Y~H{Mk2{LizFBq>AO9Kn8G=PtyQWAgy{v_m!F=84y8AeZeDpz?jaL z*Grx9444aEzCXH$cl6+Yj;i#zFF7x6bdwC_7wj~VY>ru`r2gU^s$k#W7!*olrLXu* zL&p=QN!@?vx%{L5egzdw$+xZ&evbgH9+nW> zvQ=9D7F$BX`KHtx&G=GEqbdD+cDm~XLCoF>ew_Xbc^07xt3OducNBK6|1%Ux;SD}p zA^cxBoQ9(>-UK>_LQTJ0gN=XtgWoE*`1-B~9e}DM#Z!}dp^lPs4=z=Ht*gZup8jcs zy=u@P5{e{>-5O>(?Kl`79QzCA1c5gInzw05JS0`*azgR#m2F$`?wJ&v39}Y$UKn@r ziGjM2hL#AEZvX8nD-v?uK1yTrmM?6=5WAcdBRY=(k1pFzJ0{S$syHcJ=%5~*nY3>$ zQN1l+6PvUI;nImuBF4yi|L5?wy}SDN8v(!gKH>B^Ln`ui1LXdNo6 zq(tnQTwKTX4wJenaY>vRzOp(8Adp(+wRZP8=p;&5k2vpTd+2BM0xK`O$+N`Y!=@P(Ii#P;(q16$S53b;{^OJV%8#C- zP_uA6y-5bcbi6>a>M^7;z#&^y?|_W9C=?(^}6m#FtyW`soH210DB$f39~UhZTBI;mox zrA#p&?|zJV6)5f1OvqJ$4~Hu9Mmr>QGp;wE+R5$jl+5yd1ZU)Sa~8$nYr1_o5O0*c zigC1^G0b5lG-7^bEmFe+UL(tQHeol!j=yX5-c56X(WDP=;msALM0FY1hN6`PP2;`b zO?IhCzlEu=)3+fk2~qPCY72W_L~vkm3<=Bt5x13)YcJoTg^Zh6`j_oUO{+2MVTXi= z5!E_4AZJ0oR~B|-j2sxI2f22@6l{fq*Xda~7P$ylhOhEQR$B|2uyuQ_#TxZHK6n?lQmsA)hqJS5S%|laDdwr(W8C zX<<>rlq#ggLJvqgzJTM=A<@v(MY;PHph2>##oq72`NKtAyH0bw+BHIi>S2l10?a{4 z>Q!eeOIFF>+a8UDyGmI zVqr2vNg?y>W;3p~O#SgmPKI~!+|-|jn5RpcMH7FRUIDa{x)7R@8hhhw;>q6}Gj#Ft zMU#yGh6K2$Bz^mSvRdvhM8oUzLezoPN+l;YCgJqD?=i9}F_Ir9L|-UZB@zM1RD}J> zsd$Qksg3|`RLMQi7p?yg5kk!62y{6;YO)Fq_t}<;E16TaK84i2iEGWOg3*<0Q+M^N zdk&hezcK-pGK2)^CK-UEyHEpr6FOPneBJ}$oi5sC_FE)MnA|0+9lG%k)E9Mm`;?$C zg!_jkl__dE|Au(Mxi~t&r;tae)$Pko%R8~3V^UX-V{e}K3^#>IyVjR6Cf~i(D&8o@ zltI}_i!TvJz_TX%w|^$oc?IaW`sxnDI>8qf+x>_y*{}8!5iOltKRThOdRod#k*PRe zd;-2PhvlizgR~heSG{(v2b##0MdL`ZJ?+qZ1!6W$COd5B;ae%J>);Ie|wkSSAt zdh~JtO7i4Kl_xsfLkPku;S*f99q!4yGUjZh-Q-edUAXhEPV3zb?!0Ao6nXg{?Z5V` zW_spPoE6aFA5&pW0Ph=0ICjuV_74{KD!qGd_=4*U0u|`SWpV&5fPc&N!`hV6*()wr zAYHxceAxpX-?k2SBnz0@ThM%v{=87?0sg8wPll)RX4#`441XZo5H%#?FeequsG4wY zQ6@$?zJP#vxJN6Bzx2H|BX2900=W`*Y|NTCw7g&-!`WW*M1lCm0C|X{b;} z$7i^2I18UKA-hPm^}`CExkx^`9QO~{#!(})vWyM?e*bioeD+%G%t;yp4iex5$`WJA zm`TH%gU?lt*}H4RfQ)>>xA>vJf6Dxj^#)W+c{L)`s6;SQxrBA^XFo~)`L(*4J49Q! z6vZp66>*mj8GI;DcY7gnE3{Os+b{8+-birVT;&t5q6qzwRYe-dm&vaCNd<;+1sAH~ zz8HL!XvdXyclK$&xFBSuwOTpKe0atx=Xht!h7LQ3iTkX|k?D)8e*W2>Rs>NXws~hA zxxIt_#GR#R;w@hJW za$+ie#}LrFCw%ISS;Z&oCb80Ay0D_?Pk38{&U?XQj9H(KqsNS02<6K>rfr;jd2s)s zXxY16Ulog$fgDgMZam3SD9@m&Af@`Yu-hU|$_2iwsPz;9LDvdUIhE~7LG6NC+Zum< zYwZ{peNZ?0-v9~~gKkVT13XA}Rm;b)&oqV9I@%VBeQ@GVoc>#pt&UwUN2LlvSr(JqW2ThR=0xmqvSPR0H!@a?;h2`xc;u_^z4H!+Ng@bTgcQ)M?bxui{{he@CHv(%;3N z{yaTttb~Kjh&}^Xs&~g#QAznyZr-2-dlzOhTBoB?kq$_`7^ozdO`?QjLL#8oTwQsX z?YzY_i>%4Cu3)nhbz8CEkw!);rA-ToZ)zrNR5Sz|VuI5xZL7cm(n#{|$YRi0V2dsD zak(T2i0Hj7eJK0@IYE=8)>hETR%SN%Lj4Bx1An!WZgP9`X3*uY1t?|xJ@GQ}dfU^1fRR2yf10Cyx`GAC-TRbA>EORP4>*ST<7So2h`%z_3HpU=B0SVc zMkT9$(=zI~JrN6iJ1sR18X*)|AOUoi(f4|U#h`@3qqSy`aAfO3$05ns>@A1Y7;D1u z4?faQnd^GPF{_J;89cwMUsy6u1qT-Zu9tPge~q1kX|%xI8SUeI znv4JGRiy6X^GbC!9Lb+`-AQ#al24|7LZJ6tf9ODNfpql=2|GQTE@N^IKCpLQw7E9` zQAnF+)k0Cgr)h~6Wzrf4QK~Dof`q!PXp=-$G32x%A`_Zo&YEf`%cZ$B>~8tYAbn;V zvglIyQQfCQA9fbFg*ZB{Aa1UFF&R%1d@NzJlQ$mARYK`+*gyUeEwW_hpz)2o{;7k4 zAT(m%kU9Z_e>Dxpvg4ejd)mGiz}lKKY|YqHTw6wmjsLeRYd~6gBOX}c>QOZWEkBTS zRNpDpxEyHTvnzSE7f@*f#M%XXx!JF$h^o*g5DJdK#Xt()4owM>lK1m^CPKOr6Edul)DXXkaKwKGg-e>K$B}VsTo@ zge3sMj@b|%=^{kVeHYFef5?o-GSXLy8w(%M%matQMu|aL$5*uV;|1&WCmaYU09Dh= zT+W?ENhsi$p(=!m3`9Cvwr-0EMX1D{{EO7Si*T+RL614XY{SQ5C>+MJ}8qqO2)1^Sz`1v?cWf zz7Xjr3ae)H<4mfOP?XGFyEypb-@@K`teqi8?sAYI&NsZ1nEoAZ@m3y?zeGd=`{pjH zjo}gfyKV5_Tod8OH|j4(h#`?*{^-dlT4vZujZak}zaIL28s=6HiQ`NUg*l6W9wfAN zc|2o-g&svEJX+v~?fB*&&!4{^F?Kpqyr#=yy zLIQo>ZaodV7WC|hoAYoZoADpOj~FOxW!|q^hxYXF;dWcsJ8ZoHodN-FQHicu+r75V_#HkI@)KK?}{sxtW%zm zh!(SLSFam~e=BlYS@$!pj*;VobzT+m1kO1rzUh1)_5Vn^>ZmCGuRU~kcQ+{AAl=>F z-Q5aENG{zWE#2K+0#ef54T?0%Z@%yQ=kA`f2lg{_=icW&fvl)t&qS5GyEk=bwoS(6 zJ2v%q^Lwzkn@Pv&=Af5uJ25{^#AwU?JI1;oe;4zO?`Wj&HQxyf$ojhW;#zKwX#JED z4hkqm=@U!@Vt-_4w)s}FAhU}3m)&{mt1e6qARW@)^L$S5sU2{1`EU7}R z?Sc-ak(Wi(>i+D6lQo=-yh#CBfE{%rvC}cv2o$jv&{#!g0RSGpu_)iq$fj$KEY$$+ zZ}G}M&k&A$*@DzEyo$cg{*q4J_yTA(EZcgzGcF%Wz@;09rC09o>!0RQ~Z zQ-$Ib3?mX7kNs0jM}>PY=J*?>sGbp7ky;%_tN{0$KF9CqT>iVwozXosQ~i(e;En(Q zIAH7A2|}NFtDCm+RM2)@s-O~CMP!+cvN$>(KHW^6x(YA2T0I{tZsJ5VnfATsbVom& zhzcQNq>gSCIIfe>_0X5+}~*vjPXna0{5p z_kFrSP|3C@zJ65Y%u1Bs%@bswJy|Szc|Ze;-O&9j&!H7pTBnJYof^D)DB!J3Mb^!} z{?gY$gGPz5rxkPWFD$aYE-F=bTpH-^5IgeEC+O?7I^}&me`+VT$}@dz$Ao(Gk)(*# z%kX<~iIWDj&EIe>YE3zIi76H9V~WfNDL>0c$t|WGKsg92up=4?=roi?g1(yif#fCGVm z4J7oXMW=&2fqCWscGE1n%{mi8SMt~st?9-ZjVKD0RRcdkr~)xn!_m1T?}xKhT5w6< z2$zKZOr{PEr+wx|pw9pvvhwl0#!z%~ZoX8!XMKUOel}HNt)-haJ%ucV-+5Nmx3=a^ z0jiO}I#JJOk})s@i=osvL*?HH7ijUzw+BT6K~HUbNXtl-t|1`-vgNh{YN2l^Q3QMB zG-Q`Lh9CsAX^c1=P%nEG&qSYoJ5h~}ah!jtGzHp&F}tY8Jh-b{LF)kv!ExKLo&v8v zIZnjmwsb(dk2`hEO0@hLZgOW#gVYI_$3!$GspG!u?qKPVJ)0RR@+r9@hoq@RE|OSa zVw1^`Uorq)6b}gb*k4&Xl!P`;-eW6t-%(liKnO_`@5^d(P*pdc=H|kE8uA;VJg*yY zUE39y0wbc(M==_X#OKr(H&6u}#}88?bAE;EVUPd@S=`!CJL3BqDgHmsQO0l#Hh(eC zT^JJlUN#IjQ-wi)y!iP;sja6XyO>{sdg7u^&eOH+o6~jdUrTA<9S{Pi9?2~9&<*%YnVlpgLiL8ThgOyhjH?nb1-83v!YI7 z>Rzsd>mZ-6%zPf`)pUI%mcje`x{m(KkFB@zSZO{m+u7!XY zm3A&6)2NlOCC`Y8f=15c9iH5f{ZH> z4o{SOZ7wGCaUYrzTdiUh)F!{d9JO>F8judpVv+fJtROwpg%IO~Ocf5Y2}h8ycSNkp z@J)}5sX#NtEU0)UV}+afDqMv@%-z7(pY~q^pj~G z{ahF!v~*$yma^I4BM8`-1AyztBSV|tc$aGe`m_^_6N@QMY~wsd(UoJ=6Ti>06fs0x zxACWXx%}8W8+Af3eS#WfBE^s_^&) zzlPDC3b$WfS8o?#`t&Ck4+JGD=1*BzFw6hTqCg45!dM{fdoqkAhL%!d&q5b2b$X$b zD1YpDVMqv=$w=0j{(hHQm|TML?dTBflPjFydC)a(IjaLz5!LVi!woNEy|EZ$uvfBJZ6 zVhiG7%y9+#daPNP+0mG`F(0uAU^agpaJs|u01C;f)X@Qj5_I}p*JKo;KCa$|U4}T& zDDG7`;F>l-511RaL@P=g5ka{Yh8M$-DEGx>^`XBOUY*aA`jOjjVX4{?Xi8)aZARKe zx_+f*?f&Crj%LmS8&#&~j;tzA65y0yyQAL_pCI{ob1L78&4}$(Q_x?)CGN@Sa5q}_ z=~u>G8q`goZJ$h&`X|rm2r|0>crpfBbQ6A5?0G#Xvtv8GZH0cs@Xk4#o27LW%wa>!MZTNJ2CH{SfW$3 zk3(By2!M(iK zYi%nf*TP5bCs@fLiLmJ+DoB(Gu@%V=vEX2)q)%xMyP~UiSzKUOVilJ99rT?b^9!|~ zwv!f+#}2z|N8eddAi2w;OQLC>4EoDS;4|&F zv7A0QLE{yP;AOnu`lWLW@Bgg{6#M0qQ%jiJ+* zf}Dvb2Ps{rO3jg@Ly2BXF?1kKuucW*$TBnN?2tc>O^h2M5qa2i5`AloZi$~w^A3eC zGx{d^x`CzGaWv@FsK2b=XfZ)~S*q8R1N{kLCm(@Xy74Gp!TKr6t3}VhSpQW8zPO#k zpLK67i@U}k(Qy?!XRUbDj5e$AVHe}ariqJISHwmA15EHM9E;|E`;~eDwU}{VJZKK% zcnAxsZrKOFN&*y+6qAn{nM8YYFaZ@#h&TD&mt|n;7dnCy#&+Pbi@Z*ee84XYOcWe# zTBHwA2+_m60A z3XKB%%gzn9pTTf4`Z1ZB^n7#5h1-dd2;vFlc$w1G$g84jJ>{&NuP&sS*i394Ib6OB zaSX132r8gykiP6UKJt1Sto|D_=tL8q$y?NQ4Fw34vOQF-<)B2sS)S;Y9K)8b z$qF4TdCAlt@ng+x|K+1-k#mNJte?4C8|`y0p!h-J;)xC&%#*U*lel zliX{u_wQCdSGK1ve1lNeojg6zc?l{>WRTX)5b9dpV^?`rQvY-53E3kgs7GYGsSS?~ zEiBJLOt3^!XikCro9wz4)>q;6tC4jau_fC(j)yCY(2P^>h!j}>x6n=Hm1vdk)m{QH>2OCsb`zL#Q6k}a`y znaRPK^r-e^+lM#gF-=r5R@Az~R$Z6;&ImDw#^I`EN2^rLY@vt`k~?(ErVd`lC_q2X zo=z19M~D+_=pQEtB!^T5Og?S`OHxqjPo>Z#XSR#1#~r5RSb5j8c-8Qj=x(i39@|uY zLI{lnf3tX90ey98uHelgbs}u5sgqGhGhD%HeXpmBVdEcYCUUC_wTq8be4+(|QKI1Pc^#@pn0aotMMyUo3xk(J$cX zLhkCJ+=6=H`<+F~i)C8nyZ<D3Ji>~(A z4b!`xAzgValG+0K-|1%M>L3<^PQeJ{!JQpp!kl=s(=R6$#a3(R6gd`WcS4kx=hp{Mpj*Nm&yVt^;xduR`+#iFRwUjnk3IAEScpa(R7Zw$5 zAw)$o2F*#K$#l??7N8VE9fJO5xY8pr)^k0bQ0}V(bid>c{`eZjEhU*sC`XHXNmYB1 zMs9pA9_5!d7#ud*RSY;jGqo{vrB{ws-^*;TBMT(zt){=A(iycB=!WATXJa% z3#lwJ%TMx;zC+FbA@D_EsW^+$p<>LN&e?HB;A30LirxJ$7EeCFFO)a?6X#5#!dwA% zk2acGd|+YutH7U20uy{hs`Zl0ySSp;=b^3@F}!7C)sN@B5%G>~6l)KomV5%CzqsDE zF!&e1HdBmL`G~L9Ie&dLj!f@*cqQr%O6Y10NwM3v=nNk>wxZg01*DASL`fCCCVu+A zL{fAyXq>0=GXiibIK$&kal=$3ntlNd6)pIL1RS7P(VLPq>%+w`0(0y&J+Th1g;?*y zGf@A@{AzqWJomNk_(uWlf7Fg3;rCc*t{LKw7!@65jI~maW66$Lw;rhGHG0$7K|T7A zU-G%hE}kmBOu><*d#nBv|?F~J`vbZlQ(bW`I@xGtjigLh@Lb0*N&QW5;e9lmsmJ^U* zr_JJBjh_Bozj3hQpMCcXzz?rAp-S9^CH1w!)oNxzD1C2inCZfwQq%8^s!v;sCmI9L zRK+)&J6M;uBrSDDK$($N&xSZ2#`-#Qw?fI$YDyo^?6s?Tr*rn-%>`ZGyv$WIAclI*(Sd`IkQa3Mr5cpBqYQz; zC|7Xayp-XI?tq@gX5HT_k=;%4`!kI*zu5qNKW^xiDLCG@>-G;6j1&7^iNWk3D(-5S;55q0w{?f#~>*pq98!#m5J@@F)` zKHnhFsx+ICOcqI(84waj3R!Ow(un&~Sng{v_Wnr%DEU5NvC*lwEkjw0yYVc(auVTS ztG#ETub)Ktmm-P#`!)$jCARjrh3g<=)^w$c~*;`CLQDPjM8ExuO9+jge?i%R5B zzkICdVRm@XBu``9@M;CdjT|-EH7~o|A3+l)f;WG- zShe6<`65WqkF6*fi&Xw=WXVR0hRakIdJ%;p^d$nWRki@BCN%{IL> z=>Cc!hWuyMH?+oR>f)C1mNB4u4c`Y@h9=>N3Qi;F^6fVp!8?klzuO;i#Hh$iWbkj< zjR^2~)k+WN0{ecA|I1q2s>u2ok@fKJAe77ne{GN)kmzQa5UfEDfd?I@2hx(?4muC?FHThZF6+@5*DCUF9chG63{P zOzTbt8V52QMzhx?gWl5Ke|+U{N8J-Us;64Q8B}VXcyzd?orN93qIgoY8gu8E8fJV9 z^C+T%golO{D83fopQ93mf7wh-_8?mm4=@``jO3(;dGGb_QvFzk~(&oL25vglbc6YH6`@Q^?E zsww2BJ``+>Kj^T;Ad@&LMMg-IP_EE-AsrV?mXAF4xmYFuf}}?5o!G9v8;Nkh7s{gp z&Bc&-TbD|oW3a)u|Hi-ykF83tq~a^HZrd~AhaEG*I9-}1xd|g7mVyM6RGpcZuvAIs z!O=*N3M?_Fx##D0_{2)5%m^cZT)doS(YwID0TR_XHLLfF5(LL!T#42ib%nzdO_|V`G+I-4 z*0}Yc!U1WcR8GR!Q8*c|$CGQ{$e&O9ZUhnG)a#+PM+SDyf7y*14)P56r9$-^X|bu9 zj-1wimAa#cl+4FjN)Q^sI9MpNM5*^hfr$l&zloU?@FFJ-sBojxgY`m`s!y3@-yQYu zzPLZeLzPY7r9AR}P;ACVJ%UfOdYn+I%doNXS1>e4 zF(mu$u*jFEW1?sX%h_nK=qG6(3QGw|>GqX>M@^vqo)cW2prFpO;-)X++E+9itTSK& zOs6L*&C463@RhGIrBh_g_Q4;ij9}O7ICG&SQojmoU4o$vz+#vJ>(_cONp5eM#w1KI zOlQyUCvT)e*QVWnvoQh^&DJgQEb_!ijpjW{qcZ)ixD-O`JZPU_{NalPZOZLT!w}B; zPq-=#_W3!}$MbFOV43fAhI5_J^(Wq-qCMnKqxV&lXWiQfo)!AsqAJ_#VBd=^&)~-O z+h`78Va@KwEwco{r6+iwds;(TM#>P^dRD6X_QX(s3AVG0)>a(?fM`+$2k5W~@b(4` zW%NEHhcudYe&s!o97QkDyNu6A==VR;h zc+;>kjyf>=9KqcN>OB4mlmt~QVjOPyG`Eq}NDWk|!=NwyP1-vw+c6zZuD+_f{hU!7GY$G8M58q>@eact!vFKhIXwhpOZOdJsg6JD$slJfg~C^gqgdAFX5PY z%z*oT=AfC4a3v0V{%6ufr2)B~xLh!|sdcG@n-UhwAh-VccWt3Y@-iRi7m<#fb>kKA zU;#4A!;fFW!tq&sn?U9`dnc#w-$8IWrhqj~?|429^4kg!to5lo%CEK3d$PPRr`emc zY($8deUqwmc%g=Q`figD7=Si!m+=g`pEU&8wH_r&u>YM@>JVhVb&I8+2W|F@|I@E>a`o z@Y$PmnG6RgrfIAp+vYQj+~Ir)hb7vaV8()rDzWCuYFti-qkvFhspSGD-!OiKd=Mdv$RiY;4Qli%%l7eWroUGBS}dJWjt zzIWi-7Zl!U3779oA*h>z!zNKbbPFpdLli`hx;4xQxK*+*#>s$OF>L!g)n0>w^c5!! z^WZDfp1L_EW5379OD>dz;Mb`y|8BUN$Xwmo#&u`_WjbK6VDpwZP~~OzJmIsHVQi#4 zqXq!Je*5kGkbVu_9&{vKzw*)DyiO;u0B+N0ZPj>COK^NN)ReHIIOJI)9CturV3in3 zjbb9)sfBCE-2>?SGFd^B?g+*Gm$?6VAK_{_4V6O9*E&}IC(EM*aKdW<;d9YGA{^J^ zUAa|sTJvL~kZxY~;xry(#7(KxEvQgjuunj1_9lz1rr;(aqIc+8>dk;@uX|54-Y&9| zSJ)03m>kA zHa*YYI}e9gJ*a^@mb&`^0=m0o?A*57g~(s59(414>Zp!mQOKy?O|NaEP^qP zd_*-o92rN$dZk9#avZs2aQFa%>+s(+S4|W$_9{;#F;>Z^UrDEZ9k>5FG-WrZg*=k1 zdph6>cH+WeE#;m}0&T!ED;Jz3Yl|$!Ch@kIM1foRLqI6kUaB7mlYCyY*jSmd<|rTw zaUI@i$TEFFFhv0MLNe-Bc8X!i6y=j{{+{I8Rh zXD)+ex?YsbUpPiI|L7b|9@d%X#4BxIy#9Ls;Y(h2_&sFA5wC96m#e};q6Y_}hTgHd zpbRb6gM$EC=zy4HSx=>|pBPM%%`8K+?l?j^rxI1R%T?$S#;v_0L-|I6CN$`7M|#D; z)Sd%7Cd)!X&zMZn$GvGX#aOqpOF+DH&>nc9vrK;i+a7kwAF9|Mx$K7!l^|y&29GO_ zbRcbpDMu2y1G@MvMwJmLOzbh!o6)FH@|yoEpk^-QrA~%AmxHYlNpGK{e;f&h`o@8X z^Xr|#K6G}mEsG29MI)RxMN2><%QGBjp=8{3;dnnyCmvM9YGw@jPfxtItds4=Yo(?# zkyqto8%^*??cHIkiYhjTbD12_TTqW6wceg+fLQ^Weuyh^IRV}Yf0e!Q(;%7gdxU~i z^~tD({9#-)H;l6t$B%GdR_shUD_o)3;*KfXlu$A}3u3 zK&XXSjQ`|G;U-IY@!y;m=LZjF6C_HD&lBy-IeMrEC*rQGvQ6~lJ)Y)oUe4D3wZ{g* z`+cv4<1J|VW-d(ptyk8SNk{Z9RKRnE-ZmF61`iib;O*xWZ~%~qn$K|6*HaWu?QQ7w z2wpBXut1?6lT8`f9W|&L@G!(kWX=l`#WoXhU|&+>{v}J4d@hr9{g!fV&!1+Zhoh0Z z^_J{$4em_8${y{SSp@9fuiYZj2DVvd_NNouj|t6zxs+BZnfIBU=gf||^z5zmR;`&< zF%$h9!c@dAkr$w@iZHA`TFFw^LW$-+wE>?OkPrlRi1I8Oc$o6fm#ceHdLgw9{Y1|&TYKpF)Wj2s*hq$U zyM&+VFBytSd~9cnZwT_uuzbuuUHisjl@_HSzTv$v)NocRxbqQn>0S=~;&HWTC#cd3MlJxfQQzoXNh zp=jZCjL5H>pk+vq;rRv&uqUqtw74JGC{E)*yMM#?=CpYU`|MIOYhWCDw~YP+|Bx7R z57+w-Ph_;Vyj&?0ayaVi)7%?VLGx?Kj@$&Fr#_blgB&Y$S#r2qH_okgGM-V&;r_Dk z_%U-PYRG8=O1y|!J2u{sP^Ci=o4-3q4T)ZBwLjhepURf{pT+Wy(yE_(XW9&c?7Hx5 zBC=|nfvWP@FKud6X`$EnkY`KpDd~T_Z2jd7gVN!LiC+`hP-SsT-O7!t;A3a`Z7IXv zh48;pVEn>W#fll03n!&{bEnE9>uP{UqgmyN8oN`b@uNPrh z=St+D<gqh2yVGA688pjXk8bz`Vj#B7X_{@y~3jxHCr*1EA`JP~O?m{oOD3 z*g31oEtz&WP_4c=C=-a%fA^CHzzQB5bFn$1q30`=Wl^QbB6d+yGRTBmxAo6J(ZyVl>ul&0ee!InC#<)6Xs%qpAXch3*M?|x)8fW1dYO4H>GMvw(1xKxMF z(p%-=ec<_lYzkHvZFz?v-Gik@+uIqT3M3R-*zA0xl@7 zdK&sGOOePz-(_t&(tP*=UqO84?yQ@Fsq42Vnuksto>M3m|WiGs79uYNRszB{jXDg-(4j0(k z%i8pe`;6W;UzSD;oiaL1LZ{%M^zf<90O8);LgzersOOhkH8z|GL^8==;TgV>{A6GD z0d?v{)2O=OMq9Lq3c1_FN3wVyLYlA1rvod|C(8e@{DV-%ViekpGgo+RGqVOlOW8H} zBY91)qs{Vy%yEz!&u>LPNm9|(pp~;(Tv3T0;QE%TsY)0_gNsw6!cw>Oj=vN{b0b=F zNrs^{WqH+KtWLl8yS?`yNWeE0tl0(~c);-yzb;eC(gQb2l9;)S_QmvAw%wZfWNKo193rhKtH69KqKE_WSdP;5Y_cF*ygJrD#hrou~dqW{R`Io^qy< zN=${}lACgm_Ah7290+Bt|F%a|=^bgUGKss2Sh~=)Pz!Ew6*`v7r%Ob(D(Jh#CPA8B z2y|X!E)-%sXK4Rae}y0(G!b%q*QLCxt5UGnba|9X>5e{Dk7vZ$PO4rx+DscSJqxHR zHggNqs{B~rkf8(eK2K+dmXfV-rer`GZWOm_?k6LbyhR{<;PN3aqxNu|cs9ssTgDM1 zM2V9Me*5`PZ>Xhkxj3yp>juf6HJQ?^)vDBVA3l}WZfSg+^E}B{T>Yh@{i~06%3t4V zOtBE%E$x4tt8U=%4{S*cipk9LHw&pwOKGl((Vw;xwWc;yaHD6kFeo!DcyR$(WOC4D z8UQrtTdeRD5_a%=!eNn;q$i&f)PMl}T1%_9iWpPxhIc!CxxSOR1bBwVN?-o+NzDAR zu^zv(diqJl$Zi$Oq?p5o%EbB-=?`*-%fcBf>}7q!XtDtZsXx{NIW+Z|rS{2lqm($} z9oD8@&n_*rq;!~?Sc}&xE2H6cDE-RDNAGGXm5A|swvuI_5ANA^_hheurKD9;{FKx_ai~feMnIcKp5~Iv9SH5Op zrEYXfvcs>%q=d?h4n)(0uAfC$Vsj9d4uh(s^~!Zh*-iHKZGbIUDM>|tR4@=e`f7(& z5|6_oj8n|yDZO57uDL3K^?BJ&BEe@98&m-llYDEuewP(-5{G$#u5cv=lKbVLWzULb zJ4s5%8)~3;9NZnXI^4DV_H4J0$sTCw{^$%;@;Ka*RxP{=IPd0KghPYjNi44Z@ma~$ z1I&0_Fs!*OUAzW?;7(NPXS#~BQ_$fP46qoH$;80M0AgTS2gTPWzn+PKkn_E9ubMnU z*m>va6Yc3NI4uoVck{bN;|LEL4kO~uM~b({9|c=T9gCx#vC=fMpFV$U+{!lv+)5kq zbgm3Puv?FE-#M-6BY_;wj-Zm&k~0EyM?R13megk9&_+`v#~(>CEO@{Bnf2L?P0$pk zRwvH=?dcS9Sq*8bP%GZjzx!JU3w;W>2xsB?{hf{XcPz7B!~u^Y(bydF8~*gu91e{` z<~K~j|-#aAUb65WqE;OO=nsl5^n1$(r zwk4y(r@k?!8}RCuR^%Q_Wxv`pfTlPJp-GzFy&W0xJ@?VcdKw@{rXff8D~BTigez07 zTVWEOGvJ#9o$-cf%$bXcSWkem6p1ID)k;=B2|M0wMxg+ri*w{q)KaWz5niEI0z0}@ zB8OrYPHZ=V+^$%#M>dVxtRKGB9L{AW76kFA7nRWT)?+kkd`_Klc$UjJ;I=8>gt~2= zrTbI#MjB}<93XGju@&gmkn&p?D7~2?B^X0lF7tFr7rvc)@E;Qa3UOZA8Bi9p`4Fi< z(GS5liiM*YMlke5%eRQ+Ixt=RS=Z$ZAH@C*_;d)++4l~5Z?}UF@sk&vin6Sj>^n5H zHU<$y+xPBx3{WQUkcY4&^r}#PUn+u?YW}oio#7fw;zGc)jo>Ou8|SJd*x_o!Zb{CC z{v1?_ASu~|Mcsqh094kay=ssWGDT**KHQKjFsn}Mgvk0m1IcT%O6h-;&=ol8TCdCu zEj^`Dk)_T2X@ss%rKxDtYh5YUwPmGA!cqIM--&As6w4LViGwl@Rnpfu=LbB(qy@&W||E! zb66xUw^qx(x8g@tu7qfL>pVp2bePaL=^%$TW=2bpg>OSXaB%ddmMML>?D7Z}V6h)W zzwb6^xVFk%K}SF9=xs(6Z`l!}tNS_0LQ^ac-s?A)>j)L+b|dM27~`OrUZd zfDLTQT;dD%Lc7&y!aP=)zNPkHKqEPMc(}WjZ7IBf!lDlkf^`(@T|775MSPwPC66y8 zu-JOEi{*~UKnly=6izl)lo(=Y`)xy;_thkCtMwMQAeKHFi zD--)T&qoV0K58&4C<;J=S4!%3cTGa_ZGP>;7LV}{QkHH(0_L+Ks!;^!r6*zEsWD)K zxi0-An##Y=>Dx=8h{ezoj)J*)nTF{O36yg~>Bs_Nwi()F8-m6{fGgu!0s8bDNiZbd zE%xH3K)fzq8+P=wI;x|3$sj-eUk*}t99d4Uq7N&dQ;K7fd_?N#RNhs z7GuLrY?b*s_m`pdysKIPNsP|_N86j2$1QA#Z!;9Tk)7Kfmm$MD;Q(;s60#SN<7`>N z9inwQ#gJFk0te5ThrV*FH0#`$*bG#Dnn<2(*UcOKTGm9aX(M7Cu4E=3&)cowO*l3( z{EVAbwxqP^h5~Z(Q{Ux^Audh$v3z&FE)E~}t6>!8TJKWR(kTiVZfeRSu_tf)kVUV3 z)I=lHStx{^{y?G^8Cu-(Z7I`a*Kvx34WUM^5VOycX^(ReS`GT|jp7n+eOhqr9AP+L zjW?dD1ut=n!xmMU;0FZB8xfm0{Cty4MJaQ=!yLxN22O&>{r6sRD}+Q5pO5&}8EDup ziI1rG;0wG>?3h=px`t1b&T%{|K^fgyya6Ypb&VX>MFw0XJBjZVx2@bv#$5QR|ES$0 zX}{JSOCTC(a(Uk~AGBpYBQ0DwTp~L#c&Kg5Vh5HxrECZbEKHUX{h>mn!aS=NNm^ql zm|ji%Vxj^-BPou(V}o9OP>A$UN>NvW2EA5zqu4@#MJ6D8K1%!GQn8B`JCq;$F5iXi za8ur)lm3USPOg&)$>IaFc7O>nW|ROLA$ltI$GzD>ePtTtnDGhsr^wbe@QkR!xqkVf zF!7Vlx^w(^nI}Mxr*>wkh5|_ah$4L~dj<|b^U^Oiy>C!JOIE{D>s?J!r*|ACwQqjM z^T9Gl@)b4qmdv_Nsstmm9dAz(=prKs;o&tooc?e$Tv8VYDuDpZg{{XS7tyD6v3WO8 z*bsYKaA@O&qx}kvu&Ze4^w@R+(u;hcMD_`;tp(5ixwo@sci)-(l;eDQnPx>>Ni{7Gn1%qR71)_`^KFt+It zeFlp!HYd}zd2D^q^>|u?2biBb-D!YTEtj#&^>-caLCam%eYq6S|_FcDVM{stM8BBul?8zxf!fPbr8a{(|^^ zvN(F70P_Q6aPHQk<%Z1q=QdHC3LO5%3YqwwfsgTebo$>&hVgyJdJiom`Ww?_WJ5CE z497_A{Yl6Z3F~3iC`tZxj$K(|Q8A{}U+BL)<92-6%|wrRDyWNtdG9;^9J(6U=h^7f z>9i@Y5&u=h50e2BZ+J84)W!Zl%-ki185Ls}X|T^xAMV9lJ!aq}24_J+u0_m+TlP5V_P`3xmxS~cojvY;JYvgk zqezt)-I@dRR|X)bcOs-|_IlKOXJ+h;))|!a7K7vA&J2Dd{8r**iv!Du@6i>A9UIz* zu@AP-Kh~d1`FwnU^reyaBXFFewn!sRM`Blb9Y{1Qi*u?ugnj&g0PHBL*BB^{K{Txp zOOCAUo`gr}UA&uh{}VB#L&$*EpM&o2NwPFtbx=6v8wf`fe&9^%J>4`DH9CHBUs*i<9XDi2pDd5rE>UHK}P{947yN-d|l#Ze*3jkqb#C;$+ z1vZ(Fd=38Qu#WUh8x^{v4?r$8f1~)@_vy|TY7m1#)60bV8)GF94 zVJE%3yZdHPlTXdGgBDvwI1RE?jLcIyez)-`lDD%KFM!2t-IG_4{Eoh3-W?0CZwF~$ z>Sn2km?Sb=Q3%0hMuWKDig)e718^cLlZ-B-Er0te1kX-^FPpO!)jsF7sk;1gERf#U1ktN~C5-4ChIto0c?Bs<;nqEBdWFeqaO6 zi)VL73rZ9Xaw5idF?S5LwGg=**|&PU9Cxm^@BLZ_lJ-Gg>eMlzLcCW=o-~72iv$`A z1+u9mAtQ*a!$wB6xJu4R8k!6v@rUDKuCt`uG_00oQO23E+S>bCQ8Ea6u!v)P<&nwb zkdTW|bcmVIQabgcmru`;=iRX=n2A#v0;qYr0cdC4|=l7+f|GI%^}y0=6JrLyMr zT9)HGf!?{My9{o$JTXP?qNgCkH3T#oL33nAGUW~`Zyv%BHRV$0pa7o(w`AN~bKHF4 zBE+uEMpe5`=dW48PF8 z_Q-R;&A9?ZM<~qbT)8h^QD5Zx4ZDY6HU_+nq>adu2_vB?={Tv_=BaV95C=)RM;(Pn zwT=3}H2UMB7hq6g`zH}FbXgh~Q9vhA;HhExCqYr|BaT_;4q`dgG_ub2dc^<2IHQI> zREH`}>M0Z{5fN0`$GtaWF!2&$9Z>*iCEQcRc&()1OJvkQtFmP`G+lR6S@*(0Z8c`y z9u1oqA1i!lyJg(lMMhE8DcWM}O@Xvu;RQiLZq}{FY_#y{MWCkWXW0370o~}FJW^|k zkkFC@RAyFeFBdNbVAX;%NeNsfQ8pu5ZNGOrt4G35)){%fsxk4S`|xE35e6`$jaM<) zp$zLRkTRJjHDd0$OQpV<%fsn&yECRbm$%0yblS$yagkO*2h*wuA?kc*7WBLP>HicBBNNhPic zIpSWi71)$jvsWqqmGCvC)B2>%UQ4zS5}pssn)sNW_O?QdP(ZuJDw;x;hlKlI(n+D; zUQ4T}%ov$_?iJ;9AyZ#Q=0Lf#=E-JDuD%In7twGt+>~h=X|$xbXC%y~j{twXJAfz- zPb)zyDoeVxL*}x#Wfu0?p`uD}`y_!92Ah&J$uB}rxc?Fouh=>tfIY}0k%*myC`tPn zD|-1cgupL>;jSC`HGbgOmt6H-?_ZxonZsPCo*vL80nm#xY+Y=xTtQ-<;_&h3$eNN_ z9ZvB)yiY!49w3$y5|3uHqCgH9YAi{G1}QaHt>E5Nna{IptKIdlSf#_OipiW{ASeL< z#G2-wrcJ6?F{5xDg^m3qYSJG59ZIUS)pxa9Yca9*{+kV2@b{>}@u3EE9bR50E)#lo z!JKd4as@G!{v1T?wSGFx;8UOhlykV>@*6zv5PFGo&MracU)#{-m18@Mj$(+?=A}#AriOEN8RrO0s=>Drv%70w)i2$}*UBZNexE9DsMPW1bmG%9}mq z&y_YwI6H(reP8JaX0_Q;qO1mV)wnx zbLC$Di^WO13ZV%pC_v2LqNl~Mqook_n3B9W?Oe4WFzP8(gMYeurx+@nCbv5(3r7ul zdTwxP6X+vQU*hwv%azKI1ZM$%Gl3LCCj%M$ z-Bn#$Hukam=YI}+|C*x+9$(GJj5@a~6!Ww8xYzKq68Ve?+za#jolCi5k_Os~w;OzS zR%0EQ_}k*dYxfM7&Pi5Xs5700tdqG+>0@(;fkuL_D5| z=SEbTf_04KqxHoL+$Oy_S+j9$GB(%Jp;G}eFDQ`)8sc-f}_yVlyKgJmu;)DbD9uBi8WnDPqh(k5)&!=_=tN5b!g*)ms_NWESf#^&W%npP0*b zXbfS%ogSL=)DuPl!@C)aTVRSs@KP>!EPp@-p(sVn{(AM?-hW8OiOC4wz zLC_#1jpqx1G+g76Z*Sdv0b8;a(~V^R2V7uNA76#>n-0SqCgvbh{R?I1>lf2dh=ntY z#h0E^zXM;FFvf0zcf8~T1JH+jV0Qy z?$8G4gtQR<#81XQ&QcL_1WOD+=>V4SI5hj^^>9sq;|hTHkST^eNQ^jmIiG zIx4CqH{qd`Y(;F)=VF_qen*ZbJ3&*f9~{IpG$W9O6mRn*u;Tmltyrp?Ow!+QLc#kDFFT`n8f=6CNNHflJxHRfCzidc8EN55%*KSKG&>g>}w=@+BHh-Z7(CgLlm_@U|+Fkk++->NCk3t4L5(ADjzq) z5~t8-RwOtTfFjXQ=N^RgLBmXFuyc|h&Ax~El6_6A(1%}JBm0qSs=%G$k@2VR8D2zd zm4Bq33+~Aa)f}5vVqx9v{0#}wA?ZOa`C+09%q=J_6hn7X#M?fuLdOSWLXoZEW;ry` z0=@DuS;jx0MUucZMOW)hy3iH>tbMWQD-Q{k%Ece^8qm4p`b8zC{Q2jX?wfioDtvje zf>55RC#6avmx^Mi!O8qnkBPbSio?_32>^i1>3MU)DR)ebj8)pI+k>&{gPSb3fmhrY z0-aCJ7KzG1m6;no#Bk^LIPSrpXb3-lCA!2~{mZuFQ5acbPmn^;x*MF%l z^nd8#3jfsv+P_nx)fEkn(u;EAZQUU{zYTQ5sgMYZ@G>9My11G-C9VDWRJ0g|R^?K= zw~wdu#Pk&Xo+Sz8_8-WLXG$v1sY$d2stg(~xQ>RJyqQX?S?Edb5ePM|#~BFlq~bf+CY!WV zecOQ!pfuuO`lVwmlSDWWfE};!--6?H4dySf1h+00q0u3ugqm!W3|eAaI#QXd?jT!g9)5jb#EG6=< zF!PM#azKfJ{Uz)*kmUnR_`;C!n_Mit|DQx%MG{C*sCR<@NlcNYb+fwC`P2}d0IGR> za=|#h&^`}`BDPG0H{!GfHA!R-IDAu@WD3CvIMD zWQ$yAXrYv&^A9yuY4T0ti*KzBP|4Kf|EpP#`qT5F0N;o!z;|=xVdmWb;k2JUR~Ow& zsM+%X6a{bom|mb9Jz%3GM0){Mqd-or70n$oQv4Wv^wxwYxwqJ)svkV-ZU`di(pdyH zjbHwPN=^#vK0f*SiP-UV1iXIEo9d~#4PG^|J~u=Gl#UHc-les95ku(RRU8KX%DVgw zvcvHmUf{i|rS*A`#lY0Q>UMIP%G{kZOcRO>$tu^eY&$97eHZ%9rM>Yp?GE7w`^&hW zItaqkVFpJI6cie39wRi>9B2IpVcG;9li-q@wjant=I95myOVPKQ^@OipE3i zxA$B;ggdWJ4t*D1wc2i`J2W>R+<6?47-u(!ed~5oQW=lcP07L)_*9YJ&Wj8yB$19vX5rN?=oUYu$@n!Z}{(6$@dxSGTGzBCp#h} z3_C2r|B}WiVP`Vg;*%Nhj}3$-7CgP+Ew0}DV}G(B$ws=&Y3FWPZP}T_^NX$mfWxrJ zG^u~rM5L|;!b@Zal&+aE#5_V(f?6X!IF&3Av^>5;p5&6cI5y9SxLx0m7Bds}$`}CI z7oK;84}j4IGZ5*WgrfY$1oI=vKP z0J@kOeDf3>vj?UqjH9W>gYe6l$Ej5CgOiPWrJCpO$DV_;3u4jC$Q=VIu3vxS;0W(< zt@D+k?veZ->7H+40HaiRz{BgTM9#o_7+@*tPRhQPoDs>976&<8v!%@cGKxrWRG6J* zeGkSD=O+E&!1|ovt1cd%)_eY3t`v6;thqL^K2NZYDd+A}>IT(+d|$=PJ7IFP{yw|j ztd40#>*7(#(WEQUi}uHVM}HiF-t=YxzEpCk>Ijj>{@jY21|^5KOVgh>qF@K$DzhB^ z8CUj?g-&<2Js&-wp-w9LI&E2?-1<}2)`h1XXNkjxM=(M|kRVDJ-#EiA*EGFTX{ zQb{k>+>Trd<4!^y5ryia&8K)*SqL5-l%y3WYa(%G3cj<|^^(q;E&k~w=?Q4#gd1YJ zy)}##X_3tj$TaFIm@$)r9n&(NaYGct7=g;_5Kj$wq<{gv)<@PqpGEJ|T;$eGkAq?( zfeJK4|MT;2n$4=vS`J*G1^Z^X67i+pp7PUA5}Ka;1)q1Ong0IhxZSh=bapK@0V`9O z^Lte$NFA{JbG<&>eU&k+DaeyM4t<~UFI(Z`SR=7ukwiQE=J>d3|C;I;7grEdUp_U| zsF8ZXa%-Dv?u7;H2~uR^ce!>fFMhEGAB2rL*#UEI(HG@8+|&p zdk-qDNFIq@%KF~no~L8^#8JVyVQ2o7opLpu-BT)%^RoT$n-s%S`CX(md1|LJJ)aCXXI5y zu$*cYUOj|>;LNY}f~-;>5~g-{j#KJNVU;_$o1fg7Sy(b;LTFBm!G@NN)zZy~>&!bX z;To=JCSb=g=t9Em_eEqPK_8MssJUj|C0nqw;TwwJErLK<@j~XRREDI8D9ed~ zmSKhc{L>s*qf{$;!oLr=N6tOFJ=AHkK50>?ZF-~QjMRk3#z7UQiSEF?Z{HL3){ZeJ z;`gn>BaL3fr-EK#hlhy=w6pQZ>CV;rzt^o&DN-HFf@MfmI2wS-GT{?E?=^wP1&f4p zKdp+lkKflamf{UtWU(x~iCaDj&81?TkSymvIYq?yU>R1bI2(prsW?D3+cFXkCHVfw z($dHncc+<$gqaspupmLU2|}x}o~vs$=Pb^Jp=8fNi0mkItiJla5FF<6;?wrR0ThMhKa)NW zBW6xWf>(jP^Ie-N8BBm}d|_QZCMRkUN4Pt(Ia1uG%s|uGO!=B?0)vo#NHuYy*78De zJ>FCxIGnva48szX0gTF1nx91o72oz@*PJ^^OTJCn2ZM@5 zEjGECFP1fDVEL{-DEaw7mdT-m3mVra+1z9)vz|`R|!?E0RF*WEwtQB}_{A z4zVp|By~77jdFm9C0!_CVJ z%BU2tIynC{c<4gR^6}uSiNS7-I^h>{i3YL| zi&SGCh-*P)d-3%wO9>}pen@xEu7Pmp!B2btv)yU>a_q;E!jT+Of*|d zTais!Re1D*u4SnW?}CaY1&F%6;;CKYj&{wI!sC+v3N?$hQy&BgVx-|@Yt(drf-l6% zkB~cXP?Hwo^55RM8l)uaqH=F@_6T{ra>YrSUU!}bea(8u$BG1XY8cRalu?27i1gYZ zK9Jc2bos15blus0Gy5Zk+7+EY;xkxw$`DDZ&Y+c$McKd2;PJzncZ0RVz-x|y#vl(1 z$JJ7+cR|=`GB>d)UeBnmuwc%Sop_MEks8QSc5j@+J6dmd7VM-`$CKRfm=% zSB->g;!}SHEX;KSeoG{3M4!{EkY*odX-D!QA_Q0lmn0>?ft5Ye z=dsempM;72kE=WjGz};tn;DZ!Fh6IO7v|Qj145?n*Onvvimu`xvNOSrtZaTcUAbE4 z?2QUW<3Z-CH2Yb(xN0!{l`3BxN0FecX89lincXTpUwiJG4JPVx#MJkzFEnHFgMFO) zHeu^{8K>u4f-AijH9y*6unN7Ib5asgLB2$3d+Nvl5YwoeEYQ52tI(3R&kA%kSw@Dm z7v$0(CNX8HXvb;FZ>rpf>@%4TS}>8k)wb`uY{uw zc~E)}^%$kViZH^d)v{5gdHe-HsQ6`u_b32 zwc+l*`}y%SZF=i*tJwqJcLAYT4?R^Cy76sX}Qu{Erw)Ux8m|V-9nM^BNG7r6oVF$+-4HWq%WeeqF=0 zMrZG6{5-b38RYV-M!r+)Ps-3_!Y9Q3#~G&BQW5iG%F-R00xFUTjLV4(Bo2JL_elP+f-yrxkE0}2c5dI{j zWrK-?%o2msFvO=zt)lZ+INe*65AZihtTn=TagGcDeIk$!B2Z4 zp&&KZ->$ZvYLP~l@9qs)d*d}+)aw-`+R&Zl*(FYxR*(DPLg@|GQB+x2}DQp z#rPW{JBpp4C&ZStC1XCxTm=W=SU;lHMdRd0|AYv1g{{l-GXRl4RQ`iDk_~Fd`rf" + ], + "text/plain": [ + "<__main__.MyComponent at 0x7fa1066e5eb0>" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "MyComponent()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Outfile was changed to '{'name': 'outfile', 'old': None, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.foo'), 'owner': <__main__.AdvancedComponent object at 0x7fa105f4fe20>, 'type': 'change'}'\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "AdvancedComponent\n", + "

\n", + "

An advanced technique

\n", + "
\n", + "

\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "
infile/home/aknierim/dev/ctapipe/docs/examples/test.fooinput file name (default: traitlets.Undefined)
outfile/home/aknierim/dev/ctapipe/docs/examples/out.foooutput file name (default: traitlets.Undefined)
value1-1Value to use (default: -1)
\n", + "
" + ], + "text/plain": [ + "<__main__.AdvancedComponent at 0x7fa105f4fe20>" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "AdvancedComponent(infile=\"test.foo\", outfile=\"out.foo\")" ] @@ -138,9 +215,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Subarray : MonteCarloArray\n", + "Num Tels : 180\n", + "Footprint: 4.92 km2\n", + "\n", + " Type Count Tel IDs \n", + "----------------- ----- ---------------\n", + " SST_ASTRI_CHEC 120 30-99,131-180 \n", + " LST_LST_LSTCam 4 1-4 \n", + "MST_MST_NectarCam 28 100-124,128-130\n", + " MST_MST_FlashCam 28 5-29,125-127 \n" + ] + } + ], "source": [ "from ctapipe.instrument import SubarrayDescription, TelescopeDescription\n", "\n", @@ -150,9 +244,41 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "TelescopeWiseComponent\n", + "

\n", + "

a component that contains parameters that are per-telescope configurable

\n", + "
\n", + "

\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
param[('type', '*', 5.0)]Something configurable with telescope patterns. (default: traitlets.Undefined)
\n", + "
" + ], + "text/plain": [ + "<__main__.TelescopeWiseComponent at 0x7fa1704b9280>" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "TelescopeWiseComponent(subarray=subarray)" ] @@ -186,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -244,9 +370,128 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "MyTool\n", + "

\n", + "

do some things and stuff

\n", + "
\n", + "

\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "
config_files[] (default: traitlets.Undefined)
iterations5Number of times to run (default: 5)
log_config{} (default: traitlets.Undefined)
log_datefmt%Y-%m-%d %H:%M:%SThe date format used by logging formatters for %(asctime)s (default: %Y-%m-%d %H:%M:%S)
log_fileNoneFilename for the log (default: None)
log_file_levelINFOLogging Level for File Logging (default: INFO)
log_format[%(name)s]%(highlevel)s %(message)sThe Logging format template (default: [%(name)s]%(highlevel)s %(message)s)
log_level30Set the log level by value or name. (default: 30)
logging_config{}\n", + " Configure additional log handlers.\n", + "\n", + " The default stderr logs handler is configured by the\n", + " log_level, log_datefmt and log_format settings.\n", + "\n", + " This configuration can be used to configure additional handlers\n", + " (e.g. to output the log to a file) or for finer control over the\n", + " default handlers.\n", + "\n", + " If provided this should be a logging configuration dictionary, for\n", + " more information see:\n", + " https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\n", + "\n", + " This dictionary is merged with the base logging configuration which\n", + " defines the following:\n", + "\n", + " * A logging formatter intended for interactive use called\n", + " ``console``.\n", + " * A logging handler that writes to stderr called\n", + " ``console`` which uses the formatter ``console``.\n", + " * A logger with the name of this application set to ``DEBUG``\n", + " level.\n", + "\n", + " This example adds a new handler that writes to a file:\n", + "\n", + " .. code-block:: python\n", + "\n", + " c.Application.logging_config = {\n", + " 'handlers': {\n", + " 'file': {\n", + " 'class': 'logging.FileHandler',\n", + " 'level': 'DEBUG',\n", + " 'filename': '',\n", + " }\n", + " },\n", + " 'loggers': {\n", + " '': {\n", + " 'level': 'DEBUG',\n", + " # NOTE: if you don't list the default \"console\"\n", + " # handler here then it will be disabled\n", + " 'handlers': ['console', 'file'],\n", + " },\n", + " }\n", + " }\n", + "\n", + " (default: traitlets.Undefined)
overwriteFalse (default: False)
provenance_log/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log (default: traitlets.Undefined)
quietFalse (default: False)
show_configFalseInstead of starting the Application, dump configuration to stdout (default: False)
show_config_jsonFalseInstead of starting the Application, dump configuration to stdout (as JSON) (default: False)
\n", + "

Components:\n", + "MyTool, MyComponent, AdvancedComponent, SecondaryMyComponent, TelescopeWiseComponent\n", + "

\n", + "" + ], + "text/plain": [ + "<__main__.MyTool at 0x7fa170490cd0>" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool = MyTool()\n", "tool" @@ -254,9 +499,78 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "do some things and stuff\n", + "\n", + "Options\n", + "=======\n", + "The options below are convenience aliases to configurable class-options,\n", + "as listed in the \"Equivalent to\" description-line of the aliases.\n", + "To see all configurable class-options for some , use:\n", + " --help-all\n", + "\n", + "-q, --quiet\n", + " Disable console logging.\n", + " Equivalent to: [--Tool.quiet=True]\n", + "-v, --verbose\n", + " Set log level to DEBUG\n", + " Equivalent to: [--Tool.log_level=DEBUG]\n", + "--overwrite\n", + " Overwrite existing output files without asking\n", + " Equivalent to: [--Tool.overwrite=True]\n", + "--debug\n", + " Set log-level to debug, for the most verbose logging.\n", + " Equivalent to: [--Application.log_level=10]\n", + "--show-config\n", + " Show the application's configuration (human-readable format)\n", + " Equivalent to: [--Application.show_config=True]\n", + "--show-config-json\n", + " Show the application's configuration (json format)\n", + " Equivalent to: [--Application.show_config_json=True]\n", + "-c, --config=...\n", + " Default: []\n", + " Equivalent to: [--Tool.config_files]\n", + "--log-level=\n", + " Set the log level by value or name.\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 30\n", + " Equivalent to: [--Tool.log_level]\n", + "-l, --log-file=\n", + " Filename for the log\n", + " Default: None\n", + " Equivalent to: [--Tool.log_file]\n", + "--log-file-level=\n", + " Logging Level for File Logging\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 'INFO'\n", + " Equivalent to: [--Tool.log_file_level]\n", + "--provenance-log=\n", + " Default: traitlets.Undefined\n", + " Equivalent to: [--Tool.provenance_log]\n", + "--infile=\n", + " input file name\n", + " Default: traitlets.Undefined\n", + " Equivalent to: [--AdvancedComponent.infile]\n", + "--outfile=\n", + " output file name\n", + " Default: traitlets.Undefined\n", + " Equivalent to: [--AdvancedComponent.outfile]\n", + "--iterations=\n", + " Number of times to run\n", + " Default: 5\n", + " Equivalent to: [--MyTool.iterations]\n", + "\n", + "To see all available configurables, use `--help-all`.\n", + "\n" + ] + } + ], "source": [ "tool.print_help()" ] @@ -270,9 +584,322 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "do some things and stuff\n", + "\n", + "Options\n", + "=======\n", + "The options below are convenience aliases to configurable class-options,\n", + "as listed in the \"Equivalent to\" description-line of the aliases.\n", + "To see all configurable class-options for some , use:\n", + " --help-all\n", + "\n", + "-q, --quiet\n", + " Disable console logging.\n", + " Equivalent to: [--Tool.quiet=True]\n", + "-v, --verbose\n", + " Set log level to DEBUG\n", + " Equivalent to: [--Tool.log_level=DEBUG]\n", + "--overwrite\n", + " Overwrite existing output files without asking\n", + " Equivalent to: [--Tool.overwrite=True]\n", + "--debug\n", + " Set log-level to debug, for the most verbose logging.\n", + " Equivalent to: [--Application.log_level=10]\n", + "--show-config\n", + " Show the application's configuration (human-readable format)\n", + " Equivalent to: [--Application.show_config=True]\n", + "--show-config-json\n", + " Show the application's configuration (json format)\n", + " Equivalent to: [--Application.show_config_json=True]\n", + "-c, --config=...\n", + " Default: []\n", + " Equivalent to: [--Tool.config_files]\n", + "--log-level=\n", + " Set the log level by value or name.\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 30\n", + " Equivalent to: [--Tool.log_level]\n", + "-l, --log-file=\n", + " Filename for the log\n", + " Default: None\n", + " Equivalent to: [--Tool.log_file]\n", + "--log-file-level=\n", + " Logging Level for File Logging\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 'INFO'\n", + " Equivalent to: [--Tool.log_file_level]\n", + "--provenance-log=\n", + " Default: traitlets.Undefined\n", + " Equivalent to: [--Tool.provenance_log]\n", + "--infile=\n", + " input file name\n", + " Default: traitlets.Undefined\n", + " Equivalent to: [--AdvancedComponent.infile]\n", + "--outfile=\n", + " output file name\n", + " Default: traitlets.Undefined\n", + " Equivalent to: [--AdvancedComponent.outfile]\n", + "--iterations=\n", + " Number of times to run\n", + " Default: 5\n", + " Equivalent to: [--MyTool.iterations]\n", + "\n", + "Class options\n", + "=============\n", + "The command-line option below sets the respective configurable class-parameter:\n", + " --Class.parameter=value\n", + "This line is evaluated in Python, so simple expressions are allowed.\n", + "For instance, to set `C.a=[0,1,2]`, you may type this:\n", + " --C.a='range(3)'\n", + "\n", + "Application(SingletonConfigurable) options\n", + "------------------------------------------\n", + "--Application.log_datefmt=\n", + " The date format used by logging formatters for %(asctime)s\n", + " Default: '%Y-%m-%d %H:%M:%S'\n", + "--Application.log_format=\n", + " The Logging format template\n", + " Default: '[%(name)s]%(highlevel)s %(message)s'\n", + "--Application.log_level=\n", + " Set the log level by value or name.\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 30\n", + "--Application.logging_config==...\n", + " Configure additional log handlers.\n", + " The default stderr logs handler is configured by the log_level, log_datefmt\n", + " and log_format settings.\n", + " This configuration can be used to configure additional handlers (e.g. to\n", + " output the log to a file) or for finer control over the default handlers.\n", + " If provided this should be a logging configuration dictionary, for more\n", + " information see:\n", + " https://docs.python.org/3/library/logging.config.html#logging-config-\n", + " dictschema\n", + " This dictionary is merged with the base logging configuration which defines\n", + " the following:\n", + " * A logging formatter intended for interactive use called\n", + " ``console``.\n", + " * A logging handler that writes to stderr called\n", + " ``console`` which uses the formatter ``console``.\n", + " * A logger with the name of this application set to ``DEBUG``\n", + " level.\n", + " This example adds a new handler that writes to a file:\n", + " .. code-block:: python\n", + " c.Application.logging_config = {\n", + " 'handlers': {\n", + " 'file': {\n", + " 'class': 'logging.FileHandler',\n", + " 'level': 'DEBUG',\n", + " 'filename': '',\n", + " }\n", + " },\n", + " 'loggers': {\n", + " '': {\n", + " 'level': 'DEBUG',\n", + " # NOTE: if you don't list the default \"console\"\n", + " # handler here then it will be disabled\n", + " 'handlers': ['console', 'file'],\n", + " },\n", + " }\n", + " }\n", + " Default: {}\n", + "--Application.show_config=\n", + " Instead of starting the Application, dump configuration to stdout\n", + " Default: False\n", + "--Application.show_config_json=\n", + " Instead of starting the Application, dump configuration to stdout (as JSON)\n", + " Default: False\n", + "\n", + "Tool(Application) options\n", + "-------------------------\n", + "--Tool.config_files=...\n", + " Default: []\n", + "--Tool.log_config==...\n", + " Default: {}\n", + "--Tool.log_datefmt=\n", + " The date format used by logging formatters for %(asctime)s\n", + " Default: '%Y-%m-%d %H:%M:%S'\n", + "--Tool.log_file=\n", + " Filename for the log\n", + " Default: None\n", + "--Tool.log_file_level=\n", + " Logging Level for File Logging\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 'INFO'\n", + "--Tool.log_format=\n", + " The Logging format template\n", + " Default: '[%(name)s]%(highlevel)s %(message)s'\n", + "--Tool.log_level=\n", + " Set the log level by value or name.\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 30\n", + "--Tool.logging_config==...\n", + " Configure additional log handlers.\n", + " The default stderr logs handler is configured by the log_level, log_datefmt\n", + " and log_format settings.\n", + " This configuration can be used to configure additional handlers (e.g. to\n", + " output the log to a file) or for finer control over the default handlers.\n", + " If provided this should be a logging configuration dictionary, for more\n", + " information see:\n", + " https://docs.python.org/3/library/logging.config.html#logging-config-\n", + " dictschema\n", + " This dictionary is merged with the base logging configuration which defines\n", + " the following:\n", + " * A logging formatter intended for interactive use called\n", + " ``console``.\n", + " * A logging handler that writes to stderr called\n", + " ``console`` which uses the formatter ``console``.\n", + " * A logger with the name of this application set to ``DEBUG``\n", + " level.\n", + " This example adds a new handler that writes to a file:\n", + " .. code-block:: python\n", + " c.Application.logging_config = {\n", + " 'handlers': {\n", + " 'file': {\n", + " 'class': 'logging.FileHandler',\n", + " 'level': 'DEBUG',\n", + " 'filename': '',\n", + " }\n", + " },\n", + " 'loggers': {\n", + " '': {\n", + " 'level': 'DEBUG',\n", + " # NOTE: if you don't list the default \"console\"\n", + " # handler here then it will be disabled\n", + " 'handlers': ['console', 'file'],\n", + " },\n", + " }\n", + " }\n", + " Default: {}\n", + "--Tool.overwrite=\n", + " Default: False\n", + "--Tool.provenance_log=\n", + " Default: traitlets.Undefined\n", + "--Tool.quiet=\n", + " Default: False\n", + "--Tool.show_config=\n", + " Instead of starting the Application, dump configuration to stdout\n", + " Default: False\n", + "--Tool.show_config_json=\n", + " Instead of starting the Application, dump configuration to stdout (as JSON)\n", + " Default: False\n", + "\n", + "MyTool(Tool) options\n", + "--------------------\n", + "--MyTool.config_files=...\n", + " Default: []\n", + "--MyTool.iterations=\n", + " Number of times to run\n", + " Default: 5\n", + "--MyTool.log_config==...\n", + " Default: {}\n", + "--MyTool.log_datefmt=\n", + " The date format used by logging formatters for %(asctime)s\n", + " Default: '%Y-%m-%d %H:%M:%S'\n", + "--MyTool.log_file=\n", + " Filename for the log\n", + " Default: None\n", + "--MyTool.log_file_level=\n", + " Logging Level for File Logging\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 'INFO'\n", + "--MyTool.log_format=\n", + " The Logging format template\n", + " Default: '[%(name)s]%(highlevel)s %(message)s'\n", + "--MyTool.log_level=\n", + " Set the log level by value or name.\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 30\n", + "--MyTool.logging_config==...\n", + " Configure additional log handlers.\n", + " The default stderr logs handler is configured by the log_level, log_datefmt\n", + " and log_format settings.\n", + " This configuration can be used to configure additional handlers (e.g. to\n", + " output the log to a file) or for finer control over the default handlers.\n", + " If provided this should be a logging configuration dictionary, for more\n", + " information see:\n", + " https://docs.python.org/3/library/logging.config.html#logging-config-\n", + " dictschema\n", + " This dictionary is merged with the base logging configuration which defines\n", + " the following:\n", + " * A logging formatter intended for interactive use called\n", + " ``console``.\n", + " * A logging handler that writes to stderr called\n", + " ``console`` which uses the formatter ``console``.\n", + " * A logger with the name of this application set to ``DEBUG``\n", + " level.\n", + " This example adds a new handler that writes to a file:\n", + " .. code-block:: python\n", + " c.Application.logging_config = {\n", + " 'handlers': {\n", + " 'file': {\n", + " 'class': 'logging.FileHandler',\n", + " 'level': 'DEBUG',\n", + " 'filename': '',\n", + " }\n", + " },\n", + " 'loggers': {\n", + " '': {\n", + " 'level': 'DEBUG',\n", + " # NOTE: if you don't list the default \"console\"\n", + " # handler here then it will be disabled\n", + " 'handlers': ['console', 'file'],\n", + " },\n", + " }\n", + " }\n", + " Default: {}\n", + "--MyTool.overwrite=\n", + " Default: False\n", + "--MyTool.provenance_log=\n", + " Default: traitlets.Undefined\n", + "--MyTool.quiet=\n", + " Default: False\n", + "--MyTool.show_config=\n", + " Instead of starting the Application, dump configuration to stdout\n", + " Default: False\n", + "--MyTool.show_config_json=\n", + " Instead of starting the Application, dump configuration to stdout (as JSON)\n", + " Default: False\n", + "\n", + "MyComponent(Component) options\n", + "------------------------------\n", + "--MyComponent.value=\n", + " Value to use\n", + " Default: -1\n", + "\n", + "AdvancedComponent(Component) options\n", + "------------------------------------\n", + "--AdvancedComponent.infile=\n", + " input file name\n", + " Default: traitlets.Undefined\n", + "--AdvancedComponent.outfile=\n", + " output file name\n", + " Default: traitlets.Undefined\n", + "--AdvancedComponent.value1=\n", + " Value to use\n", + " Default: -1\n", + "\n", + "SecondaryMyComponent(MyComponent) options\n", + "-----------------------------------------\n", + "--SecondaryMyComponent.value=\n", + " Value to use\n", + " Default: -1\n", + "\n", + "TelescopeWiseComponent(TelescopeComponent) options\n", + "--------------------------------------------------\n", + "--TelescopeWiseComponent.param=...\n", + " Something configurable with telescope patterns.\n", + " Default: [('type', '*', 5.0)]\n", + "\n" + ] + } + ], "source": [ "tool.print_help(classes=True)" ] @@ -295,9 +922,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:52,057 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa170483f40>, 'type': 'change'}'\n", + "2023-07-03 17:24:52,559 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n" + ] + } + ], "source": [ "try:\n", " tool.run(argv=[\"--infile\", str(GAMMA_FILE), \"--outfile\", \"out.csv\"])\n", @@ -307,9 +943,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:52,798 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): Loading config from '[]'\n", + "2023-07-03 17:24:52,800 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): ctapipe version 0.19.1.dev27+g062fd966.d20230703\n", + "2023-07-03 17:24:52,802 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa170483520>, 'type': 'change'}'\n", + "2023-07-03 17:24:52,803 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): Performing 3 iterations...\n", + "2023-07-03 17:24:52,803 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 0\n", + "2023-07-03 17:24:52,903 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 1\n", + "2023-07-03 17:24:53,005 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 2\n", + "2023-07-03 17:24:53,106 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n", + "2023-07-03 17:24:53,108 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Finished: mytool\n", + "2023-07-03 17:24:53,114 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:53,116 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n" + ] + } + ], "source": [ "tool.log_format = \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\"\n", "\n", @@ -340,9 +994,2637 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:53,149 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Starting: mytool\n", + "2023-07-03 17:24:53,325 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): Loading config from '[]'\n", + "2023-07-03 17:24:53,327 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): ctapipe version 0.19.1.dev27+g062fd966.d20230703\n", + "2023-07-03 17:24:53,329 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa170486340>, 'type': 'change'}'\n", + "2023-07-03 17:24:53,330 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (tool.run): CONFIG: {'MyTool': {'config_files': [], 'iterations': 3, 'log_config': {}, 'log_datefmt': '%Y-%m-%d %H:%M:%S', 'log_file': None, 'log_file_level': 'INFO', 'log_format': '%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s', 'log_level': 10, 'logging_config': {}, 'overwrite': False, 'provenance_log': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log'), 'quiet': False, 'show_config': False, 'show_config_json': False, 'MyComponent': {'value': -1}, 'SecondaryMyComponent': {'value': -1}, 'TelescopeWiseComponent': {'param': [('type', '*', 5.0)]}, 'AdvancedComponent': {'infile': PosixPath('/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst'), 'outfile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'value1': -1, 'MyComponent': {'value': -1}}}}\n", + "2023-07-03 17:24:53,330 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): Performing 3 iterations...\n", + "2023-07-03 17:24:53,330 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 0\n", + "2023-07-03 17:24:53,331 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:53,331 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:53,432 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 1\n", + "2023-07-03 17:24:53,433 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:53,435 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:53,537 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 2\n", + "2023-07-03 17:24:53,538 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:53,539 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:53,640 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n", + "2023-07-03 17:24:53,642 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Finished: mytool\n", + "2023-07-03 17:24:53,649 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:53,651 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:53,653 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:53,668 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (tool.write_provenance): PROVENANCE: '[\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"c2c31b3c-b5cd-4c46-8581-e0cf17c94af0\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:51.880\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:52.561\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:52.052\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 5,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"[%(name)s]%(highlevel)s %(message)s\",\n", + " \"log_level\": 30,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.011350000000014404\n", + " },\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"9a689c40-0157-4ee0-88f4-fb8125ef689c\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:52.601\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.110\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:52.794\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 3,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", + " \"log_level\": 20,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.008483333333408893\n", + " },\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"a237bc8b-cb43-456b-a3d2-3f1ad096fbeb\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.153\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.644\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:53.322\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 3,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", + " \"log_level\": 10,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.00818333333336696\n", + " }\n", + "]'\n", + "2023-07-03 17:24:53,683 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (application.exit): Exiting application: mytool\n" + ] + } + ], "source": [ "try:\n", " tool.run(\n", @@ -368,9 +3650,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:53,720 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Starting: mytool\n", + "2023-07-03 17:24:53,931 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa170486880>, 'type': 'change'}'\n", + "2023-07-03 17:24:54,032 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n" + ] + } + ], "source": [ "tool.iterations = 1\n", "tool.log_level = 0\n", @@ -390,9 +3682,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bad value: The 'iterations' trait of a MyTool instance expected an int, not the str 'badval'.\n" + ] + } + ], "source": [ "try:\n", " tool.iterations = \"badval\"\n", @@ -411,9 +3711,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:54,141 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/Another.txt'), 'owner': <__main__.AdvancedComponent object at 0x7fa170486880>, 'type': 'change'}'\n" + ] + } + ], "source": [ "tool.advanced.outfile = \"Another.txt\"" ] @@ -434,7 +3742,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -443,9 +3751,4382 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:54,332 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): ctapipe version 0.19.1.dev27+g062fd966.d20230703\n", + "2023-07-03 17:24:54,334 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/foo.txt'), 'owner': <__main__.AdvancedComponent object at 0x7fa170486e20>, 'type': 'change'}'\n", + "2023-07-03 17:24:54,335 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (tool.run): CONFIG: {'MyTool': {'config_files': [PosixPath('/home/aknierim/dev/ctapipe/docs/examples/Tools.json')], 'iterations': 5, 'log_config': {}, 'log_datefmt': '%Y-%m-%d %H:%M:%S', 'log_file': None, 'log_file_level': 'INFO', 'log_format': '[%(name)s]%(highlevel)s %(message)s', 'log_level': 10, 'logging_config': {}, 'overwrite': False, 'provenance_log': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log'), 'quiet': False, 'show_config': False, 'show_config_json': False, 'MyComponent': {'value': -1}, 'SecondaryMyComponent': {'value': -1}, 'TelescopeWiseComponent': {'param': [('type', '*', 5.0)]}, 'AdvancedComponent': {'infile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/something.txt'), 'outfile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/foo.txt'), 'value1': -1, 'MyComponent': {'value': -1}}}}\n", + "2023-07-03 17:24:54,336 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): Performing 5 iterations...\n", + "2023-07-03 17:24:54,336 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 0\n", + "2023-07-03 17:24:54,336 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,337 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,437 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 1\n", + "2023-07-03 17:24:54,439 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,441 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,542 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 2\n", + "2023-07-03 17:24:54,543 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,543 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,644 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 3\n", + "2023-07-03 17:24:54,645 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,647 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,748 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 4\n", + "2023-07-03 17:24:54,749 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,749 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,850 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n", + "2023-07-03 17:24:54,852 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Finished: mytool\n", + "2023-07-03 17:24:54,858 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:54,859 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:54,861 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:54,862 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:54,864 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:54,887 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (tool.write_provenance): PROVENANCE: '[\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"c2c31b3c-b5cd-4c46-8581-e0cf17c94af0\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:51.880\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:52.561\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:52.052\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 5,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"[%(name)s]%(highlevel)s %(message)s\",\n", + " \"log_level\": 30,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.011350000000014404\n", + " },\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"9a689c40-0157-4ee0-88f4-fb8125ef689c\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:52.601\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.110\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:52.794\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 3,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", + " \"log_level\": 20,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.008483333333408893\n", + " },\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"a237bc8b-cb43-456b-a3d2-3f1ad096fbeb\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.153\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.644\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:53.322\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 3,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", + " \"log_level\": 10,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.00818333333336696\n", + " },\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"b0ef6627-d00f-4fd8-bf9a-7631e890715b\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.722\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:54.034\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:53.927\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 1,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", + " \"log_level\": 0,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.005199999999874194\n", + " },\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"837610ed-009c-4e8f-9770-cfb76ab71239\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:54.154\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:54.854\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:54.328\"\n", + " },\n", + " \"input\": [\n", + " {\n", + " \"url\": \"/home/aknierim/dev/ctapipe/docs/examples/Tools.json\",\n", + " \"role\": \"Tool Configuration\"\n", + " }\n", + " ],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [\n", + " \"/home/aknierim/dev/ctapipe/docs/examples/Tools.json\"\n", + " ],\n", + " \"iterations\": 5,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"[%(name)s]%(highlevel)s %(message)s\",\n", + " \"log_level\": 10,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/dev/ctapipe/docs/examples/something.txt\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/foo.txt\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.01166666666650329\n", + " }\n", + "]'\n", + "2023-07-03 17:24:54,902 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (application.exit): Exiting application: mytool\n" + ] + } + ], "source": [ "try:\n", " tool2.run(argv=[\"--config\", \"Tools.json\"])\n", @@ -455,34 +8136,61 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/aknierim/dev/ctapipe/docs/examples/something.txt\n" + ] + } + ], "source": [ "print(tool2.advanced.infile)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'MyTool': {'config_files': ['Tools.json'], 'log_level': 'DEBUG'}, 'AdvancedComponent': {'infile': 'something.txt', 'outfile': 'foo.txt'}}\n" + ] + } + ], "source": [ "print(tool2.config)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool2.is_setup" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -491,16 +8199,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool3.is_setup" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -509,27 +8228,283 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool3.is_setup" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "MyTool\n", + "

\n", + "

do some things and stuff

\n", + "
\n", + "

\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "
config_files[] (default: traitlets.Undefined)
iterations5Number of times to run (default: 5)
log_config{} (default: traitlets.Undefined)
log_datefmt%Y-%m-%d %H:%M:%SThe date format used by logging formatters for %(asctime)s (default: %Y-%m-%d %H:%M:%S)
log_fileNoneFilename for the log (default: None)
log_file_levelINFOLogging Level for File Logging (default: INFO)
log_format[%(name)s]%(highlevel)s %(message)sThe Logging format template (default: [%(name)s]%(highlevel)s %(message)s)
log_level30Set the log level by value or name. (default: 30)
logging_config{}\n", + " Configure additional log handlers.\n", + "\n", + " The default stderr logs handler is configured by the\n", + " log_level, log_datefmt and log_format settings.\n", + "\n", + " This configuration can be used to configure additional handlers\n", + " (e.g. to output the log to a file) or for finer control over the\n", + " default handlers.\n", + "\n", + " If provided this should be a logging configuration dictionary, for\n", + " more information see:\n", + " https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\n", + "\n", + " This dictionary is merged with the base logging configuration which\n", + " defines the following:\n", + "\n", + " * A logging formatter intended for interactive use called\n", + " ``console``.\n", + " * A logging handler that writes to stderr called\n", + " ``console`` which uses the formatter ``console``.\n", + " * A logger with the name of this application set to ``DEBUG``\n", + " level.\n", + "\n", + " This example adds a new handler that writes to a file:\n", + "\n", + " .. code-block:: python\n", + "\n", + " c.Application.logging_config = {\n", + " 'handlers': {\n", + " 'file': {\n", + " 'class': 'logging.FileHandler',\n", + " 'level': 'DEBUG',\n", + " 'filename': '',\n", + " }\n", + " },\n", + " 'loggers': {\n", + " '': {\n", + " 'level': 'DEBUG',\n", + " # NOTE: if you don't list the default \"console\"\n", + " # handler here then it will be disabled\n", + " 'handlers': ['console', 'file'],\n", + " },\n", + " }\n", + " }\n", + "\n", + " (default: traitlets.Undefined)
overwriteFalse (default: False)
provenance_log/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log (default: traitlets.Undefined)
quietFalse (default: False)
show_configFalseInstead of starting the Application, dump configuration to stdout (default: False)
show_config_jsonFalseInstead of starting the Application, dump configuration to stdout (as JSON) (default: False)
\n", + "

Components:\n", + "MyTool, MyComponent, AdvancedComponent, SecondaryMyComponent, TelescopeWiseComponent\n", + "

\n", + "" + ], + "text/plain": [ + "<__main__.MyTool at 0x7fa1985c6610>" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool3" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:55,026 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa1704f4250>, 'type': 'change'}'\n" + ] + }, + { + "data": { + "text/html": [ + "MyTool\n", + "

\n", + "

do some things and stuff

\n", + "
\n", + "

\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "
config_files[] (default: traitlets.Undefined)
iterations1Number of times to run (default: 5)
log_config{} (default: traitlets.Undefined)
log_datefmt%Y-%m-%d %H:%M:%SThe date format used by logging formatters for %(asctime)s (default: %Y-%m-%d %H:%M:%S)
log_fileNoneFilename for the log (default: None)
log_file_levelINFOLogging Level for File Logging (default: INFO)
log_format%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)sThe Logging format template (default: [%(name)s]%(highlevel)s %(message)s)
log_level0Set the log level by value or name. (default: 30)
logging_config{}\n", + " Configure additional log handlers.\n", + "\n", + " The default stderr logs handler is configured by the\n", + " log_level, log_datefmt and log_format settings.\n", + "\n", + " This configuration can be used to configure additional handlers\n", + " (e.g. to output the log to a file) or for finer control over the\n", + " default handlers.\n", + "\n", + " If provided this should be a logging configuration dictionary, for\n", + " more information see:\n", + " https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\n", + "\n", + " This dictionary is merged with the base logging configuration which\n", + " defines the following:\n", + "\n", + " * A logging formatter intended for interactive use called\n", + " ``console``.\n", + " * A logging handler that writes to stderr called\n", + " ``console`` which uses the formatter ``console``.\n", + " * A logger with the name of this application set to ``DEBUG``\n", + " level.\n", + "\n", + " This example adds a new handler that writes to a file:\n", + "\n", + " .. code-block:: python\n", + "\n", + " c.Application.logging_config = {\n", + " 'handlers': {\n", + " 'file': {\n", + " 'class': 'logging.FileHandler',\n", + " 'level': 'DEBUG',\n", + " 'filename': '',\n", + " }\n", + " },\n", + " 'loggers': {\n", + " '': {\n", + " 'level': 'DEBUG',\n", + " # NOTE: if you don't list the default \"console\"\n", + " # handler here then it will be disabled\n", + " 'handlers': ['console', 'file'],\n", + " },\n", + " }\n", + " }\n", + "\n", + " (default: traitlets.Undefined)
overwriteFalse (default: False)
provenance_log/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log (default: traitlets.Undefined)
quietFalse (default: False)
show_configFalseInstead of starting the Application, dump configuration to stdout (default: False)
show_config_jsonFalseInstead of starting the Application, dump configuration to stdout (as JSON) (default: False)
\n", + "

Components:\n", + "MyTool, MyComponent, AdvancedComponent, SecondaryMyComponent, TelescopeWiseComponent\n", + "

\n", + "" + ], + "text/plain": [ + "<__main__.MyTool at 0x7fa170490cd0>" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool.setup()\n", "tool" @@ -537,9 +8512,41 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "SecondaryMyComponent\n", + "

\n", + "

A second component

\n", + "
\n", + "

\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
value-1Value to use (default: -1)
\n", + "
" + ], + "text/plain": [ + "<__main__.SecondaryMyComponent at 0x7fa1704f4a00>" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool.comp2" ] @@ -553,18 +8560,84 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'MyTool': {'config_files': [],\n", + " 'iterations': 1,\n", + " 'log_config': {},\n", + " 'log_datefmt': '%Y-%m-%d %H:%M:%S',\n", + " 'log_file': None,\n", + " 'log_file_level': 'INFO',\n", + " 'log_format': '%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s',\n", + " 'log_level': 0,\n", + " 'logging_config': {},\n", + " 'overwrite': False,\n", + " 'provenance_log': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log'),\n", + " 'quiet': False,\n", + " 'show_config': False,\n", + " 'show_config_json': False,\n", + " 'MyComponent': {'value': -1},\n", + " 'SecondaryMyComponent': {'value': -1},\n", + " 'TelescopeWiseComponent': {'param': TelescopePatternList([('type',\n", + " '*',\n", + " 5.0)])},\n", + " 'AdvancedComponent': {'infile': PosixPath('/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst'),\n", + " 'outfile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'),\n", + " 'value1': -1,\n", + " 'MyComponent': {'value': -1}}}}" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool.get_current_config()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'MyTool': {'config_files': [],\n", + " 'iterations': 12,\n", + " 'log_config': {},\n", + " 'log_datefmt': '%Y-%m-%d %H:%M:%S',\n", + " 'log_file': None,\n", + " 'log_file_level': 'INFO',\n", + " 'log_format': '%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s',\n", + " 'log_level': 0,\n", + " 'logging_config': {},\n", + " 'overwrite': False,\n", + " 'provenance_log': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log'),\n", + " 'quiet': False,\n", + " 'show_config': False,\n", + " 'show_config_json': False,\n", + " 'MyComponent': {'value': -1},\n", + " 'SecondaryMyComponent': {'value': -1},\n", + " 'TelescopeWiseComponent': {'param': TelescopePatternList([('type',\n", + " '*',\n", + " 5.0)])},\n", + " 'AdvancedComponent': {'infile': PosixPath('/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst'),\n", + " 'outfile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'),\n", + " 'value1': -1,\n", + " 'MyComponent': {'value': -1}}}}" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool.iterations = 12\n", "tool.get_current_config()" @@ -579,9 +8652,244 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# Configuration file for mytool.\n", + "\n", + "c = get_config() #noqa\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# Application(SingletonConfigurable) configuration\n", + "#------------------------------------------------------------------------------\n", + "## This is an application.\n", + "\n", + "## The date format used by logging formatters for %(asctime)s\n", + "# Default: '%Y-%m-%d %H:%M:%S'\n", + "# c.Application.log_datefmt = '%Y-%m-%d %H:%M:%S'\n", + "\n", + "## The Logging format template\n", + "# Default: '[%(name)s]%(highlevel)s %(message)s'\n", + "# c.Application.log_format = '[%(name)s]%(highlevel)s %(message)s'\n", + "\n", + "## Set the log level by value or name.\n", + "# Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + "# Default: 30\n", + "# c.Application.log_level = 30\n", + "\n", + "## Configure additional log handlers.\n", + "# \n", + "# The default stderr logs handler is configured by the log_level, log_datefmt\n", + "# and log_format settings.\n", + "# \n", + "# This configuration can be used to configure additional handlers (e.g. to\n", + "# output the log to a file) or for finer control over the default handlers.\n", + "# \n", + "# If provided this should be a logging configuration dictionary, for more\n", + "# information see:\n", + "# https://docs.python.org/3/library/logging.config.html#logging-config-\n", + "# dictschema\n", + "# \n", + "# This dictionary is merged with the base logging configuration which defines\n", + "# the following:\n", + "# \n", + "# * A logging formatter intended for interactive use called\n", + "# ``console``.\n", + "# * A logging handler that writes to stderr called\n", + "# ``console`` which uses the formatter ``console``.\n", + "# * A logger with the name of this application set to ``DEBUG``\n", + "# level.\n", + "# \n", + "# This example adds a new handler that writes to a file:\n", + "# \n", + "# .. code-block:: python\n", + "# \n", + "# c.Application.logging_config = {\n", + "# 'handlers': {\n", + "# 'file': {\n", + "# 'class': 'logging.FileHandler',\n", + "# 'level': 'DEBUG',\n", + "# 'filename': '',\n", + "# }\n", + "# },\n", + "# 'loggers': {\n", + "# '': {\n", + "# 'level': 'DEBUG',\n", + "# # NOTE: if you don't list the default \"console\"\n", + "# # handler here then it will be disabled\n", + "# 'handlers': ['console', 'file'],\n", + "# },\n", + "# }\n", + "# }\n", + "# Default: {}\n", + "# c.Application.logging_config = {}\n", + "\n", + "## Instead of starting the Application, dump configuration to stdout\n", + "# Default: False\n", + "# c.Application.show_config = False\n", + "\n", + "## Instead of starting the Application, dump configuration to stdout (as JSON)\n", + "# Default: False\n", + "# c.Application.show_config_json = False\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# Tool(Application) configuration\n", + "#------------------------------------------------------------------------------\n", + "## This is an application.\n", + "\n", + "# Default: []\n", + "# c.Tool.config_files = []\n", + "\n", + "# Default: {}\n", + "# c.Tool.log_config = {}\n", + "\n", + "## The date format used by logging formatters for %(asctime)s\n", + "# See also: Application.log_datefmt\n", + "# c.Tool.log_datefmt = '%Y-%m-%d %H:%M:%S'\n", + "\n", + "## Filename for the log\n", + "# Default: None\n", + "# c.Tool.log_file = None\n", + "\n", + "## Logging Level for File Logging\n", + "# Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + "# Default: 'INFO'\n", + "# c.Tool.log_file_level = 'INFO'\n", + "\n", + "## The Logging format template\n", + "# See also: Application.log_format\n", + "# c.Tool.log_format = '[%(name)s]%(highlevel)s %(message)s'\n", + "\n", + "## Set the log level by value or name.\n", + "# See also: Application.log_level\n", + "# c.Tool.log_level = 30\n", + "\n", + "## \n", + "# See also: Application.logging_config\n", + "# c.Tool.logging_config = {}\n", + "\n", + "# Default: False\n", + "# c.Tool.overwrite = False\n", + "\n", + "# Default: traitlets.Undefined\n", + "# c.Tool.provenance_log = traitlets.Undefined\n", + "\n", + "# Default: False\n", + "# c.Tool.quiet = False\n", + "\n", + "## Instead of starting the Application, dump configuration to stdout\n", + "# See also: Application.show_config\n", + "# c.Tool.show_config = False\n", + "\n", + "## Instead of starting the Application, dump configuration to stdout (as JSON)\n", + "# See also: Application.show_config_json\n", + "# c.Tool.show_config_json = False\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# MyTool(Tool) configuration\n", + "#------------------------------------------------------------------------------\n", + "# See also: Tool.config_files\n", + "# c.MyTool.config_files = []\n", + "\n", + "## Number of times to run\n", + "# Default: 5\n", + "# c.MyTool.iterations = 5\n", + "\n", + "# See also: Tool.log_config\n", + "# c.MyTool.log_config = {}\n", + "\n", + "## The date format used by logging formatters for %(asctime)s\n", + "# See also: Application.log_datefmt\n", + "# c.MyTool.log_datefmt = '%Y-%m-%d %H:%M:%S'\n", + "\n", + "## Filename for the log\n", + "# See also: Tool.log_file\n", + "# c.MyTool.log_file = None\n", + "\n", + "## Logging Level for File Logging\n", + "# See also: Tool.log_file_level\n", + "# c.MyTool.log_file_level = 'INFO'\n", + "\n", + "## The Logging format template\n", + "# See also: Application.log_format\n", + "# c.MyTool.log_format = '[%(name)s]%(highlevel)s %(message)s'\n", + "\n", + "## Set the log level by value or name.\n", + "# See also: Application.log_level\n", + "# c.MyTool.log_level = 30\n", + "\n", + "## \n", + "# See also: Application.logging_config\n", + "# c.MyTool.logging_config = {}\n", + "\n", + "# See also: Tool.overwrite\n", + "# c.MyTool.overwrite = False\n", + "\n", + "# See also: Tool.provenance_log\n", + "# c.MyTool.provenance_log = traitlets.Undefined\n", + "\n", + "# See also: Tool.quiet\n", + "# c.MyTool.quiet = False\n", + "\n", + "## Instead of starting the Application, dump configuration to stdout\n", + "# See also: Application.show_config\n", + "# c.MyTool.show_config = False\n", + "\n", + "## Instead of starting the Application, dump configuration to stdout (as JSON)\n", + "# See also: Application.show_config_json\n", + "# c.MyTool.show_config_json = False\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# MyComponent(Component) configuration\n", + "#------------------------------------------------------------------------------\n", + "## A Component that does stuff\n", + "\n", + "## Value to use\n", + "# Default: -1\n", + "# c.MyComponent.value = -1\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# AdvancedComponent(Component) configuration\n", + "#------------------------------------------------------------------------------\n", + "## An advanced technique\n", + "\n", + "## input file name\n", + "# Default: traitlets.Undefined\n", + "# c.AdvancedComponent.infile = traitlets.Undefined\n", + "\n", + "## output file name\n", + "# Default: traitlets.Undefined\n", + "# c.AdvancedComponent.outfile = traitlets.Undefined\n", + "\n", + "## Value to use\n", + "# Default: -1\n", + "# c.AdvancedComponent.value1 = -1\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# SecondaryMyComponent(MyComponent) configuration\n", + "#------------------------------------------------------------------------------\n", + "## A second component\n", + "\n", + "## Value to use\n", + "# See also: MyComponent.value\n", + "# c.SecondaryMyComponent.value = -1\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# TelescopeWiseComponent(TelescopeComponent) configuration\n", + "#------------------------------------------------------------------------------\n", + "## a component that contains parameters that are per-telescope configurable\n", + "\n", + "## Something configurable with telescope patterns.\n", + "# Default: [('type', '*', 5.0)]\n", + "# c.TelescopeWiseComponent.param = [('type', '*', 5.0)]\n", + "\n" + ] + } + ], "source": [ "print(tool.generate_config_file())" ] @@ -595,14 +8903,22 @@ } ], "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, "language_info": { "codemirror_mode": { - "name": "ipython" + "name": "ipython", + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", - "nbconvert_exporter": "python" + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" } }, "nbformat": 4, diff --git a/docs/getting_started/index.rst b/docs/getting_started/index.rst index 497847c8796..2fffa42a874 100644 --- a/docs/getting_started/index.rst +++ b/docs/getting_started/index.rst @@ -1,3 +1,4 @@ + .. _getting_started: ****************************** @@ -77,7 +78,6 @@ Change to the directory where you cloned ``ctapipe``, and type: .. code-block:: console - $ conda env create -n cta-dev -f environment.yml @@ -238,11 +238,11 @@ You can do this at any time and more than once. It just moves the changes from your local branch on your development machine to your fork on github. -++++++++++++++++++++++++ -4. make a *Pull Request* -++++++++++++++++++++++++ +++++++++++++++++++++++++++ +4. Create a *Pull Request* +++++++++++++++++++++++++++ -When you're happy, you make PR on on your github fork page by clicking +When you're happy, you create PR on on your github fork page by clicking "pull request". You can also do this via *GitHub Desktop* if you have that installed, by pushing the pull-request button in the upper-right-hand corner. @@ -279,7 +279,7 @@ When the PR is accepted, the reviewer will merge your branch into the *master* repo on cta-observatory's account. +++++++++++++++++++++++++++++ -6. delete your feature branch +6. Delete your feature branch +++++++++++++++++++++++++++++ since it is no longer needed (assuming it was accepted and merged in): diff --git a/docs/index.rst b/docs/index.rst index 04226dff2b9..f788f9ad5d1 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,5 +1,7 @@ .. include:: references.txt +:html_theme.sidebar_secondary.remove: true + .. _ctapipe: ============================================== @@ -8,11 +10,19 @@ Prototype CTA Pipeline Framework (``ctapipe``) .. currentmodule:: ctapipe -**version**: |version| +**Version**: |version| + +.. image:: ctapipe_logo.webp + :class: only-light + :align: center + :width: 90% + :alt: The ctapipe logo. -.. image:: ctapipe_logo.png +.. image:: ctapipe_logo_dark.webp + :class: only-dark :align: center :width: 90% + :alt: The ctapipe logo. What is ctapipe? ================ @@ -33,25 +43,150 @@ What is ctapipe? .. _ctapipe_docs: -General documentation -===================== +.. General documentation +.. ===================== .. toctree:: :maxdepth: 1 - :glob: + :hidden: - getting_started_users/index - getting_started/index + User Guide + Developer Guide + ctapipe_api/index development/index tutorials/index examples/index tools/index FAQ data_models/index - ctapipe_api/index bibliography changelog + + +.. grid:: 3 + + .. grid-item-card:: + + :octicon:`book;40px` + + User Guide + ^^^^^^^^^^ + + Learn how to get started as a user. This guide + will help you install ctapipe. + + +++ + + .. button-ref:: getting_started_users/index + :expand: + :color: primary + :click-parent: + + To the user guide + + + .. grid-item-card:: + + :octicon:`person-add;40px` + + Developer Guide + ^^^^^^^^^^^^^^^ + + Learn how to get started as a developer. + This guide will help you install ctapipe for development + and explains how to contribute. + + +++ + + .. button-ref:: getting_started/index + :expand: + :color: primary + :click-parent: + + To the developer guide + + + .. grid-item-card:: + + :octicon:`git-pull-request;40px` + + Development Guidelines + ^^^^^^^^^^^^^^^^^^^^^^ + + These guidelines explain the coding style and the workflow. The ctapipe + enhancement proposals (CEPs) can also be found here. + + +++ + + .. button-ref:: development/index + :expand: + :color: primary + :click-parent: + + To the development guidelines + + + .. grid-item-card:: + + :octicon:`code;40px` + + API Docs + ^^^^^^^^ + + The API docs contain detailed descriptions of + of the various modules and functions included + in ctapipe. + + +++ + + .. button-ref:: ctapipe_api/index + :expand: + :color: primary + :click-parent: + + To API docs + + + .. grid-item-card:: + + :octicon:`mortar-board;40px` + + Tutorials + ^^^^^^^^^ + + A collection of tutorials aimed at new users + and developers to familiarize with ctapipe. + + +++ + + .. button-ref:: tutorials/index + :expand: + :color: primary + :click-parent: + + To the tutorials + + + .. grid-item-card:: + + :octicon:`light-bulb;40px` + + Examples + ^^^^^^^^ + + Some lower-level examples of features included in the ctapipe API. + + +++ + + .. button-ref:: examples/index + :expand: + :color: primary + :click-parent: + + To the examples + + Module API Status (relative to next release) ============================================ @@ -65,3 +200,7 @@ Development Help * Development workflow examples from AstroPy: https://astropy.readthedocs.org/en/latest/development/workflow/development_workflow.html * GIT tutorial: https://www.atlassian.com/git/tutorials/syncing/git-pull * Code distribution and Packaging https://packaging.python.org/en/latest/ + + + + diff --git a/docs/versions.json b/docs/versions.json new file mode 100644 index 00000000000..325cfcaf9eb --- /dev/null +++ b/docs/versions.json @@ -0,0 +1,12 @@ +[ + { + "name": "latest", + "version": "latest", + "url": "https://ctapipe.readthedocs.io/en/latest/" + }, + { + "name": "stable", + "version": "stable", + "url": "https://ctapipe.readthedocs.io/en/stable/" + }, +] From c1eef15eae0d1fe0038ff2c9439f896b9a90282e Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 15:53:33 +0200 Subject: [PATCH 05/37] Update setup.cfg pydata dependency --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index 303997ce672..c26a1969475 100644 --- a/setup.cfg +++ b/setup.cfg @@ -57,7 +57,7 @@ tests = docs = sphinx - sphinx_rtd_theme + pydata_sphinx_theme sphinx_automodapi nbsphinx numpydoc From a76a43d94d6ffa0c555e369f8ce14c9d9b148928 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 16:00:11 +0200 Subject: [PATCH 06/37] Added sphinx-design --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index c26a1969475..67d11b36c1f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -61,6 +61,7 @@ docs = sphinx_automodapi nbsphinx numpydoc + sphinx-design jupyter notebook graphviz From c60a81e0a56f769ffa1c9a3da9db3a5cbb2c9b76 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 16:51:56 +0200 Subject: [PATCH 07/37] Update environment.yml and setup.cfg to latest version of sphinx --- environment.yml | 5 ++--- setup.cfg | 7 +++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/environment.yml b/environment.yml index e2d90f14896..a45df14902b 100644 --- a/environment.yml +++ b/environment.yml @@ -9,7 +9,7 @@ dependencies: - astropy=5 - black - bokeh=2 - - nbsphinx >=0.8.12,<0.9 + - nbsphinx - cython - graphviz - h5py @@ -34,7 +34,7 @@ dependencies: - scikit-learn - scipy - setuptools - - sphinx=3.5 + - sphinx - sphinx-automodapi - sphinx_rtd_theme - tomli @@ -47,5 +47,4 @@ dependencies: - zlib - zstandard - eventio>=1.9.1 - - jinja2=3.0 # for sphinx 3.5, remove when updating to 4.x - ffmpeg # for making movies in the documentation diff --git a/setup.cfg b/setup.cfg index 5092c8e6292..d3e867f8638 100644 --- a/setup.cfg +++ b/setup.cfg @@ -56,12 +56,11 @@ tests = docs = - sphinx ~=3.5 - jinja2 ~=3.0.2 # for sphinx 3.5, remove when upgrading sphinx + sphinx sphinx_rtd_theme sphinx_automodapi - nbsphinx ~=0.8.12 - numpydoc ~=1.4.0 + nbsphinx + numpydoc jupyter notebook graphviz From 658fb6a8617340150e5f18343761329e10098812 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 15:31:02 +0200 Subject: [PATCH 08/37] Moved docs/_static/theme_overrides.css to docs/_static/ctapipe.css --- docs/_static/ctapipe.css | 47 ++++++++++++++++++++++++++++++++ docs/_static/theme_overrides.css | 13 --------- 2 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 docs/_static/ctapipe.css delete mode 100644 docs/_static/theme_overrides.css diff --git a/docs/_static/ctapipe.css b/docs/_static/ctapipe.css new file mode 100644 index 00000000000..243e4af60cd --- /dev/null +++ b/docs/_static/ctapipe.css @@ -0,0 +1,47 @@ +/* override table width restrictions */ +@media screen and (min-width: 767px) { + + .wy-table-responsive table td { + /* !important prevents the common CSS stylesheets from overriding + this as on RTD they are loaded after this stylesheet */ + white-space: normal !important; + } + + .wy-table-responsive { + overflow: visible !important; + } +} + +/* sphinx-design */ +.sd-card { + border-radius: 5px; + padding: 30px 10px 20px 10px; + margin: 10px 0px; +} + +.sd-card .sd-card-header .sd-card-text { + margin: 0px; +} + +.sd-card .sd-card-header { + border: none; + text-align: center; + font-size: var(--pst-font-size-h4); + font-weight: bold; + padding: 0.5rem 0rem 0.5rem 0rem; +} + +.sd-card .sd-card-footer { + border: none; +} + +.sd-card .sd-card-footer .sd-card-text { + max-width: 220px; + margin-left: auto; + margin-right: auto; +} + +html[data-theme="dark"] .sd-shadow-sm { + --sd-color-shadow: #6e6e6e; +} + diff --git a/docs/_static/theme_overrides.css b/docs/_static/theme_overrides.css deleted file mode 100644 index 63ee6cc74ce..00000000000 --- a/docs/_static/theme_overrides.css +++ /dev/null @@ -1,13 +0,0 @@ -/* override table width restrictions */ -@media screen and (min-width: 767px) { - - .wy-table-responsive table td { - /* !important prevents the common CSS stylesheets from overriding - this as on RTD they are loaded after this stylesheet */ - white-space: normal !important; - } - - .wy-table-responsive { - overflow: visible !important; - } -} From d2a6d54270d3884fedf9b5d03abc1a39187a6227 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 15:33:22 +0200 Subject: [PATCH 09/37] Added logos dark/light --- docs/ctapipe_logo.webp | Bin 0 -> 108648 bytes docs/ctapipe_logo_dark.webp | Bin 0 -> 99660 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/ctapipe_logo.webp create mode 100644 docs/ctapipe_logo_dark.webp diff --git a/docs/ctapipe_logo.webp b/docs/ctapipe_logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..bde5a0c7d4f69dc9ae46a2ba887e4b03f569b524 GIT binary patch literal 108648 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
(=B=trifenm;SA{OD*L|^pqEt|@>DM~9bSHm4 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 z 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" + ], + "text/plain": [ + "<__main__.MyComponent at 0x7fa1066e5eb0>" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "MyComponent()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Outfile was changed to '{'name': 'outfile', 'old': None, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.foo'), 'owner': <__main__.AdvancedComponent object at 0x7fa105f4fe20>, 'type': 'change'}'\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "AdvancedComponent\n", + "

\n", + "

An advanced technique

\n", + "
\n", + "

\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "
infile/home/aknierim/dev/ctapipe/docs/examples/test.fooinput file name (default: traitlets.Undefined)
outfile/home/aknierim/dev/ctapipe/docs/examples/out.foooutput file name (default: traitlets.Undefined)
value1-1Value to use (default: -1)
\n", + "
" + ], + "text/plain": [ + "<__main__.AdvancedComponent at 0x7fa105f4fe20>" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "AdvancedComponent(infile=\"test.foo\", outfile=\"out.foo\")" ] @@ -138,9 +215,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Subarray : MonteCarloArray\n", + "Num Tels : 180\n", + "Footprint: 4.92 km2\n", + "\n", + " Type Count Tel IDs \n", + "----------------- ----- ---------------\n", + " SST_ASTRI_CHEC 120 30-99,131-180 \n", + " LST_LST_LSTCam 4 1-4 \n", + "MST_MST_NectarCam 28 100-124,128-130\n", + " MST_MST_FlashCam 28 5-29,125-127 \n" + ] + } + ], "source": [ "from ctapipe.instrument import SubarrayDescription, TelescopeDescription\n", "\n", @@ -150,9 +244,41 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "TelescopeWiseComponent\n", + "

\n", + "

a component that contains parameters that are per-telescope configurable

\n", + "
\n", + "

\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
param[('type', '*', 5.0)]Something configurable with telescope patterns. (default: traitlets.Undefined)
\n", + "
" + ], + "text/plain": [ + "<__main__.TelescopeWiseComponent at 0x7fa1704b9280>" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "TelescopeWiseComponent(subarray=subarray)" ] @@ -186,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -244,9 +370,128 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "MyTool\n", + "

\n", + "

do some things and stuff

\n", + "
\n", + "

\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "
config_files[] (default: traitlets.Undefined)
iterations5Number of times to run (default: 5)
log_config{} (default: traitlets.Undefined)
log_datefmt%Y-%m-%d %H:%M:%SThe date format used by logging formatters for %(asctime)s (default: %Y-%m-%d %H:%M:%S)
log_fileNoneFilename for the log (default: None)
log_file_levelINFOLogging Level for File Logging (default: INFO)
log_format[%(name)s]%(highlevel)s %(message)sThe Logging format template (default: [%(name)s]%(highlevel)s %(message)s)
log_level30Set the log level by value or name. (default: 30)
logging_config{}\n", + " Configure additional log handlers.\n", + "\n", + " The default stderr logs handler is configured by the\n", + " log_level, log_datefmt and log_format settings.\n", + "\n", + " This configuration can be used to configure additional handlers\n", + " (e.g. to output the log to a file) or for finer control over the\n", + " default handlers.\n", + "\n", + " If provided this should be a logging configuration dictionary, for\n", + " more information see:\n", + " https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\n", + "\n", + " This dictionary is merged with the base logging configuration which\n", + " defines the following:\n", + "\n", + " * A logging formatter intended for interactive use called\n", + " ``console``.\n", + " * A logging handler that writes to stderr called\n", + " ``console`` which uses the formatter ``console``.\n", + " * A logger with the name of this application set to ``DEBUG``\n", + " level.\n", + "\n", + " This example adds a new handler that writes to a file:\n", + "\n", + " .. code-block:: python\n", + "\n", + " c.Application.logging_config = {\n", + " 'handlers': {\n", + " 'file': {\n", + " 'class': 'logging.FileHandler',\n", + " 'level': 'DEBUG',\n", + " 'filename': '',\n", + " }\n", + " },\n", + " 'loggers': {\n", + " '': {\n", + " 'level': 'DEBUG',\n", + " # NOTE: if you don't list the default \"console\"\n", + " # handler here then it will be disabled\n", + " 'handlers': ['console', 'file'],\n", + " },\n", + " }\n", + " }\n", + "\n", + " (default: traitlets.Undefined)
overwriteFalse (default: False)
provenance_log/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log (default: traitlets.Undefined)
quietFalse (default: False)
show_configFalseInstead of starting the Application, dump configuration to stdout (default: False)
show_config_jsonFalseInstead of starting the Application, dump configuration to stdout (as JSON) (default: False)
\n", + "

Components:\n", + "MyTool, MyComponent, AdvancedComponent, SecondaryMyComponent, TelescopeWiseComponent\n", + "

\n", + "" + ], + "text/plain": [ + "<__main__.MyTool at 0x7fa170490cd0>" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool = MyTool()\n", "tool" @@ -254,9 +499,78 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "do some things and stuff\n", + "\n", + "Options\n", + "=======\n", + "The options below are convenience aliases to configurable class-options,\n", + "as listed in the \"Equivalent to\" description-line of the aliases.\n", + "To see all configurable class-options for some , use:\n", + " --help-all\n", + "\n", + "-q, --quiet\n", + " Disable console logging.\n", + " Equivalent to: [--Tool.quiet=True]\n", + "-v, --verbose\n", + " Set log level to DEBUG\n", + " Equivalent to: [--Tool.log_level=DEBUG]\n", + "--overwrite\n", + " Overwrite existing output files without asking\n", + " Equivalent to: [--Tool.overwrite=True]\n", + "--debug\n", + " Set log-level to debug, for the most verbose logging.\n", + " Equivalent to: [--Application.log_level=10]\n", + "--show-config\n", + " Show the application's configuration (human-readable format)\n", + " Equivalent to: [--Application.show_config=True]\n", + "--show-config-json\n", + " Show the application's configuration (json format)\n", + " Equivalent to: [--Application.show_config_json=True]\n", + "-c, --config=...\n", + " Default: []\n", + " Equivalent to: [--Tool.config_files]\n", + "--log-level=\n", + " Set the log level by value or name.\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 30\n", + " Equivalent to: [--Tool.log_level]\n", + "-l, --log-file=\n", + " Filename for the log\n", + " Default: None\n", + " Equivalent to: [--Tool.log_file]\n", + "--log-file-level=\n", + " Logging Level for File Logging\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 'INFO'\n", + " Equivalent to: [--Tool.log_file_level]\n", + "--provenance-log=\n", + " Default: traitlets.Undefined\n", + " Equivalent to: [--Tool.provenance_log]\n", + "--infile=\n", + " input file name\n", + " Default: traitlets.Undefined\n", + " Equivalent to: [--AdvancedComponent.infile]\n", + "--outfile=\n", + " output file name\n", + " Default: traitlets.Undefined\n", + " Equivalent to: [--AdvancedComponent.outfile]\n", + "--iterations=\n", + " Number of times to run\n", + " Default: 5\n", + " Equivalent to: [--MyTool.iterations]\n", + "\n", + "To see all available configurables, use `--help-all`.\n", + "\n" + ] + } + ], "source": [ "tool.print_help()" ] @@ -270,9 +584,322 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "do some things and stuff\n", + "\n", + "Options\n", + "=======\n", + "The options below are convenience aliases to configurable class-options,\n", + "as listed in the \"Equivalent to\" description-line of the aliases.\n", + "To see all configurable class-options for some , use:\n", + " --help-all\n", + "\n", + "-q, --quiet\n", + " Disable console logging.\n", + " Equivalent to: [--Tool.quiet=True]\n", + "-v, --verbose\n", + " Set log level to DEBUG\n", + " Equivalent to: [--Tool.log_level=DEBUG]\n", + "--overwrite\n", + " Overwrite existing output files without asking\n", + " Equivalent to: [--Tool.overwrite=True]\n", + "--debug\n", + " Set log-level to debug, for the most verbose logging.\n", + " Equivalent to: [--Application.log_level=10]\n", + "--show-config\n", + " Show the application's configuration (human-readable format)\n", + " Equivalent to: [--Application.show_config=True]\n", + "--show-config-json\n", + " Show the application's configuration (json format)\n", + " Equivalent to: [--Application.show_config_json=True]\n", + "-c, --config=...\n", + " Default: []\n", + " Equivalent to: [--Tool.config_files]\n", + "--log-level=\n", + " Set the log level by value or name.\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 30\n", + " Equivalent to: [--Tool.log_level]\n", + "-l, --log-file=\n", + " Filename for the log\n", + " Default: None\n", + " Equivalent to: [--Tool.log_file]\n", + "--log-file-level=\n", + " Logging Level for File Logging\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 'INFO'\n", + " Equivalent to: [--Tool.log_file_level]\n", + "--provenance-log=\n", + " Default: traitlets.Undefined\n", + " Equivalent to: [--Tool.provenance_log]\n", + "--infile=\n", + " input file name\n", + " Default: traitlets.Undefined\n", + " Equivalent to: [--AdvancedComponent.infile]\n", + "--outfile=\n", + " output file name\n", + " Default: traitlets.Undefined\n", + " Equivalent to: [--AdvancedComponent.outfile]\n", + "--iterations=\n", + " Number of times to run\n", + " Default: 5\n", + " Equivalent to: [--MyTool.iterations]\n", + "\n", + "Class options\n", + "=============\n", + "The command-line option below sets the respective configurable class-parameter:\n", + " --Class.parameter=value\n", + "This line is evaluated in Python, so simple expressions are allowed.\n", + "For instance, to set `C.a=[0,1,2]`, you may type this:\n", + " --C.a='range(3)'\n", + "\n", + "Application(SingletonConfigurable) options\n", + "------------------------------------------\n", + "--Application.log_datefmt=\n", + " The date format used by logging formatters for %(asctime)s\n", + " Default: '%Y-%m-%d %H:%M:%S'\n", + "--Application.log_format=\n", + " The Logging format template\n", + " Default: '[%(name)s]%(highlevel)s %(message)s'\n", + "--Application.log_level=\n", + " Set the log level by value or name.\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 30\n", + "--Application.logging_config==...\n", + " Configure additional log handlers.\n", + " The default stderr logs handler is configured by the log_level, log_datefmt\n", + " and log_format settings.\n", + " This configuration can be used to configure additional handlers (e.g. to\n", + " output the log to a file) or for finer control over the default handlers.\n", + " If provided this should be a logging configuration dictionary, for more\n", + " information see:\n", + " https://docs.python.org/3/library/logging.config.html#logging-config-\n", + " dictschema\n", + " This dictionary is merged with the base logging configuration which defines\n", + " the following:\n", + " * A logging formatter intended for interactive use called\n", + " ``console``.\n", + " * A logging handler that writes to stderr called\n", + " ``console`` which uses the formatter ``console``.\n", + " * A logger with the name of this application set to ``DEBUG``\n", + " level.\n", + " This example adds a new handler that writes to a file:\n", + " .. code-block:: python\n", + " c.Application.logging_config = {\n", + " 'handlers': {\n", + " 'file': {\n", + " 'class': 'logging.FileHandler',\n", + " 'level': 'DEBUG',\n", + " 'filename': '',\n", + " }\n", + " },\n", + " 'loggers': {\n", + " '': {\n", + " 'level': 'DEBUG',\n", + " # NOTE: if you don't list the default \"console\"\n", + " # handler here then it will be disabled\n", + " 'handlers': ['console', 'file'],\n", + " },\n", + " }\n", + " }\n", + " Default: {}\n", + "--Application.show_config=\n", + " Instead of starting the Application, dump configuration to stdout\n", + " Default: False\n", + "--Application.show_config_json=\n", + " Instead of starting the Application, dump configuration to stdout (as JSON)\n", + " Default: False\n", + "\n", + "Tool(Application) options\n", + "-------------------------\n", + "--Tool.config_files=...\n", + " Default: []\n", + "--Tool.log_config==...\n", + " Default: {}\n", + "--Tool.log_datefmt=\n", + " The date format used by logging formatters for %(asctime)s\n", + " Default: '%Y-%m-%d %H:%M:%S'\n", + "--Tool.log_file=\n", + " Filename for the log\n", + " Default: None\n", + "--Tool.log_file_level=\n", + " Logging Level for File Logging\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 'INFO'\n", + "--Tool.log_format=\n", + " The Logging format template\n", + " Default: '[%(name)s]%(highlevel)s %(message)s'\n", + "--Tool.log_level=\n", + " Set the log level by value or name.\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 30\n", + "--Tool.logging_config==...\n", + " Configure additional log handlers.\n", + " The default stderr logs handler is configured by the log_level, log_datefmt\n", + " and log_format settings.\n", + " This configuration can be used to configure additional handlers (e.g. to\n", + " output the log to a file) or for finer control over the default handlers.\n", + " If provided this should be a logging configuration dictionary, for more\n", + " information see:\n", + " https://docs.python.org/3/library/logging.config.html#logging-config-\n", + " dictschema\n", + " This dictionary is merged with the base logging configuration which defines\n", + " the following:\n", + " * A logging formatter intended for interactive use called\n", + " ``console``.\n", + " * A logging handler that writes to stderr called\n", + " ``console`` which uses the formatter ``console``.\n", + " * A logger with the name of this application set to ``DEBUG``\n", + " level.\n", + " This example adds a new handler that writes to a file:\n", + " .. code-block:: python\n", + " c.Application.logging_config = {\n", + " 'handlers': {\n", + " 'file': {\n", + " 'class': 'logging.FileHandler',\n", + " 'level': 'DEBUG',\n", + " 'filename': '',\n", + " }\n", + " },\n", + " 'loggers': {\n", + " '': {\n", + " 'level': 'DEBUG',\n", + " # NOTE: if you don't list the default \"console\"\n", + " # handler here then it will be disabled\n", + " 'handlers': ['console', 'file'],\n", + " },\n", + " }\n", + " }\n", + " Default: {}\n", + "--Tool.overwrite=\n", + " Default: False\n", + "--Tool.provenance_log=\n", + " Default: traitlets.Undefined\n", + "--Tool.quiet=\n", + " Default: False\n", + "--Tool.show_config=\n", + " Instead of starting the Application, dump configuration to stdout\n", + " Default: False\n", + "--Tool.show_config_json=\n", + " Instead of starting the Application, dump configuration to stdout (as JSON)\n", + " Default: False\n", + "\n", + "MyTool(Tool) options\n", + "--------------------\n", + "--MyTool.config_files=...\n", + " Default: []\n", + "--MyTool.iterations=\n", + " Number of times to run\n", + " Default: 5\n", + "--MyTool.log_config==...\n", + " Default: {}\n", + "--MyTool.log_datefmt=\n", + " The date format used by logging formatters for %(asctime)s\n", + " Default: '%Y-%m-%d %H:%M:%S'\n", + "--MyTool.log_file=\n", + " Filename for the log\n", + " Default: None\n", + "--MyTool.log_file_level=\n", + " Logging Level for File Logging\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 'INFO'\n", + "--MyTool.log_format=\n", + " The Logging format template\n", + " Default: '[%(name)s]%(highlevel)s %(message)s'\n", + "--MyTool.log_level=\n", + " Set the log level by value or name.\n", + " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + " Default: 30\n", + "--MyTool.logging_config==...\n", + " Configure additional log handlers.\n", + " The default stderr logs handler is configured by the log_level, log_datefmt\n", + " and log_format settings.\n", + " This configuration can be used to configure additional handlers (e.g. to\n", + " output the log to a file) or for finer control over the default handlers.\n", + " If provided this should be a logging configuration dictionary, for more\n", + " information see:\n", + " https://docs.python.org/3/library/logging.config.html#logging-config-\n", + " dictschema\n", + " This dictionary is merged with the base logging configuration which defines\n", + " the following:\n", + " * A logging formatter intended for interactive use called\n", + " ``console``.\n", + " * A logging handler that writes to stderr called\n", + " ``console`` which uses the formatter ``console``.\n", + " * A logger with the name of this application set to ``DEBUG``\n", + " level.\n", + " This example adds a new handler that writes to a file:\n", + " .. code-block:: python\n", + " c.Application.logging_config = {\n", + " 'handlers': {\n", + " 'file': {\n", + " 'class': 'logging.FileHandler',\n", + " 'level': 'DEBUG',\n", + " 'filename': '',\n", + " }\n", + " },\n", + " 'loggers': {\n", + " '': {\n", + " 'level': 'DEBUG',\n", + " # NOTE: if you don't list the default \"console\"\n", + " # handler here then it will be disabled\n", + " 'handlers': ['console', 'file'],\n", + " },\n", + " }\n", + " }\n", + " Default: {}\n", + "--MyTool.overwrite=\n", + " Default: False\n", + "--MyTool.provenance_log=\n", + " Default: traitlets.Undefined\n", + "--MyTool.quiet=\n", + " Default: False\n", + "--MyTool.show_config=\n", + " Instead of starting the Application, dump configuration to stdout\n", + " Default: False\n", + "--MyTool.show_config_json=\n", + " Instead of starting the Application, dump configuration to stdout (as JSON)\n", + " Default: False\n", + "\n", + "MyComponent(Component) options\n", + "------------------------------\n", + "--MyComponent.value=\n", + " Value to use\n", + " Default: -1\n", + "\n", + "AdvancedComponent(Component) options\n", + "------------------------------------\n", + "--AdvancedComponent.infile=\n", + " input file name\n", + " Default: traitlets.Undefined\n", + "--AdvancedComponent.outfile=\n", + " output file name\n", + " Default: traitlets.Undefined\n", + "--AdvancedComponent.value1=\n", + " Value to use\n", + " Default: -1\n", + "\n", + "SecondaryMyComponent(MyComponent) options\n", + "-----------------------------------------\n", + "--SecondaryMyComponent.value=\n", + " Value to use\n", + " Default: -1\n", + "\n", + "TelescopeWiseComponent(TelescopeComponent) options\n", + "--------------------------------------------------\n", + "--TelescopeWiseComponent.param=...\n", + " Something configurable with telescope patterns.\n", + " Default: [('type', '*', 5.0)]\n", + "\n" + ] + } + ], "source": [ "tool.print_help(classes=True)" ] @@ -295,9 +922,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:52,057 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa170483f40>, 'type': 'change'}'\n", + "2023-07-03 17:24:52,559 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n" + ] + } + ], "source": [ "try:\n", " tool.run(argv=[\"--infile\", str(GAMMA_FILE), \"--outfile\", \"out.csv\"])\n", @@ -307,9 +943,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:52,798 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): Loading config from '[]'\n", + "2023-07-03 17:24:52,800 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): ctapipe version 0.19.1.dev27+g062fd966.d20230703\n", + "2023-07-03 17:24:52,802 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa170483520>, 'type': 'change'}'\n", + "2023-07-03 17:24:52,803 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): Performing 3 iterations...\n", + "2023-07-03 17:24:52,803 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 0\n", + "2023-07-03 17:24:52,903 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 1\n", + "2023-07-03 17:24:53,005 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 2\n", + "2023-07-03 17:24:53,106 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n", + "2023-07-03 17:24:53,108 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Finished: mytool\n", + "2023-07-03 17:24:53,114 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:53,116 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n" + ] + } + ], "source": [ "tool.log_format = \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\"\n", "\n", @@ -340,9 +994,2637 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:53,149 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Starting: mytool\n", + "2023-07-03 17:24:53,325 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): Loading config from '[]'\n", + "2023-07-03 17:24:53,327 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): ctapipe version 0.19.1.dev27+g062fd966.d20230703\n", + "2023-07-03 17:24:53,329 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa170486340>, 'type': 'change'}'\n", + "2023-07-03 17:24:53,330 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (tool.run): CONFIG: {'MyTool': {'config_files': [], 'iterations': 3, 'log_config': {}, 'log_datefmt': '%Y-%m-%d %H:%M:%S', 'log_file': None, 'log_file_level': 'INFO', 'log_format': '%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s', 'log_level': 10, 'logging_config': {}, 'overwrite': False, 'provenance_log': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log'), 'quiet': False, 'show_config': False, 'show_config_json': False, 'MyComponent': {'value': -1}, 'SecondaryMyComponent': {'value': -1}, 'TelescopeWiseComponent': {'param': [('type', '*', 5.0)]}, 'AdvancedComponent': {'infile': PosixPath('/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst'), 'outfile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'value1': -1, 'MyComponent': {'value': -1}}}}\n", + "2023-07-03 17:24:53,330 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): Performing 3 iterations...\n", + "2023-07-03 17:24:53,330 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 0\n", + "2023-07-03 17:24:53,331 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:53,331 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:53,432 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 1\n", + "2023-07-03 17:24:53,433 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:53,435 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:53,537 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 2\n", + "2023-07-03 17:24:53,538 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:53,539 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:53,640 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n", + "2023-07-03 17:24:53,642 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Finished: mytool\n", + "2023-07-03 17:24:53,649 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:53,651 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:53,653 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:53,668 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (tool.write_provenance): PROVENANCE: '[\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"c2c31b3c-b5cd-4c46-8581-e0cf17c94af0\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:51.880\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:52.561\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:52.052\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 5,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"[%(name)s]%(highlevel)s %(message)s\",\n", + " \"log_level\": 30,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.011350000000014404\n", + " },\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"9a689c40-0157-4ee0-88f4-fb8125ef689c\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:52.601\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.110\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:52.794\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 3,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", + " \"log_level\": 20,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.008483333333408893\n", + " },\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"a237bc8b-cb43-456b-a3d2-3f1ad096fbeb\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.153\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.644\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:53.322\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 3,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", + " \"log_level\": 10,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.00818333333336696\n", + " }\n", + "]'\n", + "2023-07-03 17:24:53,683 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (application.exit): Exiting application: mytool\n" + ] + } + ], "source": [ "try:\n", " tool.run(\n", @@ -368,9 +3650,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:53,720 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Starting: mytool\n", + "2023-07-03 17:24:53,931 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa170486880>, 'type': 'change'}'\n", + "2023-07-03 17:24:54,032 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n" + ] + } + ], "source": [ "tool.iterations = 1\n", "tool.log_level = 0\n", @@ -390,9 +3682,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bad value: The 'iterations' trait of a MyTool instance expected an int, not the str 'badval'.\n" + ] + } + ], "source": [ "try:\n", " tool.iterations = \"badval\"\n", @@ -411,9 +3711,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:54,141 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/Another.txt'), 'owner': <__main__.AdvancedComponent object at 0x7fa170486880>, 'type': 'change'}'\n" + ] + } + ], "source": [ "tool.advanced.outfile = \"Another.txt\"" ] @@ -434,7 +3742,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -443,9 +3751,4382 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:54,332 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): ctapipe version 0.19.1.dev27+g062fd966.d20230703\n", + "2023-07-03 17:24:54,334 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/foo.txt'), 'owner': <__main__.AdvancedComponent object at 0x7fa170486e20>, 'type': 'change'}'\n", + "2023-07-03 17:24:54,335 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (tool.run): CONFIG: {'MyTool': {'config_files': [PosixPath('/home/aknierim/dev/ctapipe/docs/examples/Tools.json')], 'iterations': 5, 'log_config': {}, 'log_datefmt': '%Y-%m-%d %H:%M:%S', 'log_file': None, 'log_file_level': 'INFO', 'log_format': '[%(name)s]%(highlevel)s %(message)s', 'log_level': 10, 'logging_config': {}, 'overwrite': False, 'provenance_log': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log'), 'quiet': False, 'show_config': False, 'show_config_json': False, 'MyComponent': {'value': -1}, 'SecondaryMyComponent': {'value': -1}, 'TelescopeWiseComponent': {'param': [('type', '*', 5.0)]}, 'AdvancedComponent': {'infile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/something.txt'), 'outfile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/foo.txt'), 'value1': -1, 'MyComponent': {'value': -1}}}}\n", + "2023-07-03 17:24:54,336 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): Performing 5 iterations...\n", + "2023-07-03 17:24:54,336 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 0\n", + "2023-07-03 17:24:54,336 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,337 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,437 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 1\n", + "2023-07-03 17:24:54,439 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,441 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,542 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 2\n", + "2023-07-03 17:24:54,543 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,543 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,644 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 3\n", + "2023-07-03 17:24:54,645 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,647 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,748 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 4\n", + "2023-07-03 17:24:54,749 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,749 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", + "2023-07-03 17:24:54,850 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n", + "2023-07-03 17:24:54,852 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Finished: mytool\n", + "2023-07-03 17:24:54,858 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:54,859 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:54,861 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:54,862 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:54,864 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", + "2023-07-03 17:24:54,887 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (tool.write_provenance): PROVENANCE: '[\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"c2c31b3c-b5cd-4c46-8581-e0cf17c94af0\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:51.880\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:52.561\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:52.052\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 5,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"[%(name)s]%(highlevel)s %(message)s\",\n", + " \"log_level\": 30,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.011350000000014404\n", + " },\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"9a689c40-0157-4ee0-88f4-fb8125ef689c\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:52.601\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.110\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:52.794\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 3,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", + " \"log_level\": 20,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.008483333333408893\n", + " },\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"a237bc8b-cb43-456b-a3d2-3f1ad096fbeb\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.153\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.644\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:53.322\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 3,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", + " \"log_level\": 10,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.00818333333336696\n", + " },\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"b0ef6627-d00f-4fd8-bf9a-7631e890715b\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:53.722\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:54.034\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:53.927\"\n", + " },\n", + " \"input\": [],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [],\n", + " \"iterations\": 1,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", + " \"log_level\": 0,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.005199999999874194\n", + " },\n", + " {\n", + " \"activity_name\": \"mytool\",\n", + " \"activity_uuid\": \"837610ed-009c-4e8f-9770-cfb76ab71239\",\n", + " \"start\": {\n", + " \"time_utc\": \"2023-07-03T15:24:54.154\"\n", + " },\n", + " \"stop\": {\n", + " \"time_utc\": \"2023-07-03T15:24:54.854\"\n", + " },\n", + " \"system\": {\n", + " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", + " \"ctapipe_resources_version\": \"not installed\",\n", + " \"eventio_version\": \"1.11.0\",\n", + " \"ctapipe_svc_path\": null,\n", + " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", + " \"platform\": {\n", + " \"architecture_bits\": \"64bit\",\n", + " \"architecture_linkage\": \"ELF\",\n", + " \"machine\": \"x86_64\",\n", + " \"processor\": \"x86_64\",\n", + " \"node\": \"e5b-dell-09\",\n", + " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", + " \"system\": \"Linux\",\n", + " \"release\": \"5.19.0-46-generic\",\n", + " \"libcver\": [\n", + " \"glibc\",\n", + " \"2.35\"\n", + " ],\n", + " \"n_cpus\": 12,\n", + " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", + " },\n", + " \"python\": {\n", + " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", + " \"version\": [\n", + " \"3\",\n", + " \"9\",\n", + " \"16\"\n", + " ],\n", + " \"compiler\": \"GCC 11.3.0\",\n", + " \"implementation\": \"CPython\",\n", + " \"packages\": [\n", + " {\n", + " \"name\": \"Babel\",\n", + " \"version\": \"2.12.1\"\n", + " },\n", + " {\n", + " \"name\": \"Cython\",\n", + " \"version\": \"0.29.34\"\n", + " },\n", + " {\n", + " \"name\": \"Jinja2\",\n", + " \"version\": \"3.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"MarkupSafe\",\n", + " \"version\": \"2.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"Pillow\",\n", + " \"version\": \"9.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5\",\n", + " \"version\": \"5.15.7\"\n", + " },\n", + " {\n", + " \"name\": \"PyQt5-sip\",\n", + " \"version\": \"12.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"PySocks\",\n", + " \"version\": \"1.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"PyYAML\",\n", + " \"version\": \"6.0\"\n", + " },\n", + " {\n", + " \"name\": \"Pygments\",\n", + " \"version\": \"2.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"QtPy\",\n", + " \"version\": \"2.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"Send2Trash\",\n", + " \"version\": \"1.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"Sphinx\",\n", + " \"version\": \"6.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"accessible-pygments\",\n", + " \"version\": \"0.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"alabaster\",\n", + " \"version\": \"0.7.13\"\n", + " },\n", + " {\n", + " \"name\": \"anyio\",\n", + " \"version\": \"3.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi\",\n", + " \"version\": \"21.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"argon2-cffi-bindings\",\n", + " \"version\": \"21.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"astropy\",\n", + " \"version\": \"5.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"asttokens\",\n", + " \"version\": \"2.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"async-lru\",\n", + " \"version\": \"2.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"attrs\",\n", + " \"version\": \"23.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"backcall\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"backports.functools-lru-cache\",\n", + " \"version\": \"1.6.4\"\n", + " },\n", + " {\n", + " \"name\": \"beautifulsoup4\",\n", + " \"version\": \"4.12.2\"\n", + " },\n", + " {\n", + " \"name\": \"black\",\n", + " \"version\": \"23.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"bleach\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"bokeh\",\n", + " \"version\": \"2.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"brotlipy\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"cached-property\",\n", + " \"version\": \"1.5.2\"\n", + " },\n", + " {\n", + " \"name\": \"certifi\",\n", + " \"version\": \"2023.5.7\"\n", + " },\n", + " {\n", + " \"name\": \"cffi\",\n", + " \"version\": \"1.15.1\"\n", + " },\n", + " {\n", + " \"name\": \"cfgv\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"charset-normalizer\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"click\",\n", + " \"version\": \"8.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"click-default-group\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"colorama\",\n", + " \"version\": \"0.4.6\"\n", + " },\n", + " {\n", + " \"name\": \"comm\",\n", + " \"version\": \"0.1.3\"\n", + " },\n", + " {\n", + " \"name\": \"contourpy\",\n", + " \"version\": \"1.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"corsikaio\",\n", + " \"version\": \"0.2.6.post1\"\n", + " },\n", + " {\n", + " \"name\": \"coverage\",\n", + " \"version\": \"7.2.5\"\n", + " },\n", + " {\n", + " \"name\": \"cryptography\",\n", + " \"version\": \"40.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"ctapipe\",\n", + " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", + " },\n", + " {\n", + " \"name\": \"cycler\",\n", + " \"version\": \"0.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"debugpy\",\n", + " \"version\": \"1.6.7\"\n", + " },\n", + " {\n", + " \"name\": \"decorator\",\n", + " \"version\": \"5.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"defusedxml\",\n", + " \"version\": \"0.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"distlib\",\n", + " \"version\": \"0.3.6\"\n", + " },\n", + " {\n", + " \"name\": \"docutils\",\n", + " \"version\": \"0.18.1\"\n", + " },\n", + " {\n", + " \"name\": \"entrypoints\",\n", + " \"version\": \"0.4\"\n", + " },\n", + " {\n", + " \"name\": \"eventio\",\n", + " \"version\": \"1.11.0\"\n", + " },\n", + " {\n", + " \"name\": \"exceptiongroup\",\n", + " \"version\": \"1.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"executing\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"fastjsonschema\",\n", + " \"version\": \"2.16.3\"\n", + " },\n", + " {\n", + " \"name\": \"filelock\",\n", + " \"version\": \"3.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"flit_core\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"fonttools\",\n", + " \"version\": \"4.39.3\"\n", + " },\n", + " {\n", + " \"name\": \"h5py\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"identify\",\n", + " \"version\": \"2.5.24\"\n", + " },\n", + " {\n", + " \"name\": \"idna\",\n", + " \"version\": \"3.4\"\n", + " },\n", + " {\n", + " \"name\": \"imagesize\",\n", + " \"version\": \"1.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"iminuit\",\n", + " \"version\": \"2.21.3\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-metadata\",\n", + " \"version\": \"6.6.0\"\n", + " },\n", + " {\n", + " \"name\": \"importlib-resources\",\n", + " \"version\": \"5.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"incremental\",\n", + " \"version\": \"22.10.0\"\n", + " },\n", + " {\n", + " \"name\": \"iniconfig\",\n", + " \"version\": \"2.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipykernel\",\n", + " \"version\": \"6.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipython\",\n", + " \"version\": \"8.13.2\"\n", + " },\n", + " {\n", + " \"name\": \"ipython-genutils\",\n", + " \"version\": \"0.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"ipywidgets\",\n", + " \"version\": \"8.0.6\"\n", + " },\n", + " {\n", + " \"name\": \"jedi\",\n", + " \"version\": \"0.18.2\"\n", + " },\n", + " {\n", + " \"name\": \"joblib\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"json5\",\n", + " \"version\": \"0.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"jsonschema\",\n", + " \"version\": \"4.17.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-console\",\n", + " \"version\": \"6.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-events\",\n", + " \"version\": \"0.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter-lsp\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_client\",\n", + " \"version\": \"8.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_core\",\n", + " \"version\": \"5.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server\",\n", + " \"version\": \"2.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"jupyter_server_terminals\",\n", + " \"version\": \"0.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab\",\n", + " \"version\": \"4.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-pygments\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab-widgets\",\n", + " \"version\": \"3.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"jupyterlab_server\",\n", + " \"version\": \"2.22.1\"\n", + " },\n", + " {\n", + " \"name\": \"kiwisolver\",\n", + " \"version\": \"1.4.4\"\n", + " },\n", + " {\n", + " \"name\": \"livereload\",\n", + " \"version\": \"2.6.3\"\n", + " },\n", + " {\n", + " \"name\": \"llvmlite\",\n", + " \"version\": \"0.39.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib\",\n", + " \"version\": \"3.7.1\"\n", + " },\n", + " {\n", + " \"name\": \"matplotlib-inline\",\n", + " \"version\": \"0.1.6\"\n", + " },\n", + " {\n", + " \"name\": \"mistune\",\n", + " \"version\": \"2.0.5\"\n", + " },\n", + " {\n", + " \"name\": \"munkres\",\n", + " \"version\": \"1.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"mypy-extensions\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclassic\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbclient\",\n", + " \"version\": \"0.7.4\"\n", + " },\n", + " {\n", + " \"name\": \"nbconvert\",\n", + " \"version\": \"7.4.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbformat\",\n", + " \"version\": \"5.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"nbsphinx\",\n", + " \"version\": \"0.9.1\"\n", + " },\n", + " {\n", + " \"name\": \"nest-asyncio\",\n", + " \"version\": \"1.5.6\"\n", + " },\n", + " {\n", + " \"name\": \"nodeenv\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"notebook\",\n", + " \"version\": \"6.5.4\"\n", + " },\n", + " {\n", + " \"name\": \"notebook_shim\",\n", + " \"version\": \"0.2.3\"\n", + " },\n", + " {\n", + " \"name\": \"numba\",\n", + " \"version\": \"0.56.4\"\n", + " },\n", + " {\n", + " \"name\": \"numexpr\",\n", + " \"version\": \"2.8.4\"\n", + " },\n", + " {\n", + " \"name\": \"numpy\",\n", + " \"version\": \"1.23.5\"\n", + " },\n", + " {\n", + " \"name\": \"numpydoc\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"packaging\",\n", + " \"version\": \"23.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandas\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"pandocfilters\",\n", + " \"version\": \"1.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"parso\",\n", + " \"version\": \"0.8.3\"\n", + " },\n", + " {\n", + " \"name\": \"pathspec\",\n", + " \"version\": \"0.11.1\"\n", + " },\n", + " {\n", + " \"name\": \"pexpect\",\n", + " \"version\": \"4.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"pickleshare\",\n", + " \"version\": \"0.7.5\"\n", + " },\n", + " {\n", + " \"name\": \"pip\",\n", + " \"version\": \"23.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pkgutil_resolve_name\",\n", + " \"version\": \"1.3.10\"\n", + " },\n", + " {\n", + " \"name\": \"platformdirs\",\n", + " \"version\": \"3.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"pluggy\",\n", + " \"version\": \"1.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"ply\",\n", + " \"version\": \"3.11\"\n", + " },\n", + " {\n", + " \"name\": \"pooch\",\n", + " \"version\": \"1.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pre-commit\",\n", + " \"version\": \"3.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"prometheus-client\",\n", + " \"version\": \"0.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"prompt-toolkit\",\n", + " \"version\": \"3.0.38\"\n", + " },\n", + " {\n", + " \"name\": \"psutil\",\n", + " \"version\": \"5.9.5\"\n", + " },\n", + " {\n", + " \"name\": \"ptyprocess\",\n", + " \"version\": \"0.7.0\"\n", + " },\n", + " {\n", + " \"name\": \"pure-eval\",\n", + " \"version\": \"0.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"py-cpuinfo\",\n", + " \"version\": \"9.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pyOpenSSL\",\n", + " \"version\": \"23.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"pycparser\",\n", + " \"version\": \"2.21\"\n", + " },\n", + " {\n", + " \"name\": \"pydata-sphinx-theme\",\n", + " \"version\": \"0.13.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyerfa\",\n", + " \"version\": \"2.0.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyparsing\",\n", + " \"version\": \"3.0.9\"\n", + " },\n", + " {\n", + " \"name\": \"pyrsistent\",\n", + " \"version\": \"0.19.3\"\n", + " },\n", + " {\n", + " \"name\": \"pytest\",\n", + " \"version\": \"7.3.1\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-astropy-header\",\n", + " \"version\": \"0.1.2\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-cov\",\n", + " \"version\": \"4.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"pytest-runner\",\n", + " \"version\": \"6.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"python-dateutil\",\n", + " \"version\": \"2.8.2\"\n", + " },\n", + " {\n", + " \"name\": \"python-json-logger\",\n", + " \"version\": \"2.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"pytz\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"pyzmq\",\n", + " \"version\": \"25.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"qtconsole\",\n", + " \"version\": \"5.4.3\"\n", + " },\n", + " {\n", + " \"name\": \"requests\",\n", + " \"version\": \"2.29.0\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3339-validator\",\n", + " \"version\": \"0.1.4\"\n", + " },\n", + " {\n", + " \"name\": \"rfc3986-validator\",\n", + " \"version\": \"0.1.1\"\n", + " },\n", + " {\n", + " \"name\": \"scikit-learn\",\n", + " \"version\": \"1.2.2\"\n", + " },\n", + " {\n", + " \"name\": \"scipy\",\n", + " \"version\": \"1.10.1\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools\",\n", + " \"version\": \"67.7.2\"\n", + " },\n", + " {\n", + " \"name\": \"setuptools-scm\",\n", + " \"version\": \"7.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"sip\",\n", + " \"version\": \"6.7.9\"\n", + " },\n", + " {\n", + " \"name\": \"six\",\n", + " \"version\": \"1.16.0\"\n", + " },\n", + " {\n", + " \"name\": \"sniffio\",\n", + " \"version\": \"1.3.0\"\n", + " },\n", + " {\n", + " \"name\": \"snowballstemmer\",\n", + " \"version\": \"2.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"soupsieve\",\n", + " \"version\": \"2.3.2.post1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-autobuild\",\n", + " \"version\": \"2021.3.14\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-automodapi\",\n", + " \"version\": \"0.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx-rtd-theme\",\n", + " \"version\": \"1.2.0\"\n", + " },\n", + " {\n", + " \"name\": \"sphinx_design\",\n", + " \"version\": \"0.4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-applehelp\",\n", + " \"version\": \"1.0.4\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-devhelp\",\n", + " \"version\": \"1.0.2\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-htmlhelp\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jquery\",\n", + " \"version\": \"4.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-jsmath\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-qthelp\",\n", + " \"version\": \"1.0.3\"\n", + " },\n", + " {\n", + " \"name\": \"sphinxcontrib-serializinghtml\",\n", + " \"version\": \"1.1.5\"\n", + " },\n", + " {\n", + " \"name\": \"stack-data\",\n", + " \"version\": \"0.6.2\"\n", + " },\n", + " {\n", + " \"name\": \"tables\",\n", + " \"version\": \"3.8.0\"\n", + " },\n", + " {\n", + " \"name\": \"terminado\",\n", + " \"version\": \"0.17.1\"\n", + " },\n", + " {\n", + " \"name\": \"threadpoolctl\",\n", + " \"version\": \"3.1.0\"\n", + " },\n", + " {\n", + " \"name\": \"tinycss2\",\n", + " \"version\": \"1.2.1\"\n", + " },\n", + " {\n", + " \"name\": \"toml\",\n", + " \"version\": \"0.10.2\"\n", + " },\n", + " {\n", + " \"name\": \"tomli\",\n", + " \"version\": \"2.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"tornado\",\n", + " \"version\": \"6.3\"\n", + " },\n", + " {\n", + " \"name\": \"towncrier\",\n", + " \"version\": \"22.12.0\"\n", + " },\n", + " {\n", + " \"name\": \"tqdm\",\n", + " \"version\": \"4.65.0\"\n", + " },\n", + " {\n", + " \"name\": \"traitlets\",\n", + " \"version\": \"5.9.0\"\n", + " },\n", + " {\n", + " \"name\": \"typing_extensions\",\n", + " \"version\": \"4.5.0\"\n", + " },\n", + " {\n", + " \"name\": \"tzdata\",\n", + " \"version\": \"2023.3\"\n", + " },\n", + " {\n", + " \"name\": \"ukkonen\",\n", + " \"version\": \"1.0.1\"\n", + " },\n", + " {\n", + " \"name\": \"unicodedata2\",\n", + " \"version\": \"15.0.0\"\n", + " },\n", + " {\n", + " \"name\": \"urllib3\",\n", + " \"version\": \"1.26.15\"\n", + " },\n", + " {\n", + " \"name\": \"virtualenv\",\n", + " \"version\": \"20.23.0\"\n", + " },\n", + " {\n", + " \"name\": \"wcwidth\",\n", + " \"version\": \"0.2.6\"\n", + " },\n", + " {\n", + " \"name\": \"webencodings\",\n", + " \"version\": \"0.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"websocket-client\",\n", + " \"version\": \"1.5.1\"\n", + " },\n", + " {\n", + " \"name\": \"wheel\",\n", + " \"version\": \"0.40.0\"\n", + " },\n", + " {\n", + " \"name\": \"widgetsnbextension\",\n", + " \"version\": \"4.0.7\"\n", + " },\n", + " {\n", + " \"name\": \"zipp\",\n", + " \"version\": \"3.15.0\"\n", + " },\n", + " {\n", + " \"name\": \"zstandard\",\n", + " \"version\": \"0.19.0\"\n", + " }\n", + " ]\n", + " },\n", + " \"environment\": {\n", + " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", + " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", + " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", + " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", + " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", + " \"CONDA_SHLVL\": \"1\",\n", + " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", + " \"LD_LIBRARY_PATH\": null,\n", + " \"DYLD_LIBRARY_PATH\": null,\n", + " \"USER\": \"aknierim\",\n", + " \"HOME\": \"/home/aknierim\",\n", + " \"SHELL\": \"/bin/zsh\"\n", + " },\n", + " \"arguments\": [\n", + " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", + " \"-f\",\n", + " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", + " ],\n", + " \"start_time_utc\": \"2023-07-03T15:24:54.328\"\n", + " },\n", + " \"input\": [\n", + " {\n", + " \"url\": \"/home/aknierim/dev/ctapipe/docs/examples/Tools.json\",\n", + " \"role\": \"Tool Configuration\"\n", + " }\n", + " ],\n", + " \"output\": [],\n", + " \"config\": {\n", + " \"MyTool\": {\n", + " \"config_files\": [\n", + " \"/home/aknierim/dev/ctapipe/docs/examples/Tools.json\"\n", + " ],\n", + " \"iterations\": 5,\n", + " \"log_config\": {},\n", + " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", + " \"log_file\": null,\n", + " \"log_file_level\": \"INFO\",\n", + " \"log_format\": \"[%(name)s]%(highlevel)s %(message)s\",\n", + " \"log_level\": 10,\n", + " \"logging_config\": {},\n", + " \"overwrite\": false,\n", + " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", + " \"quiet\": false,\n", + " \"show_config\": false,\n", + " \"show_config_json\": false,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"SecondaryMyComponent\": {\n", + " \"value\": -1\n", + " },\n", + " \"TelescopeWiseComponent\": {\n", + " \"param\": [\n", + " [\n", + " \"type\",\n", + " \"*\",\n", + " 5.0\n", + " ]\n", + " ]\n", + " },\n", + " \"AdvancedComponent\": {\n", + " \"infile\": \"/home/aknierim/dev/ctapipe/docs/examples/something.txt\",\n", + " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/foo.txt\",\n", + " \"value1\": -1,\n", + " \"MyComponent\": {\n", + " \"value\": -1\n", + " }\n", + " }\n", + " }\n", + " },\n", + " \"status\": \"completed\",\n", + " \"duration_min\": 0.01166666666650329\n", + " }\n", + "]'\n", + "2023-07-03 17:24:54,902 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (application.exit): Exiting application: mytool\n" + ] + } + ], "source": [ "try:\n", " tool2.run(argv=[\"--config\", \"Tools.json\"])\n", @@ -455,34 +8136,61 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/aknierim/dev/ctapipe/docs/examples/something.txt\n" + ] + } + ], "source": [ "print(tool2.advanced.infile)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'MyTool': {'config_files': ['Tools.json'], 'log_level': 'DEBUG'}, 'AdvancedComponent': {'infile': 'something.txt', 'outfile': 'foo.txt'}}\n" + ] + } + ], "source": [ "print(tool2.config)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool2.is_setup" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -491,16 +8199,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool3.is_setup" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -509,27 +8228,283 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool3.is_setup" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "MyTool\n", + "

\n", + "

do some things and stuff

\n", + "
\n", + "

\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "
config_files[] (default: traitlets.Undefined)
iterations5Number of times to run (default: 5)
log_config{} (default: traitlets.Undefined)
log_datefmt%Y-%m-%d %H:%M:%SThe date format used by logging formatters for %(asctime)s (default: %Y-%m-%d %H:%M:%S)
log_fileNoneFilename for the log (default: None)
log_file_levelINFOLogging Level for File Logging (default: INFO)
log_format[%(name)s]%(highlevel)s %(message)sThe Logging format template (default: [%(name)s]%(highlevel)s %(message)s)
log_level30Set the log level by value or name. (default: 30)
logging_config{}\n", + " Configure additional log handlers.\n", + "\n", + " The default stderr logs handler is configured by the\n", + " log_level, log_datefmt and log_format settings.\n", + "\n", + " This configuration can be used to configure additional handlers\n", + " (e.g. to output the log to a file) or for finer control over the\n", + " default handlers.\n", + "\n", + " If provided this should be a logging configuration dictionary, for\n", + " more information see:\n", + " https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\n", + "\n", + " This dictionary is merged with the base logging configuration which\n", + " defines the following:\n", + "\n", + " * A logging formatter intended for interactive use called\n", + " ``console``.\n", + " * A logging handler that writes to stderr called\n", + " ``console`` which uses the formatter ``console``.\n", + " * A logger with the name of this application set to ``DEBUG``\n", + " level.\n", + "\n", + " This example adds a new handler that writes to a file:\n", + "\n", + " .. code-block:: python\n", + "\n", + " c.Application.logging_config = {\n", + " 'handlers': {\n", + " 'file': {\n", + " 'class': 'logging.FileHandler',\n", + " 'level': 'DEBUG',\n", + " 'filename': '',\n", + " }\n", + " },\n", + " 'loggers': {\n", + " '': {\n", + " 'level': 'DEBUG',\n", + " # NOTE: if you don't list the default \"console\"\n", + " # handler here then it will be disabled\n", + " 'handlers': ['console', 'file'],\n", + " },\n", + " }\n", + " }\n", + "\n", + " (default: traitlets.Undefined)
overwriteFalse (default: False)
provenance_log/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log (default: traitlets.Undefined)
quietFalse (default: False)
show_configFalseInstead of starting the Application, dump configuration to stdout (default: False)
show_config_jsonFalseInstead of starting the Application, dump configuration to stdout (as JSON) (default: False)
\n", + "

Components:\n", + "MyTool, MyComponent, AdvancedComponent, SecondaryMyComponent, TelescopeWiseComponent\n", + "

\n", + "" + ], + "text/plain": [ + "<__main__.MyTool at 0x7fa1985c6610>" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool3" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-07-03 17:24:55,026 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa1704f4250>, 'type': 'change'}'\n" + ] + }, + { + "data": { + "text/html": [ + "MyTool\n", + "

\n", + "

do some things and stuff

\n", + "
\n", + "

\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "
config_files[] (default: traitlets.Undefined)
iterations1Number of times to run (default: 5)
log_config{} (default: traitlets.Undefined)
log_datefmt%Y-%m-%d %H:%M:%SThe date format used by logging formatters for %(asctime)s (default: %Y-%m-%d %H:%M:%S)
log_fileNoneFilename for the log (default: None)
log_file_levelINFOLogging Level for File Logging (default: INFO)
log_format%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)sThe Logging format template (default: [%(name)s]%(highlevel)s %(message)s)
log_level0Set the log level by value or name. (default: 30)
logging_config{}\n", + " Configure additional log handlers.\n", + "\n", + " The default stderr logs handler is configured by the\n", + " log_level, log_datefmt and log_format settings.\n", + "\n", + " This configuration can be used to configure additional handlers\n", + " (e.g. to output the log to a file) or for finer control over the\n", + " default handlers.\n", + "\n", + " If provided this should be a logging configuration dictionary, for\n", + " more information see:\n", + " https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\n", + "\n", + " This dictionary is merged with the base logging configuration which\n", + " defines the following:\n", + "\n", + " * A logging formatter intended for interactive use called\n", + " ``console``.\n", + " * A logging handler that writes to stderr called\n", + " ``console`` which uses the formatter ``console``.\n", + " * A logger with the name of this application set to ``DEBUG``\n", + " level.\n", + "\n", + " This example adds a new handler that writes to a file:\n", + "\n", + " .. code-block:: python\n", + "\n", + " c.Application.logging_config = {\n", + " 'handlers': {\n", + " 'file': {\n", + " 'class': 'logging.FileHandler',\n", + " 'level': 'DEBUG',\n", + " 'filename': '',\n", + " }\n", + " },\n", + " 'loggers': {\n", + " '': {\n", + " 'level': 'DEBUG',\n", + " # NOTE: if you don't list the default \"console\"\n", + " # handler here then it will be disabled\n", + " 'handlers': ['console', 'file'],\n", + " },\n", + " }\n", + " }\n", + "\n", + " (default: traitlets.Undefined)
overwriteFalse (default: False)
provenance_log/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log (default: traitlets.Undefined)
quietFalse (default: False)
show_configFalseInstead of starting the Application, dump configuration to stdout (default: False)
show_config_jsonFalseInstead of starting the Application, dump configuration to stdout (as JSON) (default: False)
\n", + "

Components:\n", + "MyTool, MyComponent, AdvancedComponent, SecondaryMyComponent, TelescopeWiseComponent\n", + "

\n", + "" + ], + "text/plain": [ + "<__main__.MyTool at 0x7fa170490cd0>" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool.setup()\n", "tool" @@ -537,9 +8512,41 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "SecondaryMyComponent\n", + "

\n", + "

A second component

\n", + "
\n", + "

\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
value-1Value to use (default: -1)
\n", + "
" + ], + "text/plain": [ + "<__main__.SecondaryMyComponent at 0x7fa1704f4a00>" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool.comp2" ] @@ -553,18 +8560,84 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'MyTool': {'config_files': [],\n", + " 'iterations': 1,\n", + " 'log_config': {},\n", + " 'log_datefmt': '%Y-%m-%d %H:%M:%S',\n", + " 'log_file': None,\n", + " 'log_file_level': 'INFO',\n", + " 'log_format': '%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s',\n", + " 'log_level': 0,\n", + " 'logging_config': {},\n", + " 'overwrite': False,\n", + " 'provenance_log': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log'),\n", + " 'quiet': False,\n", + " 'show_config': False,\n", + " 'show_config_json': False,\n", + " 'MyComponent': {'value': -1},\n", + " 'SecondaryMyComponent': {'value': -1},\n", + " 'TelescopeWiseComponent': {'param': TelescopePatternList([('type',\n", + " '*',\n", + " 5.0)])},\n", + " 'AdvancedComponent': {'infile': PosixPath('/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst'),\n", + " 'outfile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'),\n", + " 'value1': -1,\n", + " 'MyComponent': {'value': -1}}}}" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool.get_current_config()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'MyTool': {'config_files': [],\n", + " 'iterations': 12,\n", + " 'log_config': {},\n", + " 'log_datefmt': '%Y-%m-%d %H:%M:%S',\n", + " 'log_file': None,\n", + " 'log_file_level': 'INFO',\n", + " 'log_format': '%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s',\n", + " 'log_level': 0,\n", + " 'logging_config': {},\n", + " 'overwrite': False,\n", + " 'provenance_log': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log'),\n", + " 'quiet': False,\n", + " 'show_config': False,\n", + " 'show_config_json': False,\n", + " 'MyComponent': {'value': -1},\n", + " 'SecondaryMyComponent': {'value': -1},\n", + " 'TelescopeWiseComponent': {'param': TelescopePatternList([('type',\n", + " '*',\n", + " 5.0)])},\n", + " 'AdvancedComponent': {'infile': PosixPath('/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst'),\n", + " 'outfile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'),\n", + " 'value1': -1,\n", + " 'MyComponent': {'value': -1}}}}" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "tool.iterations = 12\n", "tool.get_current_config()" @@ -579,9 +8652,244 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# Configuration file for mytool.\n", + "\n", + "c = get_config() #noqa\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# Application(SingletonConfigurable) configuration\n", + "#------------------------------------------------------------------------------\n", + "## This is an application.\n", + "\n", + "## The date format used by logging formatters for %(asctime)s\n", + "# Default: '%Y-%m-%d %H:%M:%S'\n", + "# c.Application.log_datefmt = '%Y-%m-%d %H:%M:%S'\n", + "\n", + "## The Logging format template\n", + "# Default: '[%(name)s]%(highlevel)s %(message)s'\n", + "# c.Application.log_format = '[%(name)s]%(highlevel)s %(message)s'\n", + "\n", + "## Set the log level by value or name.\n", + "# Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + "# Default: 30\n", + "# c.Application.log_level = 30\n", + "\n", + "## Configure additional log handlers.\n", + "# \n", + "# The default stderr logs handler is configured by the log_level, log_datefmt\n", + "# and log_format settings.\n", + "# \n", + "# This configuration can be used to configure additional handlers (e.g. to\n", + "# output the log to a file) or for finer control over the default handlers.\n", + "# \n", + "# If provided this should be a logging configuration dictionary, for more\n", + "# information see:\n", + "# https://docs.python.org/3/library/logging.config.html#logging-config-\n", + "# dictschema\n", + "# \n", + "# This dictionary is merged with the base logging configuration which defines\n", + "# the following:\n", + "# \n", + "# * A logging formatter intended for interactive use called\n", + "# ``console``.\n", + "# * A logging handler that writes to stderr called\n", + "# ``console`` which uses the formatter ``console``.\n", + "# * A logger with the name of this application set to ``DEBUG``\n", + "# level.\n", + "# \n", + "# This example adds a new handler that writes to a file:\n", + "# \n", + "# .. code-block:: python\n", + "# \n", + "# c.Application.logging_config = {\n", + "# 'handlers': {\n", + "# 'file': {\n", + "# 'class': 'logging.FileHandler',\n", + "# 'level': 'DEBUG',\n", + "# 'filename': '',\n", + "# }\n", + "# },\n", + "# 'loggers': {\n", + "# '': {\n", + "# 'level': 'DEBUG',\n", + "# # NOTE: if you don't list the default \"console\"\n", + "# # handler here then it will be disabled\n", + "# 'handlers': ['console', 'file'],\n", + "# },\n", + "# }\n", + "# }\n", + "# Default: {}\n", + "# c.Application.logging_config = {}\n", + "\n", + "## Instead of starting the Application, dump configuration to stdout\n", + "# Default: False\n", + "# c.Application.show_config = False\n", + "\n", + "## Instead of starting the Application, dump configuration to stdout (as JSON)\n", + "# Default: False\n", + "# c.Application.show_config_json = False\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# Tool(Application) configuration\n", + "#------------------------------------------------------------------------------\n", + "## This is an application.\n", + "\n", + "# Default: []\n", + "# c.Tool.config_files = []\n", + "\n", + "# Default: {}\n", + "# c.Tool.log_config = {}\n", + "\n", + "## The date format used by logging formatters for %(asctime)s\n", + "# See also: Application.log_datefmt\n", + "# c.Tool.log_datefmt = '%Y-%m-%d %H:%M:%S'\n", + "\n", + "## Filename for the log\n", + "# Default: None\n", + "# c.Tool.log_file = None\n", + "\n", + "## Logging Level for File Logging\n", + "# Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", + "# Default: 'INFO'\n", + "# c.Tool.log_file_level = 'INFO'\n", + "\n", + "## The Logging format template\n", + "# See also: Application.log_format\n", + "# c.Tool.log_format = '[%(name)s]%(highlevel)s %(message)s'\n", + "\n", + "## Set the log level by value or name.\n", + "# See also: Application.log_level\n", + "# c.Tool.log_level = 30\n", + "\n", + "## \n", + "# See also: Application.logging_config\n", + "# c.Tool.logging_config = {}\n", + "\n", + "# Default: False\n", + "# c.Tool.overwrite = False\n", + "\n", + "# Default: traitlets.Undefined\n", + "# c.Tool.provenance_log = traitlets.Undefined\n", + "\n", + "# Default: False\n", + "# c.Tool.quiet = False\n", + "\n", + "## Instead of starting the Application, dump configuration to stdout\n", + "# See also: Application.show_config\n", + "# c.Tool.show_config = False\n", + "\n", + "## Instead of starting the Application, dump configuration to stdout (as JSON)\n", + "# See also: Application.show_config_json\n", + "# c.Tool.show_config_json = False\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# MyTool(Tool) configuration\n", + "#------------------------------------------------------------------------------\n", + "# See also: Tool.config_files\n", + "# c.MyTool.config_files = []\n", + "\n", + "## Number of times to run\n", + "# Default: 5\n", + "# c.MyTool.iterations = 5\n", + "\n", + "# See also: Tool.log_config\n", + "# c.MyTool.log_config = {}\n", + "\n", + "## The date format used by logging formatters for %(asctime)s\n", + "# See also: Application.log_datefmt\n", + "# c.MyTool.log_datefmt = '%Y-%m-%d %H:%M:%S'\n", + "\n", + "## Filename for the log\n", + "# See also: Tool.log_file\n", + "# c.MyTool.log_file = None\n", + "\n", + "## Logging Level for File Logging\n", + "# See also: Tool.log_file_level\n", + "# c.MyTool.log_file_level = 'INFO'\n", + "\n", + "## The Logging format template\n", + "# See also: Application.log_format\n", + "# c.MyTool.log_format = '[%(name)s]%(highlevel)s %(message)s'\n", + "\n", + "## Set the log level by value or name.\n", + "# See also: Application.log_level\n", + "# c.MyTool.log_level = 30\n", + "\n", + "## \n", + "# See also: Application.logging_config\n", + "# c.MyTool.logging_config = {}\n", + "\n", + "# See also: Tool.overwrite\n", + "# c.MyTool.overwrite = False\n", + "\n", + "# See also: Tool.provenance_log\n", + "# c.MyTool.provenance_log = traitlets.Undefined\n", + "\n", + "# See also: Tool.quiet\n", + "# c.MyTool.quiet = False\n", + "\n", + "## Instead of starting the Application, dump configuration to stdout\n", + "# See also: Application.show_config\n", + "# c.MyTool.show_config = False\n", + "\n", + "## Instead of starting the Application, dump configuration to stdout (as JSON)\n", + "# See also: Application.show_config_json\n", + "# c.MyTool.show_config_json = False\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# MyComponent(Component) configuration\n", + "#------------------------------------------------------------------------------\n", + "## A Component that does stuff\n", + "\n", + "## Value to use\n", + "# Default: -1\n", + "# c.MyComponent.value = -1\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# AdvancedComponent(Component) configuration\n", + "#------------------------------------------------------------------------------\n", + "## An advanced technique\n", + "\n", + "## input file name\n", + "# Default: traitlets.Undefined\n", + "# c.AdvancedComponent.infile = traitlets.Undefined\n", + "\n", + "## output file name\n", + "# Default: traitlets.Undefined\n", + "# c.AdvancedComponent.outfile = traitlets.Undefined\n", + "\n", + "## Value to use\n", + "# Default: -1\n", + "# c.AdvancedComponent.value1 = -1\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# SecondaryMyComponent(MyComponent) configuration\n", + "#------------------------------------------------------------------------------\n", + "## A second component\n", + "\n", + "## Value to use\n", + "# See also: MyComponent.value\n", + "# c.SecondaryMyComponent.value = -1\n", + "\n", + "#------------------------------------------------------------------------------\n", + "# TelescopeWiseComponent(TelescopeComponent) configuration\n", + "#------------------------------------------------------------------------------\n", + "## a component that contains parameters that are per-telescope configurable\n", + "\n", + "## Something configurable with telescope patterns.\n", + "# Default: [('type', '*', 5.0)]\n", + "# c.TelescopeWiseComponent.param = [('type', '*', 5.0)]\n", + "\n" + ] + } + ], "source": [ "print(tool.generate_config_file())" ] @@ -595,14 +8903,22 @@ } ], "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, "language_info": { "codemirror_mode": { - "name": "ipython" + "name": "ipython", + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", - "nbconvert_exporter": "python" + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" } }, "nbformat": 4, diff --git a/docs/getting_started/index.rst b/docs/getting_started/index.rst index 07bad01c378..92e6ba6b614 100644 --- a/docs/getting_started/index.rst +++ b/docs/getting_started/index.rst @@ -1,3 +1,4 @@ + .. _getting_started: ****************************** @@ -77,7 +78,6 @@ Change to the directory where you cloned ``ctapipe``, and type: .. code-block:: console - $ conda env create -n cta-dev -f environment.yml @@ -238,11 +238,11 @@ You can do this at any time and more than once. It just moves the changes from your local branch on your development machine to your fork on github. -++++++++++++++++++++++++ -4. make a *Pull Request* -++++++++++++++++++++++++ +++++++++++++++++++++++++++ +4. Create a *Pull Request* +++++++++++++++++++++++++++ -When you're happy, you make PR on on your github fork page by clicking +When you're happy, you create PR on on your github fork page by clicking "pull request". You can also do this via *GitHub Desktop* if you have that installed, by pushing the pull-request button in the upper-right-hand corner. @@ -279,7 +279,7 @@ When the PR is accepted, the reviewer will merge your branch into the *master* repo on cta-observatory's account. +++++++++++++++++++++++++++++ -6. delete your feature branch +6. Delete your feature branch +++++++++++++++++++++++++++++ since it is no longer needed (assuming it was accepted and merged in): diff --git a/docs/index.rst b/docs/index.rst index def76c2a40d..37d4fe4ecf8 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,5 +1,7 @@ .. include:: references.txt +:html_theme.sidebar_secondary.remove: true + .. _ctapipe: ============================================== @@ -8,11 +10,19 @@ Prototype CTA Pipeline Framework (``ctapipe``) .. currentmodule:: ctapipe -**version**: |version| +**Version**: |version| + +.. image:: ctapipe_logo.webp + :class: only-light + :align: center + :width: 90% + :alt: The ctapipe logo. -.. image:: ctapipe_logo.png +.. image:: ctapipe_logo_dark.webp + :class: only-dark :align: center :width: 90% + :alt: The ctapipe logo. What is ctapipe? ================ @@ -33,25 +43,150 @@ What is ctapipe? .. _ctapipe_docs: -General documentation -===================== +.. General documentation +.. ===================== .. toctree:: :maxdepth: 1 - :glob: + :hidden: - getting_started_users/index - getting_started/index + User Guide + Developer Guide + ctapipe_api/index development/index tutorials/index examples/index tools/index FAQ data_models/index - ctapipe_api/index bibliography changelog + + +.. grid:: 3 + + .. grid-item-card:: + + :octicon:`book;40px` + + User Guide + ^^^^^^^^^^ + + Learn how to get started as a user. This guide + will help you install ctapipe. + + +++ + + .. button-ref:: getting_started_users/index + :expand: + :color: primary + :click-parent: + + To the user guide + + + .. grid-item-card:: + + :octicon:`person-add;40px` + + Developer Guide + ^^^^^^^^^^^^^^^ + + Learn how to get started as a developer. + This guide will help you install ctapipe for development + and explains how to contribute. + + +++ + + .. button-ref:: getting_started/index + :expand: + :color: primary + :click-parent: + + To the developer guide + + + .. grid-item-card:: + + :octicon:`git-pull-request;40px` + + Development Guidelines + ^^^^^^^^^^^^^^^^^^^^^^ + + These guidelines explain the coding style and the workflow. The ctapipe + enhancement proposals (CEPs) can also be found here. + + +++ + + .. button-ref:: development/index + :expand: + :color: primary + :click-parent: + + To the development guidelines + + + .. grid-item-card:: + + :octicon:`code;40px` + + API Docs + ^^^^^^^^ + + The API docs contain detailed descriptions of + of the various modules and functions included + in ctapipe. + + +++ + + .. button-ref:: ctapipe_api/index + :expand: + :color: primary + :click-parent: + + To API docs + + + .. grid-item-card:: + + :octicon:`mortar-board;40px` + + Tutorials + ^^^^^^^^^ + + A collection of tutorials aimed at new users + and developers to familiarize with ctapipe. + + +++ + + .. button-ref:: tutorials/index + :expand: + :color: primary + :click-parent: + + To the tutorials + + + .. grid-item-card:: + + :octicon:`light-bulb;40px` + + Examples + ^^^^^^^^ + + Some lower-level examples of features included in the ctapipe API. + + +++ + + .. button-ref:: examples/index + :expand: + :color: primary + :click-parent: + + To the examples + + Module API Status (relative to next release) ============================================ @@ -65,3 +200,7 @@ Development Help * Development workflow examples from AstroPy: https://astropy.readthedocs.org/en/latest/development/workflow/development_workflow.html * GIT tutorial: https://www.atlassian.com/git/tutorials/syncing/git-pull * Code distribution and Packaging https://packaging.python.org/en/latest/ + + + + diff --git a/docs/versions.json b/docs/versions.json new file mode 100644 index 00000000000..325cfcaf9eb --- /dev/null +++ b/docs/versions.json @@ -0,0 +1,12 @@ +[ + { + "name": "latest", + "version": "latest", + "url": "https://ctapipe.readthedocs.io/en/latest/" + }, + { + "name": "stable", + "version": "stable", + "url": "https://ctapipe.readthedocs.io/en/stable/" + }, +] From 40aab03aa4f5809176e1ac460eaaa8b90740c5e5 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 15:53:33 +0200 Subject: [PATCH 11/37] Update setup.cfg pydata dependency --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index d3e867f8638..8f835079cd3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -57,7 +57,7 @@ tests = docs = sphinx - sphinx_rtd_theme + pydata_sphinx_theme sphinx_automodapi nbsphinx numpydoc From bc9d6d7096dd6446bac1e94f7c1b7023915b2089 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 16:00:11 +0200 Subject: [PATCH 12/37] Added sphinx-design --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index 8f835079cd3..0858479d898 100644 --- a/setup.cfg +++ b/setup.cfg @@ -61,6 +61,7 @@ docs = sphinx_automodapi nbsphinx numpydoc + sphinx-design jupyter notebook graphviz From 07ce4bafb771940a8b8b3e318787d4198f9b62e9 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 17:17:22 +0200 Subject: [PATCH 13/37] Fixed sphinx warning for ctapipe.compat.StrEnum --- docs/conf.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index cc5843d1020..813c75a266b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -126,8 +126,9 @@ def setup(app): ("py:class", "astropy.coordinates.baseframe.BaseCoordinateFrame"), ("py:class", "astropy.table.table.Table"), ("py:class", "eventio.simtel.simtelfile.SimTelFile"), - ("py:obj", "ctapipe.calib.CameraCalibrator"), # temporary fix to ignore warning - ("py:obj", "ctapipe.calib.GainSelector"), # temporary fix to ignore warning + ("py:class", "ctapipe.compat.StrEnum"), + ("py:obj", "ctapipe.calib.CameraCalibrator"), # temporary fix to ignore warning + ("py:obj", "ctapipe.calib.GainSelector"), # temporary fix to ignore warning ] # The suffix(es) of source filenames. @@ -237,8 +238,8 @@ def setup(app): "header_links_before_dropdown": 6, "navbar_start": ["navbar-logo", "version-switcher"], "switcher": { - "version_match": version_match, - "json_url": json_url, + "version_match": version_match, + "json_url": json_url, }, "use_edit_page_button": True, "icon_links": [ @@ -246,7 +247,7 @@ def setup(app): "name": "CTA Observatory", "url": "https://www.cta-observatory.org/", "type": "url", - "icon": "https://www.cta-observatory.org/wp-content/themes/ctao/favicon.ico" + "icon": "https://www.cta-observatory.org/wp-content/themes/ctao/favicon.ico", }, ], } From c025fe334da63c057eafd36313bc2a8dd01681d1 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Wed, 5 Jul 2023 13:00:14 +0200 Subject: [PATCH 14/37] Fixed sphinx warnings for `ctapipe.instrument` * Fixed warnings by changing ``automodapi`` to ``automodule`` at certain locations * Added change log rst file * Removed unused import of ``pydata_sphinx_theme`` * Updated environment.yml --- docs/_static/ctapipe.css | 2 +- docs/changes/2373.maintenance.rst | 3 +++ docs/conf.py | 10 ++++++---- docs/ctapipe_api/calib/index_camera.rst | 1 - docs/ctapipe_api/instrument/camera.rst | 1 + docs/ctapipe_api/instrument/camera_geometry.rst | 2 +- docs/index.rst | 2 +- docs/versions.json | 12 ------------ environment.yml | 4 +++- 9 files changed, 16 insertions(+), 21 deletions(-) create mode 100644 docs/changes/2373.maintenance.rst delete mode 100644 docs/versions.json diff --git a/docs/_static/ctapipe.css b/docs/_static/ctapipe.css index 243e4af60cd..c7093391670 100644 --- a/docs/_static/ctapipe.css +++ b/docs/_static/ctapipe.css @@ -42,6 +42,6 @@ } html[data-theme="dark"] .sd-shadow-sm { - --sd-color-shadow: #6e6e6e; + --sd-color-shadow: #6e6e6e } diff --git a/docs/changes/2373.maintenance.rst b/docs/changes/2373.maintenance.rst new file mode 100644 index 00000000000..8e5a70349d3 --- /dev/null +++ b/docs/changes/2373.maintenance.rst @@ -0,0 +1,3 @@ +* Switched to ``PyData`` theme for docs +* Updated ``Sphinx`` to version 6.2.1 +* Updated front page of docs diff --git a/docs/conf.py b/docs/conf.py index 813c75a266b..3ea55bb1e6c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -29,7 +29,6 @@ # Get configuration information from setup.cfg from configparser import ConfigParser -import pydata_sphinx_theme import ctapipe setup_cfg = ConfigParser() @@ -127,8 +126,12 @@ def setup(app): ("py:class", "astropy.table.table.Table"), ("py:class", "eventio.simtel.simtelfile.SimTelFile"), ("py:class", "ctapipe.compat.StrEnum"), - ("py:obj", "ctapipe.calib.CameraCalibrator"), # temporary fix to ignore warning - ("py:obj", "ctapipe.calib.GainSelector"), # temporary fix to ignore warning +] + +# temporary fixes to ignore reference warnings and ensure build +nitpick_ignore += [ + ("py:obj", "ctapipe.calib.CameraCalibrator"), + ("py:obj", "ctapipe.calib.GainSelector"), ] # The suffix(es) of source filenames. @@ -219,7 +222,6 @@ def setup(app): on_rtd = os.environ.get("READTHEDOCS", None) == "True" html_theme = "pydata_sphinx_theme" -# html_theme_path = [pydata_sphinx_theme.__path__] html_favicon = "_static/favicon.ico" diff --git a/docs/ctapipe_api/calib/index_camera.rst b/docs/ctapipe_api/calib/index_camera.rst index 897acf55a82..06302ce2216 100644 --- a/docs/ctapipe_api/calib/index_camera.rst +++ b/docs/ctapipe_api/calib/index_camera.rst @@ -38,7 +38,6 @@ Reference/API ************* .. automodapi:: ctapipe.calib.camera - :no-main-docstr: ------------------------------ diff --git a/docs/ctapipe_api/instrument/camera.rst b/docs/ctapipe_api/instrument/camera.rst index 0b45cad8fa0..a24db0326d9 100644 --- a/docs/ctapipe_api/instrument/camera.rst +++ b/docs/ctapipe_api/instrument/camera.rst @@ -22,5 +22,6 @@ Reference/API .. automodapi:: ctapipe.instrument.camera :no-inheritance-diagram: + .. automodapi:: ctapipe.instrument.camera.description :no-inheritance-diagram: diff --git a/docs/ctapipe_api/instrument/camera_geometry.rst b/docs/ctapipe_api/instrument/camera_geometry.rst index 94336be2760..2650cbb0a41 100644 --- a/docs/ctapipe_api/instrument/camera_geometry.rst +++ b/docs/ctapipe_api/instrument/camera_geometry.rst @@ -91,4 +91,4 @@ Reference/API ============= .. automodapi:: ctapipe.instrument.camera.geometry - :no-inheritance-diagram: + :no-inheritance-diagram: diff --git a/docs/index.rst b/docs/index.rst index 37d4fe4ecf8..e550bdfef93 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -52,8 +52,8 @@ What is ctapipe? User Guide Developer Guide - ctapipe_api/index development/index + ctapipe_api/index tutorials/index examples/index tools/index diff --git a/docs/versions.json b/docs/versions.json deleted file mode 100644 index 325cfcaf9eb..00000000000 --- a/docs/versions.json +++ /dev/null @@ -1,12 +0,0 @@ -[ - { - "name": "latest", - "version": "latest", - "url": "https://ctapipe.readthedocs.io/en/latest/" - }, - { - "name": "stable", - "version": "stable", - "url": "https://ctapipe.readthedocs.io/en/stable/" - }, -] diff --git a/environment.yml b/environment.yml index a45df14902b..bbc3bad0b47 100644 --- a/environment.yml +++ b/environment.yml @@ -36,7 +36,8 @@ dependencies: - setuptools - sphinx - sphinx-automodapi - - sphinx_rtd_theme + - pydata-sphinx-theme + - sphinx-design - tomli - towncrier - tqdm @@ -47,4 +48,5 @@ dependencies: - zlib - zstandard - eventio>=1.9.1 + - jinja2 - ffmpeg # for making movies in the documentation From 2aed4dee284bfcb6271b416c2e1fc74eaf4cc9e0 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Wed, 5 Jul 2023 16:29:32 +0200 Subject: [PATCH 15/37] Attempt at a temporary workaround --- docs/conf.py | 10 ++++++++-- docs/ctapipe_api/instrument/camera_geometry.rst | 2 +- docs/ctapipe_api/instrument/camera_readout.rst | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 3ea55bb1e6c..1a7c0595a6c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -59,7 +59,7 @@ numpydoc_show_class_members = False -# numpydoc_class_members_toctree = False +numpydoc_class_members_toctree = False nbsphinx_timeout = 200 # allow max 2 minutes to build each notebook @@ -128,10 +128,15 @@ def setup(app): ("py:class", "ctapipe.compat.StrEnum"), ] -# temporary fixes to ignore reference warnings and ensure build +# temporary workaround to ignore reference warnings and ensure build nitpick_ignore += [ ("py:obj", "ctapipe.calib.CameraCalibrator"), ("py:obj", "ctapipe.calib.GainSelector"), + ("py:obj", "CameraGeometry"), + ("py:obj", "ctapipe.instrument.camera.CameraGeometry"), + ("py:obj", "ctapipe.instrument.camera.CameraDescription"), + ("py:obj", "ctapipe.instrument.camera.PixelShape"), + ("py:obj", "ctapipe.instrument.camera.CameraReadout"), ] # The suffix(es) of source filenames. @@ -256,6 +261,7 @@ def setup(app): html_sidebars = { "**": ["sidebar-nav-bs.html", "sidebar-ethical-ads.html"], + "index.rst": [], } diff --git a/docs/ctapipe_api/instrument/camera_geometry.rst b/docs/ctapipe_api/instrument/camera_geometry.rst index 2650cbb0a41..94336be2760 100644 --- a/docs/ctapipe_api/instrument/camera_geometry.rst +++ b/docs/ctapipe_api/instrument/camera_geometry.rst @@ -91,4 +91,4 @@ Reference/API ============= .. automodapi:: ctapipe.instrument.camera.geometry - :no-inheritance-diagram: + :no-inheritance-diagram: diff --git a/docs/ctapipe_api/instrument/camera_readout.rst b/docs/ctapipe_api/instrument/camera_readout.rst index b455257b5a1..d98cc235ddb 100644 --- a/docs/ctapipe_api/instrument/camera_readout.rst +++ b/docs/ctapipe_api/instrument/camera_readout.rst @@ -32,8 +32,8 @@ Input/Output You can write out a `CameraReadout` by using the ``CameraReadout.to_table()`` - method to turn it into a `~astropy.table.Table`, and then call its ``write()`` - function. Reading it back in can be done with ``CameraReadout.from_table()``. +method to turn it into a `~astropy.table.Table`, and then call its ``write()`` +function. Reading it back in can be done with ``CameraReadout.from_table()``. .. code-block:: python From 8b60b9a560867ebc6fb1771d3bfde8e74f69f878 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Wed, 5 Jul 2023 17:07:43 +0200 Subject: [PATCH 16/37] Added ``:noindex:`` option to certain rst files * Added ``:noindex:`` to get rid of warnings * Works at least locally --- docs/ctapipe_api/instrument/camera.rst | 1 + docs/ctapipe_api/instrument/camera_geometry.rst | 1 + docs/ctapipe_api/instrument/camera_readout.rst | 1 + 3 files changed, 3 insertions(+) diff --git a/docs/ctapipe_api/instrument/camera.rst b/docs/ctapipe_api/instrument/camera.rst index a24db0326d9..fdcfad70b42 100644 --- a/docs/ctapipe_api/instrument/camera.rst +++ b/docs/ctapipe_api/instrument/camera.rst @@ -25,3 +25,4 @@ Reference/API .. automodapi:: ctapipe.instrument.camera.description :no-inheritance-diagram: + :noindex: diff --git a/docs/ctapipe_api/instrument/camera_geometry.rst b/docs/ctapipe_api/instrument/camera_geometry.rst index 94336be2760..fedbf2138f3 100644 --- a/docs/ctapipe_api/instrument/camera_geometry.rst +++ b/docs/ctapipe_api/instrument/camera_geometry.rst @@ -92,3 +92,4 @@ Reference/API .. automodapi:: ctapipe.instrument.camera.geometry :no-inheritance-diagram: + :noindex: diff --git a/docs/ctapipe_api/instrument/camera_readout.rst b/docs/ctapipe_api/instrument/camera_readout.rst index d98cc235ddb..817a199cc58 100644 --- a/docs/ctapipe_api/instrument/camera_readout.rst +++ b/docs/ctapipe_api/instrument/camera_readout.rst @@ -55,3 +55,4 @@ Reference/API .. automodapi:: ctapipe.instrument.camera.readout :no-inheritance-diagram: + :noindex: From f3f6d00239d6515dafd3420b07fcb7ad55f3e496 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Fri, 7 Jul 2023 09:25:06 +0200 Subject: [PATCH 17/37] Workarounds for duplicate reference warnings * use autosummary and some manually added titles instead of automodapi in ``ctapipe_api/instrument/camera.rst`` and ``ctapipe_api/calib/index.rst`` * allows to circumvent duplicate reference warnings * removed ``nipick_ignore`` entries added in previous commits of this ``update-docs`` branch --- docs/conf.py | 10 ----- docs/ctapipe_api/calib/index.rst | 29 +++++++++--- docs/ctapipe_api/instrument/camera.rst | 28 +++++++++--- .../instrument/camera_geometry.rst | 45 +++++++++---------- .../ctapipe_api/instrument/camera_readout.rst | 1 - docs/ctapipe_api/instrument/index.rst | 3 +- docs/ctapipe_api/instrument/telescope.rst | 1 + 7 files changed, 70 insertions(+), 47 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 1a7c0595a6c..ab78da49645 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -128,16 +128,6 @@ def setup(app): ("py:class", "ctapipe.compat.StrEnum"), ] -# temporary workaround to ignore reference warnings and ensure build -nitpick_ignore += [ - ("py:obj", "ctapipe.calib.CameraCalibrator"), - ("py:obj", "ctapipe.calib.GainSelector"), - ("py:obj", "CameraGeometry"), - ("py:obj", "ctapipe.instrument.camera.CameraGeometry"), - ("py:obj", "ctapipe.instrument.camera.CameraDescription"), - ("py:obj", "ctapipe.instrument.camera.PixelShape"), - ("py:obj", "ctapipe.instrument.camera.CameraReadout"), -] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: diff --git a/docs/ctapipe_api/calib/index.rst b/docs/ctapipe_api/calib/index.rst index 28a105b5f61..0be57e5fccc 100644 --- a/docs/ctapipe_api/calib/index.rst +++ b/docs/ctapipe_api/calib/index.rst @@ -1,8 +1,12 @@ .. _calib: -=============================== - Calibration (`~ctapipe.calib`) -=============================== +.. temporary worakaround to at least have calib in the title, + the reason is the usage of autosummary in the Reference/API + section below + +======================================== +Calibration (``calib``) +======================================== .. currentmodule:: ctapipe.calib @@ -44,6 +48,19 @@ Submodules Reference/API ============= -.. automodapi:: ctapipe.calib - :no-inheritance-diagram: - :noindex: +.. What follows is a *temporary* workaround to circumvent + various warnings of duplicate references caused by + calling automodapi on the camera package. + +ctapipe.calib Package +--------------------- + +Calibration + +.. raw:: html + +

Classes

+ +.. autosummary:: + ~camera.CameraCalibrator + ~camera.GainSelector diff --git a/docs/ctapipe_api/instrument/camera.rst b/docs/ctapipe_api/instrument/camera.rst index fdcfad70b42..27dfeb322db 100644 --- a/docs/ctapipe_api/instrument/camera.rst +++ b/docs/ctapipe_api/instrument/camera.rst @@ -5,8 +5,8 @@ Camera Description ================== -The `CameraDescription` contains classes holding information about the -Cherenkov camera, namely the `CameraGeometry` and `CameraReadout` classes. +The `~CameraDescription` contains classes holding information about the +Cherenkov camera, namely the `~CameraGeometry` and `~CameraReadout` classes. .. toctree:: @@ -17,12 +17,28 @@ Cherenkov camera, namely the `CameraGeometry` and `CameraReadout` classes. Reference/API -------------- +============= +.. What follows is a temporary workaround to circumvent + various warnings of duplicate references caused by + calling automodapi on the camera package. + +ctapipe.instrument.camera Package +--------------------------------- + +.. raw:: html + +

Classes

+ + +.. autosummary:: + + ~CameraDescription + ~CameraGeometry + ~PixelShape + ~camera.geometry.UnknownPixelShapeWarning + ~CameraReadout -.. automodapi:: ctapipe.instrument.camera - :no-inheritance-diagram: .. automodapi:: ctapipe.instrument.camera.description :no-inheritance-diagram: - :noindex: diff --git a/docs/ctapipe_api/instrument/camera_geometry.rst b/docs/ctapipe_api/instrument/camera_geometry.rst index fedbf2138f3..ddf30ae6e8c 100644 --- a/docs/ctapipe_api/instrument/camera_geometry.rst +++ b/docs/ctapipe_api/instrument/camera_geometry.rst @@ -5,7 +5,7 @@ Camera Geometries ================= -The `CameraGeometry` provides an easy way to work with images or data +The `~ctapipe.instrument.CameraGeometry` provides an easy way to work with images or data cubes related to Cherenkov Cameras. In *ctapipe*, a camera image is simply a flat 1D array (or 2D if time information is included), where there is one value per pixel. Of course, to work with such an array, @@ -14,38 +14,38 @@ Since CTA has at least 6 different camera types, and may have multiple versions of each as revisions are made, it is necessary to have a common way to describe all cameras. -So far there are several ways to construct a `CameraGeometry`: +So far there are several ways to construct a `~ctapipe.instrument.CameraGeometry`: -* `~ctapipe.io.EventSource` instances have a ``subarray`` attribute, +* `~ctapipe.io.EventSource` instances have a :attr:`~ctapipe.io.EventSource.subarray` attribute, e.g. to obtain the geometry for the telescope with id 1, use: - ``source.subarray.tel[1].camera.geometry``. - `~ctapipe.io.TableLoader` also has the ``.subarray`` attribute. + ``source.subarray.tel[1].camera.geometry``. The + `~ctapipe.io.TableLoader` instance also has the ``.subarray`` attribute. -* use the `CameraGeometry` constructor, where one has to specify all +* use the `~ctapipe.instrument.CameraGeometry` constructor, where one has to specify all necessary information (pixel positions, types, areas, etc) * load it from a pre-written file (which can be in any format - supported by ``astropy.table``, as long as that format allows for + supported by `astropy.table`, as long as that format allows for header-keywords as well as table entries. -Once loaded, the `CameraGeometry` object gives you access the pixel +Once loaded, the `~ctapipe.instrument.CameraGeometry` object gives you access the pixel positions, areas, neighbors, and shapes. -`CameraGeometry` is used by most image processing algorithms in the +`~ctapipe.instrument.CameraGeometry` is used by most image processing algorithms in the `ctapipe.image` module, as well as displays in the `ctapipe.visualization` module. Input/Output ------------ -You can write out a `CameraGeometry` by using the `CameraGeometry.to_table()` - method to turn it into an `astropy.table.Table`, and then call its `~astropy.table.Table.write` - function. Reading it back in can be done with `CameraGeometry.from_table()` +You can write out a `~ctapipe.instrument.CameraGeometry` by using the `CameraGeometry.to_table()` +method to turn it into an `astropy.table.Table`, and then call its `~astropy.table.Table.write` +function. Reading it back in can be done with `~ctapipe.instrument.CameraGeometry.from_table()` .. code-block:: python - geom = CameraGeometry(...) # constructed elsewhere + geom = ~ctapipe.instrument.CameraGeometry(...) # constructed elsewhere geom.to_table().write('mycam.fits.gz') # FITS output geom.to_table().write('mycam.h5', path='/cameras/mycam') # hdf5 output @@ -53,28 +53,28 @@ You can write out a `CameraGeometry` by using the `CameraGeometry.to_table()` # later read back in: - geom = CameraGeometry.from_table('mycam.ecsv', format='ascii.ecsv') - geom = CameraGeometry.from_table('mycam.fits.gz') - geom = CameraGeometry.from_table('mycam.h5', path='/cameras/mycam') + geom = ~ctapipe.instrument.CameraGeometry.from_table('mycam.ecsv', format='ascii.ecsv') + geom = ~ctapipe.instrument.CameraGeometry.from_table('mycam.fits.gz') + geom = ~ctapipe.instrument.CameraGeometry.from_table('mycam.h5', path='/cameras/mycam') A note on Pixel Neighbors ------------------------- -The `CameraGeometry` object provides two pixel-neighbor -representations: a *neighbor adjacency list* (in the ``neighbors`` -attribute) and a *pixel adjacency matrix* (in the ``neighbor_matrix`` +The `~ctapipe.instrument.CameraGeometry` object provides two pixel-neighbor +representations: a *neighbor adjacency list* (in the :attr:`~CameraGeometry.neighbors` +attribute) and a *pixel adjacency matrix* (in the :attr:`~CameraGeometry.neighbor_matrix` attribute). The former is a list of lists, where element *i* is a list of neighbors *j* of the *i*th pixel. The latter is a 2D matrix where row *i* is a boolean mask of pixels that are neighbors. It is not necessary to load or specify either of these neighbor -representations when constructing a `CameraGeometry`, since they +representations when constructing a `~ctapipe.instrument.CameraGeometry`, since they will be computed on-the-fly if left blank, using a KD-tree nearest-neighbor algorithm. It is recommended that all algorithms that need to be computationally -fast use the ``neighbor_matrix`` attribute, particularly in conjunction -with ``numpy`` operations, since it is quite speed-efficient. +fast use the :attr:`~CameraGeometry.neighbor_matrix` attribute, particularly in conjunction +with `numpy` operations, since it is quite speed-efficient. Examples -------- @@ -92,4 +92,3 @@ Reference/API .. automodapi:: ctapipe.instrument.camera.geometry :no-inheritance-diagram: - :noindex: diff --git a/docs/ctapipe_api/instrument/camera_readout.rst b/docs/ctapipe_api/instrument/camera_readout.rst index 817a199cc58..d98cc235ddb 100644 --- a/docs/ctapipe_api/instrument/camera_readout.rst +++ b/docs/ctapipe_api/instrument/camera_readout.rst @@ -55,4 +55,3 @@ Reference/API .. automodapi:: ctapipe.instrument.camera.readout :no-inheritance-diagram: - :noindex: diff --git a/docs/ctapipe_api/instrument/index.rst b/docs/ctapipe_api/instrument/index.rst index b3b98c040b1..3e2a53ebf36 100644 --- a/docs/ctapipe_api/instrument/index.rst +++ b/docs/ctapipe_api/instrument/index.rst @@ -6,10 +6,11 @@ Instrument (`~ctapipe.instrument`) .. currentmodule:: ctapipe.instrument + Introduction ============ -The `ctapipe.instrument` module contains classes and methods for +The `~ctapipe.instrument` module contains classes and methods for describing the instrumental layout and configuration. This module is under heavy restructuring and should not be considered diff --git a/docs/ctapipe_api/instrument/telescope.rst b/docs/ctapipe_api/instrument/telescope.rst index 8f77e29c258..e30b9364ead 100644 --- a/docs/ctapipe_api/instrument/telescope.rst +++ b/docs/ctapipe_api/instrument/telescope.rst @@ -14,3 +14,4 @@ Reference/API ------------- .. automodapi:: ctapipe.instrument.telescope + :no-inheritance-diagram: From 958e5d95f1cdf1a667247af9c9708c6b43aaf047 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Fri, 7 Jul 2023 10:22:50 +0200 Subject: [PATCH 18/37] Fix heading issue --- docs/_static/ctapipe.css | 2 +- docs/ctapipe_api/calib/index.rst | 5 ++--- docs/ctapipe_api/instrument/camera.rst | 5 ++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/docs/_static/ctapipe.css b/docs/_static/ctapipe.css index c7093391670..243e4af60cd 100644 --- a/docs/_static/ctapipe.css +++ b/docs/_static/ctapipe.css @@ -42,6 +42,6 @@ } html[data-theme="dark"] .sd-shadow-sm { - --sd-color-shadow: #6e6e6e + --sd-color-shadow: #6e6e6e; } diff --git a/docs/ctapipe_api/calib/index.rst b/docs/ctapipe_api/calib/index.rst index 0be57e5fccc..9cd202747dd 100644 --- a/docs/ctapipe_api/calib/index.rst +++ b/docs/ctapipe_api/calib/index.rst @@ -57,9 +57,8 @@ ctapipe.calib Package Calibration -.. raw:: html - -

Classes

+Classes +^^^^^^^ .. autosummary:: ~camera.CameraCalibrator diff --git a/docs/ctapipe_api/instrument/camera.rst b/docs/ctapipe_api/instrument/camera.rst index 27dfeb322db..ba51ca9dbda 100644 --- a/docs/ctapipe_api/instrument/camera.rst +++ b/docs/ctapipe_api/instrument/camera.rst @@ -26,10 +26,9 @@ Reference/API ctapipe.instrument.camera Package --------------------------------- -.. raw:: html - -

Classes

+Classes +^^^^^^^ .. autosummary:: From 1618eb1f9255096ff65ba846d37d09672cd02808 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Sun, 9 Jul 2023 12:30:25 +0200 Subject: [PATCH 19/37] Not adding to __all__ fixes automodapi warnings Not adding to ``__all__`` in ``ctapipe/calib/index_camera/__init__.py`` and ``ctapipe/instrument/camera/__init__.py`` fixes nitpick warnings with automodapi. Note that importing the modules is still necessary. --- ctapipe/calib/camera/__init__.py | 10 ++++++---- ctapipe/instrument/camera/__init__.py | 15 ++++++++------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/ctapipe/calib/camera/__init__.py b/ctapipe/calib/camera/__init__.py index d576bafd0c0..35b051c663c 100644 --- a/ctapipe/calib/camera/__init__.py +++ b/ctapipe/calib/camera/__init__.py @@ -6,7 +6,9 @@ from .calibrator import CameraCalibrator from .gainselection import GainSelector -__all__ = [ - "CameraCalibrator", - "GainSelector", -] +# __all__ = [ +# "CameraCalibrator", +# "GainSelector", +# ] + +__all__ = [] diff --git a/ctapipe/instrument/camera/__init__.py b/ctapipe/instrument/camera/__init__.py index 678ea988577..35c51460b61 100644 --- a/ctapipe/instrument/camera/__init__.py +++ b/ctapipe/instrument/camera/__init__.py @@ -2,10 +2,11 @@ from .geometry import CameraGeometry, UnknownPixelShapeWarning, PixelShape from .readout import CameraReadout -__all__ = [ - "CameraDescription", - "CameraGeometry", - "PixelShape", - "UnknownPixelShapeWarning", - "CameraReadout", -] +# __all__ = [ +# "CameraDescription", +# "CameraGeometry", +# "PixelShape", +# "UnknownPixelShapeWarning", +# "CameraReadout", +# ] +__all__ = [] From a99555b9dbdaa8510c154a4445ffd00d4c423467 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Sun, 9 Jul 2023 12:34:45 +0200 Subject: [PATCH 20/37] Change back to automodapi, rework docs front page * Change back to ``automodapi`` in ``ctapipe_api/calib/index.rst`` and ``ctapipe_api/instrument/camera.rst`` * Previous workaround no longer necessary * Fix mobile layout of front page (grid cards now display correctly) * Cleaner docs front page --- docs/ctapipe_api/calib/index.rst | 26 +++---------- docs/ctapipe_api/calib/index_camera.rst | 2 +- docs/ctapipe_api/instrument/camera.rst | 25 ++----------- docs/development/index.rst | 4 +- docs/index.rst | 50 +++++++++---------------- 5 files changed, 29 insertions(+), 78 deletions(-) diff --git a/docs/ctapipe_api/calib/index.rst b/docs/ctapipe_api/calib/index.rst index 9cd202747dd..398acfed120 100644 --- a/docs/ctapipe_api/calib/index.rst +++ b/docs/ctapipe_api/calib/index.rst @@ -1,12 +1,9 @@ .. _calib: -.. temporary worakaround to at least have calib in the title, - the reason is the usage of autosummary in the Reference/API - section below -======================================== -Calibration (``calib``) -======================================== +============================== +Calibration (`~ctapipe.calib`) +============================== .. currentmodule:: ctapipe.calib @@ -48,18 +45,5 @@ Submodules Reference/API ============= -.. What follows is a *temporary* workaround to circumvent - various warnings of duplicate references caused by - calling automodapi on the camera package. - -ctapipe.calib Package ---------------------- - -Calibration - -Classes -^^^^^^^ - -.. autosummary:: - ~camera.CameraCalibrator - ~camera.GainSelector +.. automodapi:: ctapipe.calib + :no-inheritance-diagram: diff --git a/docs/ctapipe_api/calib/index_camera.rst b/docs/ctapipe_api/calib/index_camera.rst index 06302ce2216..0827c266218 100644 --- a/docs/ctapipe_api/calib/index_camera.rst +++ b/docs/ctapipe_api/calib/index_camera.rst @@ -19,7 +19,7 @@ CTA Cameras (MC, prototypes and final camera calibration algorithms). CameraCalibrator **************** -The primary class in this module is the :class:`.CameraCalibrator`. This class handles +The primary class in this module is the `~ctapipe.calib.camera.calibrator.CameraCalibrator`. This class handles two data level transition stages for the event: * R1 -> DL0 (:ref:`image_reducers`) diff --git a/docs/ctapipe_api/instrument/camera.rst b/docs/ctapipe_api/instrument/camera.rst index ba51ca9dbda..86fdd59a431 100644 --- a/docs/ctapipe_api/instrument/camera.rst +++ b/docs/ctapipe_api/instrument/camera.rst @@ -5,8 +5,8 @@ Camera Description ================== -The `~CameraDescription` contains classes holding information about the -Cherenkov camera, namely the `~CameraGeometry` and `~CameraReadout` classes. +The `~camera.description.CameraDescription` contains classes holding information about the +Cherenkov camera, namely the `~camera.geometry.CameraGeometry` and `~camera.readout.CameraReadout` classes. .. toctree:: @@ -19,25 +19,8 @@ Cherenkov camera, namely the `~CameraGeometry` and `~CameraReadout` classes. Reference/API ============= -.. What follows is a temporary workaround to circumvent - various warnings of duplicate references caused by - calling automodapi on the camera package. - -ctapipe.instrument.camera Package ---------------------------------- - - -Classes -^^^^^^^ - -.. autosummary:: - - ~CameraDescription - ~CameraGeometry - ~PixelShape - ~camera.geometry.UnknownPixelShapeWarning - ~CameraReadout - +.. automodapi:: ctapipe.instrument.camera + :no-inheritance-diagram: .. automodapi:: ctapipe.instrument.camera.description :no-inheritance-diagram: diff --git a/docs/development/index.rst b/docs/development/index.rst index 856fdaa57ae..e214e31ad00 100644 --- a/docs/development/index.rst +++ b/docs/development/index.rst @@ -1,7 +1,7 @@ .. _guidelines: -Development Guidelines -====================== +Coding Guidelines +================= .. toctree:: diff --git a/docs/index.rst b/docs/index.rst index e550bdfef93..6485c01d5b3 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,6 +1,7 @@ .. include:: references.txt :html_theme.sidebar_secondary.remove: true +:html_theme.sidebar_primary.remove: true .. _ctapipe: @@ -10,7 +11,7 @@ Prototype CTA Pipeline Framework (``ctapipe``) .. currentmodule:: ctapipe -**Version**: |version| +| .. image:: ctapipe_logo.webp :class: only-light @@ -24,8 +25,18 @@ Prototype CTA Pipeline Framework (``ctapipe``) :width: 90% :alt: The ctapipe logo. -What is ctapipe? -================ +| + +**Date**: |today| **Version**: |version| + +**Useful links**: +`Source Repository `__ | +`Issue Tracker `__ | +`Discussions `__ + +**License**: BSD-3 **Python**: |python_requires| + +| ``ctapipe`` is a framework for prototyping the low-level data processing algorithms for the Cherenkov Telescope Array. @@ -34,18 +45,9 @@ What is ctapipe? structure and functionality as we explore various design choices before the 1.0 release. -* Code, feature requests, bug reports, pull requests: https://github.com/cta-observatory/ctapipe -* Docs: https://ctapipe.readthedocs.io/ -* License: BSD-3 -* Python: |python_requires| - - .. _ctapipe_docs: -.. General documentation -.. ===================== - .. toctree:: :maxdepth: 1 :hidden: @@ -64,7 +66,7 @@ What is ctapipe? -.. grid:: 3 +.. grid:: 1 2 2 3 .. grid-item-card:: @@ -111,8 +113,8 @@ What is ctapipe? :octicon:`git-pull-request;40px` - Development Guidelines - ^^^^^^^^^^^^^^^^^^^^^^ + Coding Guidelines + ^^^^^^^^^^^^^^^^^ These guidelines explain the coding style and the workflow. The ctapipe enhancement proposals (CEPs) can also be found here. @@ -186,21 +188,3 @@ What is ctapipe? To the examples - -Module API Status (relative to next release) -============================================ - -ctapipe is under activate developement and we will make breaking changes from release to release until -we reach version 1.0. - - -Development Help -================ - -* Development workflow examples from AstroPy: https://astropy.readthedocs.org/en/latest/development/workflow/development_workflow.html -* GIT tutorial: https://www.atlassian.com/git/tutorials/syncing/git-pull -* Code distribution and Packaging https://packaging.python.org/en/latest/ - - - - From 246639f0e42719d96b603baa8b8081c7bd8eddb5 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Mon, 10 Jul 2023 10:58:19 +0200 Subject: [PATCH 21/37] Ignore unused import warnings Ignore unused import warnings in ``ctapipe/calib/camera/__init__.py`` ``ctapipe/instrument/camera/__init__.py`` using ``noqa: F401``. This will allow the linting CI to run successfully, while still allowing the docs to be built with ``automodapi``. --- ctapipe/calib/camera/__init__.py | 4 ++-- ctapipe/instrument/camera/__init__.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ctapipe/calib/camera/__init__.py b/ctapipe/calib/camera/__init__.py index 35b051c663c..b71a6d469c8 100644 --- a/ctapipe/calib/camera/__init__.py +++ b/ctapipe/calib/camera/__init__.py @@ -3,8 +3,8 @@ Camera calibration module. """ -from .calibrator import CameraCalibrator -from .gainselection import GainSelector +from .calibrator import CameraCalibrator # noqa: F401 +from .gainselection import GainSelector # noqa: F401 # __all__ = [ # "CameraCalibrator", diff --git a/ctapipe/instrument/camera/__init__.py b/ctapipe/instrument/camera/__init__.py index 35c51460b61..c87b09a7ef9 100644 --- a/ctapipe/instrument/camera/__init__.py +++ b/ctapipe/instrument/camera/__init__.py @@ -1,6 +1,6 @@ -from .description import CameraDescription -from .geometry import CameraGeometry, UnknownPixelShapeWarning, PixelShape -from .readout import CameraReadout +from .description import CameraDescription # noqa: F401 +from .geometry import CameraGeometry, UnknownPixelShapeWarning, PixelShape # noqa: F401 +from .readout import CameraReadout # noqa: F401 # __all__ = [ # "CameraDescription", From 3c0223b09f2e0eb96e2e52c8f05a6353ad2b5cb6 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Mon, 10 Jul 2023 11:40:56 +0200 Subject: [PATCH 22/37] Fix isort failing in ctapipe/instrument/camera/__init__.py --- ctapipe/instrument/camera/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctapipe/instrument/camera/__init__.py b/ctapipe/instrument/camera/__init__.py index c87b09a7ef9..43a0644f6f9 100644 --- a/ctapipe/instrument/camera/__init__.py +++ b/ctapipe/instrument/camera/__init__.py @@ -1,5 +1,5 @@ from .description import CameraDescription # noqa: F401 -from .geometry import CameraGeometry, UnknownPixelShapeWarning, PixelShape # noqa: F401 +from .geometry import CameraGeometry, PixelShape, UnknownPixelShapeWarning # noqa: F401 from .readout import CameraReadout # noqa: F401 # __all__ = [ From 099f601621e78c71e1895f26e414be6ab2608a92 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Mon, 10 Jul 2023 15:25:23 +0200 Subject: [PATCH 23/37] Remove html_sidebars option from conf.py --- docs/conf.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index ab78da49645..6c41637ed84 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -249,11 +249,6 @@ def setup(app): ], } -html_sidebars = { - "**": ["sidebar-nav-bs.html", "sidebar-ethical-ads.html"], - "index.rst": [], -} - # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, From 57d348f0b2b56e5750048ab1cce87c7cbf63345e Mon Sep 17 00:00:00 2001 From: Maximilian Linhoff Date: Mon, 17 Jul 2023 11:30:46 +0200 Subject: [PATCH 24/37] Fix duplicated reference warning for muon components --- ctapipe/image/__init__.py | 2 ++ ctapipe/image/muon/__init__.py | 9 +++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/ctapipe/image/__init__.py b/ctapipe/image/__init__.py index 3f8f32fc6d6..61799ac01a5 100644 --- a/ctapipe/image/__init__.py +++ b/ctapipe/image/__init__.py @@ -42,6 +42,7 @@ ) from .muon import ( MuonIntensityFitter, + MuonProcessor, MuonRingFitter, intensity_ratio_inside_ring, kundu_chaudhuri_circle_fit, @@ -93,6 +94,7 @@ "chi_squared", "MuonIntensityFitter", "MuonRingFitter", + "MuonProcessor", "kundu_chaudhuri_circle_fit", "mean_squared_error", "intensity_ratio_inside_ring", diff --git a/ctapipe/image/muon/__init__.py b/ctapipe/image/muon/__init__.py index f7025eb10a3..4d35282377c 100644 --- a/ctapipe/image/muon/__init__.py +++ b/ctapipe/image/muon/__init__.py @@ -5,17 +5,14 @@ ring_containment, ) from .fitting import kundu_chaudhuri_circle_fit -from .intensity_fitter import MuonIntensityFitter -from .processor import MuonProcessor -from .ring_fitter import MuonRingFitter +from .intensity_fitter import MuonIntensityFitter # noqa: F401 +from .processor import MuonProcessor # noqa: F401 +from .ring_fitter import MuonRingFitter # noqa: F401 __all__ = [ - "MuonIntensityFitter", - "MuonRingFitter", "kundu_chaudhuri_circle_fit", "mean_squared_error", "intensity_ratio_inside_ring", "ring_completeness", "ring_containment", - "MuonProcessor", ] From c0dc668f942fc6c13cf114ca0239b39460118904 Mon Sep 17 00:00:00 2001 From: Maximilian Linhoff Date: Mon, 17 Jul 2023 11:46:44 +0200 Subject: [PATCH 25/37] Fix broken html syntax in Component.__repr_html__ --- ctapipe/core/component.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctapipe/core/component.py b/ctapipe/core/component.py index caee11edef7..cbfc05b2584 100644 --- a/ctapipe/core/component.py +++ b/ctapipe/core/component.py @@ -233,7 +233,7 @@ def _repr_html_(self): or "Undocumented" ) lines = [ - "
", + '
', f"{name}", f"

{docstring}

", "", From 2f16d2302afdae080bcb9d272b3b47d60dc01750 Mon Sep 17 00:00:00 2001 From: Maximilian Linhoff Date: Mon, 17 Jul 2023 11:47:17 +0200 Subject: [PATCH 26/37] Clear notebook outputs --- docs/examples/Tools.ipynb | 8422 +------------------------------------ 1 file changed, 57 insertions(+), 8365 deletions(-) diff --git a/docs/examples/Tools.ipynb b/docs/examples/Tools.ipynb index 7f9322406da..02eb2b8f3c1 100644 --- a/docs/examples/Tools.ipynb +++ b/docs/examples/Tools.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -33,7 +33,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -58,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -113,95 +113,18 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "MyComponent\n", - "

\n", - "

A Component that does stuff

\n", - "
\n", - "

\n", - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - "
value-1Value to use (default: -1)
\n", - "
" - ], - "text/plain": [ - "<__main__.MyComponent at 0x7fa1066e5eb0>" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "MyComponent()" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Outfile was changed to '{'name': 'outfile', 'old': None, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.foo'), 'owner': <__main__.AdvancedComponent object at 0x7fa105f4fe20>, 'type': 'change'}'\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "AdvancedComponent\n", - "

\n", - "

An advanced technique

\n", - "
\n", - "

\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - "
infile/home/aknierim/dev/ctapipe/docs/examples/test.fooinput file name (default: traitlets.Undefined)
outfile/home/aknierim/dev/ctapipe/docs/examples/out.foooutput file name (default: traitlets.Undefined)
value1-1Value to use (default: -1)
\n", - "
" - ], - "text/plain": [ - "<__main__.AdvancedComponent at 0x7fa105f4fe20>" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "AdvancedComponent(infile=\"test.foo\", outfile=\"out.foo\")" ] @@ -215,26 +138,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Subarray : MonteCarloArray\n", - "Num Tels : 180\n", - "Footprint: 4.92 km2\n", - "\n", - " Type Count Tel IDs \n", - "----------------- ----- ---------------\n", - " SST_ASTRI_CHEC 120 30-99,131-180 \n", - " LST_LST_LSTCam 4 1-4 \n", - "MST_MST_NectarCam 28 100-124,128-130\n", - " MST_MST_FlashCam 28 5-29,125-127 \n" - ] - } - ], + "outputs": [], "source": [ "from ctapipe.instrument import SubarrayDescription, TelescopeDescription\n", "\n", @@ -244,41 +150,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "TelescopeWiseComponent\n", - "

\n", - "

a component that contains parameters that are per-telescope configurable

\n", - "
\n", - "

\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - "
param[('type', '*', 5.0)]Something configurable with telescope patterns. (default: traitlets.Undefined)
\n", - "
" - ], - "text/plain": [ - "<__main__.TelescopeWiseComponent at 0x7fa1704b9280>" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "TelescopeWiseComponent(subarray=subarray)" ] @@ -312,7 +186,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -370,128 +244,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "MyTool\n", - "

\n", - "

do some things and stuff

\n", - "
\n", - "

\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - "
config_files[] (default: traitlets.Undefined)
iterations5Number of times to run (default: 5)
log_config{} (default: traitlets.Undefined)
log_datefmt%Y-%m-%d %H:%M:%SThe date format used by logging formatters for %(asctime)s (default: %Y-%m-%d %H:%M:%S)
log_fileNoneFilename for the log (default: None)
log_file_levelINFOLogging Level for File Logging (default: INFO)
log_format[%(name)s]%(highlevel)s %(message)sThe Logging format template (default: [%(name)s]%(highlevel)s %(message)s)
log_level30Set the log level by value or name. (default: 30)
logging_config{}\n", - " Configure additional log handlers.\n", - "\n", - " The default stderr logs handler is configured by the\n", - " log_level, log_datefmt and log_format settings.\n", - "\n", - " This configuration can be used to configure additional handlers\n", - " (e.g. to output the log to a file) or for finer control over the\n", - " default handlers.\n", - "\n", - " If provided this should be a logging configuration dictionary, for\n", - " more information see:\n", - " https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\n", - "\n", - " This dictionary is merged with the base logging configuration which\n", - " defines the following:\n", - "\n", - " * A logging formatter intended for interactive use called\n", - " ``console``.\n", - " * A logging handler that writes to stderr called\n", - " ``console`` which uses the formatter ``console``.\n", - " * A logger with the name of this application set to ``DEBUG``\n", - " level.\n", - "\n", - " This example adds a new handler that writes to a file:\n", - "\n", - " .. code-block:: python\n", - "\n", - " c.Application.logging_config = {\n", - " 'handlers': {\n", - " 'file': {\n", - " 'class': 'logging.FileHandler',\n", - " 'level': 'DEBUG',\n", - " 'filename': '',\n", - " }\n", - " },\n", - " 'loggers': {\n", - " '': {\n", - " 'level': 'DEBUG',\n", - " # NOTE: if you don't list the default \"console\"\n", - " # handler here then it will be disabled\n", - " 'handlers': ['console', 'file'],\n", - " },\n", - " }\n", - " }\n", - "\n", - " (default: traitlets.Undefined)
overwriteFalse (default: False)
provenance_log/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log (default: traitlets.Undefined)
quietFalse (default: False)
show_configFalseInstead of starting the Application, dump configuration to stdout (default: False)
show_config_jsonFalseInstead of starting the Application, dump configuration to stdout (as JSON) (default: False)
\n", - "

Components:\n", - "MyTool, MyComponent, AdvancedComponent, SecondaryMyComponent, TelescopeWiseComponent\n", - "

\n", - "
" - ], - "text/plain": [ - "<__main__.MyTool at 0x7fa170490cd0>" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tool = MyTool()\n", "tool" @@ -499,78 +254,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "do some things and stuff\n", - "\n", - "Options\n", - "=======\n", - "The options below are convenience aliases to configurable class-options,\n", - "as listed in the \"Equivalent to\" description-line of the aliases.\n", - "To see all configurable class-options for some , use:\n", - " --help-all\n", - "\n", - "-q, --quiet\n", - " Disable console logging.\n", - " Equivalent to: [--Tool.quiet=True]\n", - "-v, --verbose\n", - " Set log level to DEBUG\n", - " Equivalent to: [--Tool.log_level=DEBUG]\n", - "--overwrite\n", - " Overwrite existing output files without asking\n", - " Equivalent to: [--Tool.overwrite=True]\n", - "--debug\n", - " Set log-level to debug, for the most verbose logging.\n", - " Equivalent to: [--Application.log_level=10]\n", - "--show-config\n", - " Show the application's configuration (human-readable format)\n", - " Equivalent to: [--Application.show_config=True]\n", - "--show-config-json\n", - " Show the application's configuration (json format)\n", - " Equivalent to: [--Application.show_config_json=True]\n", - "-c, --config=...\n", - " Default: []\n", - " Equivalent to: [--Tool.config_files]\n", - "--log-level=\n", - " Set the log level by value or name.\n", - " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", - " Default: 30\n", - " Equivalent to: [--Tool.log_level]\n", - "-l, --log-file=\n", - " Filename for the log\n", - " Default: None\n", - " Equivalent to: [--Tool.log_file]\n", - "--log-file-level=\n", - " Logging Level for File Logging\n", - " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", - " Default: 'INFO'\n", - " Equivalent to: [--Tool.log_file_level]\n", - "--provenance-log=\n", - " Default: traitlets.Undefined\n", - " Equivalent to: [--Tool.provenance_log]\n", - "--infile=\n", - " input file name\n", - " Default: traitlets.Undefined\n", - " Equivalent to: [--AdvancedComponent.infile]\n", - "--outfile=\n", - " output file name\n", - " Default: traitlets.Undefined\n", - " Equivalent to: [--AdvancedComponent.outfile]\n", - "--iterations=\n", - " Number of times to run\n", - " Default: 5\n", - " Equivalent to: [--MyTool.iterations]\n", - "\n", - "To see all available configurables, use `--help-all`.\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "tool.print_help()" ] @@ -584,322 +270,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "do some things and stuff\n", - "\n", - "Options\n", - "=======\n", - "The options below are convenience aliases to configurable class-options,\n", - "as listed in the \"Equivalent to\" description-line of the aliases.\n", - "To see all configurable class-options for some , use:\n", - " --help-all\n", - "\n", - "-q, --quiet\n", - " Disable console logging.\n", - " Equivalent to: [--Tool.quiet=True]\n", - "-v, --verbose\n", - " Set log level to DEBUG\n", - " Equivalent to: [--Tool.log_level=DEBUG]\n", - "--overwrite\n", - " Overwrite existing output files without asking\n", - " Equivalent to: [--Tool.overwrite=True]\n", - "--debug\n", - " Set log-level to debug, for the most verbose logging.\n", - " Equivalent to: [--Application.log_level=10]\n", - "--show-config\n", - " Show the application's configuration (human-readable format)\n", - " Equivalent to: [--Application.show_config=True]\n", - "--show-config-json\n", - " Show the application's configuration (json format)\n", - " Equivalent to: [--Application.show_config_json=True]\n", - "-c, --config=...\n", - " Default: []\n", - " Equivalent to: [--Tool.config_files]\n", - "--log-level=\n", - " Set the log level by value or name.\n", - " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", - " Default: 30\n", - " Equivalent to: [--Tool.log_level]\n", - "-l, --log-file=\n", - " Filename for the log\n", - " Default: None\n", - " Equivalent to: [--Tool.log_file]\n", - "--log-file-level=\n", - " Logging Level for File Logging\n", - " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", - " Default: 'INFO'\n", - " Equivalent to: [--Tool.log_file_level]\n", - "--provenance-log=\n", - " Default: traitlets.Undefined\n", - " Equivalent to: [--Tool.provenance_log]\n", - "--infile=\n", - " input file name\n", - " Default: traitlets.Undefined\n", - " Equivalent to: [--AdvancedComponent.infile]\n", - "--outfile=\n", - " output file name\n", - " Default: traitlets.Undefined\n", - " Equivalent to: [--AdvancedComponent.outfile]\n", - "--iterations=\n", - " Number of times to run\n", - " Default: 5\n", - " Equivalent to: [--MyTool.iterations]\n", - "\n", - "Class options\n", - "=============\n", - "The command-line option below sets the respective configurable class-parameter:\n", - " --Class.parameter=value\n", - "This line is evaluated in Python, so simple expressions are allowed.\n", - "For instance, to set `C.a=[0,1,2]`, you may type this:\n", - " --C.a='range(3)'\n", - "\n", - "Application(SingletonConfigurable) options\n", - "------------------------------------------\n", - "--Application.log_datefmt=\n", - " The date format used by logging formatters for %(asctime)s\n", - " Default: '%Y-%m-%d %H:%M:%S'\n", - "--Application.log_format=\n", - " The Logging format template\n", - " Default: '[%(name)s]%(highlevel)s %(message)s'\n", - "--Application.log_level=\n", - " Set the log level by value or name.\n", - " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", - " Default: 30\n", - "--Application.logging_config==...\n", - " Configure additional log handlers.\n", - " The default stderr logs handler is configured by the log_level, log_datefmt\n", - " and log_format settings.\n", - " This configuration can be used to configure additional handlers (e.g. to\n", - " output the log to a file) or for finer control over the default handlers.\n", - " If provided this should be a logging configuration dictionary, for more\n", - " information see:\n", - " https://docs.python.org/3/library/logging.config.html#logging-config-\n", - " dictschema\n", - " This dictionary is merged with the base logging configuration which defines\n", - " the following:\n", - " * A logging formatter intended for interactive use called\n", - " ``console``.\n", - " * A logging handler that writes to stderr called\n", - " ``console`` which uses the formatter ``console``.\n", - " * A logger with the name of this application set to ``DEBUG``\n", - " level.\n", - " This example adds a new handler that writes to a file:\n", - " .. code-block:: python\n", - " c.Application.logging_config = {\n", - " 'handlers': {\n", - " 'file': {\n", - " 'class': 'logging.FileHandler',\n", - " 'level': 'DEBUG',\n", - " 'filename': '',\n", - " }\n", - " },\n", - " 'loggers': {\n", - " '': {\n", - " 'level': 'DEBUG',\n", - " # NOTE: if you don't list the default \"console\"\n", - " # handler here then it will be disabled\n", - " 'handlers': ['console', 'file'],\n", - " },\n", - " }\n", - " }\n", - " Default: {}\n", - "--Application.show_config=\n", - " Instead of starting the Application, dump configuration to stdout\n", - " Default: False\n", - "--Application.show_config_json=\n", - " Instead of starting the Application, dump configuration to stdout (as JSON)\n", - " Default: False\n", - "\n", - "Tool(Application) options\n", - "-------------------------\n", - "--Tool.config_files=...\n", - " Default: []\n", - "--Tool.log_config==...\n", - " Default: {}\n", - "--Tool.log_datefmt=\n", - " The date format used by logging formatters for %(asctime)s\n", - " Default: '%Y-%m-%d %H:%M:%S'\n", - "--Tool.log_file=\n", - " Filename for the log\n", - " Default: None\n", - "--Tool.log_file_level=\n", - " Logging Level for File Logging\n", - " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", - " Default: 'INFO'\n", - "--Tool.log_format=\n", - " The Logging format template\n", - " Default: '[%(name)s]%(highlevel)s %(message)s'\n", - "--Tool.log_level=\n", - " Set the log level by value or name.\n", - " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", - " Default: 30\n", - "--Tool.logging_config==...\n", - " Configure additional log handlers.\n", - " The default stderr logs handler is configured by the log_level, log_datefmt\n", - " and log_format settings.\n", - " This configuration can be used to configure additional handlers (e.g. to\n", - " output the log to a file) or for finer control over the default handlers.\n", - " If provided this should be a logging configuration dictionary, for more\n", - " information see:\n", - " https://docs.python.org/3/library/logging.config.html#logging-config-\n", - " dictschema\n", - " This dictionary is merged with the base logging configuration which defines\n", - " the following:\n", - " * A logging formatter intended for interactive use called\n", - " ``console``.\n", - " * A logging handler that writes to stderr called\n", - " ``console`` which uses the formatter ``console``.\n", - " * A logger with the name of this application set to ``DEBUG``\n", - " level.\n", - " This example adds a new handler that writes to a file:\n", - " .. code-block:: python\n", - " c.Application.logging_config = {\n", - " 'handlers': {\n", - " 'file': {\n", - " 'class': 'logging.FileHandler',\n", - " 'level': 'DEBUG',\n", - " 'filename': '',\n", - " }\n", - " },\n", - " 'loggers': {\n", - " '': {\n", - " 'level': 'DEBUG',\n", - " # NOTE: if you don't list the default \"console\"\n", - " # handler here then it will be disabled\n", - " 'handlers': ['console', 'file'],\n", - " },\n", - " }\n", - " }\n", - " Default: {}\n", - "--Tool.overwrite=\n", - " Default: False\n", - "--Tool.provenance_log=\n", - " Default: traitlets.Undefined\n", - "--Tool.quiet=\n", - " Default: False\n", - "--Tool.show_config=\n", - " Instead of starting the Application, dump configuration to stdout\n", - " Default: False\n", - "--Tool.show_config_json=\n", - " Instead of starting the Application, dump configuration to stdout (as JSON)\n", - " Default: False\n", - "\n", - "MyTool(Tool) options\n", - "--------------------\n", - "--MyTool.config_files=...\n", - " Default: []\n", - "--MyTool.iterations=\n", - " Number of times to run\n", - " Default: 5\n", - "--MyTool.log_config==...\n", - " Default: {}\n", - "--MyTool.log_datefmt=\n", - " The date format used by logging formatters for %(asctime)s\n", - " Default: '%Y-%m-%d %H:%M:%S'\n", - "--MyTool.log_file=\n", - " Filename for the log\n", - " Default: None\n", - "--MyTool.log_file_level=\n", - " Logging Level for File Logging\n", - " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", - " Default: 'INFO'\n", - "--MyTool.log_format=\n", - " The Logging format template\n", - " Default: '[%(name)s]%(highlevel)s %(message)s'\n", - "--MyTool.log_level=\n", - " Set the log level by value or name.\n", - " Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", - " Default: 30\n", - "--MyTool.logging_config==...\n", - " Configure additional log handlers.\n", - " The default stderr logs handler is configured by the log_level, log_datefmt\n", - " and log_format settings.\n", - " This configuration can be used to configure additional handlers (e.g. to\n", - " output the log to a file) or for finer control over the default handlers.\n", - " If provided this should be a logging configuration dictionary, for more\n", - " information see:\n", - " https://docs.python.org/3/library/logging.config.html#logging-config-\n", - " dictschema\n", - " This dictionary is merged with the base logging configuration which defines\n", - " the following:\n", - " * A logging formatter intended for interactive use called\n", - " ``console``.\n", - " * A logging handler that writes to stderr called\n", - " ``console`` which uses the formatter ``console``.\n", - " * A logger with the name of this application set to ``DEBUG``\n", - " level.\n", - " This example adds a new handler that writes to a file:\n", - " .. code-block:: python\n", - " c.Application.logging_config = {\n", - " 'handlers': {\n", - " 'file': {\n", - " 'class': 'logging.FileHandler',\n", - " 'level': 'DEBUG',\n", - " 'filename': '',\n", - " }\n", - " },\n", - " 'loggers': {\n", - " '': {\n", - " 'level': 'DEBUG',\n", - " # NOTE: if you don't list the default \"console\"\n", - " # handler here then it will be disabled\n", - " 'handlers': ['console', 'file'],\n", - " },\n", - " }\n", - " }\n", - " Default: {}\n", - "--MyTool.overwrite=\n", - " Default: False\n", - "--MyTool.provenance_log=\n", - " Default: traitlets.Undefined\n", - "--MyTool.quiet=\n", - " Default: False\n", - "--MyTool.show_config=\n", - " Instead of starting the Application, dump configuration to stdout\n", - " Default: False\n", - "--MyTool.show_config_json=\n", - " Instead of starting the Application, dump configuration to stdout (as JSON)\n", - " Default: False\n", - "\n", - "MyComponent(Component) options\n", - "------------------------------\n", - "--MyComponent.value=\n", - " Value to use\n", - " Default: -1\n", - "\n", - "AdvancedComponent(Component) options\n", - "------------------------------------\n", - "--AdvancedComponent.infile=\n", - " input file name\n", - " Default: traitlets.Undefined\n", - "--AdvancedComponent.outfile=\n", - " output file name\n", - " Default: traitlets.Undefined\n", - "--AdvancedComponent.value1=\n", - " Value to use\n", - " Default: -1\n", - "\n", - "SecondaryMyComponent(MyComponent) options\n", - "-----------------------------------------\n", - "--SecondaryMyComponent.value=\n", - " Value to use\n", - " Default: -1\n", - "\n", - "TelescopeWiseComponent(TelescopeComponent) options\n", - "--------------------------------------------------\n", - "--TelescopeWiseComponent.param=...\n", - " Something configurable with telescope patterns.\n", - " Default: [('type', '*', 5.0)]\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "tool.print_help(classes=True)" ] @@ -922,18 +295,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2023-07-03 17:24:52,057 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa170483f40>, 'type': 'change'}'\n", - "2023-07-03 17:24:52,559 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n" - ] - } - ], + "outputs": [], "source": [ "try:\n", " tool.run(argv=[\"--infile\", str(GAMMA_FILE), \"--outfile\", \"out.csv\"])\n", @@ -943,27 +307,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2023-07-03 17:24:52,798 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): Loading config from '[]'\n", - "2023-07-03 17:24:52,800 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): ctapipe version 0.19.1.dev27+g062fd966.d20230703\n", - "2023-07-03 17:24:52,802 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa170483520>, 'type': 'change'}'\n", - "2023-07-03 17:24:52,803 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): Performing 3 iterations...\n", - "2023-07-03 17:24:52,803 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 0\n", - "2023-07-03 17:24:52,903 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 1\n", - "2023-07-03 17:24:53,005 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 2\n", - "2023-07-03 17:24:53,106 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n", - "2023-07-03 17:24:53,108 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Finished: mytool\n", - "2023-07-03 17:24:53,114 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", - "2023-07-03 17:24:53,116 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n" - ] - } - ], + "outputs": [], "source": [ "tool.log_format = \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\"\n", "\n", @@ -994,2637 +340,9 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2023-07-03 17:24:53,149 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Starting: mytool\n", - "2023-07-03 17:24:53,325 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): Loading config from '[]'\n", - "2023-07-03 17:24:53,327 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): ctapipe version 0.19.1.dev27+g062fd966.d20230703\n", - "2023-07-03 17:24:53,329 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa170486340>, 'type': 'change'}'\n", - "2023-07-03 17:24:53,330 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (tool.run): CONFIG: {'MyTool': {'config_files': [], 'iterations': 3, 'log_config': {}, 'log_datefmt': '%Y-%m-%d %H:%M:%S', 'log_file': None, 'log_file_level': 'INFO', 'log_format': '%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s', 'log_level': 10, 'logging_config': {}, 'overwrite': False, 'provenance_log': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log'), 'quiet': False, 'show_config': False, 'show_config_json': False, 'MyComponent': {'value': -1}, 'SecondaryMyComponent': {'value': -1}, 'TelescopeWiseComponent': {'param': [('type', '*', 5.0)]}, 'AdvancedComponent': {'infile': PosixPath('/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst'), 'outfile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'value1': -1, 'MyComponent': {'value': -1}}}}\n", - "2023-07-03 17:24:53,330 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): Performing 3 iterations...\n", - "2023-07-03 17:24:53,330 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 0\n", - "2023-07-03 17:24:53,331 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:53,331 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:53,432 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 1\n", - "2023-07-03 17:24:53,433 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:53,435 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:53,537 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 2\n", - "2023-07-03 17:24:53,538 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:53,539 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:53,640 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n", - "2023-07-03 17:24:53,642 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Finished: mytool\n", - "2023-07-03 17:24:53,649 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", - "2023-07-03 17:24:53,651 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", - "2023-07-03 17:24:53,653 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", - "2023-07-03 17:24:53,668 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (tool.write_provenance): PROVENANCE: '[\n", - " {\n", - " \"activity_name\": \"mytool\",\n", - " \"activity_uuid\": \"c2c31b3c-b5cd-4c46-8581-e0cf17c94af0\",\n", - " \"start\": {\n", - " \"time_utc\": \"2023-07-03T15:24:51.880\"\n", - " },\n", - " \"stop\": {\n", - " \"time_utc\": \"2023-07-03T15:24:52.561\"\n", - " },\n", - " \"system\": {\n", - " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", - " \"ctapipe_resources_version\": \"not installed\",\n", - " \"eventio_version\": \"1.11.0\",\n", - " \"ctapipe_svc_path\": null,\n", - " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", - " \"platform\": {\n", - " \"architecture_bits\": \"64bit\",\n", - " \"architecture_linkage\": \"ELF\",\n", - " \"machine\": \"x86_64\",\n", - " \"processor\": \"x86_64\",\n", - " \"node\": \"e5b-dell-09\",\n", - " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", - " \"system\": \"Linux\",\n", - " \"release\": \"5.19.0-46-generic\",\n", - " \"libcver\": [\n", - " \"glibc\",\n", - " \"2.35\"\n", - " ],\n", - " \"n_cpus\": 12,\n", - " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", - " },\n", - " \"python\": {\n", - " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", - " \"version\": [\n", - " \"3\",\n", - " \"9\",\n", - " \"16\"\n", - " ],\n", - " \"compiler\": \"GCC 11.3.0\",\n", - " \"implementation\": \"CPython\",\n", - " \"packages\": [\n", - " {\n", - " \"name\": \"Babel\",\n", - " \"version\": \"2.12.1\"\n", - " },\n", - " {\n", - " \"name\": \"Cython\",\n", - " \"version\": \"0.29.34\"\n", - " },\n", - " {\n", - " \"name\": \"Jinja2\",\n", - " \"version\": \"3.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"MarkupSafe\",\n", - " \"version\": \"2.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"Pillow\",\n", - " \"version\": \"9.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5\",\n", - " \"version\": \"5.15.7\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5-sip\",\n", - " \"version\": \"12.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"PySocks\",\n", - " \"version\": \"1.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"PyYAML\",\n", - " \"version\": \"6.0\"\n", - " },\n", - " {\n", - " \"name\": \"Pygments\",\n", - " \"version\": \"2.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"QtPy\",\n", - " \"version\": \"2.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"Send2Trash\",\n", - " \"version\": \"1.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"Sphinx\",\n", - " \"version\": \"6.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"accessible-pygments\",\n", - " \"version\": \"0.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"alabaster\",\n", - " \"version\": \"0.7.13\"\n", - " },\n", - " {\n", - " \"name\": \"anyio\",\n", - " \"version\": \"3.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi\",\n", - " \"version\": \"21.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi-bindings\",\n", - " \"version\": \"21.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"astropy\",\n", - " \"version\": \"5.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"asttokens\",\n", - " \"version\": \"2.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"async-lru\",\n", - " \"version\": \"2.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"attrs\",\n", - " \"version\": \"23.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"backcall\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"backports.functools-lru-cache\",\n", - " \"version\": \"1.6.4\"\n", - " },\n", - " {\n", - " \"name\": \"beautifulsoup4\",\n", - " \"version\": \"4.12.2\"\n", - " },\n", - " {\n", - " \"name\": \"black\",\n", - " \"version\": \"23.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"bleach\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"bokeh\",\n", - " \"version\": \"2.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"brotlipy\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"cached-property\",\n", - " \"version\": \"1.5.2\"\n", - " },\n", - " {\n", - " \"name\": \"certifi\",\n", - " \"version\": \"2023.5.7\"\n", - " },\n", - " {\n", - " \"name\": \"cffi\",\n", - " \"version\": \"1.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"cfgv\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"charset-normalizer\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"click\",\n", - " \"version\": \"8.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"click-default-group\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"colorama\",\n", - " \"version\": \"0.4.6\"\n", - " },\n", - " {\n", - " \"name\": \"comm\",\n", - " \"version\": \"0.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"contourpy\",\n", - " \"version\": \"1.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"corsikaio\",\n", - " \"version\": \"0.2.6.post1\"\n", - " },\n", - " {\n", - " \"name\": \"coverage\",\n", - " \"version\": \"7.2.5\"\n", - " },\n", - " {\n", - " \"name\": \"cryptography\",\n", - " \"version\": \"40.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"ctapipe\",\n", - " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", - " },\n", - " {\n", - " \"name\": \"cycler\",\n", - " \"version\": \"0.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"debugpy\",\n", - " \"version\": \"1.6.7\"\n", - " },\n", - " {\n", - " \"name\": \"decorator\",\n", - " \"version\": \"5.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"defusedxml\",\n", - " \"version\": \"0.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"distlib\",\n", - " \"version\": \"0.3.6\"\n", - " },\n", - " {\n", - " \"name\": \"docutils\",\n", - " \"version\": \"0.18.1\"\n", - " },\n", - " {\n", - " \"name\": \"entrypoints\",\n", - " \"version\": \"0.4\"\n", - " },\n", - " {\n", - " \"name\": \"eventio\",\n", - " \"version\": \"1.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"exceptiongroup\",\n", - " \"version\": \"1.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"executing\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"fastjsonschema\",\n", - " \"version\": \"2.16.3\"\n", - " },\n", - " {\n", - " \"name\": \"filelock\",\n", - " \"version\": \"3.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"flit_core\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"fonttools\",\n", - " \"version\": \"4.39.3\"\n", - " },\n", - " {\n", - " \"name\": \"h5py\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"identify\",\n", - " \"version\": \"2.5.24\"\n", - " },\n", - " {\n", - " \"name\": \"idna\",\n", - " \"version\": \"3.4\"\n", - " },\n", - " {\n", - " \"name\": \"imagesize\",\n", - " \"version\": \"1.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"iminuit\",\n", - " \"version\": \"2.21.3\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-metadata\",\n", - " \"version\": \"6.6.0\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-resources\",\n", - " \"version\": \"5.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"incremental\",\n", - " \"version\": \"22.10.0\"\n", - " },\n", - " {\n", - " \"name\": \"iniconfig\",\n", - " \"version\": \"2.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipykernel\",\n", - " \"version\": \"6.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipython\",\n", - " \"version\": \"8.13.2\"\n", - " },\n", - " {\n", - " \"name\": \"ipython-genutils\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipywidgets\",\n", - " \"version\": \"8.0.6\"\n", - " },\n", - " {\n", - " \"name\": \"jedi\",\n", - " \"version\": \"0.18.2\"\n", - " },\n", - " {\n", - " \"name\": \"joblib\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"json5\",\n", - " \"version\": \"0.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"jsonschema\",\n", - " \"version\": \"4.17.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-console\",\n", - " \"version\": \"6.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-events\",\n", - " \"version\": \"0.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-lsp\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_client\",\n", - " \"version\": \"8.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_core\",\n", - " \"version\": \"5.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server\",\n", - " \"version\": \"2.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server_terminals\",\n", - " \"version\": \"0.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab\",\n", - " \"version\": \"4.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-pygments\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-widgets\",\n", - " \"version\": \"3.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab_server\",\n", - " \"version\": \"2.22.1\"\n", - " },\n", - " {\n", - " \"name\": \"kiwisolver\",\n", - " \"version\": \"1.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"livereload\",\n", - " \"version\": \"2.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"llvmlite\",\n", - " \"version\": \"0.39.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib\",\n", - " \"version\": \"3.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib-inline\",\n", - " \"version\": \"0.1.6\"\n", - " },\n", - " {\n", - " \"name\": \"mistune\",\n", - " \"version\": \"2.0.5\"\n", - " },\n", - " {\n", - " \"name\": \"munkres\",\n", - " \"version\": \"1.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"mypy-extensions\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclassic\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclient\",\n", - " \"version\": \"0.7.4\"\n", - " },\n", - " {\n", - " \"name\": \"nbconvert\",\n", - " \"version\": \"7.4.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbformat\",\n", - " \"version\": \"5.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbsphinx\",\n", - " \"version\": \"0.9.1\"\n", - " },\n", - " {\n", - " \"name\": \"nest-asyncio\",\n", - " \"version\": \"1.5.6\"\n", - " },\n", - " {\n", - " \"name\": \"nodeenv\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"notebook\",\n", - " \"version\": \"6.5.4\"\n", - " },\n", - " {\n", - " \"name\": \"notebook_shim\",\n", - " \"version\": \"0.2.3\"\n", - " },\n", - " {\n", - " \"name\": \"numba\",\n", - " \"version\": \"0.56.4\"\n", - " },\n", - " {\n", - " \"name\": \"numexpr\",\n", - " \"version\": \"2.8.4\"\n", - " },\n", - " {\n", - " \"name\": \"numpy\",\n", - " \"version\": \"1.23.5\"\n", - " },\n", - " {\n", - " \"name\": \"numpydoc\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"packaging\",\n", - " \"version\": \"23.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandas\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandocfilters\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"parso\",\n", - " \"version\": \"0.8.3\"\n", - " },\n", - " {\n", - " \"name\": \"pathspec\",\n", - " \"version\": \"0.11.1\"\n", - " },\n", - " {\n", - " \"name\": \"pexpect\",\n", - " \"version\": \"4.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"pickleshare\",\n", - " \"version\": \"0.7.5\"\n", - " },\n", - " {\n", - " \"name\": \"pip\",\n", - " \"version\": \"23.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pkgutil_resolve_name\",\n", - " \"version\": \"1.3.10\"\n", - " },\n", - " {\n", - " \"name\": \"platformdirs\",\n", - " \"version\": \"3.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"pluggy\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ply\",\n", - " \"version\": \"3.11\"\n", - " },\n", - " {\n", - " \"name\": \"pooch\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pre-commit\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"prometheus-client\",\n", - " \"version\": \"0.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"prompt-toolkit\",\n", - " \"version\": \"3.0.38\"\n", - " },\n", - " {\n", - " \"name\": \"psutil\",\n", - " \"version\": \"5.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"ptyprocess\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pure-eval\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"py-cpuinfo\",\n", - " \"version\": \"9.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pyOpenSSL\",\n", - " \"version\": \"23.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"pycparser\",\n", - " \"version\": \"2.21\"\n", - " },\n", - " {\n", - " \"name\": \"pydata-sphinx-theme\",\n", - " \"version\": \"0.13.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyerfa\",\n", - " \"version\": \"2.0.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyparsing\",\n", - " \"version\": \"3.0.9\"\n", - " },\n", - " {\n", - " \"name\": \"pyrsistent\",\n", - " \"version\": \"0.19.3\"\n", - " },\n", - " {\n", - " \"name\": \"pytest\",\n", - " \"version\": \"7.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-astropy-header\",\n", - " \"version\": \"0.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-cov\",\n", - " \"version\": \"4.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-runner\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"python-dateutil\",\n", - " \"version\": \"2.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"python-json-logger\",\n", - " \"version\": \"2.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"pytz\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyzmq\",\n", - " \"version\": \"25.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"qtconsole\",\n", - " \"version\": \"5.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"requests\",\n", - " \"version\": \"2.29.0\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3339-validator\",\n", - " \"version\": \"0.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3986-validator\",\n", - " \"version\": \"0.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"scikit-learn\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"scipy\",\n", - " \"version\": \"1.10.1\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools\",\n", - " \"version\": \"67.7.2\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools-scm\",\n", - " \"version\": \"7.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"sip\",\n", - " \"version\": \"6.7.9\"\n", - " },\n", - " {\n", - " \"name\": \"six\",\n", - " \"version\": \"1.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"sniffio\",\n", - " \"version\": \"1.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"snowballstemmer\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"soupsieve\",\n", - " \"version\": \"2.3.2.post1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-autobuild\",\n", - " \"version\": \"2021.3.14\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-automodapi\",\n", - " \"version\": \"0.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-rtd-theme\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx_design\",\n", - " \"version\": \"0.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-applehelp\",\n", - " \"version\": \"1.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-devhelp\",\n", - " \"version\": \"1.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-htmlhelp\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jquery\",\n", - " \"version\": \"4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jsmath\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-qthelp\",\n", - " \"version\": \"1.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-serializinghtml\",\n", - " \"version\": \"1.1.5\"\n", - " },\n", - " {\n", - " \"name\": \"stack-data\",\n", - " \"version\": \"0.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"tables\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"terminado\",\n", - " \"version\": \"0.17.1\"\n", - " },\n", - " {\n", - " \"name\": \"threadpoolctl\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"tinycss2\",\n", - " \"version\": \"1.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"toml\",\n", - " \"version\": \"0.10.2\"\n", - " },\n", - " {\n", - " \"name\": \"tomli\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"tornado\",\n", - " \"version\": \"6.3\"\n", - " },\n", - " {\n", - " \"name\": \"towncrier\",\n", - " \"version\": \"22.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"tqdm\",\n", - " \"version\": \"4.65.0\"\n", - " },\n", - " {\n", - " \"name\": \"traitlets\",\n", - " \"version\": \"5.9.0\"\n", - " },\n", - " {\n", - " \"name\": \"typing_extensions\",\n", - " \"version\": \"4.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"tzdata\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"ukkonen\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"unicodedata2\",\n", - " \"version\": \"15.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"urllib3\",\n", - " \"version\": \"1.26.15\"\n", - " },\n", - " {\n", - " \"name\": \"virtualenv\",\n", - " \"version\": \"20.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"wcwidth\",\n", - " \"version\": \"0.2.6\"\n", - " },\n", - " {\n", - " \"name\": \"webencodings\",\n", - " \"version\": \"0.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"websocket-client\",\n", - " \"version\": \"1.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"wheel\",\n", - " \"version\": \"0.40.0\"\n", - " },\n", - " {\n", - " \"name\": \"widgetsnbextension\",\n", - " \"version\": \"4.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"zipp\",\n", - " \"version\": \"3.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"zstandard\",\n", - " \"version\": \"0.19.0\"\n", - " }\n", - " ]\n", - " },\n", - " \"environment\": {\n", - " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", - " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", - " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", - " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", - " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", - " \"CONDA_SHLVL\": \"1\",\n", - " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", - " \"LD_LIBRARY_PATH\": null,\n", - " \"DYLD_LIBRARY_PATH\": null,\n", - " \"USER\": \"aknierim\",\n", - " \"HOME\": \"/home/aknierim\",\n", - " \"SHELL\": \"/bin/zsh\"\n", - " },\n", - " \"arguments\": [\n", - " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", - " \"-f\",\n", - " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", - " ],\n", - " \"start_time_utc\": \"2023-07-03T15:24:52.052\"\n", - " },\n", - " \"input\": [],\n", - " \"output\": [],\n", - " \"config\": {\n", - " \"MyTool\": {\n", - " \"config_files\": [],\n", - " \"iterations\": 5,\n", - " \"log_config\": {},\n", - " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", - " \"log_file\": null,\n", - " \"log_file_level\": \"INFO\",\n", - " \"log_format\": \"[%(name)s]%(highlevel)s %(message)s\",\n", - " \"log_level\": 30,\n", - " \"logging_config\": {},\n", - " \"overwrite\": false,\n", - " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", - " \"quiet\": false,\n", - " \"show_config\": false,\n", - " \"show_config_json\": false,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"SecondaryMyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"TelescopeWiseComponent\": {\n", - " \"param\": [\n", - " [\n", - " \"type\",\n", - " \"*\",\n", - " 5.0\n", - " ]\n", - " ]\n", - " },\n", - " \"AdvancedComponent\": {\n", - " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", - " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", - " \"value1\": -1,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " }\n", - " }\n", - " }\n", - " },\n", - " \"status\": \"completed\",\n", - " \"duration_min\": 0.011350000000014404\n", - " },\n", - " {\n", - " \"activity_name\": \"mytool\",\n", - " \"activity_uuid\": \"9a689c40-0157-4ee0-88f4-fb8125ef689c\",\n", - " \"start\": {\n", - " \"time_utc\": \"2023-07-03T15:24:52.601\"\n", - " },\n", - " \"stop\": {\n", - " \"time_utc\": \"2023-07-03T15:24:53.110\"\n", - " },\n", - " \"system\": {\n", - " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", - " \"ctapipe_resources_version\": \"not installed\",\n", - " \"eventio_version\": \"1.11.0\",\n", - " \"ctapipe_svc_path\": null,\n", - " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", - " \"platform\": {\n", - " \"architecture_bits\": \"64bit\",\n", - " \"architecture_linkage\": \"ELF\",\n", - " \"machine\": \"x86_64\",\n", - " \"processor\": \"x86_64\",\n", - " \"node\": \"e5b-dell-09\",\n", - " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", - " \"system\": \"Linux\",\n", - " \"release\": \"5.19.0-46-generic\",\n", - " \"libcver\": [\n", - " \"glibc\",\n", - " \"2.35\"\n", - " ],\n", - " \"n_cpus\": 12,\n", - " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", - " },\n", - " \"python\": {\n", - " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", - " \"version\": [\n", - " \"3\",\n", - " \"9\",\n", - " \"16\"\n", - " ],\n", - " \"compiler\": \"GCC 11.3.0\",\n", - " \"implementation\": \"CPython\",\n", - " \"packages\": [\n", - " {\n", - " \"name\": \"Babel\",\n", - " \"version\": \"2.12.1\"\n", - " },\n", - " {\n", - " \"name\": \"Cython\",\n", - " \"version\": \"0.29.34\"\n", - " },\n", - " {\n", - " \"name\": \"Jinja2\",\n", - " \"version\": \"3.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"MarkupSafe\",\n", - " \"version\": \"2.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"Pillow\",\n", - " \"version\": \"9.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5\",\n", - " \"version\": \"5.15.7\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5-sip\",\n", - " \"version\": \"12.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"PySocks\",\n", - " \"version\": \"1.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"PyYAML\",\n", - " \"version\": \"6.0\"\n", - " },\n", - " {\n", - " \"name\": \"Pygments\",\n", - " \"version\": \"2.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"QtPy\",\n", - " \"version\": \"2.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"Send2Trash\",\n", - " \"version\": \"1.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"Sphinx\",\n", - " \"version\": \"6.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"accessible-pygments\",\n", - " \"version\": \"0.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"alabaster\",\n", - " \"version\": \"0.7.13\"\n", - " },\n", - " {\n", - " \"name\": \"anyio\",\n", - " \"version\": \"3.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi\",\n", - " \"version\": \"21.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi-bindings\",\n", - " \"version\": \"21.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"astropy\",\n", - " \"version\": \"5.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"asttokens\",\n", - " \"version\": \"2.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"async-lru\",\n", - " \"version\": \"2.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"attrs\",\n", - " \"version\": \"23.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"backcall\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"backports.functools-lru-cache\",\n", - " \"version\": \"1.6.4\"\n", - " },\n", - " {\n", - " \"name\": \"beautifulsoup4\",\n", - " \"version\": \"4.12.2\"\n", - " },\n", - " {\n", - " \"name\": \"black\",\n", - " \"version\": \"23.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"bleach\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"bokeh\",\n", - " \"version\": \"2.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"brotlipy\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"cached-property\",\n", - " \"version\": \"1.5.2\"\n", - " },\n", - " {\n", - " \"name\": \"certifi\",\n", - " \"version\": \"2023.5.7\"\n", - " },\n", - " {\n", - " \"name\": \"cffi\",\n", - " \"version\": \"1.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"cfgv\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"charset-normalizer\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"click\",\n", - " \"version\": \"8.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"click-default-group\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"colorama\",\n", - " \"version\": \"0.4.6\"\n", - " },\n", - " {\n", - " \"name\": \"comm\",\n", - " \"version\": \"0.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"contourpy\",\n", - " \"version\": \"1.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"corsikaio\",\n", - " \"version\": \"0.2.6.post1\"\n", - " },\n", - " {\n", - " \"name\": \"coverage\",\n", - " \"version\": \"7.2.5\"\n", - " },\n", - " {\n", - " \"name\": \"cryptography\",\n", - " \"version\": \"40.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"ctapipe\",\n", - " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", - " },\n", - " {\n", - " \"name\": \"cycler\",\n", - " \"version\": \"0.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"debugpy\",\n", - " \"version\": \"1.6.7\"\n", - " },\n", - " {\n", - " \"name\": \"decorator\",\n", - " \"version\": \"5.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"defusedxml\",\n", - " \"version\": \"0.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"distlib\",\n", - " \"version\": \"0.3.6\"\n", - " },\n", - " {\n", - " \"name\": \"docutils\",\n", - " \"version\": \"0.18.1\"\n", - " },\n", - " {\n", - " \"name\": \"entrypoints\",\n", - " \"version\": \"0.4\"\n", - " },\n", - " {\n", - " \"name\": \"eventio\",\n", - " \"version\": \"1.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"exceptiongroup\",\n", - " \"version\": \"1.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"executing\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"fastjsonschema\",\n", - " \"version\": \"2.16.3\"\n", - " },\n", - " {\n", - " \"name\": \"filelock\",\n", - " \"version\": \"3.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"flit_core\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"fonttools\",\n", - " \"version\": \"4.39.3\"\n", - " },\n", - " {\n", - " \"name\": \"h5py\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"identify\",\n", - " \"version\": \"2.5.24\"\n", - " },\n", - " {\n", - " \"name\": \"idna\",\n", - " \"version\": \"3.4\"\n", - " },\n", - " {\n", - " \"name\": \"imagesize\",\n", - " \"version\": \"1.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"iminuit\",\n", - " \"version\": \"2.21.3\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-metadata\",\n", - " \"version\": \"6.6.0\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-resources\",\n", - " \"version\": \"5.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"incremental\",\n", - " \"version\": \"22.10.0\"\n", - " },\n", - " {\n", - " \"name\": \"iniconfig\",\n", - " \"version\": \"2.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipykernel\",\n", - " \"version\": \"6.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipython\",\n", - " \"version\": \"8.13.2\"\n", - " },\n", - " {\n", - " \"name\": \"ipython-genutils\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipywidgets\",\n", - " \"version\": \"8.0.6\"\n", - " },\n", - " {\n", - " \"name\": \"jedi\",\n", - " \"version\": \"0.18.2\"\n", - " },\n", - " {\n", - " \"name\": \"joblib\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"json5\",\n", - " \"version\": \"0.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"jsonschema\",\n", - " \"version\": \"4.17.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-console\",\n", - " \"version\": \"6.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-events\",\n", - " \"version\": \"0.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-lsp\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_client\",\n", - " \"version\": \"8.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_core\",\n", - " \"version\": \"5.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server\",\n", - " \"version\": \"2.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server_terminals\",\n", - " \"version\": \"0.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab\",\n", - " \"version\": \"4.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-pygments\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-widgets\",\n", - " \"version\": \"3.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab_server\",\n", - " \"version\": \"2.22.1\"\n", - " },\n", - " {\n", - " \"name\": \"kiwisolver\",\n", - " \"version\": \"1.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"livereload\",\n", - " \"version\": \"2.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"llvmlite\",\n", - " \"version\": \"0.39.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib\",\n", - " \"version\": \"3.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib-inline\",\n", - " \"version\": \"0.1.6\"\n", - " },\n", - " {\n", - " \"name\": \"mistune\",\n", - " \"version\": \"2.0.5\"\n", - " },\n", - " {\n", - " \"name\": \"munkres\",\n", - " \"version\": \"1.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"mypy-extensions\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclassic\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclient\",\n", - " \"version\": \"0.7.4\"\n", - " },\n", - " {\n", - " \"name\": \"nbconvert\",\n", - " \"version\": \"7.4.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbformat\",\n", - " \"version\": \"5.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbsphinx\",\n", - " \"version\": \"0.9.1\"\n", - " },\n", - " {\n", - " \"name\": \"nest-asyncio\",\n", - " \"version\": \"1.5.6\"\n", - " },\n", - " {\n", - " \"name\": \"nodeenv\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"notebook\",\n", - " \"version\": \"6.5.4\"\n", - " },\n", - " {\n", - " \"name\": \"notebook_shim\",\n", - " \"version\": \"0.2.3\"\n", - " },\n", - " {\n", - " \"name\": \"numba\",\n", - " \"version\": \"0.56.4\"\n", - " },\n", - " {\n", - " \"name\": \"numexpr\",\n", - " \"version\": \"2.8.4\"\n", - " },\n", - " {\n", - " \"name\": \"numpy\",\n", - " \"version\": \"1.23.5\"\n", - " },\n", - " {\n", - " \"name\": \"numpydoc\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"packaging\",\n", - " \"version\": \"23.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandas\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandocfilters\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"parso\",\n", - " \"version\": \"0.8.3\"\n", - " },\n", - " {\n", - " \"name\": \"pathspec\",\n", - " \"version\": \"0.11.1\"\n", - " },\n", - " {\n", - " \"name\": \"pexpect\",\n", - " \"version\": \"4.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"pickleshare\",\n", - " \"version\": \"0.7.5\"\n", - " },\n", - " {\n", - " \"name\": \"pip\",\n", - " \"version\": \"23.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pkgutil_resolve_name\",\n", - " \"version\": \"1.3.10\"\n", - " },\n", - " {\n", - " \"name\": \"platformdirs\",\n", - " \"version\": \"3.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"pluggy\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ply\",\n", - " \"version\": \"3.11\"\n", - " },\n", - " {\n", - " \"name\": \"pooch\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pre-commit\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"prometheus-client\",\n", - " \"version\": \"0.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"prompt-toolkit\",\n", - " \"version\": \"3.0.38\"\n", - " },\n", - " {\n", - " \"name\": \"psutil\",\n", - " \"version\": \"5.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"ptyprocess\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pure-eval\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"py-cpuinfo\",\n", - " \"version\": \"9.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pyOpenSSL\",\n", - " \"version\": \"23.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"pycparser\",\n", - " \"version\": \"2.21\"\n", - " },\n", - " {\n", - " \"name\": \"pydata-sphinx-theme\",\n", - " \"version\": \"0.13.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyerfa\",\n", - " \"version\": \"2.0.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyparsing\",\n", - " \"version\": \"3.0.9\"\n", - " },\n", - " {\n", - " \"name\": \"pyrsistent\",\n", - " \"version\": \"0.19.3\"\n", - " },\n", - " {\n", - " \"name\": \"pytest\",\n", - " \"version\": \"7.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-astropy-header\",\n", - " \"version\": \"0.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-cov\",\n", - " \"version\": \"4.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-runner\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"python-dateutil\",\n", - " \"version\": \"2.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"python-json-logger\",\n", - " \"version\": \"2.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"pytz\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyzmq\",\n", - " \"version\": \"25.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"qtconsole\",\n", - " \"version\": \"5.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"requests\",\n", - " \"version\": \"2.29.0\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3339-validator\",\n", - " \"version\": \"0.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3986-validator\",\n", - " \"version\": \"0.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"scikit-learn\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"scipy\",\n", - " \"version\": \"1.10.1\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools\",\n", - " \"version\": \"67.7.2\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools-scm\",\n", - " \"version\": \"7.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"sip\",\n", - " \"version\": \"6.7.9\"\n", - " },\n", - " {\n", - " \"name\": \"six\",\n", - " \"version\": \"1.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"sniffio\",\n", - " \"version\": \"1.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"snowballstemmer\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"soupsieve\",\n", - " \"version\": \"2.3.2.post1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-autobuild\",\n", - " \"version\": \"2021.3.14\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-automodapi\",\n", - " \"version\": \"0.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-rtd-theme\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx_design\",\n", - " \"version\": \"0.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-applehelp\",\n", - " \"version\": \"1.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-devhelp\",\n", - " \"version\": \"1.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-htmlhelp\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jquery\",\n", - " \"version\": \"4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jsmath\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-qthelp\",\n", - " \"version\": \"1.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-serializinghtml\",\n", - " \"version\": \"1.1.5\"\n", - " },\n", - " {\n", - " \"name\": \"stack-data\",\n", - " \"version\": \"0.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"tables\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"terminado\",\n", - " \"version\": \"0.17.1\"\n", - " },\n", - " {\n", - " \"name\": \"threadpoolctl\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"tinycss2\",\n", - " \"version\": \"1.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"toml\",\n", - " \"version\": \"0.10.2\"\n", - " },\n", - " {\n", - " \"name\": \"tomli\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"tornado\",\n", - " \"version\": \"6.3\"\n", - " },\n", - " {\n", - " \"name\": \"towncrier\",\n", - " \"version\": \"22.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"tqdm\",\n", - " \"version\": \"4.65.0\"\n", - " },\n", - " {\n", - " \"name\": \"traitlets\",\n", - " \"version\": \"5.9.0\"\n", - " },\n", - " {\n", - " \"name\": \"typing_extensions\",\n", - " \"version\": \"4.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"tzdata\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"ukkonen\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"unicodedata2\",\n", - " \"version\": \"15.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"urllib3\",\n", - " \"version\": \"1.26.15\"\n", - " },\n", - " {\n", - " \"name\": \"virtualenv\",\n", - " \"version\": \"20.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"wcwidth\",\n", - " \"version\": \"0.2.6\"\n", - " },\n", - " {\n", - " \"name\": \"webencodings\",\n", - " \"version\": \"0.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"websocket-client\",\n", - " \"version\": \"1.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"wheel\",\n", - " \"version\": \"0.40.0\"\n", - " },\n", - " {\n", - " \"name\": \"widgetsnbextension\",\n", - " \"version\": \"4.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"zipp\",\n", - " \"version\": \"3.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"zstandard\",\n", - " \"version\": \"0.19.0\"\n", - " }\n", - " ]\n", - " },\n", - " \"environment\": {\n", - " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", - " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", - " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", - " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", - " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", - " \"CONDA_SHLVL\": \"1\",\n", - " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", - " \"LD_LIBRARY_PATH\": null,\n", - " \"DYLD_LIBRARY_PATH\": null,\n", - " \"USER\": \"aknierim\",\n", - " \"HOME\": \"/home/aknierim\",\n", - " \"SHELL\": \"/bin/zsh\"\n", - " },\n", - " \"arguments\": [\n", - " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", - " \"-f\",\n", - " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", - " ],\n", - " \"start_time_utc\": \"2023-07-03T15:24:52.794\"\n", - " },\n", - " \"input\": [],\n", - " \"output\": [],\n", - " \"config\": {\n", - " \"MyTool\": {\n", - " \"config_files\": [],\n", - " \"iterations\": 3,\n", - " \"log_config\": {},\n", - " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", - " \"log_file\": null,\n", - " \"log_file_level\": \"INFO\",\n", - " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", - " \"log_level\": 20,\n", - " \"logging_config\": {},\n", - " \"overwrite\": false,\n", - " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", - " \"quiet\": false,\n", - " \"show_config\": false,\n", - " \"show_config_json\": false,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"SecondaryMyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"TelescopeWiseComponent\": {\n", - " \"param\": [\n", - " [\n", - " \"type\",\n", - " \"*\",\n", - " 5.0\n", - " ]\n", - " ]\n", - " },\n", - " \"AdvancedComponent\": {\n", - " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", - " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", - " \"value1\": -1,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " }\n", - " }\n", - " }\n", - " },\n", - " \"status\": \"completed\",\n", - " \"duration_min\": 0.008483333333408893\n", - " },\n", - " {\n", - " \"activity_name\": \"mytool\",\n", - " \"activity_uuid\": \"a237bc8b-cb43-456b-a3d2-3f1ad096fbeb\",\n", - " \"start\": {\n", - " \"time_utc\": \"2023-07-03T15:24:53.153\"\n", - " },\n", - " \"stop\": {\n", - " \"time_utc\": \"2023-07-03T15:24:53.644\"\n", - " },\n", - " \"system\": {\n", - " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", - " \"ctapipe_resources_version\": \"not installed\",\n", - " \"eventio_version\": \"1.11.0\",\n", - " \"ctapipe_svc_path\": null,\n", - " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", - " \"platform\": {\n", - " \"architecture_bits\": \"64bit\",\n", - " \"architecture_linkage\": \"ELF\",\n", - " \"machine\": \"x86_64\",\n", - " \"processor\": \"x86_64\",\n", - " \"node\": \"e5b-dell-09\",\n", - " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", - " \"system\": \"Linux\",\n", - " \"release\": \"5.19.0-46-generic\",\n", - " \"libcver\": [\n", - " \"glibc\",\n", - " \"2.35\"\n", - " ],\n", - " \"n_cpus\": 12,\n", - " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", - " },\n", - " \"python\": {\n", - " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", - " \"version\": [\n", - " \"3\",\n", - " \"9\",\n", - " \"16\"\n", - " ],\n", - " \"compiler\": \"GCC 11.3.0\",\n", - " \"implementation\": \"CPython\",\n", - " \"packages\": [\n", - " {\n", - " \"name\": \"Babel\",\n", - " \"version\": \"2.12.1\"\n", - " },\n", - " {\n", - " \"name\": \"Cython\",\n", - " \"version\": \"0.29.34\"\n", - " },\n", - " {\n", - " \"name\": \"Jinja2\",\n", - " \"version\": \"3.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"MarkupSafe\",\n", - " \"version\": \"2.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"Pillow\",\n", - " \"version\": \"9.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5\",\n", - " \"version\": \"5.15.7\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5-sip\",\n", - " \"version\": \"12.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"PySocks\",\n", - " \"version\": \"1.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"PyYAML\",\n", - " \"version\": \"6.0\"\n", - " },\n", - " {\n", - " \"name\": \"Pygments\",\n", - " \"version\": \"2.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"QtPy\",\n", - " \"version\": \"2.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"Send2Trash\",\n", - " \"version\": \"1.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"Sphinx\",\n", - " \"version\": \"6.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"accessible-pygments\",\n", - " \"version\": \"0.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"alabaster\",\n", - " \"version\": \"0.7.13\"\n", - " },\n", - " {\n", - " \"name\": \"anyio\",\n", - " \"version\": \"3.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi\",\n", - " \"version\": \"21.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi-bindings\",\n", - " \"version\": \"21.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"astropy\",\n", - " \"version\": \"5.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"asttokens\",\n", - " \"version\": \"2.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"async-lru\",\n", - " \"version\": \"2.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"attrs\",\n", - " \"version\": \"23.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"backcall\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"backports.functools-lru-cache\",\n", - " \"version\": \"1.6.4\"\n", - " },\n", - " {\n", - " \"name\": \"beautifulsoup4\",\n", - " \"version\": \"4.12.2\"\n", - " },\n", - " {\n", - " \"name\": \"black\",\n", - " \"version\": \"23.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"bleach\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"bokeh\",\n", - " \"version\": \"2.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"brotlipy\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"cached-property\",\n", - " \"version\": \"1.5.2\"\n", - " },\n", - " {\n", - " \"name\": \"certifi\",\n", - " \"version\": \"2023.5.7\"\n", - " },\n", - " {\n", - " \"name\": \"cffi\",\n", - " \"version\": \"1.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"cfgv\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"charset-normalizer\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"click\",\n", - " \"version\": \"8.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"click-default-group\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"colorama\",\n", - " \"version\": \"0.4.6\"\n", - " },\n", - " {\n", - " \"name\": \"comm\",\n", - " \"version\": \"0.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"contourpy\",\n", - " \"version\": \"1.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"corsikaio\",\n", - " \"version\": \"0.2.6.post1\"\n", - " },\n", - " {\n", - " \"name\": \"coverage\",\n", - " \"version\": \"7.2.5\"\n", - " },\n", - " {\n", - " \"name\": \"cryptography\",\n", - " \"version\": \"40.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"ctapipe\",\n", - " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", - " },\n", - " {\n", - " \"name\": \"cycler\",\n", - " \"version\": \"0.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"debugpy\",\n", - " \"version\": \"1.6.7\"\n", - " },\n", - " {\n", - " \"name\": \"decorator\",\n", - " \"version\": \"5.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"defusedxml\",\n", - " \"version\": \"0.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"distlib\",\n", - " \"version\": \"0.3.6\"\n", - " },\n", - " {\n", - " \"name\": \"docutils\",\n", - " \"version\": \"0.18.1\"\n", - " },\n", - " {\n", - " \"name\": \"entrypoints\",\n", - " \"version\": \"0.4\"\n", - " },\n", - " {\n", - " \"name\": \"eventio\",\n", - " \"version\": \"1.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"exceptiongroup\",\n", - " \"version\": \"1.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"executing\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"fastjsonschema\",\n", - " \"version\": \"2.16.3\"\n", - " },\n", - " {\n", - " \"name\": \"filelock\",\n", - " \"version\": \"3.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"flit_core\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"fonttools\",\n", - " \"version\": \"4.39.3\"\n", - " },\n", - " {\n", - " \"name\": \"h5py\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"identify\",\n", - " \"version\": \"2.5.24\"\n", - " },\n", - " {\n", - " \"name\": \"idna\",\n", - " \"version\": \"3.4\"\n", - " },\n", - " {\n", - " \"name\": \"imagesize\",\n", - " \"version\": \"1.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"iminuit\",\n", - " \"version\": \"2.21.3\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-metadata\",\n", - " \"version\": \"6.6.0\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-resources\",\n", - " \"version\": \"5.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"incremental\",\n", - " \"version\": \"22.10.0\"\n", - " },\n", - " {\n", - " \"name\": \"iniconfig\",\n", - " \"version\": \"2.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipykernel\",\n", - " \"version\": \"6.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipython\",\n", - " \"version\": \"8.13.2\"\n", - " },\n", - " {\n", - " \"name\": \"ipython-genutils\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipywidgets\",\n", - " \"version\": \"8.0.6\"\n", - " },\n", - " {\n", - " \"name\": \"jedi\",\n", - " \"version\": \"0.18.2\"\n", - " },\n", - " {\n", - " \"name\": \"joblib\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"json5\",\n", - " \"version\": \"0.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"jsonschema\",\n", - " \"version\": \"4.17.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-console\",\n", - " \"version\": \"6.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-events\",\n", - " \"version\": \"0.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-lsp\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_client\",\n", - " \"version\": \"8.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_core\",\n", - " \"version\": \"5.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server\",\n", - " \"version\": \"2.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server_terminals\",\n", - " \"version\": \"0.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab\",\n", - " \"version\": \"4.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-pygments\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-widgets\",\n", - " \"version\": \"3.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab_server\",\n", - " \"version\": \"2.22.1\"\n", - " },\n", - " {\n", - " \"name\": \"kiwisolver\",\n", - " \"version\": \"1.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"livereload\",\n", - " \"version\": \"2.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"llvmlite\",\n", - " \"version\": \"0.39.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib\",\n", - " \"version\": \"3.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib-inline\",\n", - " \"version\": \"0.1.6\"\n", - " },\n", - " {\n", - " \"name\": \"mistune\",\n", - " \"version\": \"2.0.5\"\n", - " },\n", - " {\n", - " \"name\": \"munkres\",\n", - " \"version\": \"1.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"mypy-extensions\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclassic\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclient\",\n", - " \"version\": \"0.7.4\"\n", - " },\n", - " {\n", - " \"name\": \"nbconvert\",\n", - " \"version\": \"7.4.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbformat\",\n", - " \"version\": \"5.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbsphinx\",\n", - " \"version\": \"0.9.1\"\n", - " },\n", - " {\n", - " \"name\": \"nest-asyncio\",\n", - " \"version\": \"1.5.6\"\n", - " },\n", - " {\n", - " \"name\": \"nodeenv\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"notebook\",\n", - " \"version\": \"6.5.4\"\n", - " },\n", - " {\n", - " \"name\": \"notebook_shim\",\n", - " \"version\": \"0.2.3\"\n", - " },\n", - " {\n", - " \"name\": \"numba\",\n", - " \"version\": \"0.56.4\"\n", - " },\n", - " {\n", - " \"name\": \"numexpr\",\n", - " \"version\": \"2.8.4\"\n", - " },\n", - " {\n", - " \"name\": \"numpy\",\n", - " \"version\": \"1.23.5\"\n", - " },\n", - " {\n", - " \"name\": \"numpydoc\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"packaging\",\n", - " \"version\": \"23.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandas\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandocfilters\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"parso\",\n", - " \"version\": \"0.8.3\"\n", - " },\n", - " {\n", - " \"name\": \"pathspec\",\n", - " \"version\": \"0.11.1\"\n", - " },\n", - " {\n", - " \"name\": \"pexpect\",\n", - " \"version\": \"4.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"pickleshare\",\n", - " \"version\": \"0.7.5\"\n", - " },\n", - " {\n", - " \"name\": \"pip\",\n", - " \"version\": \"23.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pkgutil_resolve_name\",\n", - " \"version\": \"1.3.10\"\n", - " },\n", - " {\n", - " \"name\": \"platformdirs\",\n", - " \"version\": \"3.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"pluggy\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ply\",\n", - " \"version\": \"3.11\"\n", - " },\n", - " {\n", - " \"name\": \"pooch\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pre-commit\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"prometheus-client\",\n", - " \"version\": \"0.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"prompt-toolkit\",\n", - " \"version\": \"3.0.38\"\n", - " },\n", - " {\n", - " \"name\": \"psutil\",\n", - " \"version\": \"5.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"ptyprocess\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pure-eval\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"py-cpuinfo\",\n", - " \"version\": \"9.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pyOpenSSL\",\n", - " \"version\": \"23.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"pycparser\",\n", - " \"version\": \"2.21\"\n", - " },\n", - " {\n", - " \"name\": \"pydata-sphinx-theme\",\n", - " \"version\": \"0.13.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyerfa\",\n", - " \"version\": \"2.0.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyparsing\",\n", - " \"version\": \"3.0.9\"\n", - " },\n", - " {\n", - " \"name\": \"pyrsistent\",\n", - " \"version\": \"0.19.3\"\n", - " },\n", - " {\n", - " \"name\": \"pytest\",\n", - " \"version\": \"7.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-astropy-header\",\n", - " \"version\": \"0.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-cov\",\n", - " \"version\": \"4.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-runner\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"python-dateutil\",\n", - " \"version\": \"2.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"python-json-logger\",\n", - " \"version\": \"2.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"pytz\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyzmq\",\n", - " \"version\": \"25.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"qtconsole\",\n", - " \"version\": \"5.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"requests\",\n", - " \"version\": \"2.29.0\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3339-validator\",\n", - " \"version\": \"0.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3986-validator\",\n", - " \"version\": \"0.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"scikit-learn\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"scipy\",\n", - " \"version\": \"1.10.1\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools\",\n", - " \"version\": \"67.7.2\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools-scm\",\n", - " \"version\": \"7.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"sip\",\n", - " \"version\": \"6.7.9\"\n", - " },\n", - " {\n", - " \"name\": \"six\",\n", - " \"version\": \"1.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"sniffio\",\n", - " \"version\": \"1.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"snowballstemmer\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"soupsieve\",\n", - " \"version\": \"2.3.2.post1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-autobuild\",\n", - " \"version\": \"2021.3.14\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-automodapi\",\n", - " \"version\": \"0.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-rtd-theme\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx_design\",\n", - " \"version\": \"0.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-applehelp\",\n", - " \"version\": \"1.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-devhelp\",\n", - " \"version\": \"1.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-htmlhelp\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jquery\",\n", - " \"version\": \"4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jsmath\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-qthelp\",\n", - " \"version\": \"1.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-serializinghtml\",\n", - " \"version\": \"1.1.5\"\n", - " },\n", - " {\n", - " \"name\": \"stack-data\",\n", - " \"version\": \"0.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"tables\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"terminado\",\n", - " \"version\": \"0.17.1\"\n", - " },\n", - " {\n", - " \"name\": \"threadpoolctl\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"tinycss2\",\n", - " \"version\": \"1.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"toml\",\n", - " \"version\": \"0.10.2\"\n", - " },\n", - " {\n", - " \"name\": \"tomli\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"tornado\",\n", - " \"version\": \"6.3\"\n", - " },\n", - " {\n", - " \"name\": \"towncrier\",\n", - " \"version\": \"22.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"tqdm\",\n", - " \"version\": \"4.65.0\"\n", - " },\n", - " {\n", - " \"name\": \"traitlets\",\n", - " \"version\": \"5.9.0\"\n", - " },\n", - " {\n", - " \"name\": \"typing_extensions\",\n", - " \"version\": \"4.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"tzdata\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"ukkonen\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"unicodedata2\",\n", - " \"version\": \"15.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"urllib3\",\n", - " \"version\": \"1.26.15\"\n", - " },\n", - " {\n", - " \"name\": \"virtualenv\",\n", - " \"version\": \"20.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"wcwidth\",\n", - " \"version\": \"0.2.6\"\n", - " },\n", - " {\n", - " \"name\": \"webencodings\",\n", - " \"version\": \"0.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"websocket-client\",\n", - " \"version\": \"1.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"wheel\",\n", - " \"version\": \"0.40.0\"\n", - " },\n", - " {\n", - " \"name\": \"widgetsnbextension\",\n", - " \"version\": \"4.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"zipp\",\n", - " \"version\": \"3.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"zstandard\",\n", - " \"version\": \"0.19.0\"\n", - " }\n", - " ]\n", - " },\n", - " \"environment\": {\n", - " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", - " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", - " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", - " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", - " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", - " \"CONDA_SHLVL\": \"1\",\n", - " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", - " \"LD_LIBRARY_PATH\": null,\n", - " \"DYLD_LIBRARY_PATH\": null,\n", - " \"USER\": \"aknierim\",\n", - " \"HOME\": \"/home/aknierim\",\n", - " \"SHELL\": \"/bin/zsh\"\n", - " },\n", - " \"arguments\": [\n", - " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", - " \"-f\",\n", - " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", - " ],\n", - " \"start_time_utc\": \"2023-07-03T15:24:53.322\"\n", - " },\n", - " \"input\": [],\n", - " \"output\": [],\n", - " \"config\": {\n", - " \"MyTool\": {\n", - " \"config_files\": [],\n", - " \"iterations\": 3,\n", - " \"log_config\": {},\n", - " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", - " \"log_file\": null,\n", - " \"log_file_level\": \"INFO\",\n", - " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", - " \"log_level\": 10,\n", - " \"logging_config\": {},\n", - " \"overwrite\": false,\n", - " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", - " \"quiet\": false,\n", - " \"show_config\": false,\n", - " \"show_config_json\": false,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"SecondaryMyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"TelescopeWiseComponent\": {\n", - " \"param\": [\n", - " [\n", - " \"type\",\n", - " \"*\",\n", - " 5.0\n", - " ]\n", - " ]\n", - " },\n", - " \"AdvancedComponent\": {\n", - " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", - " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", - " \"value1\": -1,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " }\n", - " }\n", - " }\n", - " },\n", - " \"status\": \"completed\",\n", - " \"duration_min\": 0.00818333333336696\n", - " }\n", - "]'\n", - "2023-07-03 17:24:53,683 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (application.exit): Exiting application: mytool\n" - ] - } - ], + "outputs": [], "source": [ "try:\n", " tool.run(\n", @@ -3650,19 +368,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2023-07-03 17:24:53,720 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Starting: mytool\n", - "2023-07-03 17:24:53,931 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa170486880>, 'type': 'change'}'\n", - "2023-07-03 17:24:54,032 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n" - ] - } - ], + "outputs": [], "source": [ "tool.iterations = 1\n", "tool.log_level = 0\n", @@ -3682,17 +390,9 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "bad value: The 'iterations' trait of a MyTool instance expected an int, not the str 'badval'.\n" - ] - } - ], + "outputs": [], "source": [ "try:\n", " tool.iterations = \"badval\"\n", @@ -3711,17 +411,9 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2023-07-03 17:24:54,141 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/Another.txt'), 'owner': <__main__.AdvancedComponent object at 0x7fa170486880>, 'type': 'change'}'\n" - ] - } - ], + "outputs": [], "source": [ "tool.advanced.outfile = \"Another.txt\"" ] @@ -3742,7 +434,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3751,4382 +443,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2023-07-03 17:24:54,332 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.initialize): ctapipe version 0.19.1.dev27+g062fd966.d20230703\n", - "2023-07-03 17:24:54,334 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/foo.txt'), 'owner': <__main__.AdvancedComponent object at 0x7fa170486e20>, 'type': 'change'}'\n", - "2023-07-03 17:24:54,335 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (tool.run): CONFIG: {'MyTool': {'config_files': [PosixPath('/home/aknierim/dev/ctapipe/docs/examples/Tools.json')], 'iterations': 5, 'log_config': {}, 'log_datefmt': '%Y-%m-%d %H:%M:%S', 'log_file': None, 'log_file_level': 'INFO', 'log_format': '[%(name)s]%(highlevel)s %(message)s', 'log_level': 10, 'logging_config': {}, 'overwrite': False, 'provenance_log': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log'), 'quiet': False, 'show_config': False, 'show_config_json': False, 'MyComponent': {'value': -1}, 'SecondaryMyComponent': {'value': -1}, 'TelescopeWiseComponent': {'param': [('type', '*', 5.0)]}, 'AdvancedComponent': {'infile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/something.txt'), 'outfile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/foo.txt'), 'value1': -1, 'MyComponent': {'value': -1}}}}\n", - "2023-07-03 17:24:54,336 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): Performing 5 iterations...\n", - "2023-07-03 17:24:54,336 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 0\n", - "2023-07-03 17:24:54,336 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:54,337 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:54,437 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 1\n", - "2023-07-03 17:24:54,439 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:54,441 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:54,542 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 2\n", - "2023-07-03 17:24:54,543 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:54,543 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:54,644 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 3\n", - "2023-07-03 17:24:54,645 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:54,647 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:54,748 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (462504653.start): ITERATION 4\n", - "2023-07-03 17:24:54,749 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.MyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:54,749 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool.SecondaryMyComponent] (2562530776.do_thing): Did thing\n", - "2023-07-03 17:24:54,850 \u001b[1;33mWARNING\u001b[0m [__main__.mytool] (462504653.finish): Shutting down.\n", - "2023-07-03 17:24:54,852 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.run): Finished: mytool\n", - "2023-07-03 17:24:54,858 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", - "2023-07-03 17:24:54,859 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", - "2023-07-03 17:24:54,861 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", - "2023-07-03 17:24:54,862 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", - "2023-07-03 17:24:54,864 \u001b[1;32mINFO\u001b[0m [__main__.mytool] (tool.write_provenance): Output: \n", - "2023-07-03 17:24:54,887 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (tool.write_provenance): PROVENANCE: '[\n", - " {\n", - " \"activity_name\": \"mytool\",\n", - " \"activity_uuid\": \"c2c31b3c-b5cd-4c46-8581-e0cf17c94af0\",\n", - " \"start\": {\n", - " \"time_utc\": \"2023-07-03T15:24:51.880\"\n", - " },\n", - " \"stop\": {\n", - " \"time_utc\": \"2023-07-03T15:24:52.561\"\n", - " },\n", - " \"system\": {\n", - " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", - " \"ctapipe_resources_version\": \"not installed\",\n", - " \"eventio_version\": \"1.11.0\",\n", - " \"ctapipe_svc_path\": null,\n", - " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", - " \"platform\": {\n", - " \"architecture_bits\": \"64bit\",\n", - " \"architecture_linkage\": \"ELF\",\n", - " \"machine\": \"x86_64\",\n", - " \"processor\": \"x86_64\",\n", - " \"node\": \"e5b-dell-09\",\n", - " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", - " \"system\": \"Linux\",\n", - " \"release\": \"5.19.0-46-generic\",\n", - " \"libcver\": [\n", - " \"glibc\",\n", - " \"2.35\"\n", - " ],\n", - " \"n_cpus\": 12,\n", - " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", - " },\n", - " \"python\": {\n", - " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", - " \"version\": [\n", - " \"3\",\n", - " \"9\",\n", - " \"16\"\n", - " ],\n", - " \"compiler\": \"GCC 11.3.0\",\n", - " \"implementation\": \"CPython\",\n", - " \"packages\": [\n", - " {\n", - " \"name\": \"Babel\",\n", - " \"version\": \"2.12.1\"\n", - " },\n", - " {\n", - " \"name\": \"Cython\",\n", - " \"version\": \"0.29.34\"\n", - " },\n", - " {\n", - " \"name\": \"Jinja2\",\n", - " \"version\": \"3.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"MarkupSafe\",\n", - " \"version\": \"2.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"Pillow\",\n", - " \"version\": \"9.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5\",\n", - " \"version\": \"5.15.7\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5-sip\",\n", - " \"version\": \"12.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"PySocks\",\n", - " \"version\": \"1.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"PyYAML\",\n", - " \"version\": \"6.0\"\n", - " },\n", - " {\n", - " \"name\": \"Pygments\",\n", - " \"version\": \"2.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"QtPy\",\n", - " \"version\": \"2.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"Send2Trash\",\n", - " \"version\": \"1.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"Sphinx\",\n", - " \"version\": \"6.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"accessible-pygments\",\n", - " \"version\": \"0.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"alabaster\",\n", - " \"version\": \"0.7.13\"\n", - " },\n", - " {\n", - " \"name\": \"anyio\",\n", - " \"version\": \"3.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi\",\n", - " \"version\": \"21.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi-bindings\",\n", - " \"version\": \"21.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"astropy\",\n", - " \"version\": \"5.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"asttokens\",\n", - " \"version\": \"2.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"async-lru\",\n", - " \"version\": \"2.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"attrs\",\n", - " \"version\": \"23.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"backcall\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"backports.functools-lru-cache\",\n", - " \"version\": \"1.6.4\"\n", - " },\n", - " {\n", - " \"name\": \"beautifulsoup4\",\n", - " \"version\": \"4.12.2\"\n", - " },\n", - " {\n", - " \"name\": \"black\",\n", - " \"version\": \"23.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"bleach\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"bokeh\",\n", - " \"version\": \"2.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"brotlipy\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"cached-property\",\n", - " \"version\": \"1.5.2\"\n", - " },\n", - " {\n", - " \"name\": \"certifi\",\n", - " \"version\": \"2023.5.7\"\n", - " },\n", - " {\n", - " \"name\": \"cffi\",\n", - " \"version\": \"1.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"cfgv\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"charset-normalizer\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"click\",\n", - " \"version\": \"8.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"click-default-group\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"colorama\",\n", - " \"version\": \"0.4.6\"\n", - " },\n", - " {\n", - " \"name\": \"comm\",\n", - " \"version\": \"0.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"contourpy\",\n", - " \"version\": \"1.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"corsikaio\",\n", - " \"version\": \"0.2.6.post1\"\n", - " },\n", - " {\n", - " \"name\": \"coverage\",\n", - " \"version\": \"7.2.5\"\n", - " },\n", - " {\n", - " \"name\": \"cryptography\",\n", - " \"version\": \"40.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"ctapipe\",\n", - " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", - " },\n", - " {\n", - " \"name\": \"cycler\",\n", - " \"version\": \"0.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"debugpy\",\n", - " \"version\": \"1.6.7\"\n", - " },\n", - " {\n", - " \"name\": \"decorator\",\n", - " \"version\": \"5.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"defusedxml\",\n", - " \"version\": \"0.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"distlib\",\n", - " \"version\": \"0.3.6\"\n", - " },\n", - " {\n", - " \"name\": \"docutils\",\n", - " \"version\": \"0.18.1\"\n", - " },\n", - " {\n", - " \"name\": \"entrypoints\",\n", - " \"version\": \"0.4\"\n", - " },\n", - " {\n", - " \"name\": \"eventio\",\n", - " \"version\": \"1.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"exceptiongroup\",\n", - " \"version\": \"1.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"executing\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"fastjsonschema\",\n", - " \"version\": \"2.16.3\"\n", - " },\n", - " {\n", - " \"name\": \"filelock\",\n", - " \"version\": \"3.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"flit_core\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"fonttools\",\n", - " \"version\": \"4.39.3\"\n", - " },\n", - " {\n", - " \"name\": \"h5py\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"identify\",\n", - " \"version\": \"2.5.24\"\n", - " },\n", - " {\n", - " \"name\": \"idna\",\n", - " \"version\": \"3.4\"\n", - " },\n", - " {\n", - " \"name\": \"imagesize\",\n", - " \"version\": \"1.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"iminuit\",\n", - " \"version\": \"2.21.3\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-metadata\",\n", - " \"version\": \"6.6.0\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-resources\",\n", - " \"version\": \"5.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"incremental\",\n", - " \"version\": \"22.10.0\"\n", - " },\n", - " {\n", - " \"name\": \"iniconfig\",\n", - " \"version\": \"2.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipykernel\",\n", - " \"version\": \"6.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipython\",\n", - " \"version\": \"8.13.2\"\n", - " },\n", - " {\n", - " \"name\": \"ipython-genutils\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipywidgets\",\n", - " \"version\": \"8.0.6\"\n", - " },\n", - " {\n", - " \"name\": \"jedi\",\n", - " \"version\": \"0.18.2\"\n", - " },\n", - " {\n", - " \"name\": \"joblib\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"json5\",\n", - " \"version\": \"0.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"jsonschema\",\n", - " \"version\": \"4.17.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-console\",\n", - " \"version\": \"6.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-events\",\n", - " \"version\": \"0.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-lsp\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_client\",\n", - " \"version\": \"8.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_core\",\n", - " \"version\": \"5.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server\",\n", - " \"version\": \"2.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server_terminals\",\n", - " \"version\": \"0.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab\",\n", - " \"version\": \"4.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-pygments\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-widgets\",\n", - " \"version\": \"3.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab_server\",\n", - " \"version\": \"2.22.1\"\n", - " },\n", - " {\n", - " \"name\": \"kiwisolver\",\n", - " \"version\": \"1.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"livereload\",\n", - " \"version\": \"2.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"llvmlite\",\n", - " \"version\": \"0.39.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib\",\n", - " \"version\": \"3.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib-inline\",\n", - " \"version\": \"0.1.6\"\n", - " },\n", - " {\n", - " \"name\": \"mistune\",\n", - " \"version\": \"2.0.5\"\n", - " },\n", - " {\n", - " \"name\": \"munkres\",\n", - " \"version\": \"1.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"mypy-extensions\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclassic\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclient\",\n", - " \"version\": \"0.7.4\"\n", - " },\n", - " {\n", - " \"name\": \"nbconvert\",\n", - " \"version\": \"7.4.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbformat\",\n", - " \"version\": \"5.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbsphinx\",\n", - " \"version\": \"0.9.1\"\n", - " },\n", - " {\n", - " \"name\": \"nest-asyncio\",\n", - " \"version\": \"1.5.6\"\n", - " },\n", - " {\n", - " \"name\": \"nodeenv\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"notebook\",\n", - " \"version\": \"6.5.4\"\n", - " },\n", - " {\n", - " \"name\": \"notebook_shim\",\n", - " \"version\": \"0.2.3\"\n", - " },\n", - " {\n", - " \"name\": \"numba\",\n", - " \"version\": \"0.56.4\"\n", - " },\n", - " {\n", - " \"name\": \"numexpr\",\n", - " \"version\": \"2.8.4\"\n", - " },\n", - " {\n", - " \"name\": \"numpy\",\n", - " \"version\": \"1.23.5\"\n", - " },\n", - " {\n", - " \"name\": \"numpydoc\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"packaging\",\n", - " \"version\": \"23.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandas\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandocfilters\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"parso\",\n", - " \"version\": \"0.8.3\"\n", - " },\n", - " {\n", - " \"name\": \"pathspec\",\n", - " \"version\": \"0.11.1\"\n", - " },\n", - " {\n", - " \"name\": \"pexpect\",\n", - " \"version\": \"4.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"pickleshare\",\n", - " \"version\": \"0.7.5\"\n", - " },\n", - " {\n", - " \"name\": \"pip\",\n", - " \"version\": \"23.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pkgutil_resolve_name\",\n", - " \"version\": \"1.3.10\"\n", - " },\n", - " {\n", - " \"name\": \"platformdirs\",\n", - " \"version\": \"3.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"pluggy\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ply\",\n", - " \"version\": \"3.11\"\n", - " },\n", - " {\n", - " \"name\": \"pooch\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pre-commit\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"prometheus-client\",\n", - " \"version\": \"0.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"prompt-toolkit\",\n", - " \"version\": \"3.0.38\"\n", - " },\n", - " {\n", - " \"name\": \"psutil\",\n", - " \"version\": \"5.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"ptyprocess\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pure-eval\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"py-cpuinfo\",\n", - " \"version\": \"9.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pyOpenSSL\",\n", - " \"version\": \"23.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"pycparser\",\n", - " \"version\": \"2.21\"\n", - " },\n", - " {\n", - " \"name\": \"pydata-sphinx-theme\",\n", - " \"version\": \"0.13.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyerfa\",\n", - " \"version\": \"2.0.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyparsing\",\n", - " \"version\": \"3.0.9\"\n", - " },\n", - " {\n", - " \"name\": \"pyrsistent\",\n", - " \"version\": \"0.19.3\"\n", - " },\n", - " {\n", - " \"name\": \"pytest\",\n", - " \"version\": \"7.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-astropy-header\",\n", - " \"version\": \"0.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-cov\",\n", - " \"version\": \"4.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-runner\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"python-dateutil\",\n", - " \"version\": \"2.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"python-json-logger\",\n", - " \"version\": \"2.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"pytz\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyzmq\",\n", - " \"version\": \"25.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"qtconsole\",\n", - " \"version\": \"5.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"requests\",\n", - " \"version\": \"2.29.0\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3339-validator\",\n", - " \"version\": \"0.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3986-validator\",\n", - " \"version\": \"0.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"scikit-learn\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"scipy\",\n", - " \"version\": \"1.10.1\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools\",\n", - " \"version\": \"67.7.2\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools-scm\",\n", - " \"version\": \"7.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"sip\",\n", - " \"version\": \"6.7.9\"\n", - " },\n", - " {\n", - " \"name\": \"six\",\n", - " \"version\": \"1.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"sniffio\",\n", - " \"version\": \"1.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"snowballstemmer\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"soupsieve\",\n", - " \"version\": \"2.3.2.post1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-autobuild\",\n", - " \"version\": \"2021.3.14\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-automodapi\",\n", - " \"version\": \"0.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-rtd-theme\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx_design\",\n", - " \"version\": \"0.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-applehelp\",\n", - " \"version\": \"1.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-devhelp\",\n", - " \"version\": \"1.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-htmlhelp\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jquery\",\n", - " \"version\": \"4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jsmath\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-qthelp\",\n", - " \"version\": \"1.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-serializinghtml\",\n", - " \"version\": \"1.1.5\"\n", - " },\n", - " {\n", - " \"name\": \"stack-data\",\n", - " \"version\": \"0.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"tables\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"terminado\",\n", - " \"version\": \"0.17.1\"\n", - " },\n", - " {\n", - " \"name\": \"threadpoolctl\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"tinycss2\",\n", - " \"version\": \"1.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"toml\",\n", - " \"version\": \"0.10.2\"\n", - " },\n", - " {\n", - " \"name\": \"tomli\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"tornado\",\n", - " \"version\": \"6.3\"\n", - " },\n", - " {\n", - " \"name\": \"towncrier\",\n", - " \"version\": \"22.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"tqdm\",\n", - " \"version\": \"4.65.0\"\n", - " },\n", - " {\n", - " \"name\": \"traitlets\",\n", - " \"version\": \"5.9.0\"\n", - " },\n", - " {\n", - " \"name\": \"typing_extensions\",\n", - " \"version\": \"4.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"tzdata\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"ukkonen\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"unicodedata2\",\n", - " \"version\": \"15.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"urllib3\",\n", - " \"version\": \"1.26.15\"\n", - " },\n", - " {\n", - " \"name\": \"virtualenv\",\n", - " \"version\": \"20.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"wcwidth\",\n", - " \"version\": \"0.2.6\"\n", - " },\n", - " {\n", - " \"name\": \"webencodings\",\n", - " \"version\": \"0.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"websocket-client\",\n", - " \"version\": \"1.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"wheel\",\n", - " \"version\": \"0.40.0\"\n", - " },\n", - " {\n", - " \"name\": \"widgetsnbextension\",\n", - " \"version\": \"4.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"zipp\",\n", - " \"version\": \"3.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"zstandard\",\n", - " \"version\": \"0.19.0\"\n", - " }\n", - " ]\n", - " },\n", - " \"environment\": {\n", - " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", - " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", - " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", - " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", - " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", - " \"CONDA_SHLVL\": \"1\",\n", - " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", - " \"LD_LIBRARY_PATH\": null,\n", - " \"DYLD_LIBRARY_PATH\": null,\n", - " \"USER\": \"aknierim\",\n", - " \"HOME\": \"/home/aknierim\",\n", - " \"SHELL\": \"/bin/zsh\"\n", - " },\n", - " \"arguments\": [\n", - " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", - " \"-f\",\n", - " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", - " ],\n", - " \"start_time_utc\": \"2023-07-03T15:24:52.052\"\n", - " },\n", - " \"input\": [],\n", - " \"output\": [],\n", - " \"config\": {\n", - " \"MyTool\": {\n", - " \"config_files\": [],\n", - " \"iterations\": 5,\n", - " \"log_config\": {},\n", - " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", - " \"log_file\": null,\n", - " \"log_file_level\": \"INFO\",\n", - " \"log_format\": \"[%(name)s]%(highlevel)s %(message)s\",\n", - " \"log_level\": 30,\n", - " \"logging_config\": {},\n", - " \"overwrite\": false,\n", - " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", - " \"quiet\": false,\n", - " \"show_config\": false,\n", - " \"show_config_json\": false,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"SecondaryMyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"TelescopeWiseComponent\": {\n", - " \"param\": [\n", - " [\n", - " \"type\",\n", - " \"*\",\n", - " 5.0\n", - " ]\n", - " ]\n", - " },\n", - " \"AdvancedComponent\": {\n", - " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", - " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", - " \"value1\": -1,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " }\n", - " }\n", - " }\n", - " },\n", - " \"status\": \"completed\",\n", - " \"duration_min\": 0.011350000000014404\n", - " },\n", - " {\n", - " \"activity_name\": \"mytool\",\n", - " \"activity_uuid\": \"9a689c40-0157-4ee0-88f4-fb8125ef689c\",\n", - " \"start\": {\n", - " \"time_utc\": \"2023-07-03T15:24:52.601\"\n", - " },\n", - " \"stop\": {\n", - " \"time_utc\": \"2023-07-03T15:24:53.110\"\n", - " },\n", - " \"system\": {\n", - " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", - " \"ctapipe_resources_version\": \"not installed\",\n", - " \"eventio_version\": \"1.11.0\",\n", - " \"ctapipe_svc_path\": null,\n", - " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", - " \"platform\": {\n", - " \"architecture_bits\": \"64bit\",\n", - " \"architecture_linkage\": \"ELF\",\n", - " \"machine\": \"x86_64\",\n", - " \"processor\": \"x86_64\",\n", - " \"node\": \"e5b-dell-09\",\n", - " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", - " \"system\": \"Linux\",\n", - " \"release\": \"5.19.0-46-generic\",\n", - " \"libcver\": [\n", - " \"glibc\",\n", - " \"2.35\"\n", - " ],\n", - " \"n_cpus\": 12,\n", - " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", - " },\n", - " \"python\": {\n", - " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", - " \"version\": [\n", - " \"3\",\n", - " \"9\",\n", - " \"16\"\n", - " ],\n", - " \"compiler\": \"GCC 11.3.0\",\n", - " \"implementation\": \"CPython\",\n", - " \"packages\": [\n", - " {\n", - " \"name\": \"Babel\",\n", - " \"version\": \"2.12.1\"\n", - " },\n", - " {\n", - " \"name\": \"Cython\",\n", - " \"version\": \"0.29.34\"\n", - " },\n", - " {\n", - " \"name\": \"Jinja2\",\n", - " \"version\": \"3.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"MarkupSafe\",\n", - " \"version\": \"2.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"Pillow\",\n", - " \"version\": \"9.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5\",\n", - " \"version\": \"5.15.7\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5-sip\",\n", - " \"version\": \"12.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"PySocks\",\n", - " \"version\": \"1.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"PyYAML\",\n", - " \"version\": \"6.0\"\n", - " },\n", - " {\n", - " \"name\": \"Pygments\",\n", - " \"version\": \"2.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"QtPy\",\n", - " \"version\": \"2.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"Send2Trash\",\n", - " \"version\": \"1.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"Sphinx\",\n", - " \"version\": \"6.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"accessible-pygments\",\n", - " \"version\": \"0.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"alabaster\",\n", - " \"version\": \"0.7.13\"\n", - " },\n", - " {\n", - " \"name\": \"anyio\",\n", - " \"version\": \"3.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi\",\n", - " \"version\": \"21.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi-bindings\",\n", - " \"version\": \"21.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"astropy\",\n", - " \"version\": \"5.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"asttokens\",\n", - " \"version\": \"2.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"async-lru\",\n", - " \"version\": \"2.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"attrs\",\n", - " \"version\": \"23.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"backcall\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"backports.functools-lru-cache\",\n", - " \"version\": \"1.6.4\"\n", - " },\n", - " {\n", - " \"name\": \"beautifulsoup4\",\n", - " \"version\": \"4.12.2\"\n", - " },\n", - " {\n", - " \"name\": \"black\",\n", - " \"version\": \"23.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"bleach\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"bokeh\",\n", - " \"version\": \"2.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"brotlipy\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"cached-property\",\n", - " \"version\": \"1.5.2\"\n", - " },\n", - " {\n", - " \"name\": \"certifi\",\n", - " \"version\": \"2023.5.7\"\n", - " },\n", - " {\n", - " \"name\": \"cffi\",\n", - " \"version\": \"1.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"cfgv\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"charset-normalizer\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"click\",\n", - " \"version\": \"8.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"click-default-group\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"colorama\",\n", - " \"version\": \"0.4.6\"\n", - " },\n", - " {\n", - " \"name\": \"comm\",\n", - " \"version\": \"0.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"contourpy\",\n", - " \"version\": \"1.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"corsikaio\",\n", - " \"version\": \"0.2.6.post1\"\n", - " },\n", - " {\n", - " \"name\": \"coverage\",\n", - " \"version\": \"7.2.5\"\n", - " },\n", - " {\n", - " \"name\": \"cryptography\",\n", - " \"version\": \"40.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"ctapipe\",\n", - " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", - " },\n", - " {\n", - " \"name\": \"cycler\",\n", - " \"version\": \"0.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"debugpy\",\n", - " \"version\": \"1.6.7\"\n", - " },\n", - " {\n", - " \"name\": \"decorator\",\n", - " \"version\": \"5.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"defusedxml\",\n", - " \"version\": \"0.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"distlib\",\n", - " \"version\": \"0.3.6\"\n", - " },\n", - " {\n", - " \"name\": \"docutils\",\n", - " \"version\": \"0.18.1\"\n", - " },\n", - " {\n", - " \"name\": \"entrypoints\",\n", - " \"version\": \"0.4\"\n", - " },\n", - " {\n", - " \"name\": \"eventio\",\n", - " \"version\": \"1.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"exceptiongroup\",\n", - " \"version\": \"1.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"executing\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"fastjsonschema\",\n", - " \"version\": \"2.16.3\"\n", - " },\n", - " {\n", - " \"name\": \"filelock\",\n", - " \"version\": \"3.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"flit_core\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"fonttools\",\n", - " \"version\": \"4.39.3\"\n", - " },\n", - " {\n", - " \"name\": \"h5py\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"identify\",\n", - " \"version\": \"2.5.24\"\n", - " },\n", - " {\n", - " \"name\": \"idna\",\n", - " \"version\": \"3.4\"\n", - " },\n", - " {\n", - " \"name\": \"imagesize\",\n", - " \"version\": \"1.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"iminuit\",\n", - " \"version\": \"2.21.3\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-metadata\",\n", - " \"version\": \"6.6.0\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-resources\",\n", - " \"version\": \"5.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"incremental\",\n", - " \"version\": \"22.10.0\"\n", - " },\n", - " {\n", - " \"name\": \"iniconfig\",\n", - " \"version\": \"2.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipykernel\",\n", - " \"version\": \"6.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipython\",\n", - " \"version\": \"8.13.2\"\n", - " },\n", - " {\n", - " \"name\": \"ipython-genutils\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipywidgets\",\n", - " \"version\": \"8.0.6\"\n", - " },\n", - " {\n", - " \"name\": \"jedi\",\n", - " \"version\": \"0.18.2\"\n", - " },\n", - " {\n", - " \"name\": \"joblib\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"json5\",\n", - " \"version\": \"0.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"jsonschema\",\n", - " \"version\": \"4.17.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-console\",\n", - " \"version\": \"6.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-events\",\n", - " \"version\": \"0.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-lsp\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_client\",\n", - " \"version\": \"8.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_core\",\n", - " \"version\": \"5.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server\",\n", - " \"version\": \"2.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server_terminals\",\n", - " \"version\": \"0.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab\",\n", - " \"version\": \"4.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-pygments\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-widgets\",\n", - " \"version\": \"3.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab_server\",\n", - " \"version\": \"2.22.1\"\n", - " },\n", - " {\n", - " \"name\": \"kiwisolver\",\n", - " \"version\": \"1.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"livereload\",\n", - " \"version\": \"2.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"llvmlite\",\n", - " \"version\": \"0.39.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib\",\n", - " \"version\": \"3.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib-inline\",\n", - " \"version\": \"0.1.6\"\n", - " },\n", - " {\n", - " \"name\": \"mistune\",\n", - " \"version\": \"2.0.5\"\n", - " },\n", - " {\n", - " \"name\": \"munkres\",\n", - " \"version\": \"1.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"mypy-extensions\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclassic\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclient\",\n", - " \"version\": \"0.7.4\"\n", - " },\n", - " {\n", - " \"name\": \"nbconvert\",\n", - " \"version\": \"7.4.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbformat\",\n", - " \"version\": \"5.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbsphinx\",\n", - " \"version\": \"0.9.1\"\n", - " },\n", - " {\n", - " \"name\": \"nest-asyncio\",\n", - " \"version\": \"1.5.6\"\n", - " },\n", - " {\n", - " \"name\": \"nodeenv\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"notebook\",\n", - " \"version\": \"6.5.4\"\n", - " },\n", - " {\n", - " \"name\": \"notebook_shim\",\n", - " \"version\": \"0.2.3\"\n", - " },\n", - " {\n", - " \"name\": \"numba\",\n", - " \"version\": \"0.56.4\"\n", - " },\n", - " {\n", - " \"name\": \"numexpr\",\n", - " \"version\": \"2.8.4\"\n", - " },\n", - " {\n", - " \"name\": \"numpy\",\n", - " \"version\": \"1.23.5\"\n", - " },\n", - " {\n", - " \"name\": \"numpydoc\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"packaging\",\n", - " \"version\": \"23.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandas\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandocfilters\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"parso\",\n", - " \"version\": \"0.8.3\"\n", - " },\n", - " {\n", - " \"name\": \"pathspec\",\n", - " \"version\": \"0.11.1\"\n", - " },\n", - " {\n", - " \"name\": \"pexpect\",\n", - " \"version\": \"4.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"pickleshare\",\n", - " \"version\": \"0.7.5\"\n", - " },\n", - " {\n", - " \"name\": \"pip\",\n", - " \"version\": \"23.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pkgutil_resolve_name\",\n", - " \"version\": \"1.3.10\"\n", - " },\n", - " {\n", - " \"name\": \"platformdirs\",\n", - " \"version\": \"3.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"pluggy\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ply\",\n", - " \"version\": \"3.11\"\n", - " },\n", - " {\n", - " \"name\": \"pooch\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pre-commit\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"prometheus-client\",\n", - " \"version\": \"0.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"prompt-toolkit\",\n", - " \"version\": \"3.0.38\"\n", - " },\n", - " {\n", - " \"name\": \"psutil\",\n", - " \"version\": \"5.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"ptyprocess\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pure-eval\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"py-cpuinfo\",\n", - " \"version\": \"9.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pyOpenSSL\",\n", - " \"version\": \"23.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"pycparser\",\n", - " \"version\": \"2.21\"\n", - " },\n", - " {\n", - " \"name\": \"pydata-sphinx-theme\",\n", - " \"version\": \"0.13.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyerfa\",\n", - " \"version\": \"2.0.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyparsing\",\n", - " \"version\": \"3.0.9\"\n", - " },\n", - " {\n", - " \"name\": \"pyrsistent\",\n", - " \"version\": \"0.19.3\"\n", - " },\n", - " {\n", - " \"name\": \"pytest\",\n", - " \"version\": \"7.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-astropy-header\",\n", - " \"version\": \"0.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-cov\",\n", - " \"version\": \"4.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-runner\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"python-dateutil\",\n", - " \"version\": \"2.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"python-json-logger\",\n", - " \"version\": \"2.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"pytz\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyzmq\",\n", - " \"version\": \"25.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"qtconsole\",\n", - " \"version\": \"5.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"requests\",\n", - " \"version\": \"2.29.0\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3339-validator\",\n", - " \"version\": \"0.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3986-validator\",\n", - " \"version\": \"0.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"scikit-learn\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"scipy\",\n", - " \"version\": \"1.10.1\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools\",\n", - " \"version\": \"67.7.2\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools-scm\",\n", - " \"version\": \"7.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"sip\",\n", - " \"version\": \"6.7.9\"\n", - " },\n", - " {\n", - " \"name\": \"six\",\n", - " \"version\": \"1.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"sniffio\",\n", - " \"version\": \"1.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"snowballstemmer\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"soupsieve\",\n", - " \"version\": \"2.3.2.post1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-autobuild\",\n", - " \"version\": \"2021.3.14\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-automodapi\",\n", - " \"version\": \"0.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-rtd-theme\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx_design\",\n", - " \"version\": \"0.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-applehelp\",\n", - " \"version\": \"1.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-devhelp\",\n", - " \"version\": \"1.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-htmlhelp\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jquery\",\n", - " \"version\": \"4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jsmath\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-qthelp\",\n", - " \"version\": \"1.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-serializinghtml\",\n", - " \"version\": \"1.1.5\"\n", - " },\n", - " {\n", - " \"name\": \"stack-data\",\n", - " \"version\": \"0.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"tables\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"terminado\",\n", - " \"version\": \"0.17.1\"\n", - " },\n", - " {\n", - " \"name\": \"threadpoolctl\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"tinycss2\",\n", - " \"version\": \"1.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"toml\",\n", - " \"version\": \"0.10.2\"\n", - " },\n", - " {\n", - " \"name\": \"tomli\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"tornado\",\n", - " \"version\": \"6.3\"\n", - " },\n", - " {\n", - " \"name\": \"towncrier\",\n", - " \"version\": \"22.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"tqdm\",\n", - " \"version\": \"4.65.0\"\n", - " },\n", - " {\n", - " \"name\": \"traitlets\",\n", - " \"version\": \"5.9.0\"\n", - " },\n", - " {\n", - " \"name\": \"typing_extensions\",\n", - " \"version\": \"4.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"tzdata\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"ukkonen\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"unicodedata2\",\n", - " \"version\": \"15.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"urllib3\",\n", - " \"version\": \"1.26.15\"\n", - " },\n", - " {\n", - " \"name\": \"virtualenv\",\n", - " \"version\": \"20.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"wcwidth\",\n", - " \"version\": \"0.2.6\"\n", - " },\n", - " {\n", - " \"name\": \"webencodings\",\n", - " \"version\": \"0.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"websocket-client\",\n", - " \"version\": \"1.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"wheel\",\n", - " \"version\": \"0.40.0\"\n", - " },\n", - " {\n", - " \"name\": \"widgetsnbextension\",\n", - " \"version\": \"4.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"zipp\",\n", - " \"version\": \"3.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"zstandard\",\n", - " \"version\": \"0.19.0\"\n", - " }\n", - " ]\n", - " },\n", - " \"environment\": {\n", - " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", - " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", - " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", - " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", - " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", - " \"CONDA_SHLVL\": \"1\",\n", - " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", - " \"LD_LIBRARY_PATH\": null,\n", - " \"DYLD_LIBRARY_PATH\": null,\n", - " \"USER\": \"aknierim\",\n", - " \"HOME\": \"/home/aknierim\",\n", - " \"SHELL\": \"/bin/zsh\"\n", - " },\n", - " \"arguments\": [\n", - " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", - " \"-f\",\n", - " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", - " ],\n", - " \"start_time_utc\": \"2023-07-03T15:24:52.794\"\n", - " },\n", - " \"input\": [],\n", - " \"output\": [],\n", - " \"config\": {\n", - " \"MyTool\": {\n", - " \"config_files\": [],\n", - " \"iterations\": 3,\n", - " \"log_config\": {},\n", - " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", - " \"log_file\": null,\n", - " \"log_file_level\": \"INFO\",\n", - " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", - " \"log_level\": 20,\n", - " \"logging_config\": {},\n", - " \"overwrite\": false,\n", - " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", - " \"quiet\": false,\n", - " \"show_config\": false,\n", - " \"show_config_json\": false,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"SecondaryMyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"TelescopeWiseComponent\": {\n", - " \"param\": [\n", - " [\n", - " \"type\",\n", - " \"*\",\n", - " 5.0\n", - " ]\n", - " ]\n", - " },\n", - " \"AdvancedComponent\": {\n", - " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", - " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", - " \"value1\": -1,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " }\n", - " }\n", - " }\n", - " },\n", - " \"status\": \"completed\",\n", - " \"duration_min\": 0.008483333333408893\n", - " },\n", - " {\n", - " \"activity_name\": \"mytool\",\n", - " \"activity_uuid\": \"a237bc8b-cb43-456b-a3d2-3f1ad096fbeb\",\n", - " \"start\": {\n", - " \"time_utc\": \"2023-07-03T15:24:53.153\"\n", - " },\n", - " \"stop\": {\n", - " \"time_utc\": \"2023-07-03T15:24:53.644\"\n", - " },\n", - " \"system\": {\n", - " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", - " \"ctapipe_resources_version\": \"not installed\",\n", - " \"eventio_version\": \"1.11.0\",\n", - " \"ctapipe_svc_path\": null,\n", - " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", - " \"platform\": {\n", - " \"architecture_bits\": \"64bit\",\n", - " \"architecture_linkage\": \"ELF\",\n", - " \"machine\": \"x86_64\",\n", - " \"processor\": \"x86_64\",\n", - " \"node\": \"e5b-dell-09\",\n", - " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", - " \"system\": \"Linux\",\n", - " \"release\": \"5.19.0-46-generic\",\n", - " \"libcver\": [\n", - " \"glibc\",\n", - " \"2.35\"\n", - " ],\n", - " \"n_cpus\": 12,\n", - " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", - " },\n", - " \"python\": {\n", - " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", - " \"version\": [\n", - " \"3\",\n", - " \"9\",\n", - " \"16\"\n", - " ],\n", - " \"compiler\": \"GCC 11.3.0\",\n", - " \"implementation\": \"CPython\",\n", - " \"packages\": [\n", - " {\n", - " \"name\": \"Babel\",\n", - " \"version\": \"2.12.1\"\n", - " },\n", - " {\n", - " \"name\": \"Cython\",\n", - " \"version\": \"0.29.34\"\n", - " },\n", - " {\n", - " \"name\": \"Jinja2\",\n", - " \"version\": \"3.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"MarkupSafe\",\n", - " \"version\": \"2.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"Pillow\",\n", - " \"version\": \"9.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5\",\n", - " \"version\": \"5.15.7\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5-sip\",\n", - " \"version\": \"12.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"PySocks\",\n", - " \"version\": \"1.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"PyYAML\",\n", - " \"version\": \"6.0\"\n", - " },\n", - " {\n", - " \"name\": \"Pygments\",\n", - " \"version\": \"2.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"QtPy\",\n", - " \"version\": \"2.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"Send2Trash\",\n", - " \"version\": \"1.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"Sphinx\",\n", - " \"version\": \"6.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"accessible-pygments\",\n", - " \"version\": \"0.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"alabaster\",\n", - " \"version\": \"0.7.13\"\n", - " },\n", - " {\n", - " \"name\": \"anyio\",\n", - " \"version\": \"3.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi\",\n", - " \"version\": \"21.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi-bindings\",\n", - " \"version\": \"21.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"astropy\",\n", - " \"version\": \"5.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"asttokens\",\n", - " \"version\": \"2.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"async-lru\",\n", - " \"version\": \"2.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"attrs\",\n", - " \"version\": \"23.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"backcall\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"backports.functools-lru-cache\",\n", - " \"version\": \"1.6.4\"\n", - " },\n", - " {\n", - " \"name\": \"beautifulsoup4\",\n", - " \"version\": \"4.12.2\"\n", - " },\n", - " {\n", - " \"name\": \"black\",\n", - " \"version\": \"23.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"bleach\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"bokeh\",\n", - " \"version\": \"2.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"brotlipy\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"cached-property\",\n", - " \"version\": \"1.5.2\"\n", - " },\n", - " {\n", - " \"name\": \"certifi\",\n", - " \"version\": \"2023.5.7\"\n", - " },\n", - " {\n", - " \"name\": \"cffi\",\n", - " \"version\": \"1.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"cfgv\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"charset-normalizer\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"click\",\n", - " \"version\": \"8.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"click-default-group\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"colorama\",\n", - " \"version\": \"0.4.6\"\n", - " },\n", - " {\n", - " \"name\": \"comm\",\n", - " \"version\": \"0.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"contourpy\",\n", - " \"version\": \"1.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"corsikaio\",\n", - " \"version\": \"0.2.6.post1\"\n", - " },\n", - " {\n", - " \"name\": \"coverage\",\n", - " \"version\": \"7.2.5\"\n", - " },\n", - " {\n", - " \"name\": \"cryptography\",\n", - " \"version\": \"40.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"ctapipe\",\n", - " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", - " },\n", - " {\n", - " \"name\": \"cycler\",\n", - " \"version\": \"0.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"debugpy\",\n", - " \"version\": \"1.6.7\"\n", - " },\n", - " {\n", - " \"name\": \"decorator\",\n", - " \"version\": \"5.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"defusedxml\",\n", - " \"version\": \"0.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"distlib\",\n", - " \"version\": \"0.3.6\"\n", - " },\n", - " {\n", - " \"name\": \"docutils\",\n", - " \"version\": \"0.18.1\"\n", - " },\n", - " {\n", - " \"name\": \"entrypoints\",\n", - " \"version\": \"0.4\"\n", - " },\n", - " {\n", - " \"name\": \"eventio\",\n", - " \"version\": \"1.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"exceptiongroup\",\n", - " \"version\": \"1.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"executing\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"fastjsonschema\",\n", - " \"version\": \"2.16.3\"\n", - " },\n", - " {\n", - " \"name\": \"filelock\",\n", - " \"version\": \"3.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"flit_core\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"fonttools\",\n", - " \"version\": \"4.39.3\"\n", - " },\n", - " {\n", - " \"name\": \"h5py\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"identify\",\n", - " \"version\": \"2.5.24\"\n", - " },\n", - " {\n", - " \"name\": \"idna\",\n", - " \"version\": \"3.4\"\n", - " },\n", - " {\n", - " \"name\": \"imagesize\",\n", - " \"version\": \"1.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"iminuit\",\n", - " \"version\": \"2.21.3\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-metadata\",\n", - " \"version\": \"6.6.0\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-resources\",\n", - " \"version\": \"5.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"incremental\",\n", - " \"version\": \"22.10.0\"\n", - " },\n", - " {\n", - " \"name\": \"iniconfig\",\n", - " \"version\": \"2.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipykernel\",\n", - " \"version\": \"6.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipython\",\n", - " \"version\": \"8.13.2\"\n", - " },\n", - " {\n", - " \"name\": \"ipython-genutils\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipywidgets\",\n", - " \"version\": \"8.0.6\"\n", - " },\n", - " {\n", - " \"name\": \"jedi\",\n", - " \"version\": \"0.18.2\"\n", - " },\n", - " {\n", - " \"name\": \"joblib\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"json5\",\n", - " \"version\": \"0.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"jsonschema\",\n", - " \"version\": \"4.17.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-console\",\n", - " \"version\": \"6.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-events\",\n", - " \"version\": \"0.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-lsp\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_client\",\n", - " \"version\": \"8.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_core\",\n", - " \"version\": \"5.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server\",\n", - " \"version\": \"2.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server_terminals\",\n", - " \"version\": \"0.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab\",\n", - " \"version\": \"4.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-pygments\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-widgets\",\n", - " \"version\": \"3.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab_server\",\n", - " \"version\": \"2.22.1\"\n", - " },\n", - " {\n", - " \"name\": \"kiwisolver\",\n", - " \"version\": \"1.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"livereload\",\n", - " \"version\": \"2.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"llvmlite\",\n", - " \"version\": \"0.39.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib\",\n", - " \"version\": \"3.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib-inline\",\n", - " \"version\": \"0.1.6\"\n", - " },\n", - " {\n", - " \"name\": \"mistune\",\n", - " \"version\": \"2.0.5\"\n", - " },\n", - " {\n", - " \"name\": \"munkres\",\n", - " \"version\": \"1.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"mypy-extensions\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclassic\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclient\",\n", - " \"version\": \"0.7.4\"\n", - " },\n", - " {\n", - " \"name\": \"nbconvert\",\n", - " \"version\": \"7.4.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbformat\",\n", - " \"version\": \"5.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbsphinx\",\n", - " \"version\": \"0.9.1\"\n", - " },\n", - " {\n", - " \"name\": \"nest-asyncio\",\n", - " \"version\": \"1.5.6\"\n", - " },\n", - " {\n", - " \"name\": \"nodeenv\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"notebook\",\n", - " \"version\": \"6.5.4\"\n", - " },\n", - " {\n", - " \"name\": \"notebook_shim\",\n", - " \"version\": \"0.2.3\"\n", - " },\n", - " {\n", - " \"name\": \"numba\",\n", - " \"version\": \"0.56.4\"\n", - " },\n", - " {\n", - " \"name\": \"numexpr\",\n", - " \"version\": \"2.8.4\"\n", - " },\n", - " {\n", - " \"name\": \"numpy\",\n", - " \"version\": \"1.23.5\"\n", - " },\n", - " {\n", - " \"name\": \"numpydoc\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"packaging\",\n", - " \"version\": \"23.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandas\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandocfilters\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"parso\",\n", - " \"version\": \"0.8.3\"\n", - " },\n", - " {\n", - " \"name\": \"pathspec\",\n", - " \"version\": \"0.11.1\"\n", - " },\n", - " {\n", - " \"name\": \"pexpect\",\n", - " \"version\": \"4.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"pickleshare\",\n", - " \"version\": \"0.7.5\"\n", - " },\n", - " {\n", - " \"name\": \"pip\",\n", - " \"version\": \"23.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pkgutil_resolve_name\",\n", - " \"version\": \"1.3.10\"\n", - " },\n", - " {\n", - " \"name\": \"platformdirs\",\n", - " \"version\": \"3.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"pluggy\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ply\",\n", - " \"version\": \"3.11\"\n", - " },\n", - " {\n", - " \"name\": \"pooch\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pre-commit\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"prometheus-client\",\n", - " \"version\": \"0.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"prompt-toolkit\",\n", - " \"version\": \"3.0.38\"\n", - " },\n", - " {\n", - " \"name\": \"psutil\",\n", - " \"version\": \"5.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"ptyprocess\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pure-eval\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"py-cpuinfo\",\n", - " \"version\": \"9.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pyOpenSSL\",\n", - " \"version\": \"23.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"pycparser\",\n", - " \"version\": \"2.21\"\n", - " },\n", - " {\n", - " \"name\": \"pydata-sphinx-theme\",\n", - " \"version\": \"0.13.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyerfa\",\n", - " \"version\": \"2.0.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyparsing\",\n", - " \"version\": \"3.0.9\"\n", - " },\n", - " {\n", - " \"name\": \"pyrsistent\",\n", - " \"version\": \"0.19.3\"\n", - " },\n", - " {\n", - " \"name\": \"pytest\",\n", - " \"version\": \"7.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-astropy-header\",\n", - " \"version\": \"0.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-cov\",\n", - " \"version\": \"4.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-runner\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"python-dateutil\",\n", - " \"version\": \"2.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"python-json-logger\",\n", - " \"version\": \"2.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"pytz\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyzmq\",\n", - " \"version\": \"25.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"qtconsole\",\n", - " \"version\": \"5.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"requests\",\n", - " \"version\": \"2.29.0\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3339-validator\",\n", - " \"version\": \"0.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3986-validator\",\n", - " \"version\": \"0.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"scikit-learn\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"scipy\",\n", - " \"version\": \"1.10.1\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools\",\n", - " \"version\": \"67.7.2\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools-scm\",\n", - " \"version\": \"7.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"sip\",\n", - " \"version\": \"6.7.9\"\n", - " },\n", - " {\n", - " \"name\": \"six\",\n", - " \"version\": \"1.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"sniffio\",\n", - " \"version\": \"1.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"snowballstemmer\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"soupsieve\",\n", - " \"version\": \"2.3.2.post1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-autobuild\",\n", - " \"version\": \"2021.3.14\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-automodapi\",\n", - " \"version\": \"0.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-rtd-theme\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx_design\",\n", - " \"version\": \"0.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-applehelp\",\n", - " \"version\": \"1.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-devhelp\",\n", - " \"version\": \"1.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-htmlhelp\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jquery\",\n", - " \"version\": \"4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jsmath\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-qthelp\",\n", - " \"version\": \"1.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-serializinghtml\",\n", - " \"version\": \"1.1.5\"\n", - " },\n", - " {\n", - " \"name\": \"stack-data\",\n", - " \"version\": \"0.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"tables\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"terminado\",\n", - " \"version\": \"0.17.1\"\n", - " },\n", - " {\n", - " \"name\": \"threadpoolctl\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"tinycss2\",\n", - " \"version\": \"1.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"toml\",\n", - " \"version\": \"0.10.2\"\n", - " },\n", - " {\n", - " \"name\": \"tomli\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"tornado\",\n", - " \"version\": \"6.3\"\n", - " },\n", - " {\n", - " \"name\": \"towncrier\",\n", - " \"version\": \"22.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"tqdm\",\n", - " \"version\": \"4.65.0\"\n", - " },\n", - " {\n", - " \"name\": \"traitlets\",\n", - " \"version\": \"5.9.0\"\n", - " },\n", - " {\n", - " \"name\": \"typing_extensions\",\n", - " \"version\": \"4.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"tzdata\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"ukkonen\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"unicodedata2\",\n", - " \"version\": \"15.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"urllib3\",\n", - " \"version\": \"1.26.15\"\n", - " },\n", - " {\n", - " \"name\": \"virtualenv\",\n", - " \"version\": \"20.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"wcwidth\",\n", - " \"version\": \"0.2.6\"\n", - " },\n", - " {\n", - " \"name\": \"webencodings\",\n", - " \"version\": \"0.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"websocket-client\",\n", - " \"version\": \"1.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"wheel\",\n", - " \"version\": \"0.40.0\"\n", - " },\n", - " {\n", - " \"name\": \"widgetsnbextension\",\n", - " \"version\": \"4.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"zipp\",\n", - " \"version\": \"3.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"zstandard\",\n", - " \"version\": \"0.19.0\"\n", - " }\n", - " ]\n", - " },\n", - " \"environment\": {\n", - " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", - " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", - " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", - " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", - " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", - " \"CONDA_SHLVL\": \"1\",\n", - " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", - " \"LD_LIBRARY_PATH\": null,\n", - " \"DYLD_LIBRARY_PATH\": null,\n", - " \"USER\": \"aknierim\",\n", - " \"HOME\": \"/home/aknierim\",\n", - " \"SHELL\": \"/bin/zsh\"\n", - " },\n", - " \"arguments\": [\n", - " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", - " \"-f\",\n", - " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", - " ],\n", - " \"start_time_utc\": \"2023-07-03T15:24:53.322\"\n", - " },\n", - " \"input\": [],\n", - " \"output\": [],\n", - " \"config\": {\n", - " \"MyTool\": {\n", - " \"config_files\": [],\n", - " \"iterations\": 3,\n", - " \"log_config\": {},\n", - " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", - " \"log_file\": null,\n", - " \"log_file_level\": \"INFO\",\n", - " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", - " \"log_level\": 10,\n", - " \"logging_config\": {},\n", - " \"overwrite\": false,\n", - " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", - " \"quiet\": false,\n", - " \"show_config\": false,\n", - " \"show_config_json\": false,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"SecondaryMyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"TelescopeWiseComponent\": {\n", - " \"param\": [\n", - " [\n", - " \"type\",\n", - " \"*\",\n", - " 5.0\n", - " ]\n", - " ]\n", - " },\n", - " \"AdvancedComponent\": {\n", - " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", - " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", - " \"value1\": -1,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " }\n", - " }\n", - " }\n", - " },\n", - " \"status\": \"completed\",\n", - " \"duration_min\": 0.00818333333336696\n", - " },\n", - " {\n", - " \"activity_name\": \"mytool\",\n", - " \"activity_uuid\": \"b0ef6627-d00f-4fd8-bf9a-7631e890715b\",\n", - " \"start\": {\n", - " \"time_utc\": \"2023-07-03T15:24:53.722\"\n", - " },\n", - " \"stop\": {\n", - " \"time_utc\": \"2023-07-03T15:24:54.034\"\n", - " },\n", - " \"system\": {\n", - " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", - " \"ctapipe_resources_version\": \"not installed\",\n", - " \"eventio_version\": \"1.11.0\",\n", - " \"ctapipe_svc_path\": null,\n", - " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", - " \"platform\": {\n", - " \"architecture_bits\": \"64bit\",\n", - " \"architecture_linkage\": \"ELF\",\n", - " \"machine\": \"x86_64\",\n", - " \"processor\": \"x86_64\",\n", - " \"node\": \"e5b-dell-09\",\n", - " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", - " \"system\": \"Linux\",\n", - " \"release\": \"5.19.0-46-generic\",\n", - " \"libcver\": [\n", - " \"glibc\",\n", - " \"2.35\"\n", - " ],\n", - " \"n_cpus\": 12,\n", - " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", - " },\n", - " \"python\": {\n", - " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", - " \"version\": [\n", - " \"3\",\n", - " \"9\",\n", - " \"16\"\n", - " ],\n", - " \"compiler\": \"GCC 11.3.0\",\n", - " \"implementation\": \"CPython\",\n", - " \"packages\": [\n", - " {\n", - " \"name\": \"Babel\",\n", - " \"version\": \"2.12.1\"\n", - " },\n", - " {\n", - " \"name\": \"Cython\",\n", - " \"version\": \"0.29.34\"\n", - " },\n", - " {\n", - " \"name\": \"Jinja2\",\n", - " \"version\": \"3.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"MarkupSafe\",\n", - " \"version\": \"2.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"Pillow\",\n", - " \"version\": \"9.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5\",\n", - " \"version\": \"5.15.7\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5-sip\",\n", - " \"version\": \"12.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"PySocks\",\n", - " \"version\": \"1.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"PyYAML\",\n", - " \"version\": \"6.0\"\n", - " },\n", - " {\n", - " \"name\": \"Pygments\",\n", - " \"version\": \"2.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"QtPy\",\n", - " \"version\": \"2.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"Send2Trash\",\n", - " \"version\": \"1.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"Sphinx\",\n", - " \"version\": \"6.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"accessible-pygments\",\n", - " \"version\": \"0.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"alabaster\",\n", - " \"version\": \"0.7.13\"\n", - " },\n", - " {\n", - " \"name\": \"anyio\",\n", - " \"version\": \"3.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi\",\n", - " \"version\": \"21.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi-bindings\",\n", - " \"version\": \"21.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"astropy\",\n", - " \"version\": \"5.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"asttokens\",\n", - " \"version\": \"2.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"async-lru\",\n", - " \"version\": \"2.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"attrs\",\n", - " \"version\": \"23.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"backcall\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"backports.functools-lru-cache\",\n", - " \"version\": \"1.6.4\"\n", - " },\n", - " {\n", - " \"name\": \"beautifulsoup4\",\n", - " \"version\": \"4.12.2\"\n", - " },\n", - " {\n", - " \"name\": \"black\",\n", - " \"version\": \"23.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"bleach\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"bokeh\",\n", - " \"version\": \"2.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"brotlipy\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"cached-property\",\n", - " \"version\": \"1.5.2\"\n", - " },\n", - " {\n", - " \"name\": \"certifi\",\n", - " \"version\": \"2023.5.7\"\n", - " },\n", - " {\n", - " \"name\": \"cffi\",\n", - " \"version\": \"1.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"cfgv\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"charset-normalizer\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"click\",\n", - " \"version\": \"8.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"click-default-group\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"colorama\",\n", - " \"version\": \"0.4.6\"\n", - " },\n", - " {\n", - " \"name\": \"comm\",\n", - " \"version\": \"0.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"contourpy\",\n", - " \"version\": \"1.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"corsikaio\",\n", - " \"version\": \"0.2.6.post1\"\n", - " },\n", - " {\n", - " \"name\": \"coverage\",\n", - " \"version\": \"7.2.5\"\n", - " },\n", - " {\n", - " \"name\": \"cryptography\",\n", - " \"version\": \"40.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"ctapipe\",\n", - " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", - " },\n", - " {\n", - " \"name\": \"cycler\",\n", - " \"version\": \"0.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"debugpy\",\n", - " \"version\": \"1.6.7\"\n", - " },\n", - " {\n", - " \"name\": \"decorator\",\n", - " \"version\": \"5.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"defusedxml\",\n", - " \"version\": \"0.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"distlib\",\n", - " \"version\": \"0.3.6\"\n", - " },\n", - " {\n", - " \"name\": \"docutils\",\n", - " \"version\": \"0.18.1\"\n", - " },\n", - " {\n", - " \"name\": \"entrypoints\",\n", - " \"version\": \"0.4\"\n", - " },\n", - " {\n", - " \"name\": \"eventio\",\n", - " \"version\": \"1.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"exceptiongroup\",\n", - " \"version\": \"1.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"executing\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"fastjsonschema\",\n", - " \"version\": \"2.16.3\"\n", - " },\n", - " {\n", - " \"name\": \"filelock\",\n", - " \"version\": \"3.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"flit_core\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"fonttools\",\n", - " \"version\": \"4.39.3\"\n", - " },\n", - " {\n", - " \"name\": \"h5py\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"identify\",\n", - " \"version\": \"2.5.24\"\n", - " },\n", - " {\n", - " \"name\": \"idna\",\n", - " \"version\": \"3.4\"\n", - " },\n", - " {\n", - " \"name\": \"imagesize\",\n", - " \"version\": \"1.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"iminuit\",\n", - " \"version\": \"2.21.3\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-metadata\",\n", - " \"version\": \"6.6.0\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-resources\",\n", - " \"version\": \"5.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"incremental\",\n", - " \"version\": \"22.10.0\"\n", - " },\n", - " {\n", - " \"name\": \"iniconfig\",\n", - " \"version\": \"2.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipykernel\",\n", - " \"version\": \"6.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipython\",\n", - " \"version\": \"8.13.2\"\n", - " },\n", - " {\n", - " \"name\": \"ipython-genutils\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipywidgets\",\n", - " \"version\": \"8.0.6\"\n", - " },\n", - " {\n", - " \"name\": \"jedi\",\n", - " \"version\": \"0.18.2\"\n", - " },\n", - " {\n", - " \"name\": \"joblib\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"json5\",\n", - " \"version\": \"0.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"jsonschema\",\n", - " \"version\": \"4.17.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-console\",\n", - " \"version\": \"6.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-events\",\n", - " \"version\": \"0.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-lsp\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_client\",\n", - " \"version\": \"8.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_core\",\n", - " \"version\": \"5.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server\",\n", - " \"version\": \"2.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server_terminals\",\n", - " \"version\": \"0.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab\",\n", - " \"version\": \"4.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-pygments\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-widgets\",\n", - " \"version\": \"3.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab_server\",\n", - " \"version\": \"2.22.1\"\n", - " },\n", - " {\n", - " \"name\": \"kiwisolver\",\n", - " \"version\": \"1.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"livereload\",\n", - " \"version\": \"2.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"llvmlite\",\n", - " \"version\": \"0.39.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib\",\n", - " \"version\": \"3.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib-inline\",\n", - " \"version\": \"0.1.6\"\n", - " },\n", - " {\n", - " \"name\": \"mistune\",\n", - " \"version\": \"2.0.5\"\n", - " },\n", - " {\n", - " \"name\": \"munkres\",\n", - " \"version\": \"1.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"mypy-extensions\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclassic\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclient\",\n", - " \"version\": \"0.7.4\"\n", - " },\n", - " {\n", - " \"name\": \"nbconvert\",\n", - " \"version\": \"7.4.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbformat\",\n", - " \"version\": \"5.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbsphinx\",\n", - " \"version\": \"0.9.1\"\n", - " },\n", - " {\n", - " \"name\": \"nest-asyncio\",\n", - " \"version\": \"1.5.6\"\n", - " },\n", - " {\n", - " \"name\": \"nodeenv\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"notebook\",\n", - " \"version\": \"6.5.4\"\n", - " },\n", - " {\n", - " \"name\": \"notebook_shim\",\n", - " \"version\": \"0.2.3\"\n", - " },\n", - " {\n", - " \"name\": \"numba\",\n", - " \"version\": \"0.56.4\"\n", - " },\n", - " {\n", - " \"name\": \"numexpr\",\n", - " \"version\": \"2.8.4\"\n", - " },\n", - " {\n", - " \"name\": \"numpy\",\n", - " \"version\": \"1.23.5\"\n", - " },\n", - " {\n", - " \"name\": \"numpydoc\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"packaging\",\n", - " \"version\": \"23.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandas\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandocfilters\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"parso\",\n", - " \"version\": \"0.8.3\"\n", - " },\n", - " {\n", - " \"name\": \"pathspec\",\n", - " \"version\": \"0.11.1\"\n", - " },\n", - " {\n", - " \"name\": \"pexpect\",\n", - " \"version\": \"4.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"pickleshare\",\n", - " \"version\": \"0.7.5\"\n", - " },\n", - " {\n", - " \"name\": \"pip\",\n", - " \"version\": \"23.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pkgutil_resolve_name\",\n", - " \"version\": \"1.3.10\"\n", - " },\n", - " {\n", - " \"name\": \"platformdirs\",\n", - " \"version\": \"3.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"pluggy\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ply\",\n", - " \"version\": \"3.11\"\n", - " },\n", - " {\n", - " \"name\": \"pooch\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pre-commit\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"prometheus-client\",\n", - " \"version\": \"0.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"prompt-toolkit\",\n", - " \"version\": \"3.0.38\"\n", - " },\n", - " {\n", - " \"name\": \"psutil\",\n", - " \"version\": \"5.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"ptyprocess\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pure-eval\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"py-cpuinfo\",\n", - " \"version\": \"9.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pyOpenSSL\",\n", - " \"version\": \"23.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"pycparser\",\n", - " \"version\": \"2.21\"\n", - " },\n", - " {\n", - " \"name\": \"pydata-sphinx-theme\",\n", - " \"version\": \"0.13.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyerfa\",\n", - " \"version\": \"2.0.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyparsing\",\n", - " \"version\": \"3.0.9\"\n", - " },\n", - " {\n", - " \"name\": \"pyrsistent\",\n", - " \"version\": \"0.19.3\"\n", - " },\n", - " {\n", - " \"name\": \"pytest\",\n", - " \"version\": \"7.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-astropy-header\",\n", - " \"version\": \"0.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-cov\",\n", - " \"version\": \"4.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-runner\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"python-dateutil\",\n", - " \"version\": \"2.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"python-json-logger\",\n", - " \"version\": \"2.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"pytz\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyzmq\",\n", - " \"version\": \"25.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"qtconsole\",\n", - " \"version\": \"5.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"requests\",\n", - " \"version\": \"2.29.0\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3339-validator\",\n", - " \"version\": \"0.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3986-validator\",\n", - " \"version\": \"0.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"scikit-learn\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"scipy\",\n", - " \"version\": \"1.10.1\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools\",\n", - " \"version\": \"67.7.2\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools-scm\",\n", - " \"version\": \"7.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"sip\",\n", - " \"version\": \"6.7.9\"\n", - " },\n", - " {\n", - " \"name\": \"six\",\n", - " \"version\": \"1.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"sniffio\",\n", - " \"version\": \"1.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"snowballstemmer\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"soupsieve\",\n", - " \"version\": \"2.3.2.post1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-autobuild\",\n", - " \"version\": \"2021.3.14\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-automodapi\",\n", - " \"version\": \"0.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-rtd-theme\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx_design\",\n", - " \"version\": \"0.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-applehelp\",\n", - " \"version\": \"1.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-devhelp\",\n", - " \"version\": \"1.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-htmlhelp\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jquery\",\n", - " \"version\": \"4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jsmath\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-qthelp\",\n", - " \"version\": \"1.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-serializinghtml\",\n", - " \"version\": \"1.1.5\"\n", - " },\n", - " {\n", - " \"name\": \"stack-data\",\n", - " \"version\": \"0.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"tables\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"terminado\",\n", - " \"version\": \"0.17.1\"\n", - " },\n", - " {\n", - " \"name\": \"threadpoolctl\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"tinycss2\",\n", - " \"version\": \"1.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"toml\",\n", - " \"version\": \"0.10.2\"\n", - " },\n", - " {\n", - " \"name\": \"tomli\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"tornado\",\n", - " \"version\": \"6.3\"\n", - " },\n", - " {\n", - " \"name\": \"towncrier\",\n", - " \"version\": \"22.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"tqdm\",\n", - " \"version\": \"4.65.0\"\n", - " },\n", - " {\n", - " \"name\": \"traitlets\",\n", - " \"version\": \"5.9.0\"\n", - " },\n", - " {\n", - " \"name\": \"typing_extensions\",\n", - " \"version\": \"4.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"tzdata\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"ukkonen\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"unicodedata2\",\n", - " \"version\": \"15.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"urllib3\",\n", - " \"version\": \"1.26.15\"\n", - " },\n", - " {\n", - " \"name\": \"virtualenv\",\n", - " \"version\": \"20.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"wcwidth\",\n", - " \"version\": \"0.2.6\"\n", - " },\n", - " {\n", - " \"name\": \"webencodings\",\n", - " \"version\": \"0.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"websocket-client\",\n", - " \"version\": \"1.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"wheel\",\n", - " \"version\": \"0.40.0\"\n", - " },\n", - " {\n", - " \"name\": \"widgetsnbextension\",\n", - " \"version\": \"4.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"zipp\",\n", - " \"version\": \"3.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"zstandard\",\n", - " \"version\": \"0.19.0\"\n", - " }\n", - " ]\n", - " },\n", - " \"environment\": {\n", - " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", - " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", - " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", - " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", - " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", - " \"CONDA_SHLVL\": \"1\",\n", - " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", - " \"LD_LIBRARY_PATH\": null,\n", - " \"DYLD_LIBRARY_PATH\": null,\n", - " \"USER\": \"aknierim\",\n", - " \"HOME\": \"/home/aknierim\",\n", - " \"SHELL\": \"/bin/zsh\"\n", - " },\n", - " \"arguments\": [\n", - " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", - " \"-f\",\n", - " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", - " ],\n", - " \"start_time_utc\": \"2023-07-03T15:24:53.927\"\n", - " },\n", - " \"input\": [],\n", - " \"output\": [],\n", - " \"config\": {\n", - " \"MyTool\": {\n", - " \"config_files\": [],\n", - " \"iterations\": 1,\n", - " \"log_config\": {},\n", - " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", - " \"log_file\": null,\n", - " \"log_file_level\": \"INFO\",\n", - " \"log_format\": \"%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s\",\n", - " \"log_level\": 0,\n", - " \"logging_config\": {},\n", - " \"overwrite\": false,\n", - " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", - " \"quiet\": false,\n", - " \"show_config\": false,\n", - " \"show_config_json\": false,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"SecondaryMyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"TelescopeWiseComponent\": {\n", - " \"param\": [\n", - " [\n", - " \"type\",\n", - " \"*\",\n", - " 5.0\n", - " ]\n", - " ]\n", - " },\n", - " \"AdvancedComponent\": {\n", - " \"infile\": \"/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst\",\n", - " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/out.csv\",\n", - " \"value1\": -1,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " }\n", - " }\n", - " }\n", - " },\n", - " \"status\": \"completed\",\n", - " \"duration_min\": 0.005199999999874194\n", - " },\n", - " {\n", - " \"activity_name\": \"mytool\",\n", - " \"activity_uuid\": \"837610ed-009c-4e8f-9770-cfb76ab71239\",\n", - " \"start\": {\n", - " \"time_utc\": \"2023-07-03T15:24:54.154\"\n", - " },\n", - " \"stop\": {\n", - " \"time_utc\": \"2023-07-03T15:24:54.854\"\n", - " },\n", - " \"system\": {\n", - " \"ctapipe_version\": \"0.19.1.dev27+g062fd966.d20230703\",\n", - " \"ctapipe_resources_version\": \"not installed\",\n", - " \"eventio_version\": \"1.11.0\",\n", - " \"ctapipe_svc_path\": null,\n", - " \"executable\": \"/home/aknierim/.local/conda/envs/cta-dev/bin/python\",\n", - " \"platform\": {\n", - " \"architecture_bits\": \"64bit\",\n", - " \"architecture_linkage\": \"ELF\",\n", - " \"machine\": \"x86_64\",\n", - " \"processor\": \"x86_64\",\n", - " \"node\": \"e5b-dell-09\",\n", - " \"version\": \"#47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 21 15:35:31 UTC 2\",\n", - " \"system\": \"Linux\",\n", - " \"release\": \"5.19.0-46-generic\",\n", - " \"libcver\": [\n", - " \"glibc\",\n", - " \"2.35\"\n", - " ],\n", - " \"n_cpus\": 12,\n", - " \"boot_time\": \"2023-07-03T07:18:46.000\"\n", - " },\n", - " \"python\": {\n", - " \"version_string\": \"3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:39:03) \\n[GCC 11.3.0]\",\n", - " \"version\": [\n", - " \"3\",\n", - " \"9\",\n", - " \"16\"\n", - " ],\n", - " \"compiler\": \"GCC 11.3.0\",\n", - " \"implementation\": \"CPython\",\n", - " \"packages\": [\n", - " {\n", - " \"name\": \"Babel\",\n", - " \"version\": \"2.12.1\"\n", - " },\n", - " {\n", - " \"name\": \"Cython\",\n", - " \"version\": \"0.29.34\"\n", - " },\n", - " {\n", - " \"name\": \"Jinja2\",\n", - " \"version\": \"3.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"MarkupSafe\",\n", - " \"version\": \"2.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"Pillow\",\n", - " \"version\": \"9.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5\",\n", - " \"version\": \"5.15.7\"\n", - " },\n", - " {\n", - " \"name\": \"PyQt5-sip\",\n", - " \"version\": \"12.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"PySocks\",\n", - " \"version\": \"1.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"PyYAML\",\n", - " \"version\": \"6.0\"\n", - " },\n", - " {\n", - " \"name\": \"Pygments\",\n", - " \"version\": \"2.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"QtPy\",\n", - " \"version\": \"2.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"Send2Trash\",\n", - " \"version\": \"1.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"Sphinx\",\n", - " \"version\": \"6.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"accessible-pygments\",\n", - " \"version\": \"0.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"alabaster\",\n", - " \"version\": \"0.7.13\"\n", - " },\n", - " {\n", - " \"name\": \"anyio\",\n", - " \"version\": \"3.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi\",\n", - " \"version\": \"21.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"argon2-cffi-bindings\",\n", - " \"version\": \"21.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"astropy\",\n", - " \"version\": \"5.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"asttokens\",\n", - " \"version\": \"2.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"async-lru\",\n", - " \"version\": \"2.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"attrs\",\n", - " \"version\": \"23.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"backcall\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"backports.functools-lru-cache\",\n", - " \"version\": \"1.6.4\"\n", - " },\n", - " {\n", - " \"name\": \"beautifulsoup4\",\n", - " \"version\": \"4.12.2\"\n", - " },\n", - " {\n", - " \"name\": \"black\",\n", - " \"version\": \"23.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"bleach\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"bokeh\",\n", - " \"version\": \"2.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"brotlipy\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"cached-property\",\n", - " \"version\": \"1.5.2\"\n", - " },\n", - " {\n", - " \"name\": \"certifi\",\n", - " \"version\": \"2023.5.7\"\n", - " },\n", - " {\n", - " \"name\": \"cffi\",\n", - " \"version\": \"1.15.1\"\n", - " },\n", - " {\n", - " \"name\": \"cfgv\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"charset-normalizer\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"click\",\n", - " \"version\": \"8.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"click-default-group\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"colorama\",\n", - " \"version\": \"0.4.6\"\n", - " },\n", - " {\n", - " \"name\": \"comm\",\n", - " \"version\": \"0.1.3\"\n", - " },\n", - " {\n", - " \"name\": \"contourpy\",\n", - " \"version\": \"1.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"corsikaio\",\n", - " \"version\": \"0.2.6.post1\"\n", - " },\n", - " {\n", - " \"name\": \"coverage\",\n", - " \"version\": \"7.2.5\"\n", - " },\n", - " {\n", - " \"name\": \"cryptography\",\n", - " \"version\": \"40.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"ctapipe\",\n", - " \"version\": \"0.19.1.dev27+g062fd966.d20230510\"\n", - " },\n", - " {\n", - " \"name\": \"cycler\",\n", - " \"version\": \"0.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"debugpy\",\n", - " \"version\": \"1.6.7\"\n", - " },\n", - " {\n", - " \"name\": \"decorator\",\n", - " \"version\": \"5.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"defusedxml\",\n", - " \"version\": \"0.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"distlib\",\n", - " \"version\": \"0.3.6\"\n", - " },\n", - " {\n", - " \"name\": \"docutils\",\n", - " \"version\": \"0.18.1\"\n", - " },\n", - " {\n", - " \"name\": \"entrypoints\",\n", - " \"version\": \"0.4\"\n", - " },\n", - " {\n", - " \"name\": \"eventio\",\n", - " \"version\": \"1.11.0\"\n", - " },\n", - " {\n", - " \"name\": \"exceptiongroup\",\n", - " \"version\": \"1.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"executing\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"fastjsonschema\",\n", - " \"version\": \"2.16.3\"\n", - " },\n", - " {\n", - " \"name\": \"filelock\",\n", - " \"version\": \"3.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"flit_core\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"fonttools\",\n", - " \"version\": \"4.39.3\"\n", - " },\n", - " {\n", - " \"name\": \"h5py\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"identify\",\n", - " \"version\": \"2.5.24\"\n", - " },\n", - " {\n", - " \"name\": \"idna\",\n", - " \"version\": \"3.4\"\n", - " },\n", - " {\n", - " \"name\": \"imagesize\",\n", - " \"version\": \"1.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"iminuit\",\n", - " \"version\": \"2.21.3\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-metadata\",\n", - " \"version\": \"6.6.0\"\n", - " },\n", - " {\n", - " \"name\": \"importlib-resources\",\n", - " \"version\": \"5.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"incremental\",\n", - " \"version\": \"22.10.0\"\n", - " },\n", - " {\n", - " \"name\": \"iniconfig\",\n", - " \"version\": \"2.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipykernel\",\n", - " \"version\": \"6.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipython\",\n", - " \"version\": \"8.13.2\"\n", - " },\n", - " {\n", - " \"name\": \"ipython-genutils\",\n", - " \"version\": \"0.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"ipywidgets\",\n", - " \"version\": \"8.0.6\"\n", - " },\n", - " {\n", - " \"name\": \"jedi\",\n", - " \"version\": \"0.18.2\"\n", - " },\n", - " {\n", - " \"name\": \"joblib\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"json5\",\n", - " \"version\": \"0.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"jsonschema\",\n", - " \"version\": \"4.17.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-console\",\n", - " \"version\": \"6.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-events\",\n", - " \"version\": \"0.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter-lsp\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_client\",\n", - " \"version\": \"8.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_core\",\n", - " \"version\": \"5.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server\",\n", - " \"version\": \"2.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"jupyter_server_terminals\",\n", - " \"version\": \"0.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab\",\n", - " \"version\": \"4.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-pygments\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab-widgets\",\n", - " \"version\": \"3.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"jupyterlab_server\",\n", - " \"version\": \"2.22.1\"\n", - " },\n", - " {\n", - " \"name\": \"kiwisolver\",\n", - " \"version\": \"1.4.4\"\n", - " },\n", - " {\n", - " \"name\": \"livereload\",\n", - " \"version\": \"2.6.3\"\n", - " },\n", - " {\n", - " \"name\": \"llvmlite\",\n", - " \"version\": \"0.39.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib\",\n", - " \"version\": \"3.7.1\"\n", - " },\n", - " {\n", - " \"name\": \"matplotlib-inline\",\n", - " \"version\": \"0.1.6\"\n", - " },\n", - " {\n", - " \"name\": \"mistune\",\n", - " \"version\": \"2.0.5\"\n", - " },\n", - " {\n", - " \"name\": \"munkres\",\n", - " \"version\": \"1.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"mypy-extensions\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclassic\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbclient\",\n", - " \"version\": \"0.7.4\"\n", - " },\n", - " {\n", - " \"name\": \"nbconvert\",\n", - " \"version\": \"7.4.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbformat\",\n", - " \"version\": \"5.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"nbsphinx\",\n", - " \"version\": \"0.9.1\"\n", - " },\n", - " {\n", - " \"name\": \"nest-asyncio\",\n", - " \"version\": \"1.5.6\"\n", - " },\n", - " {\n", - " \"name\": \"nodeenv\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"notebook\",\n", - " \"version\": \"6.5.4\"\n", - " },\n", - " {\n", - " \"name\": \"notebook_shim\",\n", - " \"version\": \"0.2.3\"\n", - " },\n", - " {\n", - " \"name\": \"numba\",\n", - " \"version\": \"0.56.4\"\n", - " },\n", - " {\n", - " \"name\": \"numexpr\",\n", - " \"version\": \"2.8.4\"\n", - " },\n", - " {\n", - " \"name\": \"numpy\",\n", - " \"version\": \"1.23.5\"\n", - " },\n", - " {\n", - " \"name\": \"numpydoc\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"packaging\",\n", - " \"version\": \"23.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandas\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"pandocfilters\",\n", - " \"version\": \"1.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"parso\",\n", - " \"version\": \"0.8.3\"\n", - " },\n", - " {\n", - " \"name\": \"pathspec\",\n", - " \"version\": \"0.11.1\"\n", - " },\n", - " {\n", - " \"name\": \"pexpect\",\n", - " \"version\": \"4.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"pickleshare\",\n", - " \"version\": \"0.7.5\"\n", - " },\n", - " {\n", - " \"name\": \"pip\",\n", - " \"version\": \"23.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pkgutil_resolve_name\",\n", - " \"version\": \"1.3.10\"\n", - " },\n", - " {\n", - " \"name\": \"platformdirs\",\n", - " \"version\": \"3.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"pluggy\",\n", - " \"version\": \"1.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"ply\",\n", - " \"version\": \"3.11\"\n", - " },\n", - " {\n", - " \"name\": \"pooch\",\n", - " \"version\": \"1.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pre-commit\",\n", - " \"version\": \"3.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"prometheus-client\",\n", - " \"version\": \"0.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"prompt-toolkit\",\n", - " \"version\": \"3.0.38\"\n", - " },\n", - " {\n", - " \"name\": \"psutil\",\n", - " \"version\": \"5.9.5\"\n", - " },\n", - " {\n", - " \"name\": \"ptyprocess\",\n", - " \"version\": \"0.7.0\"\n", - " },\n", - " {\n", - " \"name\": \"pure-eval\",\n", - " \"version\": \"0.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"py-cpuinfo\",\n", - " \"version\": \"9.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pyOpenSSL\",\n", - " \"version\": \"23.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"pycparser\",\n", - " \"version\": \"2.21\"\n", - " },\n", - " {\n", - " \"name\": \"pydata-sphinx-theme\",\n", - " \"version\": \"0.13.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyerfa\",\n", - " \"version\": \"2.0.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyparsing\",\n", - " \"version\": \"3.0.9\"\n", - " },\n", - " {\n", - " \"name\": \"pyrsistent\",\n", - " \"version\": \"0.19.3\"\n", - " },\n", - " {\n", - " \"name\": \"pytest\",\n", - " \"version\": \"7.3.1\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-astropy-header\",\n", - " \"version\": \"0.1.2\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-cov\",\n", - " \"version\": \"4.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"pytest-runner\",\n", - " \"version\": \"6.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"python-dateutil\",\n", - " \"version\": \"2.8.2\"\n", - " },\n", - " {\n", - " \"name\": \"python-json-logger\",\n", - " \"version\": \"2.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"pytz\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"pyzmq\",\n", - " \"version\": \"25.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"qtconsole\",\n", - " \"version\": \"5.4.3\"\n", - " },\n", - " {\n", - " \"name\": \"requests\",\n", - " \"version\": \"2.29.0\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3339-validator\",\n", - " \"version\": \"0.1.4\"\n", - " },\n", - " {\n", - " \"name\": \"rfc3986-validator\",\n", - " \"version\": \"0.1.1\"\n", - " },\n", - " {\n", - " \"name\": \"scikit-learn\",\n", - " \"version\": \"1.2.2\"\n", - " },\n", - " {\n", - " \"name\": \"scipy\",\n", - " \"version\": \"1.10.1\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools\",\n", - " \"version\": \"67.7.2\"\n", - " },\n", - " {\n", - " \"name\": \"setuptools-scm\",\n", - " \"version\": \"7.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"sip\",\n", - " \"version\": \"6.7.9\"\n", - " },\n", - " {\n", - " \"name\": \"six\",\n", - " \"version\": \"1.16.0\"\n", - " },\n", - " {\n", - " \"name\": \"sniffio\",\n", - " \"version\": \"1.3.0\"\n", - " },\n", - " {\n", - " \"name\": \"snowballstemmer\",\n", - " \"version\": \"2.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"soupsieve\",\n", - " \"version\": \"2.3.2.post1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-autobuild\",\n", - " \"version\": \"2021.3.14\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-automodapi\",\n", - " \"version\": \"0.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx-rtd-theme\",\n", - " \"version\": \"1.2.0\"\n", - " },\n", - " {\n", - " \"name\": \"sphinx_design\",\n", - " \"version\": \"0.4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-applehelp\",\n", - " \"version\": \"1.0.4\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-devhelp\",\n", - " \"version\": \"1.0.2\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-htmlhelp\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jquery\",\n", - " \"version\": \"4.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-jsmath\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-qthelp\",\n", - " \"version\": \"1.0.3\"\n", - " },\n", - " {\n", - " \"name\": \"sphinxcontrib-serializinghtml\",\n", - " \"version\": \"1.1.5\"\n", - " },\n", - " {\n", - " \"name\": \"stack-data\",\n", - " \"version\": \"0.6.2\"\n", - " },\n", - " {\n", - " \"name\": \"tables\",\n", - " \"version\": \"3.8.0\"\n", - " },\n", - " {\n", - " \"name\": \"terminado\",\n", - " \"version\": \"0.17.1\"\n", - " },\n", - " {\n", - " \"name\": \"threadpoolctl\",\n", - " \"version\": \"3.1.0\"\n", - " },\n", - " {\n", - " \"name\": \"tinycss2\",\n", - " \"version\": \"1.2.1\"\n", - " },\n", - " {\n", - " \"name\": \"toml\",\n", - " \"version\": \"0.10.2\"\n", - " },\n", - " {\n", - " \"name\": \"tomli\",\n", - " \"version\": \"2.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"tornado\",\n", - " \"version\": \"6.3\"\n", - " },\n", - " {\n", - " \"name\": \"towncrier\",\n", - " \"version\": \"22.12.0\"\n", - " },\n", - " {\n", - " \"name\": \"tqdm\",\n", - " \"version\": \"4.65.0\"\n", - " },\n", - " {\n", - " \"name\": \"traitlets\",\n", - " \"version\": \"5.9.0\"\n", - " },\n", - " {\n", - " \"name\": \"typing_extensions\",\n", - " \"version\": \"4.5.0\"\n", - " },\n", - " {\n", - " \"name\": \"tzdata\",\n", - " \"version\": \"2023.3\"\n", - " },\n", - " {\n", - " \"name\": \"ukkonen\",\n", - " \"version\": \"1.0.1\"\n", - " },\n", - " {\n", - " \"name\": \"unicodedata2\",\n", - " \"version\": \"15.0.0\"\n", - " },\n", - " {\n", - " \"name\": \"urllib3\",\n", - " \"version\": \"1.26.15\"\n", - " },\n", - " {\n", - " \"name\": \"virtualenv\",\n", - " \"version\": \"20.23.0\"\n", - " },\n", - " {\n", - " \"name\": \"wcwidth\",\n", - " \"version\": \"0.2.6\"\n", - " },\n", - " {\n", - " \"name\": \"webencodings\",\n", - " \"version\": \"0.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"websocket-client\",\n", - " \"version\": \"1.5.1\"\n", - " },\n", - " {\n", - " \"name\": \"wheel\",\n", - " \"version\": \"0.40.0\"\n", - " },\n", - " {\n", - " \"name\": \"widgetsnbextension\",\n", - " \"version\": \"4.0.7\"\n", - " },\n", - " {\n", - " \"name\": \"zipp\",\n", - " \"version\": \"3.15.0\"\n", - " },\n", - " {\n", - " \"name\": \"zstandard\",\n", - " \"version\": \"0.19.0\"\n", - " }\n", - " ]\n", - " },\n", - " \"environment\": {\n", - " \"CONDA_DEFAULT_ENV\": \"cta-dev\",\n", - " \"CONDA_PREFIX\": \"/home/aknierim/.local/conda/envs/cta-dev\",\n", - " \"CONDA_PYTHON_EXE\": \"/home/aknierim/.local/conda/bin/python\",\n", - " \"CONDA_EXE\": \"/home/aknierim/.local/conda/bin/conda\",\n", - " \"CONDA_PROMPT_MODIFIER\": \"(cta-dev) \",\n", - " \"CONDA_SHLVL\": \"1\",\n", - " \"PATH\": \"/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/home/aknierim/.local/conda/envs/cta-dev/bin:/home/aknierim/.local/conda/condabin:/home/aknierim/.codon/bin:/home/aknierim/.local/texlive/2022/bin/x86_64-linux:/home/aknierim/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin\",\n", - " \"LD_LIBRARY_PATH\": null,\n", - " \"DYLD_LIBRARY_PATH\": null,\n", - " \"USER\": \"aknierim\",\n", - " \"HOME\": \"/home/aknierim\",\n", - " \"SHELL\": \"/bin/zsh\"\n", - " },\n", - " \"arguments\": [\n", - " \"/home/aknierim/.local/conda/envs/cta-dev/lib/python3.9/site-packages/ipykernel_launcher.py\",\n", - " \"-f\",\n", - " \"/home/aknierim/.local/share/jupyter/runtime/kernel-8df72055-1d05-4a90-8466-961002b0e8ef.json\"\n", - " ],\n", - " \"start_time_utc\": \"2023-07-03T15:24:54.328\"\n", - " },\n", - " \"input\": [\n", - " {\n", - " \"url\": \"/home/aknierim/dev/ctapipe/docs/examples/Tools.json\",\n", - " \"role\": \"Tool Configuration\"\n", - " }\n", - " ],\n", - " \"output\": [],\n", - " \"config\": {\n", - " \"MyTool\": {\n", - " \"config_files\": [\n", - " \"/home/aknierim/dev/ctapipe/docs/examples/Tools.json\"\n", - " ],\n", - " \"iterations\": 5,\n", - " \"log_config\": {},\n", - " \"log_datefmt\": \"%Y-%m-%d %H:%M:%S\",\n", - " \"log_file\": null,\n", - " \"log_file_level\": \"INFO\",\n", - " \"log_format\": \"[%(name)s]%(highlevel)s %(message)s\",\n", - " \"log_level\": 10,\n", - " \"logging_config\": {},\n", - " \"overwrite\": false,\n", - " \"provenance_log\": \"/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log\",\n", - " \"quiet\": false,\n", - " \"show_config\": false,\n", - " \"show_config_json\": false,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"SecondaryMyComponent\": {\n", - " \"value\": -1\n", - " },\n", - " \"TelescopeWiseComponent\": {\n", - " \"param\": [\n", - " [\n", - " \"type\",\n", - " \"*\",\n", - " 5.0\n", - " ]\n", - " ]\n", - " },\n", - " \"AdvancedComponent\": {\n", - " \"infile\": \"/home/aknierim/dev/ctapipe/docs/examples/something.txt\",\n", - " \"outfile\": \"/home/aknierim/dev/ctapipe/docs/examples/foo.txt\",\n", - " \"value1\": -1,\n", - " \"MyComponent\": {\n", - " \"value\": -1\n", - " }\n", - " }\n", - " }\n", - " },\n", - " \"status\": \"completed\",\n", - " \"duration_min\": 0.01166666666650329\n", - " }\n", - "]'\n", - "2023-07-03 17:24:54,902 \u001b[1;34mDEBUG\u001b[0m [__main__.mytool] (application.exit): Exiting application: mytool\n" - ] - } - ], + "outputs": [], "source": [ "try:\n", " tool2.run(argv=[\"--config\", \"Tools.json\"])\n", @@ -8136,61 +455,34 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/aknierim/dev/ctapipe/docs/examples/something.txt\n" - ] - } - ], + "outputs": [], "source": [ "print(tool2.advanced.infile)" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'MyTool': {'config_files': ['Tools.json'], 'log_level': 'DEBUG'}, 'AdvancedComponent': {'infile': 'something.txt', 'outfile': 'foo.txt'}}\n" - ] - } - ], + "outputs": [], "source": [ "print(tool2.config)" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tool2.is_setup" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -8199,27 +491,16 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tool3.is_setup" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -8228,283 +509,27 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tool3.is_setup" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "MyTool\n", - "

\n", - "

do some things and stuff

\n", - "
\n", - "

\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - "
config_files[] (default: traitlets.Undefined)
iterations5Number of times to run (default: 5)
log_config{} (default: traitlets.Undefined)
log_datefmt%Y-%m-%d %H:%M:%SThe date format used by logging formatters for %(asctime)s (default: %Y-%m-%d %H:%M:%S)
log_fileNoneFilename for the log (default: None)
log_file_levelINFOLogging Level for File Logging (default: INFO)
log_format[%(name)s]%(highlevel)s %(message)sThe Logging format template (default: [%(name)s]%(highlevel)s %(message)s)
log_level30Set the log level by value or name. (default: 30)
logging_config{}\n", - " Configure additional log handlers.\n", - "\n", - " The default stderr logs handler is configured by the\n", - " log_level, log_datefmt and log_format settings.\n", - "\n", - " This configuration can be used to configure additional handlers\n", - " (e.g. to output the log to a file) or for finer control over the\n", - " default handlers.\n", - "\n", - " If provided this should be a logging configuration dictionary, for\n", - " more information see:\n", - " https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\n", - "\n", - " This dictionary is merged with the base logging configuration which\n", - " defines the following:\n", - "\n", - " * A logging formatter intended for interactive use called\n", - " ``console``.\n", - " * A logging handler that writes to stderr called\n", - " ``console`` which uses the formatter ``console``.\n", - " * A logger with the name of this application set to ``DEBUG``\n", - " level.\n", - "\n", - " This example adds a new handler that writes to a file:\n", - "\n", - " .. code-block:: python\n", - "\n", - " c.Application.logging_config = {\n", - " 'handlers': {\n", - " 'file': {\n", - " 'class': 'logging.FileHandler',\n", - " 'level': 'DEBUG',\n", - " 'filename': '',\n", - " }\n", - " },\n", - " 'loggers': {\n", - " '': {\n", - " 'level': 'DEBUG',\n", - " # NOTE: if you don't list the default \"console\"\n", - " # handler here then it will be disabled\n", - " 'handlers': ['console', 'file'],\n", - " },\n", - " }\n", - " }\n", - "\n", - " (default: traitlets.Undefined)
overwriteFalse (default: False)
provenance_log/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log (default: traitlets.Undefined)
quietFalse (default: False)
show_configFalseInstead of starting the Application, dump configuration to stdout (default: False)
show_config_jsonFalseInstead of starting the Application, dump configuration to stdout (as JSON) (default: False)
\n", - "

Components:\n", - "MyTool, MyComponent, AdvancedComponent, SecondaryMyComponent, TelescopeWiseComponent\n", - "

\n", - "" - ], - "text/plain": [ - "<__main__.MyTool at 0x7fa1985c6610>" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tool3" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2023-07-03 17:24:55,026 \u001b[1;33mWARNING\u001b[0m [__main__.mytool.AdvancedComponent] (2562530776.on_outfile_changed): Outfile was changed to '{'name': 'outfile', 'old': traitlets.Undefined, 'new': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'), 'owner': <__main__.AdvancedComponent object at 0x7fa1704f4250>, 'type': 'change'}'\n" - ] - }, - { - "data": { - "text/html": [ - "MyTool\n", - "

\n", - "

do some things and stuff

\n", - "
\n", - "

\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - "
config_files[] (default: traitlets.Undefined)
iterations1Number of times to run (default: 5)
log_config{} (default: traitlets.Undefined)
log_datefmt%Y-%m-%d %H:%M:%SThe date format used by logging formatters for %(asctime)s (default: %Y-%m-%d %H:%M:%S)
log_fileNoneFilename for the log (default: None)
log_file_levelINFOLogging Level for File Logging (default: INFO)
log_format%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)sThe Logging format template (default: [%(name)s]%(highlevel)s %(message)s)
log_level0Set the log level by value or name. (default: 30)
logging_config{}\n", - " Configure additional log handlers.\n", - "\n", - " The default stderr logs handler is configured by the\n", - " log_level, log_datefmt and log_format settings.\n", - "\n", - " This configuration can be used to configure additional handlers\n", - " (e.g. to output the log to a file) or for finer control over the\n", - " default handlers.\n", - "\n", - " If provided this should be a logging configuration dictionary, for\n", - " more information see:\n", - " https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\n", - "\n", - " This dictionary is merged with the base logging configuration which\n", - " defines the following:\n", - "\n", - " * A logging formatter intended for interactive use called\n", - " ``console``.\n", - " * A logging handler that writes to stderr called\n", - " ``console`` which uses the formatter ``console``.\n", - " * A logger with the name of this application set to ``DEBUG``\n", - " level.\n", - "\n", - " This example adds a new handler that writes to a file:\n", - "\n", - " .. code-block:: python\n", - "\n", - " c.Application.logging_config = {\n", - " 'handlers': {\n", - " 'file': {\n", - " 'class': 'logging.FileHandler',\n", - " 'level': 'DEBUG',\n", - " 'filename': '',\n", - " }\n", - " },\n", - " 'loggers': {\n", - " '': {\n", - " 'level': 'DEBUG',\n", - " # NOTE: if you don't list the default \"console\"\n", - " # handler here then it will be disabled\n", - " 'handlers': ['console', 'file'],\n", - " },\n", - " }\n", - " }\n", - "\n", - " (default: traitlets.Undefined)
overwriteFalse (default: False)
provenance_log/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log (default: traitlets.Undefined)
quietFalse (default: False)
show_configFalseInstead of starting the Application, dump configuration to stdout (default: False)
show_config_jsonFalseInstead of starting the Application, dump configuration to stdout (as JSON) (default: False)
\n", - "

Components:\n", - "MyTool, MyComponent, AdvancedComponent, SecondaryMyComponent, TelescopeWiseComponent\n", - "

\n", - "" - ], - "text/plain": [ - "<__main__.MyTool at 0x7fa170490cd0>" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tool.setup()\n", "tool" @@ -8512,41 +537,9 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "SecondaryMyComponent\n", - "

\n", - "

A second component

\n", - "
\n", - "

\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - "
value-1Value to use (default: -1)
\n", - "
" - ], - "text/plain": [ - "<__main__.SecondaryMyComponent at 0x7fa1704f4a00>" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tool.comp2" ] @@ -8560,84 +553,18 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'MyTool': {'config_files': [],\n", - " 'iterations': 1,\n", - " 'log_config': {},\n", - " 'log_datefmt': '%Y-%m-%d %H:%M:%S',\n", - " 'log_file': None,\n", - " 'log_file_level': 'INFO',\n", - " 'log_format': '%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s',\n", - " 'log_level': 0,\n", - " 'logging_config': {},\n", - " 'overwrite': False,\n", - " 'provenance_log': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log'),\n", - " 'quiet': False,\n", - " 'show_config': False,\n", - " 'show_config_json': False,\n", - " 'MyComponent': {'value': -1},\n", - " 'SecondaryMyComponent': {'value': -1},\n", - " 'TelescopeWiseComponent': {'param': TelescopePatternList([('type',\n", - " '*',\n", - " 5.0)])},\n", - " 'AdvancedComponent': {'infile': PosixPath('/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst'),\n", - " 'outfile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'),\n", - " 'value1': -1,\n", - " 'MyComponent': {'value': -1}}}}" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tool.get_current_config()" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'MyTool': {'config_files': [],\n", - " 'iterations': 12,\n", - " 'log_config': {},\n", - " 'log_datefmt': '%Y-%m-%d %H:%M:%S',\n", - " 'log_file': None,\n", - " 'log_file_level': 'INFO',\n", - " 'log_format': '%(asctime)s : %(levelname)s [%(name)s %(funcName)s] %(message)s',\n", - " 'log_level': 0,\n", - " 'logging_config': {},\n", - " 'overwrite': False,\n", - " 'provenance_log': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/mytool.provenance.log'),\n", - " 'quiet': False,\n", - " 'show_config': False,\n", - " 'show_config_json': False,\n", - " 'MyComponent': {'value': -1},\n", - " 'SecondaryMyComponent': {'value': -1},\n", - " 'TelescopeWiseComponent': {'param': TelescopePatternList([('type',\n", - " '*',\n", - " 5.0)])},\n", - " 'AdvancedComponent': {'infile': PosixPath('/home/aknierim/.cache/ctapipe/cccta-dataserver.in2p3.fr/data/ctapipe-test-data/v1.1.0/gamma_prod5.simtel.zst'),\n", - " 'outfile': PosixPath('/home/aknierim/dev/ctapipe/docs/examples/out.csv'),\n", - " 'value1': -1,\n", - " 'MyComponent': {'value': -1}}}}" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tool.iterations = 12\n", "tool.get_current_config()" @@ -8652,244 +579,9 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "# Configuration file for mytool.\n", - "\n", - "c = get_config() #noqa\n", - "\n", - "#------------------------------------------------------------------------------\n", - "# Application(SingletonConfigurable) configuration\n", - "#------------------------------------------------------------------------------\n", - "## This is an application.\n", - "\n", - "## The date format used by logging formatters for %(asctime)s\n", - "# Default: '%Y-%m-%d %H:%M:%S'\n", - "# c.Application.log_datefmt = '%Y-%m-%d %H:%M:%S'\n", - "\n", - "## The Logging format template\n", - "# Default: '[%(name)s]%(highlevel)s %(message)s'\n", - "# c.Application.log_format = '[%(name)s]%(highlevel)s %(message)s'\n", - "\n", - "## Set the log level by value or name.\n", - "# Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", - "# Default: 30\n", - "# c.Application.log_level = 30\n", - "\n", - "## Configure additional log handlers.\n", - "# \n", - "# The default stderr logs handler is configured by the log_level, log_datefmt\n", - "# and log_format settings.\n", - "# \n", - "# This configuration can be used to configure additional handlers (e.g. to\n", - "# output the log to a file) or for finer control over the default handlers.\n", - "# \n", - "# If provided this should be a logging configuration dictionary, for more\n", - "# information see:\n", - "# https://docs.python.org/3/library/logging.config.html#logging-config-\n", - "# dictschema\n", - "# \n", - "# This dictionary is merged with the base logging configuration which defines\n", - "# the following:\n", - "# \n", - "# * A logging formatter intended for interactive use called\n", - "# ``console``.\n", - "# * A logging handler that writes to stderr called\n", - "# ``console`` which uses the formatter ``console``.\n", - "# * A logger with the name of this application set to ``DEBUG``\n", - "# level.\n", - "# \n", - "# This example adds a new handler that writes to a file:\n", - "# \n", - "# .. code-block:: python\n", - "# \n", - "# c.Application.logging_config = {\n", - "# 'handlers': {\n", - "# 'file': {\n", - "# 'class': 'logging.FileHandler',\n", - "# 'level': 'DEBUG',\n", - "# 'filename': '',\n", - "# }\n", - "# },\n", - "# 'loggers': {\n", - "# '': {\n", - "# 'level': 'DEBUG',\n", - "# # NOTE: if you don't list the default \"console\"\n", - "# # handler here then it will be disabled\n", - "# 'handlers': ['console', 'file'],\n", - "# },\n", - "# }\n", - "# }\n", - "# Default: {}\n", - "# c.Application.logging_config = {}\n", - "\n", - "## Instead of starting the Application, dump configuration to stdout\n", - "# Default: False\n", - "# c.Application.show_config = False\n", - "\n", - "## Instead of starting the Application, dump configuration to stdout (as JSON)\n", - "# Default: False\n", - "# c.Application.show_config_json = False\n", - "\n", - "#------------------------------------------------------------------------------\n", - "# Tool(Application) configuration\n", - "#------------------------------------------------------------------------------\n", - "## This is an application.\n", - "\n", - "# Default: []\n", - "# c.Tool.config_files = []\n", - "\n", - "# Default: {}\n", - "# c.Tool.log_config = {}\n", - "\n", - "## The date format used by logging formatters for %(asctime)s\n", - "# See also: Application.log_datefmt\n", - "# c.Tool.log_datefmt = '%Y-%m-%d %H:%M:%S'\n", - "\n", - "## Filename for the log\n", - "# Default: None\n", - "# c.Tool.log_file = None\n", - "\n", - "## Logging Level for File Logging\n", - "# Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']\n", - "# Default: 'INFO'\n", - "# c.Tool.log_file_level = 'INFO'\n", - "\n", - "## The Logging format template\n", - "# See also: Application.log_format\n", - "# c.Tool.log_format = '[%(name)s]%(highlevel)s %(message)s'\n", - "\n", - "## Set the log level by value or name.\n", - "# See also: Application.log_level\n", - "# c.Tool.log_level = 30\n", - "\n", - "## \n", - "# See also: Application.logging_config\n", - "# c.Tool.logging_config = {}\n", - "\n", - "# Default: False\n", - "# c.Tool.overwrite = False\n", - "\n", - "# Default: traitlets.Undefined\n", - "# c.Tool.provenance_log = traitlets.Undefined\n", - "\n", - "# Default: False\n", - "# c.Tool.quiet = False\n", - "\n", - "## Instead of starting the Application, dump configuration to stdout\n", - "# See also: Application.show_config\n", - "# c.Tool.show_config = False\n", - "\n", - "## Instead of starting the Application, dump configuration to stdout (as JSON)\n", - "# See also: Application.show_config_json\n", - "# c.Tool.show_config_json = False\n", - "\n", - "#------------------------------------------------------------------------------\n", - "# MyTool(Tool) configuration\n", - "#------------------------------------------------------------------------------\n", - "# See also: Tool.config_files\n", - "# c.MyTool.config_files = []\n", - "\n", - "## Number of times to run\n", - "# Default: 5\n", - "# c.MyTool.iterations = 5\n", - "\n", - "# See also: Tool.log_config\n", - "# c.MyTool.log_config = {}\n", - "\n", - "## The date format used by logging formatters for %(asctime)s\n", - "# See also: Application.log_datefmt\n", - "# c.MyTool.log_datefmt = '%Y-%m-%d %H:%M:%S'\n", - "\n", - "## Filename for the log\n", - "# See also: Tool.log_file\n", - "# c.MyTool.log_file = None\n", - "\n", - "## Logging Level for File Logging\n", - "# See also: Tool.log_file_level\n", - "# c.MyTool.log_file_level = 'INFO'\n", - "\n", - "## The Logging format template\n", - "# See also: Application.log_format\n", - "# c.MyTool.log_format = '[%(name)s]%(highlevel)s %(message)s'\n", - "\n", - "## Set the log level by value or name.\n", - "# See also: Application.log_level\n", - "# c.MyTool.log_level = 30\n", - "\n", - "## \n", - "# See also: Application.logging_config\n", - "# c.MyTool.logging_config = {}\n", - "\n", - "# See also: Tool.overwrite\n", - "# c.MyTool.overwrite = False\n", - "\n", - "# See also: Tool.provenance_log\n", - "# c.MyTool.provenance_log = traitlets.Undefined\n", - "\n", - "# See also: Tool.quiet\n", - "# c.MyTool.quiet = False\n", - "\n", - "## Instead of starting the Application, dump configuration to stdout\n", - "# See also: Application.show_config\n", - "# c.MyTool.show_config = False\n", - "\n", - "## Instead of starting the Application, dump configuration to stdout (as JSON)\n", - "# See also: Application.show_config_json\n", - "# c.MyTool.show_config_json = False\n", - "\n", - "#------------------------------------------------------------------------------\n", - "# MyComponent(Component) configuration\n", - "#------------------------------------------------------------------------------\n", - "## A Component that does stuff\n", - "\n", - "## Value to use\n", - "# Default: -1\n", - "# c.MyComponent.value = -1\n", - "\n", - "#------------------------------------------------------------------------------\n", - "# AdvancedComponent(Component) configuration\n", - "#------------------------------------------------------------------------------\n", - "## An advanced technique\n", - "\n", - "## input file name\n", - "# Default: traitlets.Undefined\n", - "# c.AdvancedComponent.infile = traitlets.Undefined\n", - "\n", - "## output file name\n", - "# Default: traitlets.Undefined\n", - "# c.AdvancedComponent.outfile = traitlets.Undefined\n", - "\n", - "## Value to use\n", - "# Default: -1\n", - "# c.AdvancedComponent.value1 = -1\n", - "\n", - "#------------------------------------------------------------------------------\n", - "# SecondaryMyComponent(MyComponent) configuration\n", - "#------------------------------------------------------------------------------\n", - "## A second component\n", - "\n", - "## Value to use\n", - "# See also: MyComponent.value\n", - "# c.SecondaryMyComponent.value = -1\n", - "\n", - "#------------------------------------------------------------------------------\n", - "# TelescopeWiseComponent(TelescopeComponent) configuration\n", - "#------------------------------------------------------------------------------\n", - "## a component that contains parameters that are per-telescope configurable\n", - "\n", - "## Something configurable with telescope patterns.\n", - "# Default: [('type', '*', 5.0)]\n", - "# c.TelescopeWiseComponent.param = [('type', '*', 5.0)]\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "print(tool.generate_config_file())" ] From 4f5f051c1c7137442a35c3496dc0b9c1abaf4013 Mon Sep 17 00:00:00 2001 From: Maximilian Linhoff Date: Mon, 17 Jul 2023 13:05:15 +0200 Subject: [PATCH 27/37] Fix add_css_file call in docs/conf.py --- docs/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 6c41637ed84..8b0c35f29be 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -68,11 +68,11 @@ def setup(app): + app.add_css_file("ctapipe.css") + # fix trait aliases generating doc warnings from ctapipe.core import traits - app.add_css_file("_static/ctapipe.css") - aliases = [ "flag", "observe", From 63b9e63ced2aaa5e01ddc2edb9bc92dc7f9859f0 Mon Sep 17 00:00:00 2001 From: Maximilian Linhoff Date: Mon, 17 Jul 2023 13:05:45 +0200 Subject: [PATCH 28/37] Fix Tool repr_html and add html escaping --- ctapipe/core/component.py | 15 +++++++++------ ctapipe/core/tool.py | 10 +++++++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/ctapipe/core/component.py b/ctapipe/core/component.py index cbfc05b2584..b3b5b91a733 100644 --- a/ctapipe/core/component.py +++ b/ctapipe/core/component.py @@ -1,4 +1,5 @@ """ Class to handle configuration for algorithms """ +import html import warnings import weakref from abc import ABCMeta @@ -235,7 +236,7 @@ def _repr_html_(self): lines = [ '
', f"{name}", - f"

{docstring}

", + docstring, "", " ", " ", @@ -246,21 +247,23 @@ def _repr_html_(self): ] for key, val in self.get_current_config()[name].items(): htmlval = ( - str(val).replace("/", "/").replace("_", "_") + html.escape(str(val)).replace("/", "/").replace("_", "_") ) # allow breaking at boundary # traits of the current component if key in traits: - thehelp = f"{traits[key].help} (default: {traits[key].default_value})" + thehelp = html.escape( + f"{traits[key].help} (default: {traits[key].default_value})" + ) lines.append(f"") if val != traits[key].default_value: lines.append( - f"" + f'' ) else: - lines.append(f"") + lines.append(f'') lines.append( - f"" + f'' ) lines.append(" ") lines.append("
{key}{htmlval}{htmlval}{htmlval}{htmlval}{thehelp}
{thehelp}
") diff --git a/ctapipe/core/tool.py b/ctapipe/core/tool.py index 5f6744d2c95..5d28c1585a3 100644 --- a/ctapipe/core/tool.py +++ b/ctapipe/core/tool.py @@ -1,4 +1,5 @@ """Classes to handle configurable command-line user interfaces.""" +import html import logging import logging.config import os @@ -495,8 +496,9 @@ def _repr_html_(self): or "Undocumented" ) lines = [ + '
', f"{name}", - f"

{docstring}

", + docstring, "", " ", " ", @@ -507,12 +509,14 @@ def _repr_html_(self): ] for key, val in self.get_current_config()[name].items(): htmlval = ( - str(val).replace("/", "/").replace("_", "_") + html.escape(str(val)).replace("/", "/").replace("_", "_") ) # allow breaking at boundary # traits of the current component if key in traits: - thehelp = f"{traits[key].help} (default: {traits[key].default_value})" + thehelp = html.escape( + f"{traits[key].help} (default: {traits[key].default_value})" + ) lines.append(f"") if val != traits[key].default_value: lines.append( From beb5fadd56f43a708c6f05ba0f2cda321864b590 Mon Sep 17 00:00:00 2001 From: Maximilian Linhoff Date: Mon, 17 Jul 2023 13:09:22 +0200 Subject: [PATCH 29/37] Simplify __init__.py --- ctapipe/calib/camera/__init__.py | 10 ++++------ ctapipe/instrument/camera/__init__.py | 16 ++++++++-------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/ctapipe/calib/camera/__init__.py b/ctapipe/calib/camera/__init__.py index b71a6d469c8..b5b41267892 100644 --- a/ctapipe/calib/camera/__init__.py +++ b/ctapipe/calib/camera/__init__.py @@ -6,9 +6,7 @@ from .calibrator import CameraCalibrator # noqa: F401 from .gainselection import GainSelector # noqa: F401 -# __all__ = [ -# "CameraCalibrator", -# "GainSelector", -# ] - -__all__ = [] +__all__ = [ + # "CameraCalibrator", + # "GainSelector", +] diff --git a/ctapipe/instrument/camera/__init__.py b/ctapipe/instrument/camera/__init__.py index 43a0644f6f9..e64c4e0db10 100644 --- a/ctapipe/instrument/camera/__init__.py +++ b/ctapipe/instrument/camera/__init__.py @@ -2,11 +2,11 @@ from .geometry import CameraGeometry, PixelShape, UnknownPixelShapeWarning # noqa: F401 from .readout import CameraReadout # noqa: F401 -# __all__ = [ -# "CameraDescription", -# "CameraGeometry", -# "PixelShape", -# "UnknownPixelShapeWarning", -# "CameraReadout", -# ] -__all__ = [] +# commented out due to sphinx issue with classes being defined in 3 places +__all__ = [ + # "CameraDescription", + # "CameraGeometry", + # "PixelShape", + # "UnknownPixelShapeWarning", + # "CameraReadout", +] From 02798cb1a13305af15f449cc7f43545b79c6eb44 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Mon, 17 Jul 2023 14:55:52 +0200 Subject: [PATCH 30/37] Remove version switcher from navbar * Remove version switcher since it needs to be updated by hand every time a new version is released * Remove now-obsolete ``docs/_static/switcher.json`` * Remove ``jinja2`` dependency from ``environment.yml`` --- docs/_static/switcher.json | 72 -------------------------------------- docs/conf.py | 32 +---------------- environment.yml | 1 - 3 files changed, 1 insertion(+), 104 deletions(-) delete mode 100644 docs/_static/switcher.json diff --git a/docs/_static/switcher.json b/docs/_static/switcher.json deleted file mode 100644 index 59a6b3a5637..00000000000 --- a/docs/_static/switcher.json +++ /dev/null @@ -1,72 +0,0 @@ -[ - { - "name": "dev", - "version": "latest", - "url": "https://ctapipe.readthedocs.io/en/latest/" - }, - { - "name": "v0.19.2 (stable)", - "version": "stable", - "url": "https://ctapipe.readthedocs.io/en/stable/" - }, - { - "name": "v0.19.3", - "version": "v0.19.3", - "url": "https://ctapipe.readthedocs.io/en/v0.19.3/" - }, - { - "name": "v0.19.2", - "version": "v0.19.2", - "url": "https://ctapipe.readthedocs.io/en/v0.19.2/" - }, - { - "name": "v0.19.1", - "version": "v0.19.1", - "url": "https://ctapipe.readthedocs.io/en/v0.19.1/" - }, - { - "name": "v0.19.0", - "version": "v0.19.0", - "url": "https://ctapipe.readthedocs.io/en/v0.19.0/" - }, - { - "name": "v0.18.1", - "version": "v0.18.1", - "url": "https://ctapipe.readthedocs.io/en/v0.18.1/" - }, - { - "name": "v0.18.0", - "version": "v0.18.0", - "url": "https://ctapipe.readthedocs.io/en/v0.18.0/" - }, - { - "name": "v0.17.0", - "version": "v0.17.0", - "url": "https://ctapipe.readthedocs.io/en/v0.17.0/" - }, - { - "name": "v0.16.0", - "version": "v0.16.0", - "url": "https://ctapipe.readthedocs.io/en/v0.16.0/" - }, - { - "name": "v0.15.0", - "version": "v0.15.0", - "url": "https://ctapipe.readthedocs.io/en/v0.15.0/" - }, - { - "name": "v0.14.0", - "version": "v0.14.0", - "url": "https://ctapipe.readthedocs.io/en/v0.14.0/" - }, - { - "name": "v0.12.0-rtd", - "version": "v0.12.0-rtd", - "url": "https://ctapipe.readthedocs.io/en/v0.12.0-rtd/" - }, - { - "name": "v0.11.0-rtd", - "version": "v0.11.0-rtd", - "url": "https://ctapipe.readthedocs.io/en/v0.11.0-rtd/" - } -] diff --git a/docs/conf.py b/docs/conf.py index 8b0c35f29be..013d99135dc 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -190,32 +190,8 @@ def setup(app): todo_include_todos = True -# -- Version switcher ----------------------------------------------------- - -# Define the json_url for our version switcher. -json_url = "https://ctapipe.readthedocs.io/en/latest/_static/switcher.json" - -# Define the version we use for matching in the version switcher. -version_match = os.environ.get("READTHEDOCS_VERSION") -# If READTHEDOCS_VERSION doesn't exist, we're not on RTD -# If it is an integer, we're in a PR build and the version isn't correct. -if not version_match or version_match.isdigit(): - # For local development, infer the version to match from the package. - release = ctapipe.__version__ - if "dev" in release or "rc" in release: - version_match = "latest" - # We want to keep the relative reference if we are in dev mode - # but we want the whole url if we are effectively in a released version - json_url = "_static/switcher.json" - else: - version_match = release - - # -- Options for HTML output ---------------------------------------------- -# on_rtd is whether we are on readthedocs.org -on_rtd = os.environ.get("READTHEDOCS", None) == "True" - html_theme = "pydata_sphinx_theme" @@ -224,7 +200,6 @@ def setup(app): # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -# html_theme_options = { "logo": { "image_light": "ctapipe_logo.webp", @@ -233,11 +208,7 @@ def setup(app): }, "github_url": "https://github.com/cta-observatory/ctapipe", "header_links_before_dropdown": 6, - "navbar_start": ["navbar-logo", "version-switcher"], - "switcher": { - "version_match": version_match, - "json_url": json_url, - }, + "navbar_start": ["navbar-logo"], "use_edit_page_button": True, "icon_links": [ { @@ -253,7 +224,6 @@ def setup(app): # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -# html_static_path = ['_static'] html_static_path = ["_static"] html_context = { "default_mode": "light", diff --git a/environment.yml b/environment.yml index bbc3bad0b47..99abfdd296c 100644 --- a/environment.yml +++ b/environment.yml @@ -48,5 +48,4 @@ dependencies: - zlib - zstandard - eventio>=1.9.1 - - jinja2 - ffmpeg # for making movies in the documentation From a089c49abcb60e6ed9f76a79c306ea69dc3eec0f Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Mon, 17 Jul 2023 15:48:56 +0200 Subject: [PATCH 31/37] Add sidebar to all pages --- docs/conf.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index 013d99135dc..8c36fd896ae 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -220,6 +220,10 @@ def setup(app): ], } +html_sidebars = { + "**": ["sidebar-nav-bs.html", "sidebar-ethical-ads.html"] +} + # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, From 61547d2747afb2513a5e0180a79406cf534f843c Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Mon, 17 Jul 2023 16:00:28 +0200 Subject: [PATCH 32/37] Fix for failed CI/lint --- docs/conf.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 8c36fd896ae..c6121f5717b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -220,9 +220,7 @@ def setup(app): ], } -html_sidebars = { - "**": ["sidebar-nav-bs.html", "sidebar-ethical-ads.html"] -} +html_sidebars = {"**": ["sidebar-nav-bs.html", "sidebar-ethical-ads.html"]} # Add any paths that contain custom static files (such as style sheets) here, From 22d20622ead385fea7d7c08e582f6b91e1f8b42c Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 18 Jul 2023 17:52:05 +0200 Subject: [PATCH 33/37] Move content of caution admonition to announcement banner * Move content of caution admonition block to announcement banner, as this results in a cleaner main page * Remove ``html_sidebars`` for testing purposes --- docs/conf.py | 9 ++++++--- docs/index.rst | 6 ------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index c6121f5717b..5110db2d486 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -210,6 +210,7 @@ def setup(app): "header_links_before_dropdown": 6, "navbar_start": ["navbar-logo"], "use_edit_page_button": True, + "icon_links_label": "Quick Links", "icon_links": [ { "name": "CTA Observatory", @@ -218,11 +219,13 @@ def setup(app): "icon": "https://www.cta-observatory.org/wp-content/themes/ctao/favicon.ico", }, ], + "announcement": """ +

ctapipe is not stable yet, so expect large and rapid + changes to structure and functionality as we explore various + design choices before the 1.0 release.

+ """, } -html_sidebars = {"**": ["sidebar-nav-bs.html", "sidebar-ethical-ads.html"]} - - # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". diff --git a/docs/index.rst b/docs/index.rst index 6485c01d5b3..84dec76af64 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -40,12 +40,6 @@ Prototype CTA Pipeline Framework (``ctapipe``) ``ctapipe`` is a framework for prototyping the low-level data processing algorithms for the Cherenkov Telescope Array. -.. CAUTION:: - This is not yet stable code, so expect large and rapid changes to - structure and functionality as we explore various design choices before - the 1.0 release. - - .. _ctapipe_docs: .. toctree:: From 2a6b6edb72df2c7bfb9ff519421ba714624d7baf Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 18 Jul 2023 18:34:37 +0200 Subject: [PATCH 34/37] Add sphinx conf path to .readthedocs.yml --- .readthedocs.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.readthedocs.yml b/.readthedocs.yml index 98b2982554b..ca08d556fa9 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -8,6 +8,9 @@ build: tools: python: "3.8" +sphinx: + configuration: docs/conf.py + python: install: - method: pip From 854a84e6aa38d875f98de8e0bd99c172cb5d3f9b Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 18 Jul 2023 18:51:17 +0200 Subject: [PATCH 35/37] Add sidebars again At least we have a version switcher for now --- .readthedocs.yml | 3 --- docs/conf.py | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index ca08d556fa9..98b2982554b 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -8,9 +8,6 @@ build: tools: python: "3.8" -sphinx: - configuration: docs/conf.py - python: install: - method: pip diff --git a/docs/conf.py b/docs/conf.py index 5110db2d486..3c493c6920d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -226,6 +226,8 @@ def setup(app): """, } +html_sidebars = {"**": ["sidebar-nav-bs.html", "sidebar-ethical-ads.html"]} + # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". From c782ba0303356013abd88680ccdf386b502234f1 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Wed, 19 Jul 2023 14:17:23 +0200 Subject: [PATCH 36/37] Add navbar version switcher --- docs/_static/switcher.json | 72 ++++++++++++++++++++++++++++++++++++++ docs/conf.py | 28 +++++++++++++-- 2 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 docs/_static/switcher.json diff --git a/docs/_static/switcher.json b/docs/_static/switcher.json new file mode 100644 index 00000000000..59a6b3a5637 --- /dev/null +++ b/docs/_static/switcher.json @@ -0,0 +1,72 @@ +[ + { + "name": "dev", + "version": "latest", + "url": "https://ctapipe.readthedocs.io/en/latest/" + }, + { + "name": "v0.19.2 (stable)", + "version": "stable", + "url": "https://ctapipe.readthedocs.io/en/stable/" + }, + { + "name": "v0.19.3", + "version": "v0.19.3", + "url": "https://ctapipe.readthedocs.io/en/v0.19.3/" + }, + { + "name": "v0.19.2", + "version": "v0.19.2", + "url": "https://ctapipe.readthedocs.io/en/v0.19.2/" + }, + { + "name": "v0.19.1", + "version": "v0.19.1", + "url": "https://ctapipe.readthedocs.io/en/v0.19.1/" + }, + { + "name": "v0.19.0", + "version": "v0.19.0", + "url": "https://ctapipe.readthedocs.io/en/v0.19.0/" + }, + { + "name": "v0.18.1", + "version": "v0.18.1", + "url": "https://ctapipe.readthedocs.io/en/v0.18.1/" + }, + { + "name": "v0.18.0", + "version": "v0.18.0", + "url": "https://ctapipe.readthedocs.io/en/v0.18.0/" + }, + { + "name": "v0.17.0", + "version": "v0.17.0", + "url": "https://ctapipe.readthedocs.io/en/v0.17.0/" + }, + { + "name": "v0.16.0", + "version": "v0.16.0", + "url": "https://ctapipe.readthedocs.io/en/v0.16.0/" + }, + { + "name": "v0.15.0", + "version": "v0.15.0", + "url": "https://ctapipe.readthedocs.io/en/v0.15.0/" + }, + { + "name": "v0.14.0", + "version": "v0.14.0", + "url": "https://ctapipe.readthedocs.io/en/v0.14.0/" + }, + { + "name": "v0.12.0-rtd", + "version": "v0.12.0-rtd", + "url": "https://ctapipe.readthedocs.io/en/v0.12.0-rtd/" + }, + { + "name": "v0.11.0-rtd", + "version": "v0.11.0-rtd", + "url": "https://ctapipe.readthedocs.io/en/v0.11.0-rtd/" + } +] diff --git a/docs/conf.py b/docs/conf.py index 3c493c6920d..4c228dc4886 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -190,6 +190,26 @@ def setup(app): todo_include_todos = True +# -- Version switcher ----------------------------------------------------- + +# Define the json_url for our version switcher. +json_url = "https://ctapipe.readthedocs.io/en/latest/_static/switcher.json" + +# Define the version we use for matching in the version switcher. +version_match = os.environ.get("READTHEDOCS_VERSION") +# If READTHEDOCS_VERSION doesn't exist, we're not on RTD +# If it is an integer, we're in a PR build and the version isn't correct. +if not version_match or version_match.isdigit(): + # For local development, infer the version to match from the package. + if "dev" in release or "rc" in release: + version_match = "latest" + # We want to keep the relative reference if we are in dev mode + # but we want the whole url if we are effectively in a released version + json_url = "_static/switcher.json" + else: + version_match = release + + # -- Options for HTML output ---------------------------------------------- html_theme = "pydata_sphinx_theme" @@ -208,7 +228,11 @@ def setup(app): }, "github_url": "https://github.com/cta-observatory/ctapipe", "header_links_before_dropdown": 6, - "navbar_start": ["navbar-logo"], + "navbar_start": ["navbar-logo", "version-switcher"], + "switcher": { + "version_match": version_match, + "json_url": json_url, + }, "use_edit_page_button": True, "icon_links_label": "Quick Links", "icon_links": [ @@ -226,8 +250,6 @@ def setup(app): """, } -html_sidebars = {"**": ["sidebar-nav-bs.html", "sidebar-ethical-ads.html"]} - # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". From 05cc382a78bf7717e175deb0904928aee4b4ba1f Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Wed, 19 Jul 2023 15:41:28 +0200 Subject: [PATCH 37/37] Fix versions in switcher.json * Stable is now called stable (without version tag) * Add colors to stable and dev versions in switcher --- docs/_static/ctapipe.css | 22 +++++++++++++++++++++- docs/_static/switcher.json | 2 +- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/docs/_static/ctapipe.css b/docs/_static/ctapipe.css index 243e4af60cd..30483b997f2 100644 --- a/docs/_static/ctapipe.css +++ b/docs/_static/ctapipe.css @@ -12,6 +12,27 @@ } } +.version-switcher__container a[data-version-name*="stable"] { + background-color: #E9F6EC; + color: #28A745; +} + +.version-switcher__container a[data-version-name*="dev"] { + background-color: #FDF4EB; + color: #EE9040; +} + +html[data-theme="dark"] .version-switcher__container a[data-version-name*="stable"] { + background-color: #222924; + color: #28A745; +} + +html[data-theme="dark"] .version-switcher__container a[data-version-name*="dev"] { + background-color: #332A21; + color: #EE9040; +} + + /* sphinx-design */ .sd-card { border-radius: 5px; @@ -44,4 +65,3 @@ html[data-theme="dark"] .sd-shadow-sm { --sd-color-shadow: #6e6e6e; } - diff --git a/docs/_static/switcher.json b/docs/_static/switcher.json index 59a6b3a5637..f2c980b19f7 100644 --- a/docs/_static/switcher.json +++ b/docs/_static/switcher.json @@ -5,7 +5,7 @@ "url": "https://ctapipe.readthedocs.io/en/latest/" }, { - "name": "v0.19.2 (stable)", + "name": "stable", "version": "stable", "url": "https://ctapipe.readthedocs.io/en/stable/" },
{key}

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 literal 0 HcmV?d00001 diff --git a/docs/ctapipe_logo_dark.webp b/docs/ctapipe_logo_dark.webp new file mode 100644 index 0000000000000000000000000000000000000000..3c210e55e18f25a57ce8c269f4f9161bb4f88a1b GIT binary patch literal 99660 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 hOYm9l3 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 literal 0 HcmV?d00001 From b97b531387703735247b3334bc20d333d3bf43d6 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 16:53:37 +0200 Subject: [PATCH 10/37] Updated docs, added version switcher * Added PyData theme * Modified front page * Fixed warnings during build of the docs with the Sphinx 6.2.1 * Added version switcher --- docs/_static/switcher.json | 72 + docs/conf.py | 103 +- docs/ctapipe_api/calib/index.rst | 1 + docs/ctapipe_api/calib/index_camera.rst | 3 +- docs/examples/Tools.ipynb | 8434 ++++++++++++++++++++++- docs/getting_started/index.rst | 12 +- docs/index.rst | 155 +- docs/versions.json | 12 + 8 files changed, 8690 insertions(+), 102 deletions(-) create mode 100644 docs/_static/switcher.json create mode 100644 docs/versions.json diff --git a/docs/_static/switcher.json b/docs/_static/switcher.json new file mode 100644 index 00000000000..59a6b3a5637 --- /dev/null +++ b/docs/_static/switcher.json @@ -0,0 +1,72 @@ +[ + { + "name": "dev", + "version": "latest", + "url": "https://ctapipe.readthedocs.io/en/latest/" + }, + { + "name": "v0.19.2 (stable)", + "version": "stable", + "url": "https://ctapipe.readthedocs.io/en/stable/" + }, + { + "name": "v0.19.3", + "version": "v0.19.3", + "url": "https://ctapipe.readthedocs.io/en/v0.19.3/" + }, + { + "name": "v0.19.2", + "version": "v0.19.2", + "url": "https://ctapipe.readthedocs.io/en/v0.19.2/" + }, + { + "name": "v0.19.1", + "version": "v0.19.1", + "url": "https://ctapipe.readthedocs.io/en/v0.19.1/" + }, + { + "name": "v0.19.0", + "version": "v0.19.0", + "url": "https://ctapipe.readthedocs.io/en/v0.19.0/" + }, + { + "name": "v0.18.1", + "version": "v0.18.1", + "url": "https://ctapipe.readthedocs.io/en/v0.18.1/" + }, + { + "name": "v0.18.0", + "version": "v0.18.0", + "url": "https://ctapipe.readthedocs.io/en/v0.18.0/" + }, + { + "name": "v0.17.0", + "version": "v0.17.0", + "url": "https://ctapipe.readthedocs.io/en/v0.17.0/" + }, + { + "name": "v0.16.0", + "version": "v0.16.0", + "url": "https://ctapipe.readthedocs.io/en/v0.16.0/" + }, + { + "name": "v0.15.0", + "version": "v0.15.0", + "url": "https://ctapipe.readthedocs.io/en/v0.15.0/" + }, + { + "name": "v0.14.0", + "version": "v0.14.0", + "url": "https://ctapipe.readthedocs.io/en/v0.14.0/" + }, + { + "name": "v0.12.0-rtd", + "version": "v0.12.0-rtd", + "url": "https://ctapipe.readthedocs.io/en/v0.12.0-rtd/" + }, + { + "name": "v0.11.0-rtd", + "version": "v0.11.0-rtd", + "url": "https://ctapipe.readthedocs.io/en/v0.11.0-rtd/" + } +] diff --git a/docs/conf.py b/docs/conf.py index f2cb9a72486..cc5843d1020 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -29,6 +29,7 @@ # Get configuration information from setup.cfg from configparser import ConfigParser +import pydata_sphinx_theme import ctapipe setup_cfg = ConfigParser() @@ -36,6 +37,7 @@ setup_metadata = dict(setup_cfg.items("metadata")) setup_options = dict(setup_cfg.items("options")) + # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. @@ -52,10 +54,13 @@ "nbsphinx", "matplotlib.sphinxext.plot_directive", "numpydoc", + "sphinx_design", "IPython.sphinxext.ipython_console_highlighting", ] + numpydoc_show_class_members = False +# numpydoc_class_members_toctree = False nbsphinx_timeout = 200 # allow max 2 minutes to build each notebook @@ -67,6 +72,8 @@ def setup(app): # fix trait aliases generating doc warnings from ctapipe.core import traits + app.add_css_file("_static/ctapipe.css") + aliases = [ "flag", "observe", @@ -119,7 +126,8 @@ def setup(app): ("py:class", "astropy.coordinates.baseframe.BaseCoordinateFrame"), ("py:class", "astropy.table.table.Table"), ("py:class", "eventio.simtel.simtelfile.SimTelFile"), - ("py:class", "ctapipe.compat.StrEnum"), + ("py:obj", "ctapipe.calib.CameraCalibrator"), # temporary fix to ignore warning + ("py:obj", "ctapipe.calib.GainSelector"), # temporary fix to ignore warning ] # The suffix(es) of source filenames. @@ -182,32 +190,86 @@ def setup(app): # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = True + +# -- Version switcher ----------------------------------------------------- + +# Define the json_url for our version switcher. +json_url = "https://ctapipe.readthedocs.io/en/latest/_static/switcher.json" + +# Define the version we use for matching in the version switcher. +version_match = os.environ.get("READTHEDOCS_VERSION") +# If READTHEDOCS_VERSION doesn't exist, we're not on RTD +# If it is an integer, we're in a PR build and the version isn't correct. +if not version_match or version_match.isdigit(): + # For local development, infer the version to match from the package. + release = ctapipe.__version__ + if "dev" in release or "rc" in release: + version_match = "latest" + # We want to keep the relative reference if we are in dev mode + # but we want the whole url if we are effectively in a released version + json_url = "_static/switcher.json" + else: + version_match = release + + # -- Options for HTML output ---------------------------------------------- -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = "default" +# on_rtd is whether we are on readthedocs.org +on_rtd = os.environ.get("READTHEDOCS", None) == "True" + +html_theme = "pydata_sphinx_theme" +# html_theme_path = [pydata_sphinx_theme.__path__] + + +html_favicon = "_static/favicon.ico" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # -# html_theme_options = {} +html_theme_options = { + "logo": { + "image_light": "ctapipe_logo.webp", + "image_dark": "ctapipe_logo_dark.webp", + "alt_text": "ctapipe", + }, + "github_url": "https://github.com/cta-observatory/ctapipe", + "header_links_before_dropdown": 6, + "navbar_start": ["navbar-logo", "version-switcher"], + "switcher": { + "version_match": version_match, + "json_url": json_url, + }, + "use_edit_page_button": True, + "icon_links": [ + { + "name": "CTA Observatory", + "url": "https://www.cta-observatory.org/", + "type": "url", + "icon": "https://www.cta-observatory.org/wp-content/themes/ctao/favicon.ico" + }, + ], +} + +html_sidebars = { + "**": ["sidebar-nav-bs.html", "sidebar-ethical-ads.html"], +} + # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". # html_static_path = ['_static'] html_static_path = ["_static"] - html_context = { - "css_files": ["_static/theme_overrides.css"] # override wide tables in RTD theme + "default_mode": "light", + "github_user": "cta-observatory", + "github_repo": "ctapipe", + "github_version": "main", + "doc_path": "docs", } - -html_favicon = "_static/favicon.ico" -# -- Options for HTMLHelp output ------------------------------------------ - +html_css_files = ["ctapipe.css"] +html_file_suffix = ".html" # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". @@ -216,6 +278,7 @@ def setup(app): # Output file base name for HTML help builder. htmlhelp_basename = project + "doc" + # -- Options for LaTeX output --------------------------------------------- latex_elements = { @@ -277,19 +340,3 @@ def setup(app): "iminuit": ("https://iminuit.readthedocs.io/en/latest/", None), "traitlets": ("https://traitlets.readthedocs.io/en/stable/", None), } - -# on_rtd is whether we are on readthedocs.org -on_rtd = os.environ.get("READTHEDOCS", None) == "True" - -if not on_rtd: # only import and set the theme if we're building docs locally - try: - import sphinx_rtd_theme - except ImportError: - raise ImportError( - "It looks like you don't have the sphinx_rtd_theme " - "package installed. This documentation " - "uses the Read The Docs theme, so you must install this " - "first. For example, pip install sphinx_rtd_theme" - ) - html_theme = "sphinx_rtd_theme" - html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] diff --git a/docs/ctapipe_api/calib/index.rst b/docs/ctapipe_api/calib/index.rst index c4decc21eef..28a105b5f61 100644 --- a/docs/ctapipe_api/calib/index.rst +++ b/docs/ctapipe_api/calib/index.rst @@ -46,3 +46,4 @@ Reference/API .. automodapi:: ctapipe.calib :no-inheritance-diagram: + :noindex: diff --git a/docs/ctapipe_api/calib/index_camera.rst b/docs/ctapipe_api/calib/index_camera.rst index d5cea730106..897acf55a82 100644 --- a/docs/ctapipe_api/calib/index_camera.rst +++ b/docs/ctapipe_api/calib/index_camera.rst @@ -19,7 +19,7 @@ CTA Cameras (MC, prototypes and final camera calibration algorithms). CameraCalibrator **************** -The primary class in this module is the `CameraCalibrator`. This class handles +The primary class in this module is the :class:`.CameraCalibrator`. This class handles two data level transition stages for the event: * R1 -> DL0 (:ref:`image_reducers`) @@ -38,6 +38,7 @@ Reference/API ************* .. automodapi:: ctapipe.calib.camera + :no-main-docstr: ------------------------------ diff --git a/docs/examples/Tools.ipynb b/docs/examples/Tools.ipynb index 6b541cc8495..7f9322406da 100644 --- a/docs/examples/Tools.ipynb +++ b/docs/examples/Tools.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -33,7 +33,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -58,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -113,18 +113,95 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "

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 literal 0 HcmV?d00001 diff --git a/docs/ctapipe_logo_dark.webp b/docs/ctapipe_logo_dark.webp new file mode 100644 index 0000000000000000000000000000000000000000..3c210e55e18f25a57ce8c269f4f9161bb4f88a1b GIT binary patch literal 99660 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 hOYm9l3 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 literal 0 HcmV?d00001 From 11275ede2f5cd6479965cf761e974a64a50b5280 Mon Sep 17 00:00:00 2001 From: Anno Knierim Date: Tue, 4 Jul 2023 15:34:59 +0200 Subject: [PATCH 04/37] Updated docs, added version switcher * Added PyData theme * Modified front page * Fixed warnings during build of the docs with the Sphinx 6.2.1 * Added version switcher --- docs/_static/switcher.json | 72 + docs/conf.py | 102 +- docs/ctapipe_api/calib/index.rst | 1 + docs/ctapipe_api/calib/index_camera.rst | 3 +- docs/examples/Tools.ipynb | 8434 ++++++++++++++++++++++- docs/getting_started/index.rst | 12 +- docs/index.rst | 155 +- docs/versions.json | 12 + 8 files changed, 8690 insertions(+), 101 deletions(-) create mode 100644 docs/_static/switcher.json create mode 100644 docs/versions.json diff --git a/docs/_static/switcher.json b/docs/_static/switcher.json new file mode 100644 index 00000000000..59a6b3a5637 --- /dev/null +++ b/docs/_static/switcher.json @@ -0,0 +1,72 @@ +[ + { + "name": "dev", + "version": "latest", + "url": "https://ctapipe.readthedocs.io/en/latest/" + }, + { + "name": "v0.19.2 (stable)", + "version": "stable", + "url": "https://ctapipe.readthedocs.io/en/stable/" + }, + { + "name": "v0.19.3", + "version": "v0.19.3", + "url": "https://ctapipe.readthedocs.io/en/v0.19.3/" + }, + { + "name": "v0.19.2", + "version": "v0.19.2", + "url": "https://ctapipe.readthedocs.io/en/v0.19.2/" + }, + { + "name": "v0.19.1", + "version": "v0.19.1", + "url": "https://ctapipe.readthedocs.io/en/v0.19.1/" + }, + { + "name": "v0.19.0", + "version": "v0.19.0", + "url": "https://ctapipe.readthedocs.io/en/v0.19.0/" + }, + { + "name": "v0.18.1", + "version": "v0.18.1", + "url": "https://ctapipe.readthedocs.io/en/v0.18.1/" + }, + { + "name": "v0.18.0", + "version": "v0.18.0", + "url": "https://ctapipe.readthedocs.io/en/v0.18.0/" + }, + { + "name": "v0.17.0", + "version": "v0.17.0", + "url": "https://ctapipe.readthedocs.io/en/v0.17.0/" + }, + { + "name": "v0.16.0", + "version": "v0.16.0", + "url": "https://ctapipe.readthedocs.io/en/v0.16.0/" + }, + { + "name": "v0.15.0", + "version": "v0.15.0", + "url": "https://ctapipe.readthedocs.io/en/v0.15.0/" + }, + { + "name": "v0.14.0", + "version": "v0.14.0", + "url": "https://ctapipe.readthedocs.io/en/v0.14.0/" + }, + { + "name": "v0.12.0-rtd", + "version": "v0.12.0-rtd", + "url": "https://ctapipe.readthedocs.io/en/v0.12.0-rtd/" + }, + { + "name": "v0.11.0-rtd", + "version": "v0.11.0-rtd", + "url": "https://ctapipe.readthedocs.io/en/v0.11.0-rtd/" + } +] diff --git a/docs/conf.py b/docs/conf.py index b848261c4d8..cc5843d1020 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -29,6 +29,7 @@ # Get configuration information from setup.cfg from configparser import ConfigParser +import pydata_sphinx_theme import ctapipe setup_cfg = ConfigParser() @@ -36,6 +37,7 @@ setup_metadata = dict(setup_cfg.items("metadata")) setup_options = dict(setup_cfg.items("options")) + # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. @@ -52,10 +54,13 @@ "nbsphinx", "matplotlib.sphinxext.plot_directive", "numpydoc", + "sphinx_design", "IPython.sphinxext.ipython_console_highlighting", ] + numpydoc_show_class_members = False +# numpydoc_class_members_toctree = False nbsphinx_timeout = 200 # allow max 2 minutes to build each notebook @@ -67,6 +72,8 @@ def setup(app): # fix trait aliases generating doc warnings from ctapipe.core import traits + app.add_css_file("_static/ctapipe.css") + aliases = [ "flag", "observe", @@ -119,6 +126,8 @@ def setup(app): ("py:class", "astropy.coordinates.baseframe.BaseCoordinateFrame"), ("py:class", "astropy.table.table.Table"), ("py:class", "eventio.simtel.simtelfile.SimTelFile"), + ("py:obj", "ctapipe.calib.CameraCalibrator"), # temporary fix to ignore warning + ("py:obj", "ctapipe.calib.GainSelector"), # temporary fix to ignore warning ] # The suffix(es) of source filenames. @@ -181,32 +190,86 @@ def setup(app): # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = True + +# -- Version switcher ----------------------------------------------------- + +# Define the json_url for our version switcher. +json_url = "https://ctapipe.readthedocs.io/en/latest/_static/switcher.json" + +# Define the version we use for matching in the version switcher. +version_match = os.environ.get("READTHEDOCS_VERSION") +# If READTHEDOCS_VERSION doesn't exist, we're not on RTD +# If it is an integer, we're in a PR build and the version isn't correct. +if not version_match or version_match.isdigit(): + # For local development, infer the version to match from the package. + release = ctapipe.__version__ + if "dev" in release or "rc" in release: + version_match = "latest" + # We want to keep the relative reference if we are in dev mode + # but we want the whole url if we are effectively in a released version + json_url = "_static/switcher.json" + else: + version_match = release + + # -- Options for HTML output ---------------------------------------------- -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = "default" +# on_rtd is whether we are on readthedocs.org +on_rtd = os.environ.get("READTHEDOCS", None) == "True" + +html_theme = "pydata_sphinx_theme" +# html_theme_path = [pydata_sphinx_theme.__path__] + + +html_favicon = "_static/favicon.ico" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # -# html_theme_options = {} +html_theme_options = { + "logo": { + "image_light": "ctapipe_logo.webp", + "image_dark": "ctapipe_logo_dark.webp", + "alt_text": "ctapipe", + }, + "github_url": "https://github.com/cta-observatory/ctapipe", + "header_links_before_dropdown": 6, + "navbar_start": ["navbar-logo", "version-switcher"], + "switcher": { + "version_match": version_match, + "json_url": json_url, + }, + "use_edit_page_button": True, + "icon_links": [ + { + "name": "CTA Observatory", + "url": "https://www.cta-observatory.org/", + "type": "url", + "icon": "https://www.cta-observatory.org/wp-content/themes/ctao/favicon.ico" + }, + ], +} + +html_sidebars = { + "**": ["sidebar-nav-bs.html", "sidebar-ethical-ads.html"], +} + # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". # html_static_path = ['_static'] html_static_path = ["_static"] - html_context = { - "css_files": ["_static/theme_overrides.css"] # override wide tables in RTD theme + "default_mode": "light", + "github_user": "cta-observatory", + "github_repo": "ctapipe", + "github_version": "main", + "doc_path": "docs", } - -html_favicon = "_static/favicon.ico" -# -- Options for HTMLHelp output ------------------------------------------ - +html_css_files = ["ctapipe.css"] +html_file_suffix = ".html" # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". @@ -215,6 +278,7 @@ def setup(app): # Output file base name for HTML help builder. htmlhelp_basename = project + "doc" + # -- Options for LaTeX output --------------------------------------------- latex_elements = { @@ -276,19 +340,3 @@ def setup(app): "iminuit": ("https://iminuit.readthedocs.io/en/latest/", None), "traitlets": ("https://traitlets.readthedocs.io/en/stable/", None), } - -# on_rtd is whether we are on readthedocs.org -on_rtd = os.environ.get("READTHEDOCS", None) == "True" - -if not on_rtd: # only import and set the theme if we're building docs locally - try: - import sphinx_rtd_theme - except ImportError: - raise ImportError( - "It looks like you don't have the sphinx_rtd_theme " - "package installed. This documentation " - "uses the Read The Docs theme, so you must install this " - "first. For example, pip install sphinx_rtd_theme" - ) - html_theme = "sphinx_rtd_theme" - html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] diff --git a/docs/ctapipe_api/calib/index.rst b/docs/ctapipe_api/calib/index.rst index c4decc21eef..28a105b5f61 100644 --- a/docs/ctapipe_api/calib/index.rst +++ b/docs/ctapipe_api/calib/index.rst @@ -46,3 +46,4 @@ Reference/API .. automodapi:: ctapipe.calib :no-inheritance-diagram: + :noindex: diff --git a/docs/ctapipe_api/calib/index_camera.rst b/docs/ctapipe_api/calib/index_camera.rst index d5cea730106..897acf55a82 100644 --- a/docs/ctapipe_api/calib/index_camera.rst +++ b/docs/ctapipe_api/calib/index_camera.rst @@ -19,7 +19,7 @@ CTA Cameras (MC, prototypes and final camera calibration algorithms). CameraCalibrator **************** -The primary class in this module is the `CameraCalibrator`. This class handles +The primary class in this module is the :class:`.CameraCalibrator`. This class handles two data level transition stages for the event: * R1 -> DL0 (:ref:`image_reducers`) @@ -38,6 +38,7 @@ Reference/API ************* .. automodapi:: ctapipe.calib.camera + :no-main-docstr: ------------------------------ diff --git a/docs/examples/Tools.ipynb b/docs/examples/Tools.ipynb index 6b541cc8495..7f9322406da 100644 --- a/docs/examples/Tools.ipynb +++ b/docs/examples/Tools.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -33,7 +33,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -58,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -113,18 +113,95 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "