
    )g?                         d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ  G d d	      Zy)
    N)Ishus)Velop)Sigsi)Vemli)Spana)Folderc                       e Zd Z	 	 ddZd Zd Zd Zd Zd ZddZ	d	 Z
d
 ZddZd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zd ZddZy)GrondNc                    || _         d| j                   j                  vry || _        || _        t	        |      | _        t        |      | _        t        ||      | _	        t        |      | _        t        |      | _        t        |      | _        | j                   j                   d   | _        ||| _        n| j'                         | _        | j$                  t)        d       y | j"                  dz   | j$                  z   dz   | _        | j                  j,                  }t/        j0                  |      | _        d | _        i | _        d | _        t;        |d      r|j                  | _        y )Nis_seedable)do_sigfifitlizgrond has no sigfi/_grond.json.gz
do_verbose)econfr   do_tarsir   folderr   ishusr   velopr   vemlir   spanar   sigsidirsfudisigfi
last_sigfiprintfufi
entsi_fufifilerloaddenom	issuedatedatadafushasattr)selferimpr   r   do_filer   r!   s          !/home/ernad/ernad/python/grond.py__init__zGrond.__init__   s    +$ Um5\
584
5\
5\
5\
FFKK(	!DJ*DJ::&'IIOdjj03CC	ZZ**
ZZ
+
	
5,'#..DO    c                     | j                   j                  | j                  d      }|yt        j                  j                  |      }|dd }|S )z!last sigfi from the fufis we havez*_grond.json.gz)searchNi)r   last_by_mtimer   ospathbasename)r)   	last_fufi	last_banar   s       r,   r   zGrond.last_sigfi3   sS    KK--dii5F . H	GG$$Y/	t_
r.   c                     i }| j                   j                  d| j                        }|D ]9  }t        j                  |      }| j
                  j                  |d      s5|||<   ; || _        |S )N
old_to_new)orderr   traspi)r   	out_fufisr   r"   get_issuedater   is_it_inr'   )r)   r'   	fufi_listr    r%   s        r,   	get_dafuszGrond.get_dafus=   sr    JJ((|26** ) >	D++D1I::&&y(;#E)	 
 
r.   c                    | j                   %| j                   | j                  d<   | j                   S d| j                  v r| j                  d   | j                  d   S | j                  j                         }|| j                  d<   |S )+the average size of the issue over the spanT)r   r&   r   average_sizer)   sizes     r,   get_sizezGrond.get_sizeI   sr    ==$!]]DIIcN== $))		# :99S>!zz&&(		#r.   c                 :    | j                   j                         }|S )rA   )r   rC   rD   s     r,   target_sizezGrond.target_sizeT   s    zz&&(r.   c                 n   t        j                  | j                        | _        | j	                         }t        t        |            }d}|D ]V  }t        t        ||               j                  d      }|dz   |z   }|dz  }|dz  dkD  rt        |d       Lt        |       X t        d       t        | d       |D ]*  }|| j                  j                  vst        d	| d
       , | j                  j                  D ]/  }|| j                  j                  vr||vs!t        d	| d       1 y)z/show the samel, relating dates to member countsr             z  endz issuedates grond: z in grond is not in traspiz in training is not in grundN)r"   r#   r    r&   	get_samelsortedliststrlenrjustr   r   active_issuedates
issuedates)r)   samelsamel_datescount_datesr%   valueto_prints          r,   showz
Grond.showY   s   JJtyy)	 T%[)$IE),-.44Q7E 3.H1KQ"hD)h % 	c
\*+$I 8 88	{*DEF % 11I 1 11+	{*FGH 2r.   c                    |t        | j                  j                        }| j                  t	        d       t        j                          | j                         }d}|D ](  }|| _        | j                  |      }|r|dz  }||k\  s( y  y )Nz)grond does not know its fufi, run load().r   rL   )
rU   r   rX   r    r   sysexitr?   r%   
feed_issue)r)   
max_issuesr'   
count_doner%   dones         r,   feed_allzGrond.feed_alls   s    TVV../J99=>HHJ 
I
 'DN??9-Da
Z' r.   c                     d}t        t        |            }|D ]0  }|||   ||   z  | j                  |   z  | j                  |   z  z  }2 || j                  d   z  }|S )z9simple square as the original value for an immature grondr   rB   )rT   rU   r$   r&   )r)   vempas	the_total
len_vempasfitnoaverages         r,   squarezGrond.square   su    	V%
E6jj,-/3zz*/EF FI 
 diin,r.   c                     d}| j                   d   D ]  }| j                   d   |   }||kD  s|}|}  t        d d|        || j                   d<   || j                   d<   | j                   d   S )Nr   pzgrond: highest is z at HV)r&   r   )r)   highestpapidr\   highest_papids        r,   set_highestzGrond.set_highest   s|    YYs^EIIcN5)Ew %	 $
 	"=/gY?@&		# 		#yy~r.   c                     t        | j                  d         D ]E  }| j                  d   |   dd }| j                  j                  ||      r5| j	                  |       G y )Nsr   
   )rS   r&   r   r=   remove)r)   critrs   r%   s       r,   outdatezGrond.outdate   sW    $))C.)E		#u-a3I zz""9d3KK *r.   c                 P   t        t        |            }d}| j                  d   D ]h  }||k(  r	| j                  d   |   }t        t        |            }|D ]5  }||vr|||   ||   z  | j                  |   z  | j                  |   z  z  }7 j d|z  | j                  d   z  }	|	S )Nr   vi C)rT   rU   r&   r$   )
