From 804dc98e01c6df84797c0cdcede096573d3d1c0c Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 27 Nov 2023 13:41:30 +0100 Subject: [PATCH 1/2] tags inversion --- fink_fat/__init__.py | 2 +- fink_fat/others/id_tags.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fink_fat/__init__.py b/fink_fat/__init__.py index 13e5d743..34985534 100644 --- a/fink_fat/__init__.py +++ b/fink_fat/__init__.py @@ -12,4 +12,4 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.15.2" +__version__ = "0.15.3" diff --git a/fink_fat/others/id_tags.py b/fink_fat/others/id_tags.py index d13502db..9d750b5a 100644 --- a/fink_fat/others/id_tags.py +++ b/fink_fat/others/id_tags.py @@ -44,7 +44,7 @@ def int_to_tags(traj_id, jd): discovery = Time(jd, format="jd").datetime return "FF{:02d}{:02d}{}{}".format( - discovery.day, discovery.month, discovery.year, res_tag[::-1] + discovery.year, discovery.month, discovery.day, res_tag[::-1] ) From 4ff7a4f0201ac7ef503a37ddc6826d0bb278cb29 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 27 Nov 2023 14:09:06 +0100 Subject: [PATCH 2/2] inverse tags and make tests works --- bin/utils_cli.py | 8 ++++---- fink_fat/others/id_tags.py | 10 +++++----- .../fink_fat_out_test/mpc/orbital.parquet | Bin 17020 -> 16563 bytes .../mpc/trajectory_orb.parquet | Bin 35570 -> 35113 bytes fink_fat/test/utils_cli_test_orb.parquet | Bin 3734 -> 2672 bytes fink_fat/test/utils_cli_test_traj.parquet | Bin 3208 -> 2756 bytes 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bin/utils_cli.py b/bin/utils_cli.py index c52f6dbc..bc0ca4fe 100644 --- a/bin/utils_cli.py +++ b/bin/utils_cli.py @@ -442,11 +442,11 @@ def assig_tags(orb_df, traj_orb_df, start_tags): ... }) >>> new_orb, new_traj = assig_tags(orb, traj, 0) - >>> orb_test = pd.read_parquet("fink_fat/test/utils_cli_test_orb.parquet") - >>> traj_test = pd.read_parquet("fink_fat/test/utils_cli_test_traj.parquet") + >>> orb_test = pd.read_parquet("fink_fat/test/utils_cli_test_orb.parquet").reset_index(drop=True) + >>> traj_test = pd.read_parquet("fink_fat/test/utils_cli_test_traj.parquet").reset_index(drop=True) - >>> assert_frame_equal(orb_test, new_orb) - >>> assert_frame_equal(traj_test, new_traj) + >>> assert_frame_equal(orb_test, new_orb.reset_index(drop=True)) + >>> assert_frame_equal(traj_test, new_traj.reset_index(drop=True)) """ orb_df = orb_df.sort_values("ref_epoch") diff --git a/fink_fat/others/id_tags.py b/fink_fat/others/id_tags.py index 9d750b5a..4c326d81 100644 --- a/fink_fat/others/id_tags.py +++ b/fink_fat/others/id_tags.py @@ -28,11 +28,11 @@ def int_to_tags(traj_id, jd): Examples -------- >>> int_to_tags(15, 2460135.98) - 'FF10072023aaaaaap' + 'FF20230710aaaaaap' >>> int_to_tags(27, 2460135.98) - 'FF10072023aaaaabb' + 'FF20230710aaaaabb' >>> int_to_tags(652, 2460135.98) - 'FF10072023aaaaazc' + 'FF20230710aaaaazc' """ res_tag = "" for _ in range(7): @@ -43,7 +43,7 @@ def int_to_tags(traj_id, jd): traj_id = q discovery = Time(jd, format="jd").datetime - return "FF{:02d}{:02d}{}{}".format( + return "FF{:04d}{:02d}{:02d}{}".format( discovery.year, discovery.month, discovery.day, res_tag[::-1] ) @@ -70,7 +70,7 @@ def generate_tags(begin, end, jd): Examples -------- >>> generate_tags(3, 6, [2460135.42, 2460137.57, 2460148.72]) - ['FF09072023aaaaaad', 'FF12072023aaaaaae', 'FF23072023aaaaaaf'] + ['FF20230709aaaaaad', 'FF20230712aaaaaae', 'FF20230723aaaaaaf'] """ return [int_to_tags(i, date) for date, i in zip(jd, np.arange(begin, end))] diff --git a/fink_fat/test/cli_test/fink_fat_out_test/mpc/orbital.parquet b/fink_fat/test/cli_test/fink_fat_out_test/mpc/orbital.parquet index 2bff40fa993cbe3e3ef293d35bdb39d1342158bf..96c6a221540c467ac22f3d67ef4b9893150e9157 100644 GIT binary patch delta 3150 zcmd5+dr(tX8c%HHp`xM?0s^;0A|lwlA(7haNkT#b36E$liPLtI3*^B~f?xuPkN8^H zs#x3Od#0_rTW4{%GgQW{_0iq7y0wmIdvRy2c6Zg*x~p#0?zG(*>AL46h$3az+5WR< zCf~j1eBbx`e&2U~xr6JteXF^>rnKnBgQ1%B8(8A)uWt(ZYgi)Z@{vnR*0F@cd59-O z=ceq_?;Fv1?ViK${PW^r@}uf=RQ}5>afsng4X$R1znnJQibPqWdoq!qznmooe$lI4 zxS1u2)>F2NX-CKx{`&LclL%*PfPH2c@*lnM?3oQHUf6zK+w}CQD7oEFd_b;ZiSh65 z**0Y@OWgi`cm4SYOXw7Hw@6TdcW(_GO6q2b-|W=Ztwe?Q-rCTS3t3{^;-9Vm;zgE_ zO?}gv)x{F0GJLcM6%cK&{4xVI(93J>x&Bj@;D4TXZq^ExDF1BT@3tdiWnI43x%o~UH-@Hfmhz25`phS1Dwe!lRcgPd_ujIBNBL7geA9+6O1{wW+6(vH2 z=XZW%OWDd26W+?W<3|Nj2iLrjf(j>|oOX6M>hzTx`?mbi_bxRs?*fP?FcRi6s_9a-aSX?R~p< z3TGlhf^(9xPdZsby60$a4+0vzE2-OZ`(^S^{e$j5paNeN(93rmJ5F9x<{kbF#qXUz zb=T>YEOB6SC)6W??!EW;=Mlk$A8~3XNw?8C>F+OGc3#XEj`dQ7Pu>?UhJ?PdQDqz1m3BFJpLIxMw|2c#c2?|pMvYG%#C z%V%#Ne{8Ao=YDId3GW{zwZSEKufp^bKVE9jeK4uJV9kzUsg=T0f#S7q|5vG{Fk64J zMEUV(sf9|bgD3lcJz8pcBV=}eP!Gwh7Ea0%kC57U3V{rks8 zo(4M#9^+=x`Yseq8TUWXfM8}8te!JbxGk8*;ba!`6IvYp21gtJ`s8H-kH4X@;{`gv z1bzNC!Mvvy!}sR!`piYOi4!*Fi0~=`m9R%T|A|Ua0sn@c`alINlx4$LWjS>cahpM7 z^g5*-5+|jI7`y=&C2R9IeY&M~i=hPh!gk8uWUp6;Y*Lq}N&`H0AHz8HbxmW$K(W$4 z!&g35s2d(r1h@>GTf!e_x4>V?{aFr+0h91KC~KQtrwZCA34@6kd{CqezzZeQi65xh z=9DV@RUUQFDXoJ?6)kXi=`@&IHhr?K-iXiJ?e)eMTNqcE>ZGi0r$_B}`czA8REGjr zhgZv@!mzX6++-W8zTdc%mZ)Nk$HyY!dnK6(@l#wfo<1i1cwh@|cqsi~i4fZ7@!|Ul z?^E&8Be;$j100+ufSXFa@KRY8WL23kk(|QC0}ITMx?AdHM#f%Y_1dZ05tD|tX9(CU z_e`Q?=1{Fv7qpi%&9GmUIq~8BF-0c)m+V=%pfn+BjVplmS=|kKRTvMxF>GveP{uHt zq#||^ezgLBo@qiOXl|g)j2&n!q9&0DIW)jLjH*Ss=;S^O-k=r3Qlm>sr(%0k>ktbA z(A1QQM3`i)DVBtK#G9DKCe}+uTw}D44jL-d4DDmQ$Wt_2UmJn5$--=>UKO;5UQ{da!zWj+eT4nh_(@>EhtRIp}^2u6d#NMgy8`c>&DfW4kKvA&_@zc z6Fz0@tzid+VAZWC3EzwXP-Es7#E_68 zFhEDhi3g%rgzWl7=++(pc;G8Q81FWWKW->m1FE!eHpow9FoX|{AjZ(8wZZ2=evu8c zGgS>!K-Y*MT}V#=v5$#pND=@RlQU+;Ci(DJ4@aWAv*Blaxxjpwr?w<9IUG(6sFVB~ DyYiF; delta 3491 zcmd5-e{d7m5ta%u1aOJLHZs2sM2*3KC7mqWieto+Y{@5EHnOo~i8@qwl4VJ!ld&wx zvH{^hOd&ua4<;0nGzH2eG%1<7od%fDNkf{H0HK!*C1pB5LgEA%0!_;_6FPLCWV<$o z!c6|@{qeNBZ{N4y?)&c4+bzAlUi!KvGr=@`uH219>g|)#L))Gfsoh)8t$6uak;-54 zXqtMnNR3DBx_w(k%KGyohyQi{h|a~nk)8XDNWFVv&(ZU+|75)PAGYlx^~?0%TK3Wo*tzoNf)fc{+bj0V zj%^~P8GSbYBOs8TsrvU%*N9a2%~uwD3BbLAcT|3-NUdMd_vIY`I(OrAn`NCy&3He& zYB$8!sqM3^t3>K=-)vT`hkfmjms|d@MWn(jZ+zv3f(I+6U3eK9C>ZnAbDu)~``f!M zn<3ux;rI1bYZ4;0{PZv0IC$-jE^=$$=GVY)iL~{6vh}d;uWJ{))eRkft&JUha_Uvx z3pZ~DK7`JmDP@}%LHy>-^w6G-B6VoHHhnL2RC)f-#c` z*K>20?gT=8(uIG&y5XX3?t#)o5QyCVlHndo)W39 z^;F+Nn9R=3Ti2h40)?C2S`zDlgWsy^cHG#mQ$MnCe*xrO&*N6@dh@t$(XWihnN1=U z?Q+e#1vu8xGXuwwfn@ zrKR&bf3&jX%t)n0i)$nAoqBbo(q<1+*}$NNsLYBdOjQn3+TBShrTvUb!{cY9_pY59 zNYh<;q&lldnl*ZoL~>_bNrprsF&dQ`rG{40O4p;(nkH-(o`W~D2!nuF!uAKtH zd<2bwB!^skTEgM^a-Ce+Pr*eVE+oqsGKFN!g_oq)O25FT=Tqtz$Id;wQ9Ad;I_dNx z$vl$!;M3OJ$-TNcS4R!IpSwR56 zgb2@r7jAd8wS%in+M!l3i;9!BhuEssP2i*eSNMc{fcNwR565Ztd3g7VAu&8#wIsVs z?h&|<+b4JdOWv@|xTr+FdUbC+-#TX8T1r74jkg+qq$(R_^fEY;E=w3J3_|*1Cdfye zCR<@6T@z(1ZSAaJ@zwhDtS4@6bJ;Zk#vk%Bg1Lnax_QPI^D;qA3u|v6IT5$LBV27j zK2BZN!UnzVILbbwma(~*Q8OgrWg(t zXQi=%EzBCQP})!h{A>{itqlMdA<2ceHPrc(g^ZvY#JY=j#9>$Q{k(Z6ujM(D*6#wm z;+*kA{bL$I>cFnT9BBoCaxK=Hb@_1HBNZN{@D3VEC_@+9P&YH9lXS~qM2DJev z$;Vd;C*jMqKiwE7an59myX+P?or5=PGVp4x|FL$b-56m^#t2KRTG+|}fgTyWKnr68 zb33Qfw&2^^nMoc45k47d0A>QtDVcz!kLO4ON$+rpjCkoCQ8vgy5lz%-O67U9GW>#O z@?TINkvjd#$RIPh)!+qMR*jMDA=y#d;W-e$8xa~E(lMHRj#9&RxWz)u;_Bxe= zwgt$5CUkPNw%h>%skd86bHf7{=$vtGyQY=goUR8I~&cNF1t38yjZ_AVlfnUFoKfo#Rv~a zV@djh&N)STj9P%O*LQDdoN~;0X&yau-!HZCf^avS3 z$cm5$RUlO11s^$xUkC=Of<&Yb6SI~qWCQ7Aie`m^82UOABWU1|CH0ue52vn)T4`g% zS-}U0uSW?|fdCl10|2OlY$1*;LjbCY@1R>+8`WmsS!we-?N$_ssuhYDYOV-4`?CN5 diff --git a/fink_fat/test/cli_test/fink_fat_out_test/mpc/trajectory_orb.parquet b/fink_fat/test/cli_test/fink_fat_out_test/mpc/trajectory_orb.parquet index 76c32cd943764f2ec65958bb7942863768ce62d9..77984da2f1353943765bf4e5326832cff0284c11 100644 GIT binary patch delta 1415 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 diff --git a/fink_fat/test/utils_cli_test_traj.parquet b/fink_fat/test/utils_cli_test_traj.parquet index d87bad4fa0ebc5ae5d8e0d999909754aed89087a..4ee9b9cd97798a277480f3efe4dd5bafd086b08e 100644 GIT binary patch literal 2756 zcmcImOKclO7#=_4v|lG1Se`LBNZE5For5*n9~&N!%-MhrL1 zDVJ}4q8Ganq)Zn?m-p~i2`?}bxw9N@dZz{WrYjh(;lh(!@j8-U z!LJDkPIAUsIyTVi67$VGIA``kjwr#M*j-G^O?8h zv+ar4vnM(D`=wwCXbOHASVqv6A-@e5DGfqDd5)sGrD_MeO3xUX)*yOo<(+reR-(>! zm+7=KQno#cT9T>3@u>41h=S3ct{Lj?tlSBY-&SEm4*^H zw?>9>e{JO?SYMhA8TUk%;YRZtx&z8oh?rYMp*N1A4 zqJ}Q_rT&D{YEPtozc;2<`&xgX_be(+u5;^r6ex*KgFmI?*AweP^gaqLkZSdI{g(5j zLVwP^LC5RuEFq)qk|fh6IYQbb+h(#%=9GR+g>RkcnLX@bFfU9m5;7)W2P<;| zD>H(*3CN6_b>UvKu}w%>gkzbTqG^m;`C76OFYn8R+EBK(_1k(zZtRTPqB)frX*{a0LS&`;3Y&EJKu;-dIc3$A+ z{6V^urL_qix$gK=%(pJeWde58&y<_;MR7)IogZtpG^aH(2IYZrr*1VlQKww-hMLa- zx77~SLCyoY06Y~=@p7od(_56Aor}4dIddLAYF)6K@$^05gXVrtZfRXIYhCppIGWz^ zq*c#xazdo{4xAm>O{>^Ztb6PpfOq)4xUWuFoOr8IJe2C`5v#vj8Et2i2cpIL;e|JrxpJ<#^8+-052n)b=lAS6qrh4P`y zl{?Uf#TK;(Jv1=0=bzY%%pM*Q)3b$6G*qG3q2cM%WAeLf1}7B)4>3=O;v{$Ml&UL^ zzq9$kI|U1ti%oL@dw5W7cwO|}O^4(EO%!_7miq6HwBZfKwr{X+$jbC1vBJI{;Z69{ P>HMGva|qpm|6l(G#zT8{ literal 3208 zcmcInOKcle6n%DL*KT7-OUBsXMP#W~7HOFAC$Xy_G#+Q1F}7PfjU5}IFu&N7%#2-s z>qcRT5MsrG1wyPrY}kT?!~!-IOBO6y11lC?vEaTp z47E)CutYs|FBO?a(RZps}Bc*dH5$2LKJw6Q=6 z+K}#qchceVu7AjWl-l^}r_avmC&Jg?C;#vv6!~Q-L@fsstH>P;xMk5)G=*~dlm1U! z{-2j3UpOP4=Lr|w1lSPeMDSXL4?@7dM`iNV3IUOx#c+4oF2H4fVdDn1Ia%viGhOSv z6dbJOty-772xUs!1NGac?n05zuU*yX?1-ekFP#1loRO!l$fqtSaNZlnb6$!T7WlV= z`UcL4RpR@}n~(|5Gdm0&rK2&?e#$ukSgHrlw!^D{;P5YY*G=W3tyY*?P$2vI9`>%HA>i-Yb9 zR`QIv@h&iy!(-xI zwf#=JInh*IIi8kTc^&sgZ5%J$H#NDXSSj?4_UKa4l1^2*hf_1uo~VdD5zNoSstM+r z*}!`bAMkgQ;fsl6rn3lJlMMTq%49-5lZ|Hfw&Mhjsa!6_6RBXNE;b<}yF7q$K9D8* zAA?+8(D_(Xs+o|_hcYRRbhx96y;g?+uWM3A?2It(?UC5&w1zl^f!gV6EfY%_W{cjU z!+=THjy|c}iftvr7bvj8mdp35cdc0v_|y9aezqGKmSsyo_<5UU<7~RY@+{k6xdxG? z(^L8(7Vcf@3nk9t;Z3{{y}+_V7WToHIDs$O1n(M9dRVI_&T2;muo%Mr^p0TY{d%?% zKZ+Iy(tf2UnFZ~hmX_2}t|Nl2aN24JX09n2iY{owhF~O`QuPqq^p)zPZk}T`IaY4U zW(j2M(B=m+Cu|EDA#U@!#q+771MI_&rKj4GQP$OLes4_j_o9~(v>*yW2PZ5h|Q#E^(akrf?4T{)#9L@J=Ab)ueqHy%sB3`f7!)Rm)8!yN7E6JSzQKG<62Go1}KVa#+^rxL`8VxnJRQnHSWB z^J&*PVPW1gdb=0J$=uqKS&9~|{eUksR4Ws;L9didjkfy0=t`D{UY47enC#PCVSfTc zE;p(jJR=wADeKsXhof}jC{|9$fGPA?18nHx=|cR-nK*$S!}+_?l8sc%!ltS9^ElcKZ$)qU-jMT(`z&a2I~`Sbr!9zhCde{~-SW DH_8$I