o
    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|r%|S |d }| j j	j
||d}|s6|S | j|}	| |	}
tj|rI|S |
du sW|
du sWt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r*||kr*q| 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   sz  t |}| jj}|d u r)tj|}d| j d }|d | }|r(td|  n#| j	
dr>| j	d | d | j d }n| j	d | d | j d }t ||gs]|r[td|  |S t|d	 |rktd
|  t| jdkrx| j | _t |}i | _|D ]}| j|| |dd qt| jdkrt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   sX   



zTofde.update_for_krikt_fufic                 C   sd   t |}t |}|d}|d |d  d |d  }t|D ]}||kr)q"td|  q"d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 ]#}| j ||d}|D ]}||vr$|| ||< 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rC|rBtd| d  q|	|| vrX|rWtd| d |	 d  qd| _|d	 |	 }
|ritd
|
  || |	 }|rytdt|  tdd |D r|
|vrd||
< n||
  d7  < t|dkr|rtdt|  q| 	|}|d }|rtdt|  td | 
|||d  }|rtd| d  |D ]*}|d u rq||v r|
d	 | }||vrd||< n||  d7  < |rtd|  q||d k s&|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>   s    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sticksr`   Zahead_startra   ZstickZto_addr   r   r   rP      sp   


1z
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   r`   rT   wordsr   r   r   r`      s   zTofde.longest_aheadc                 C   s6   t |}|| }|dkr||8 }d|d| }|S )Nr   rX   )r<   join)r   Zaheadrf   Z	len_wordsdiffrT   r   r   r   ra      s   zTofde.frase_ahead)r   )TF)FN)F)__name__
__module____qualname__r   r   r	   r3   r'   rN   r@   rP   r`   ra   r   r   r   r   r      s    



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