a
    V.bB                     @   s   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 d dlmZ G d	d
 d
ZdS )    N)Alfit)Asemb)Tofde)Ranfi)Runer)Vemli)unquotec                   @   s   e Zd Zd ddZd!ddZdd Zd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 Zdd Zdd Zdd ZdS )%MoclaFc                 C   sp   || _ t| j | _t| j | _t| j | _| j | _i | _i | _	| j j
d | _t|drf| j j| _n|| _d S )Nclass
do_verbose)er   asembr   vemlir   ranfisigs_availableall_sigs_usedmodelsdirsfolderhasattrr   )selferimpr    r   !/home/ernad/ernad/python/mocla.py__init__   s    
zMocla.__init__c                 C   s0   | j }|jD ]}| | q|r*t| j | jS )N)r   liveadd_all_sig_usedprintr   )r   r   r   repcoder   r   r   scan_sigs_used&   s    

zMocla.scan_sigs_usedc                 C   s   | j }|j| jd }|d d | }t|}t|}|dkr`| s\td| d|  dS |dkrtd	| d
| d|  |d S )z!what should be 'model' or 'train'mocla/z*.r   zmocla sees no z
 file for N   mocla sees  z files for )r   reportr   globlen
is_testingr   )r   r   whatr   	mocla_dirglob_stringfufisZcount_fufisr   r   r   find.   s    
z
Mocla.findc                 C   sZ   |  |d}|du rdS tj|}|dd }|| jvrJ|g| j|< dS | j| dS )z)this is for all sigs used, by any repcodemodelNr   iT)r-   ospathbasenamer   append)r   r   fufibanasigr   r   r   r   @   s    
zMocla.add_all_sig_usedc                 C   s`   | j }|j| jd }|jj|dd}|du r2dS || _|jj|dd}tj|	dd}|S )z3get model for a report, should not require a searchr    z*.model)searchNz.model )
r   r%   r   dlast_by_mtime
model_fufir/   r0   r1   replace)r   r   r   r*   
last_modelZlast_model_fufir5   r   r   r   last_sigN   s    zMocla.last_sigTNc                 C   s(  |rF| j j||d}tj|rFtd| d  |rB| ||| |S | |}| jj	| j
d }	|d u r| jrxtd | |}
|	d }d| d }n~| jrtd	|  | j||||d
}
|
d u rtd| d | tjd dS |	d | d }d| d | }| jrtd|
  t| t||
| jgrxd|
 d }|| jd | 7 }t| jd}td|  ||| ntd|  tj|std|  d S td|  | |
| _| || j}|d u rtdtjd d S td|  |r$| j j|||d}|d u r|S | ||| |S )N)r   	issuedater#   z, no donere, assemble finished.r    zmocla has no issuedatez/grund.prediZpredict_Z_grundzmocla has issuedate r   zmocla has no vemte for z at fileFr!   .predi_zclass fufi is z/usr/bin/svm-predict -b 1 r$   r   zmocla runs mocla doneres zmocla: I don't see zmocla: predi is z&mocla can't continue with no side filezmocla: side is )r   r>   doc_fufi)r   r3   r/   r0   isfiler   cache_selection_screenr=   r   r%   r   r   grund_vemte_fufidigsysstderrfilerpreparedonerer:   r   run_with_lock
papid_file
papid_fufi	side_filebuild)r   r   r>   r   do_asembrF   Zdo_cache
asemb_fufir5   r*   
vemte_fufi
predi_fufiloggerrunnerruner	side_fufir   r   r   runZ   sv    






z	Mocla.runc                 C   s  |du rt dtjd dS | jd | d | d }tj|rD|S | jd | d | d | jj }tj|r| 	|}|S | 
|}|durt d| d	  t|| | 	|}|S | jj|d
}|du rt d|  dS d| }	t |	tjd | j||d}
|
du r"t d|  dS |r4t d|
  || j_| j| j_|| j_t d|
  | jj|
|d}|du rxdS | 	|}|S )zB find get material to work on a sig, if needed with only the kriktNzmocla has no model, run train.r@   r!   rC   z.txtz.vemlizmocla uses remote vemlis .)r5   z+mocla can't continue to dig, no vemlis for z$mocla needs to call get_alfit() for r?   zmocla sees no alfit for zmocla needs to make vemlis for z mocla needs to build the vemlis )r   rK   rL   r   r/   r0   rG   r   extvemte_from_vemliget_from_trainshutilcopy2r   get	get_alfitr5   r
build_fufi)r   r>   r5   r   r   rW   
vemli_fufiZgot_from_trainr   error
alfit_fufir   r   r   rJ      sN    