r)   	the_papid
the_vempaslen_the_vempasri   rs   rh   rj   rk   rl   s
             r,   rechenzGrond.rechen   s    S_-	YYs^E	!YYs^E*FS[)J
*Z.>jj,-/3zz./IJ J	   $ i'$))C.8r.   c                 d    | j                   d   |= | j                   d   |= | j                   d   |= y )Nro   r}   rw   )r&   )r)   rs   s     r,   ry   zGrond.remove   s2    IIcN5!IIcN5!IIcN5!r.   c                      y N )r)   rs   r\   s      r,   addz	Grond.add   s    r.   c                 f    t        t        | j                  d               }|| j                  d<   |S )Nro   r~   )rU   rS   r&   )r)   count_papidss     r,   
make_countzGrond.make_count   s,    4		#/0%		#r.   c                 *   | j                         }||k  rt        d| d|        y||z
  }t        t        | j                  d   j                         d d            }d}|D ]-  }t        d	|        | j                  |       |d
z  }||k(  s- y  y )Nzgrund: i have z, less than Fro   c                     | d   S )NrL   r   )items    r,   <lambda>zGrond.cut_to.<locals>.<lambda>   s    Qr.   T)keyreverser   zgrund: cut_to removes rL   )r   r   dictrR   r&   itemsry   )r)   limittotal_papidsgapby_valuer   rs   s          r,   cut_tozGrond.cut_to   s    (5 N<.UGDEU"tyy~335#7'+- . E*5'23KKALs" r.   c           
      ~	   | j                   |   }t        j                  j                  |      }|dd }|| j                  d   v r|st        d| d       yt        d| dd	
       t        j                  |      }t        d       t        j                         | j                  d   |d d <   | j                         }t        t        | j                  d               }|| j                  d<   t        d| d       |dk(  rt        d       |D ]v  }	||	   }
| j                  j                  |
      }|| j                  d   |	<   | j                  |      | j                  d   |	<   |d d | j                  d   |	<   |dz  }||k(  sv n t        d       t        d| j                           t        j"                  | j                   | j                         nt        d       | j%                          t        t        | j                  d               }|| j                  d<   d}d}|D ]  }	|	| j                  d   v r| j                  j                  ||	         }| j'                  |	|      }|dz  }|dz  dk(  rt        d| d       |dk(  rt        d|	        v|| j                  d   kD  r.| j(                  r!t        d|	 d| d | j                  d           | j                  d   | j                  d!   k  r%| j                  dxx   dz  cc<   t        dd	
       nLt        d| j                  d"    d#| j                  d    dd	
       | j+                  | j                  d"          t        |	 d$|        || j                  d   |	<   || j                  d   |	<   |d d | j                  d   |	<   | j%                          |dz  }|dz  dk(  st-        j.                          t        d%| j                           t        j"                  | j                   | j                          |d&d | j                  d   |dd <   t        j                         | j                  d'   |d d <   t        d| j                           t        j"                  | j                   | j                         t        d(|        y ))Nr   rx   izgrond skips z, issuedate seenFgrond loads     …  rN   re   airo   r~   rP   z papidszgrond: filling at startr}   rw   rL   zgrond: initial fill done.zgrond writes zgrond: initial fill not donei  zgrond has done z calcsu"   grond: lowest can’t be zero for rq   zgrond z of z < rB   rp   z leaves at z enters at zgrond writes new    ozgrond finished feeding )r'   r2   r3   r4   r&   r   r"   r#   dater
pretty_nowrF   rU   rS   r   parserm   r    dumpru   r   r   ry   gccollect)r)   r%   do_renewr    banaissuedate_on_banavemlisrE   r   rs   r   parsedcount_changecount_calcsrh   r\   s                   r,   rb   zGrond.feed_issue   sP    zz)$ww% 2J		#.xL&678TF%(b1D!f %*$4$4$6		#tCRy!}}4		#/0%		#~W-.1+,  u))%0(.		#u%(,F(;		#u%(,Sb			#u%!4'   -.M$))-.JJtyy$)),01 	4		#/0%		#E		#&ZZ%%fUm4FKKv.E1KT!Q&}F;< z:5'BCtyy~%??F5'eWC		#7GHIyy~		#.		#!#iR(		#/{499S>:J%PVXYDIIcN+UG;ug./$)DIIcN5!$*DIIcN5!$("IDIIcN5!ALd"a'

)$))56

