o
    *cC                     @   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   sr   || _ t| j | _t| j | _t| j | _| j | _i | _i | _	| j j
d | _t|dr4| j j| _d S || _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r0| s.td| d|  dS |dkrAt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fufiscount_fufisr   r   r   find.   s   
z
Mocla.findc                 C   sZ   |  |d}|du rdS tj|}|dd }|| jvr%|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 rd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_fufir0   r1   r2   replace)r   r   r   r*   
last_modellast_model_fufir6   r   r   r   last_sigN   s   zMocla.last_sigTNc                 C   s   |r#| j j||d}tj|r#td| d  |r!| ||| |S | |}| jj	| j
d }	|d u rL| jr<td | |}
|	d }d| d }n>| jrUtd	|  | j||||d
}
|
d u rqtd| d | tjd dS |	d | d }d| d | }| jrtd|
  t| t||
| jgrd|
 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.predipredict__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   r4   r0   r1   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_asembrJ   do_cache
asemb_fufir6   r*   
vemte_fufi
predi_fufiloggerrunnerruner	side_fufir   r   r   runZ   sv   





z	Mocla.runc                 C   sz  |du rt dtjd dS | jd | d | d }tj|r"|S | jd | d | d | jj }tj|r@| 	|}|S | 
|}|dur^t d| d	  t|| | 	|}|S | jj|d
}|du rqt d|  dS d| }	t |	 | j||d}
|
du rt d|  dS |rt d|
  || j_| j| j_|| j_t d|
  | jj|
|d}|du rdS | 	|}|S )zB find get material to work on a sig, if needed with only the kriktNzmocla has no model, run train.rD   r!   rG   z.txtz.vemlizmocla uses remote vemlis .)r6   z+mocla can't continue to dig, no vemlis for z$mocla needs to call get_alfit() for rC   zmocla sees no alfit for zmocla needs to make vemlis for z mocla needs to build the vemlis )r   rO   rP   r   r0   r1   rK   r   extvemte_from_vemliget_from_trainshutilcopy2r   get	get_alfitr6   r
build_fufi)r   r@   r6   r   r   r\   
vemli_fufigot_from_trainr   note
alfit_fufir   r   r   rN      sN   





z	Mocla.digc                 C   sL  | j d | d }tj|r|S | | tj|r(|r&td| d |S |r2td| d  | j d | d }tj|sT| | tj|sTtd|  d	S |r^td
| d t| jd| _| j | j_ | jj	||d}|d	u rtd| t
jd d	S |rtd|  t| jd| _| j | j_ | j	|}tj|r|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 rc   rH   rC   zmocla can't get the tofde for rD   zmocla found the tofde )r   r0   r1   rK   rf   r   r   r   tofdeupdate_for_krikt_fufirO   rP   r   alfit)r   r@   r   rp   
krikt_fufi
tofde_fufir   r   r   rj      sH   



zMocla.get_alfitc                 C   sT   |}|dd }| d| d}| dd| d }tj|r(t|| |S d S )Niirc   r8   /class/r!   )r<   r0   r1   rK   rg   rh   )r   
local_fufir4   kindr   r   r   rf     s   zMocla.get_from_trainc                 C   s   | dr|dd}ntd|  |dd}|dd}tj|r1t|s1td|  |S t|d}t	|}|D ]}|
d	||  d
  q=|  td|  | | |S )Nz.vemli.json.gzz.classz!mocla: class case, vemli_fufi is z.json.gzz/vemli/rv   mocla does not renew w0 
mocla wrote )endswithr<   r   r0   r1   rK   rQ   is_emptyopenloadwritecloserU   )r   rm   
class_fufi
class_file
vemli_datapapidr   r   r   re     s    



zMocla.vemte_from_vemlic              
   C   s$  t j|}t j|}|dd }|d | d }t||gs)td|  |S t|d}t|d}z| }W n$ t	y] }	 ztt
|	 td| tjd	 t  W Y d
}	~	nd
}	~	ww |D ]%}
d|
vrmtd|
  q`|
d}|d }t|d
d d }|| q`|  td|  |S )z*generated from the vemte_fufi for an issuer   
   r!   z.papidry   rz   rk   zmocla error reading rD   N#zskip z # r"   r|   r}   )r0   r1   dirnamer2   rQ   rS   r   r   	readlinesUnicodeDecodeErrorstrrO   rP   quitsplitr   r   r   )r   r\   fudir5   r@   rV   rU   r   class_linesr   
class_linepartsr   r   r   r   rU   $  s8   


zMocla.papid_filec                 C   s  | dd}t|||gstd| d  |S t|d}t|d}| }| }t|}t|}	|d |	kr[d| dt| d	 }
|
d
| dt|	 d 7 }
t|
tj	d d S z|d }W n t
yr   t|tj	d Y d S w d}t|d}d }|dkrd}n+|dkrd}n$|dkrtd| j tj	d t| j t  ntd| d d | |dd  }|t|k r|| d}|| }|d ||  }|| |d7 }|t|k s|  |  |  |S )NrF   z.sidezmocla finds that z needs no renewal.rk   r"   zmocla: z's z lines zdon't go with z + 1 rD   r   rz   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<   rQ   rS   r   r   r   r'   r   rO   rP   
IndexErrorr;   r0   remover   	Exceptionr   r   r   )r   r]   rV   ra   rU   
predi_filepapid_linespredi_lines	len_predi	len_papiderr	head_linecountrW   plus_pospredi_partsprobaliner   r   r   rW   G  sj   



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  q,|  td|  |S )	Nr   )Grundr    z/grund.classrz   r{   r|   r}   )r   grundr   r%   r   r   r   rm   rQ   r   r   r   )
r   r   r   r   r   r*   r   r   vemlisr   r   r   r   rM     s   


zMocla.grund_vemte_fufic                 C   s   | j }i }|j| jd d }| d| d}t||gs*td| d|  |S t| d|d< d	|d
< td|  tj	|sHt
| |jjd|||d td|  d S )Nr    z/../../cache/createdr!   z.htmlrI   z over z'source'	back_fromz	'created'stagezmocla reads papers_screen)paramszmocla writes )r   r%   r   rQ   rS   r   rR   r0   r1   isdirmkdirt
via_system)r   r[   r   r@   r   r   out_dir
cache_fufir   r   r   rL     s   

zMocla.cache_selection_screen)F)FTNT)__name__
__module____qualname__r   r   r.   r   r?   rb   rN   rj   rf   re   rU   rW   rM   rL   r   r   r   r   r	      s"    



K
9%
#:r	   )r&   r0   rO   rg   rQ   rs   r   r   r   rq   r   r   r   r`   r   r   r   requests.utilsr   r	   r   r   r   r   <module>   s    