a
    V`                       @   sZ   d dl Z 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	 G dd dZ
dS )    N)Krikt)Natlic                   @   sh   e Zd Zdd ZdddZddd	ZdddZdddZdd ZdddZ	dddZ
dd Zdd Zd
S )Tofdec                 C   s^   || _ t| j | _t| j | _| j | _| jdu r<td| jj| _| j j	d | _
i | _dS )zdetermine frases in S kritNz$tofde can't run without a nafli_fufitofde)er   kriktr   natlifufiZ
natli_fufi	Exceptionsigdirsfolderd)selferimp r   !/home/ernad/ernad/python/tofde.py__init__   s    

zTofde.__init__
new_to_oldc                 C   s:   | j d }t|}|dkr*t| |S t|dd}|S )z/-> list of tofde files, excludes reports tofdesz
/*.json.gzrandomT)reverse)r   globr   shufflesorted)r   orderglob_string	out_fufisr   r   r   r       s    


zTofde.out_fufisTFc                 C   s   | j  rtd d}| j}| jj}| d| d| d}tj|rJ|S |d }| j j	j
||d}|sl|S | j|}	| |	}
tj|r|S |
du s|
du std	|  |S )
z&-> get the tofde fufi for an issuedatez#I set do_update to false on testingF/_.json.gzz
_*.json.gz)searchNztofde return on outdated )r   
is_testingprintr   r   r   ospathisfiler   last_by_mtimer   r	   update_for_krikt_fufi)r   	issuedateZ	do_update
do_verboseZ	tofde_dirr   r	   r    	last_fufiin_fufioutr   r   r   r	   *   s&    

z
Tofde.fufiNc                 C   sh   | j jdd}|r"td| jj  |D ]<}tj|}|dd }|durT||krTq&| j||d q&dS )z -> makes update from krikt filesr   )r   ztofde uses r   
   Nr)   )	r   r   r"   r   r   r#   r$   basenamer'   )r   r)   only_issuedatekrikt_fufisr	   banar(   r   r   r   updateC   s    zTofde.updatec           	      C   s~  t |}| jj}|d u rRtj|}d| j d }|d | }|rtd|  nF| j	
dr|| j	d | d | j d }n| j	d | d | j d }t ||gs|rtd|  |S t|d	 |rtd
|  t| jdkr| j | _t |}i | _|D ]}| j|| |dd qt| jdkrFtd| tjd d S t || j td|  t| t | i | _|S )Nztofde.r   r   ztofde: seed case to z/classr   z.tofde.json.gzztofde doneres i  ztofde loads r   Fr.   ztofdes got nothing from )fileztofde wrote )filerget_issuedater   r)   r#   r$   dirnamer   r"   r   endswithdonerelockerplacelenr   r   getloadf
feed_papidsysstderrdumpremoveclear_by_issuedate)	r   r	   r)   r(   fudir2   out_fufir   papidr   r   r   r'   Q   sV    



zTofde.update_for_krikt_fufic                 C   sd   t |}t |}|d}|d |d  d |d  }t|D ]}||krRqDtd|  qDdS )z:clear old versions of the out file, after new one is saved.r   r   z.*.   zI need to remove N)r#   r/   r7   splitr   r"   )r   r	   r2   rF   partsr   
found_fufir   r   r   	clear_old   s    


zTofde.clear_oldc                 C   sn   i }d|vrd S |d D ]F}| j ||d}|D ].}||vrH|| ||< q.||  || 7  < q.q|| j|< dS )NSr.   T)scanr?   )r   r   rH   r)   foundpartfrasesfraser   r   r   r@      s    
zTofde.feed_papidc                 C   s  | j |}| }t|}i }| j}d}|r>td| d  ||d k r|d7 }|| }||d  }	||vr|r>td| d  q>|	|| vr|r>td| d |	 d  q>d| _|d	 |	 }
|rtd
|
  || |	 }|rtdt|  tdd |D rN|
|vrd||
< n||
  d7  < t|dkrN|r>tdt|  q>| 	|}|d }|r~tdt|  td | 
|||d  }|rtd| d  |D ]`}|d u rq||v r|
d	 | }||vrd||< n||  d7  < |rtd|  qq>|S )Nr   rJ      z
no first ''z' no 'r    zbase:zsticks c                 s   s   | ]}|d u V  qd S )Nr   ).0xr   r   r   	<genexpr>       zTofde.scan.<locals>.<genexpr>zpass at zlongest_ahead 	remainingzremaining 'z	I append )r   process_fieldrK   r<   r   r"   Zextentstranylongest_aheadfrase_ahead)r   rR   r)   Ztermsmax_lenrS   r   Zcount_startfirstseconbaseZsticksra   Zahead_startrb   ZstickZto_addr   r   r   rP      sl    






z
Tofde.scanc                 C   s8   d}|D ]*}|du rq|  }|t|k rt|}q|S )z measures the longest frase aheadr   N)rK   r<   )r   rS   ra   rT   wordsr   r   r   ra      s    
zTofde.longest_aheadc                 C   s6   t |}|| }|dkr ||8 }d|d| }|S )Nr   rX   )r<   join)r   Zaheadrg   Z	len_wordsdiffrT   r   r   r   rb      s    zTofde.frase_ahead)r   )TF)FN)F)F)F)__name__
__module____qualname__r   r   r	   r3   r'   rN   r@   rP   ra   rb   r   r   r   r   r      s   




/

=r   )r   r#   rA   r   r5   r:   r   r   r   r   r   r   r   r   r   <module>   s   