499dii0W Z &*"R[		#tAbz"$)$4$4$6		#tCRy!dii[)*

499dii('	{34r.   c                    t         j                  j                  | j                        r_t	        d| j                  z   dz   dd       | j                  t        j                  | j                              | _        t	        dd       n"| j                  i       | _        | j                  S | j                         }|| j                  d   k  rt	        d	       | j                  |       | j                  S )
Nr   z ... Tr   )flushrO   re   )r   rB   zgrond needs to trim)r2   r3   isfiler    r   initr"   r#   r&   rF   r   )r)   rH   s     r,   r#   z
Grond.loadC  s    77>>$))$.499,w6dK		%**TYY"78DI&%		"DI99mmo3''(KK$yyr.   c                     i }| j                   d   D ]8  }| j                   d   |   }|dd }||v r||   j                  |       3|g||<   : |S )z holds papids from all issuedatesrw   r   rx   )r&   append)r)   rY   rs   sourcer%   s        r,   rQ   zGrond.get_samelR  sd    YYs^EYYs^E*FqIE!i ''.$)7i  $ r.   c                     d|vri |d<   d|vri |d<   | j                         |d<   d|d<   d|vri |d<   d|vri |d<   d|vri |d<   d	|vri |d
<   || _        | j                  S )z0initial settings when we don't have a grond filero   r}   rB   r   r~   r   rw   r   r   r   )rF   r&   )r)   r&   s     r,   r   z
Grond.init^  s     d?DId?DIMMOS	S	d?DId?DId?DId?DI
 	yyr.   c                    | j                   j                         }|t        dt        j                         y|| j
                  k(  rt        d| t        j                         y| j                          | j                  dz   |z   dz   }t        j                  j                  |      rt        d|        y| j                          t        d| j
                   d	|        | j                         }|D ]  }| j                  ||||           | j                          | j                          | j!                          | j                  dz   |z   dz   }t        j                  j                  |      rt        d| t        j                         t        d
|        t#        j$                  || j&                         y)Nz%grond: no ranfi for current issuedatefileFz
grond has r   r   zgrond will not overwrite zgrond transcribes z to zgrond saves T)r   get_last_ranfir   r`   stderrr   r#   r   r2   r3   r   r{   rQ   transcribe_for_issuedaterecalculater   ru   r"   r   r&   )r)   r   r    rY   r%   s        r,   
transcribezGrond.transcribe}  sm   

))+=9zz#DJJJug&SZZ8		yy3&)9977>>$-dV45"4::,d5':; I))%E)<LM yy3&)9977>>$-dV4zz#TF#$

4#r.   c                    | j                   }|j                  d   dz   |z   dz   |z   dz   }t        j                  j	                  |      st        d       t        d| dd	       t        j                  |      }t        d
       d}|D ]m  }||vr4t        d| d| dt        j                         | j                  |       ;| j                  j                  ||         | j                  d   |<   |dz  }o t        d| d       y )Nr   r   _z.json.gzz#grond: I need the vemli file {fufi}zgrond reads r   r   rN   re   r   z
grond: no z in vemlis for .r   r}   rL   zgrond transcribed z papids.)r   r   r2   r3   r   r   r"   r#   r`   r   ry   r   r   r&   )	r)   r   r%   papidsr   r    r   r   rs   s	            r,   r   zGrond.transcribe_for_issuedate  s    FFvvg$y036>Kww~~d#78TF%(b1D!fEF"
5'1E::'E"$(JJ$4$4VE]$CDIIcN5!AL  	"<.9:r.   c                    | j                          t        | j                  d         }|D ]i  }| j                  || j                  d   |         }t	        t        | j                  d   |         dz   t        |      z          || j                  d   |<   k t        j                  | j                  | j                         y )Nro   r}   u    → )	r   rS   r&   r   r   rT   r"   r   r    )r)   r   rs   	new_values       r,   r   zGrond.recalculate  s    diin%EE499S>%+@AI#diinU+,w6YGH$-DIIcN5!  	

499dii(r.   c                     |t        | j                  j                        }| j                         }t	        |      d   }t        |       t                y )Nr   )rU   r   rX   r'   rS   r   quit)r)   rc   r'   first_issues       r,   clear_outdatedzGrond.clear_outdated  sA    TVV../J

5k!nkr.   )NNNFr   )r:   )F)__name__
__module____qualname__r-   r   r?   rF   rH   r^   rf   rm   ru   r{   r   ry   r   r   r   rb   r#   rQ   r   r   r   r   r   r   r.   r,   r
   r
      s    6:*/@
	
I4*

&"
$bH
>@;()r.   r
   )r"   r2   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r.   r,   <module>r      s2     	 
 	       p pr.   