o
    Oc@%                     @   sZ   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Zd dl	m
Z
 G dd dZdS )    N)Dexisc                   @   sJ   e Zd Zdd Zdd ZdddZdd	 ZdddZdddZdd Z	dS )Asembc                 C   sT   || _ t| j | _|jd |jd d| _d|jd i| _d|jd i| _i | _d S )Namfernad)aer   r   )r   r   dexisnsnsansedocache)selferimp r   !/home/ernad/ernad/python/asemb.py__init__   s   zAsemb.__init__c                 C   s*   | j }|j| jd }|d | d }|S )z.--> called by class to see if out_fufi exisitsmocla/.amf.xml.gz)r   reportdirs)r   repcode	issuedater   	mocla_dirout_fufir   r   r   fufi   s   z
Asemb.fufiNc                 C   sx  | j }i | _i | _|du r| j j}|du rtd dS | || _|dur*t|}|du r;|j	}|du r;td dS |j
| jd }t|drQ|jdurQ|j}n|d | d }|d | d }|du ritd	t||gsxtd
|  |S td| d|  | jj||d}|du rtdtjd |du r|d | d }tj|std|  dS || _| | t| j}	|	}
d}|j| }t|| _| jjd| j jj d}t|dkr|d j!}|}|"drt#|dd }zt#|}W n t$y   |j%d }Y nw d|j%v r|j%d }|dur2|"dr.t#|dd d }t&||	 }
nt&|}
| j j'(|| _| j j')| j| _*t+t,|j-d d}||_!d|_.t+t,|j-d d}| j/|_!d|_.t+t,|j-d d}| j0|_!d|_.t+t,|j-d d}t1|	|_!d|_.| j*2| | j*2| | j*2| | j*2| | 3|
 | jj4|dd td |  |S )!z*build the amf file, use doc_fufi for brownNzasemb needs a repcode.zasemb needs an issuedate.r   
given_fufir   z.sider   zasemb needs a side fufizasemb does not renew zasemb: dexis.set_issuedate(z, doc_fufi=)doc_fufiz%asemb can not continue without dexis.filezasemb can't start without z//e:truncate)
namespacesr   %truncated   r   r   
entropyaverent
issue_size   )compressionzasemb wrote )5r   papnuspapwesgiven_repcodeprintlast_sigsigfilerget_issuedategiven_issuedater   r   hasattrr   	Exceptiondonerer   set_issuedatesysstderrospathisfile	side_fufiparse_side_fufilenreconsetparserepdocxpathabovonsmaptextendswithfloat
ValueErrorconfintxwrap_file_with_amfget_colcol_eleElementQNamer	   tailr&   r'   strappendcompose_docswrite)r   r   r   r   r   r   r=   r   outr(   max_docsr#   
recon_fufi	truncatesnumber_truncateissuedate_eleentropy_eleaverent_eleissue_size_eler   r   r   build$   s   









zAsemb.buildc                 C   s   | j }d}| j}| jD ]r}tjd|d}d|_| |}| j| }tjt|j	d dt
|t|d}	d|	_||	 d|_|| tjt|j	d dt
| j| | jt|d	}
d|
_||
 d|_| j| d|_|d
7 }||kr} d S qd S )Nr   haspart)rF   r%   r   sausage)decimshonuitem)weight	criterionpoletr)   )r
   r   r,   rA   rQ   rS   compose_docr+   rR   r	   rT   shonusmakerU   r0   letnusrP   )r   rY   r
   
count_docsr   papidhaspart_eletext_elenumbersausage_eleitem_eler   r   r   rV      s>   





zAsemb.compose_docsFc                 C   sl   || j v r
| j | S |rtd| d ddd | j| }|r'tddd t|}d|_|| j |< |S )	Nzfetch z ...  T)endflushdone)rw   r%   )r   r.   r   fetchdecoderA   
fromstringrS   )r   ro   
do_verboserX   docr   r   r   rj      s   



zAsemb.compose_docc              	   C   s  |duri | _ i | _|}|| _| j}t|d}i }d}d}| D ]}|dd }|d}t|dk r=td| d  q!|d }	|	d	krHd}	n7|	d
sR|	dr|	j	d
 }
|
d }	zt
|	}	W n tyz   t|	}td| tjd d}	Y nw |	d }	zt
|	}	W n ty   t|	}td| tjd d}	Y nw |	||d < |	dkr||	t|	d 8 }|d7 }|| j |d < q!tt|d| _ttd| | d}t|| _t||jdd}|D ]	}|| | j|< q| jS )z%stores in self.weight and self.numberNrr   r!   	   zbad parts with line ''ru   r   ze-zasemb can't parse weight r   r$   r)   T)keyreverse)r+   r,   r=   open	readlinessplitr?   r.   rH   	partitionrI   rJ   rT   r8   r9   mathlogroundr&   r'   sortedget)r   r   r=   	side_filepapwern   r&   linepartsrg   weightsprint_weightr'   sorted_papidsro   r   r   r   r>      sj   





zAsemb.parse_side_fufic                 C   s`   | j }|j| jd }|jj|dd}|du rdS || _|jj|dd}tj|	dd}|S )zget model for a reportr   z*.model)searchNFz.modelru   )
r   r   r   dlast_by_mtime
model_fufir:   r;   basenamereplace)r   r   r   r   
last_modellast_model_fufir0   r   r   r   r/      s   zAsemb.last_sig)NNN)F)N)
__name__
__module____qualname__r   r   ra   rV   rj   r>   r/   r   r   r   r   r      s    
]

?r   )r   r:   r8   
lxml.etreeetreerA   r1   rm   rk   r   r   r   r   r   r   r   <module>   s    