
    1!i@/                     L    S SK r S SKrS SKrS SKrS SKrS SKJr   " S S5      rg)    N)Calerc                       \ rS rSrSS jrSS jrSS jrS rS rSS jr	S	 r
SS
 jrS rS rS rS rS rS rS rSrg)Fitli   Nc                     Xl         Ub!  SU-   S-   U l        U R                  S-   U l        S U l        S U l        0 U l        SU l        SU l        [        U5      U l	        g )N.z.json.gzr   )
e	ext_no_gzext	last_fufilast_sigf
count_keyscount_timesr   caler)selferimpkinds      !/home/ernad/ernad/python/fitli.py__init__Fitli.__init__   s_     4Z'1DN~~-DH5\
    c                     U R                   nUR                  S   nSU R                  -   nUb  SU-   U R                  -   nU R                   R                  R	                  XES9nX`l        U$ )Nfitli*search)r
   dirsr   foldalast_by_mtimer   )r   sig
do_verboser
   fudir   r   s          r   fufi
Fitli.fufi   sb    FFvvgtxx?3Y)FFFLL..t.C	"r   c                     U R                  US9nUc(  [        U5      n[        SU S3[        R                  S9  g[        SU-   S-   SS	S
9  [
        R                  " U5      n[        SS	S9  U$ )z3-> get current version, should move to ranfi.load())r"   Nzfitli has no file for sig ''filezfitli loads z ...  T)endflushdone)r-   )r%   strprintsysstderrfilerload)r   r"   r#   r%   	print_sigds         r   get	Fitli.get(   sq    yySy!<CI/	{!<zz#nt#g-2TBJJtfD!r   c                 .   U R                   R                  S   nUS-   U R                  -   n/ n[        R                  " U5       HM  n[        R
                  R                  U5      nUR                  UR                  U R                  S5      5        MO     U$ )z-> get available sigsr   /*r+   )	r
   r   r   globospathbasenameappendreplace)r   r$   glob_stringsigsr%   banas         r   	list_sigsFitli.list_sigs5   st    vv{{7#TkDHH,IIk*D77##D)DKKTXXr23 + r   c                 4   U R                   nUR                  S   n/ nUS-   U R                  -   n[        U R                  5      n[        R                  " U5       H9  n[
        R                  R                  U5      nUSU*  nUR                  U5        M;     U$ )z---> get list of all versions, called by moclar   r:   r   )	r
   r   r   lenr;   r<   r=   r>   r?   )	r   r
   folderrB   rA   len_extr%   rC   r"   s	            r   sigs_availableFitli.sigs_available?   s    FFtmdhh.dhh-IIk*D77##D)Dq'"CKK + r   c                    U R                   n/ nUR                   GH`  nUR                  U   nU(       a'  UR                  5       S:  a  [	        SU-   S-   5        MA  UR
                  S   n[        R                  " US5        US-   n[        R                  " U5      n	[        U	5      S:  aA  [	        SU-   [        R                  S	9  U R                   R                  R                  US5        [        U	5      S:X  a  M  U	S   n
[        R                  R!                  U
5      nUR#                  S
S5      nUR%                  S5      n[        U5      S:X  a  US   S-   US   -   nX;   a  GMO  UR'                  U5        GMc     U$ )z#sigs we need for the models we haver   zfitli: report z is bremsed.moclaz*.modelz/*.model   zfitli: more than one model for r)   z.modelr+   _   )r
   livereportbremse_levelr0   r   rH   clear_but_lastr;   rG   r1   r2   r    keep_only_lastr<   r=   r>   r@   splitr?   )r   r#   for_classingr
   rB   repcoderR   	mocla_dirrA   fufisr%   rC   r"   parts_of_sigs                 r   required_sigsFitli.required_sigsL   sO   FFvvGXXg&F &&(1,*W4~EFG,I!!)Y7#j0KIIk*E5zA~7'A::'++IyA5zQ8D77##D)D,,x,C99S>L< A%"1o+l1o={KK7 8 r   c                 $   U R                   b  U R                   $ U R                  c  U R                  5         U R                  c  g [        R                  R                  U R                  5      nSn[        U R                  5      * nXU nX@l         U$ )N   )r   r   r%   r<   r=   r>   rG   r   )r   rC   	start_sigend_sigr"   s        r   r"   	Fitli.sign   sv    ==$== >>!IIK~~%ww/	M/W%
r   c                      U R                   nU R                   R                  nUR                  S   S-   U-   S-   U R                  -   n[	        [
        R
                  " U5      5      S:X  a  gg)z=<- considered up to date if there is a file for max_issuedater   /z_*_*r   FT)r
   max_issuedater   r   rG   r;   )r   r#   r
   re   rA   s        r   is_up_to_dateFitli.is_up_to_date|   sc    FF,,ffWo+m;fDHH tyy%&!+r   c                    [        U5      S:X  a  [        S[        R                  S9  SnSn[        R                  " US-   5       GH  n[
        R                  R                  U5      (       d  M*  UR                  S5      (       a  MB  UR                  S5      (       a  MZ  UR                  S	5      (       a  Mr  [
        R                  R                  U5      n[        U5      S
:  a  [        SU 35        M  US   S:X  GaZ  USS nXpR                  R                  ;  a  [        SU 3[        R                  S9  M  U R                  R                  U5      (       d+  [        SU S35        [
        R                  " XUS-   5        GM@  U H  nUR                  U5      (       d  M  US
[        U5      *  n	U	R                  S5      (       a  MB  U	R                  S5      (       a  MZ  [        US-   U	-   5        X;   a  [        U	S-   5        M  [
        R                  R                  U5      (       d  M  [        SU 35        [
        R                  " XUS-   5        M     O[        U5      S:  a  [        SU 3[        R                  S9  GMA  US   S:X  a  U H  n
SU
-   S-   nUR                  U5      (       d  [        SU SU 35        M4  US[        U5      *  n	X;   a  [        U	S-   5        MX  [        SU 35        [
        R                  " XUS-   5        M     U R                  U5      n	U	c  [        U5        GM  X;   a  GM  [
        R                  " XUS-   5        GM     g)z;clears files not having sigsi, uses by delete_useless_fitlir   z fitli: can't work with so sigsisr)   )z.classz.vemli.json.gzz.ranfi.json.gzz.grund.json.gz.json.gz)entsilensugrondusipir:   z.gonez.tofde.json.gzz.natli.json.gzr_   zfitli: alien 
   rO   zfitli: alien dated zfitli: z non didspiz.ranfiz.vemliz sig z
 is sigsiszfitli moves r   ri   zfitli skips z for z is in sigsisN)rG   r0   r1   r2   r;   r<   r=   isfileendswithr>   r
   
issuedatesr   is_it_in_trainrenameremove_grond_ending)r   r$   sigsisendskindsr%   rC   dater,   r"   r   s              r   clear_by_sigsiFitli.clear_by_sigsi   s   v;!4zz#4IIdTk*D77>>$''}}W%% }}-..}}-..77##D)D4y2~dV,-Bx3Abzvv000/v6SZZHzz0066GD656IId7N3C==-- r3s8),C||H-- ||H-- $.3./}cL01 77>>$// L/0IId7N3%  ( TRdV,3::>cc!!D*z1C==--TF%u=> q#c(+C}cO34 L/0IId7N3 " **40C{d}IId7N+U +r   c                     [         R                  R                  U5      nSnU H/  nUR                  U5      (       d  M  UR	                  US5      nUs  $    g )N)z.grosa.json.gzz.grond.json.gzz.grosu.json.gzz.grond.classz.entsi.json.gzr+   )r<   r=   r>   rq   r@   )r   r%   rC   endingsendingr"   s         r   ru   Fitli.remove_grond_ending   sP    ww%5F}}V$$ll62.
  r   c                     SU l         U R                   S-   U l        [        U R                  5       5      n[	        U5      nSU R
                  R                  ;  a  [        U5      nUS   SS nU$ [        R                  " U R
                  R                  S   S5      n[        R                  R                  U5      nUSS	 nU$ )
z<gives the most recent sig for training. This uses the customz.ranfi.jsonr	   grospir   r_   Nr   z*.grond.classi)r   r   sortedrJ   reversedr
   conflistrH   most_recentr   r<   r=   r>   )r   	date_sigsr"   
class_fufirC   s        r   	train_sigFitli.train_sig   s    L&>>E)4..01	Y'	 466;;&YIA,rs#CJ, ''G(<oN
ww
+4Cj
r   c                     [         R                  " U R                  R                  S   S5      nUb  U$ [         R                  " U R                  R                  S   S5      nUb  U$ g)z"make the sig the latest grond filer   z*.grond.json.gzNz*.ranfi.json.gz)rH   r   r
   r   )r   r   s     r   get_last_fufiFitli.get_last_fufi  s]    &&tvv{{7';=NO	 &&tvv{{7';=NO	 r   c                     U R                  5       n[        R                  R                  U5      nUS   S:X  a  USS  nUS S nU$ )Nrn   rO   r_   ro   )r   r<   r=   r>   )r   r   	last_banar   s       r   get_last_sigFitli.get_last_sig  sK    &&(	GG$$Y/	R=C!"#ITc?r   c                    U R                   nSnU[        U R                   R                  5      :  a[  U R                   R                  U   nU R                  U5      nUc  MR  [        R
                  R                  U5      nUSS nX`l        U$ g )Nr   r_   ro   )r
   rG   rr   ranfi_of_issuedater<   r=   r>   r   )r   r
   count	issuedater   r   r   s          r   get_last_ranfi_sigFitli.get_last_ranfi_sig!  s    FF c$&&++,,))%0I//	:I ((3I C(H$MOr   c                     U R                   R                  S   nUS-   nU R                   R                  R                  X#S9nUc  g U$ )Nr   z_*_*.ranfi.json.gzr   )r
   r   r    r!   )r   r   r$   r;   r   s        r   r   Fitli.ranfi_of_issuedate8  sI    vv{{7#//FFLL..t.A	r   )	r   r   r   r
   r   r   r   r   r   )N)NF)FF)F)__name__
__module____qualname____firstlineno__r   r%   r7   rD   rJ   r\   r"   rf   rz   ru   r   r   r   r   r   __static_attributes__ r   r   r   r      sQ     D
Rh&P.r   r   )r;   r<   r1   r3   rH   r   r   r   r   r   r   <module>r      s#     	 
   q qr   