z	Mocla.digc                 C   sR  | j d | d }tj|r"|S | | tj|rP|rLtd| d |S |rdtd| d  | j d | d }tj|s| | tj|std|  d	S |rtd
| d t| jd| _| j | j_ | jj	||d}|d	u rtd| t
jd d	S |rtd|  t| jd| _| j | j_ | j	|}tj|rN|S d	S )z&This takes the approach from the kriktr!   z.alfit.json.gzz
mocla got z from training.zmocla needs to get alfits z from krikts.z.krikt.json.gzzmocla has no krikt for Nzmocla found the krikts r^   rD   r?   zmocla can't get the tofde for r@   zmocla found the tofde )r   r/   r0   rG   ra   r   r   r   tofdeupdate_for_krikt_fufirK   rL   r   alfit)r   r>   r   rj   
krikt_fufi
tofde_fufir   r   r   re      sH    




zMocla.get_alfitc                 C   sT   |}|dd }| d| d}| dd| d }tj|rPt|| |S d S )Niir^   r7   /class/r!   )r;   r/   r0   rG   rb   rc   )r   Z
local_fufir3   kindr   r   r   ra      s    zMocla.get_from_trainc                 C   s   | dr|dd}n$td|  |dd}|dd}tj|rbt|sbtd|  |S t|d}t	|}|D ]}|
d	||  d
  qz|  td|  | | |S )Nz.vemli.json.gzz.classz!mocla: class case, vemli_fufi is z.json.gzz/vemli/rp   mocla does not renew w0 
mocla wrote )endswithr;   r   r/   r0   rG   rM   is_emptyopenloadwritecloserQ   )r   rh   
class_fufi
class_file
vemli_datapapidr   r   r   r`   
  s     



zMocla.vemte_from_vemlic              
   C   s$  t j|}t j|}|dd }|d | d }t||gsRtd|  |S t|d}t|d}z| }W nH t	y }	 z0tt
|	 td| tjd	 t  W Y d
}	~	n
d
}	~	0 0 |D ]J}
d|
vrtd|
  q|
d}|d }t|d
d d }|| q|  td|  |S )z*generated from the vemte_fufi for an issuer   
   r!   z.papidrr   rs   rf   zmocla error reading r@   N#zskip z # r"   ru   rv   )r/   r0   dirnamer1   rM   rO   r   ry   	readlinesUnicodeDecodeErrorstrrK   rL   quitsplitr   r{   r|   )r   rW   fudir4   r>   rR   rQ   r~   Zclass_linesr   Z
class_linepartsr   r   r   r   rQ   !  s4    


zMocla.papid_filec                 C   s  | dd}t|||gs0td| d  |S t|d}t|d}| }| }t|}t|}	|d |	krd| dt| d	 }
|
d
| dt|	 d 7 }
z|d }W n" ty   t|t	j
d Y d S 0 d}t|d}d }|dkrd}nZ|dkrd}nJ|dkr6td| j t	j
d t| j t  ntd| d d | |dd  }|t|k r|| d}|| }|d ||  }|| |d7 }qZ|  |  |  |S )NrB   z.sidezmocla finds that z needs no renewal.rf   r"   zmocla: z's z lines zdon't go with z + 1 r   r@   rs   zlabels 1 -1
zlabels -1 1
   z	labels 1
z0mocla finds that the prediction failed, removes zmocla can't parse ''z in r$   	)r;   rM   rO   r   ry   r   r'   r   
IndexErrorrK   rL   r:   r/   remover   	Exceptionr   r{   r|   )r   rX   rR   r\   rQ   Z
predi_fileZpapid_linesZpredi_linesZ	len_prediZ	len_papiderrZ	head_linecountrS   Zplus_posZpredi_partsZprobaliner   r   r   rS   D  sb    





zMocla.side_filec           
      C   s   | j }ddlm} || j }|j| jd }|d }t|d}t|j t	|j}|D ]}	|
d||	  d  qX|  td|  |S )	Nr   )Grundr    z/grund.classrs   rt   ru   rv   )r   grundr   r%   r   ry   r   rh   rM   rz   r{   r|   )
r   r   r   r   r   r*   r}   r~   Zvemlisr   r   r   r   rI   v  s    


zMocla.grund_vemte_fufic                 C   s   | j }i }|j| jd d }| d| d}t||gsTtd| d|  |S t| d|d< d	|d
< td|  tj	|st
| |jjd|||d td|  d S )Nr    z/../../cache/createdr!   z.htmlrE   z over z'source'Z	back_fromz	'created'stagezmocla reads Zpapers_screen)paramszmocla writes )r   r%   r   rM   rO   r   rN   r/   r0   isdirmkdirt
via_system)r   rV   r   r>   r   r   Zout_dirZ
cache_fufir   r   r   rH     s    

zMocla.cache_selection_screen)F)F)FTNT)F)F)__name__
__module____qualname__r   r   r-   r   r=   r]   rJ   re   ra   r`   rQ   rS   rI   rH   r   r   r   r   r	      s    

  
K
6
%
#2r	   )r&   r/   rK   rb   rM   rm   r   r   r   rk   r   r   r   r[   r   r   r   Zrequests.utilsr   r	   r   r   r   r   <module>   s   