o
    `p'                     @   sv   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Zd dl	Z	d dl
mZ d dlmZ G dd dZdS )    N)quote)Alfit)Ranfic                   @   s`   e Zd Zdd ZdddZdddZdd
dZdd Zdd ZdddZ	dddZ
dddZdS )Vemlic                 C   s   || _ t| j | _t| j | _| j | _| jd u r$tdtjd t	  d| _
d| _d| j jv r9t| j jd | _i | _i | _| j jd | _d S )Nzvemli can't run with no ranfifilez.json.gz   Zvemli_digitsvemli)er   alfitr   ranfisigprintsysstderrquitextdigitsconfintvrdirsfolder)selferimp r   !/home/ernad/ernad/python/vemli.py__init__   s"   
zVemli.__init__Fc                 C   s   t d ddlm} || jd| _ddlm} || jd| _| jjdd}|D ]}t d|  | ||}|d	u r@t d
tj	d q'd	S )z-> prepare classing vemte filezget the required sigsr   )Fitlir	   )MoclaT)Zfor_classingzvemli: I have work for Nz-vemli can't make testing files can't continuer   )
r   Zfitlir   r
   moclar    Zrequired_sigsprepare_for_sigr   r   )r   	issuedate
do_verboser   r    Zsigsr   outr   r   r   prepare_classing&   s   zVemli.prepare_classingTc           	      C   s:  | j jd }|d | d | d }tj|rtd |S |d | d | d | j }tj|rE| j|}td td|  |S | j	j
|d	}|d
u rXtd|  d
S | jj||d}|d
u rltd|  d
S |rttd|  || _|| _td|  | j||d}|d
u rd
S td| d  | j|}|S )z#used to prepare vemlis for classingclass/_z.classzcase 1.vemlizcase 2zmocla returns )r   Nz+mocla can't continue to dig, no vemlis for r$   zvemli sees no alfit for zmocla needs to make vemlis for z mocla needs to build the vemlis z#vemli calls mocla.vemte_from_vemli())r
   r   ospathisfiler   r   r!   Zvemte_from_vemlir   getZ	get_alfitr   r   
build_fufi)	r   r#   r   r$   r   Z
vemte_fufi
vemli_fufir   
alfit_fufir   r   r   r"   5   s@   zVemli.prepare_for_sig
new_to_oldc                 C   sF   | j d | j | j }t|}|dkrt| |S t|dd}|S )z-> list of alfit filesz/*randomT)reverse)r   r   r   globr5   shufflesorted)r   Zorderglob_string	out_fufisr   r   r   r;   _   s   

zVemli.out_fufisc                 C   s    | j d | d | | j }|S )z--> used by moclar(   r)   )r   r   )r   r#   r   fufir   r   r   out_fufii   s   zVemli.out_fufic           	      C   s   |  || j}tj|std| d | tjd dS d| d | }tj	|dtj
d}| d	 dd
  }|d}t|dk rStd| d | tjd dS |d }|S )zgreps a line from a vemli filezvemli has no file z
 for seed r   Nz/bin/zgrep  T)shellstdoutr   "   zvemli has no seed z in )r=   r   r-   r.   r/   r   r   r   
subprocessPopenPIPEcommunicatedecodesplitlen)	r   r#   papidr<   cmdprocesslinefieldsr	   r   r   r   grepo   s"   
z
Vemli.grepNc                 C   st   | j  }|rtd| j   |dur|| _|D ]}tj|}|dd }|dur0||kr0q| j||d qdS )z:-> makes update from alfit files from issues, for trainingzvemli uses Nr   
   r+   )	r   r;   r   r   r   r-   r.   basenamer1   )r   r$   Zonly_issuedater   Zalfit_fufisr3   banar#   r   r   r   update   s   
zVemli.updatec           	      C   s  t |}d}|du rYtj|}d|v r4tj|s#td|  dS |dd}|d | j | j	 }nOtj
|dkrQ|d | jj d	 | j d
 | j	 }d}n2td| d | jd | d	 | j }| jdrq|| j	7 }n| jdr|d| j	 7 }ntdt ||gstd|  |S t|d t| jdkr| j | _|rtd|  t |}i | _|r|D ]}| j|| d |dd qn|D ]}| j|| |dd qtd|  t || j i | _t| |S )z@--> called by train to get seed vemlis, must return fufi or NoneFNz/krikt.zvemli: mocla does not see z/alfit.z/vemli_zgrund.json.gzr(   r)   z.grundTzvemli can't handle your case ''z/vemliz/classr*   zvemli can't handle your case.zvemli doneres i  r   zvemli loads ar+   zvemli writes )filerget_issuedater-   r.   dirnamer/   r   replacer   r   rR   r
   max_issuedate	Exceptionr   endswithdonerelockerZplacerJ   r   r   r0   loadr   
feed_papiddumpremove)	r   in_fufir$   r#   Zis_it_grundfudir=   drK   r   r   r   r1      sf   


zVemli.build_fufic                 C   s   d}i }| j }|D ]$}|| jvrq	| j| }d|d }	|| |	 }
|
|t|< ||
7 }q	t|}d}t|D ]}t|| | }|t|d t|d|  d 7 }q9|dt| 7 }|| j	|< d S )Nr      r>    :z# )
r   r   countr   mathsqrtr9   strr   r   )r   ZfitsrK   r$   ZsumfZ
numbs_intsr   ZfitnumberlengthaddZ	root_sumfrN   Znumbvalr   r   r   ra      s$   



&zVemli.feed_papid)F)T)r4   )FNN)__name__
__module____qualname__r   r&   r"   r;   r=   rP   rT   r1   ra   r   r   r   r   r      s    


*


2?r   )r7   rD   rk   r-   r5   r   Zrequests.utilsr   rW   r_   r   r   r   r   r   r   r   r   r   <module>   s    