a
    ¦¾deE…  ã                   @   s  d dl Z d dlZzd dlmZ W n   d dlmZ Y n0 ze W n eyX   eZY n0 G dd„ dƒZG dd„ deƒZG dd	„ d	eƒZ	G d
d„ deƒZ
G dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG d d!„ d!ƒZd"d#„ ed$ƒD ƒZd%d#„ ed$ƒD ƒZed&ƒD ]Zd'e> ee< �qjed&d$ƒD ]:Zeed(  eed)  A eed*  A eed&  A ee< �qˆed+ƒD ]Zeeee < �qÌG d,d-„ d-ƒZG d.d/„ d/ƒZG d0d1„ d1ƒZdS )2é    N)Úzip_longest)Úizip_longestc                   @   s\   e Zd ZdZdZdZdd„ Zdd„ Zedd„ ƒZ	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚQRNr   c                 C   s   | j r|   |¡st‚|| _d S ©N)ÚvalidÚ
ValueErrorÚdata©Úselfr   © r   ú]/var/www/sistema_ama/venv/lib/python3.9/site-packages/reportlab/graphics/barcode/qrencoder.pyÚ__init__*   s    zQR.__init__c                 C   s
   t | jƒS r   ©Úlenr   ©r
   r   r   r   Ú__len__/   s    z
QR.__len__c                 C   sF   | j d u rdS tt| ƒt| j ƒƒ\}}|t| j ƒ t| j d |… ƒ S ©Nr   )ÚbitsÚdivmodr   Úsum)r
   ÚqÚrr   r   r   Ú	bitlength2   s    
zQR.bitlengthc                 C   sV   d|  k rdk r"n n
| j d S |dk r4| j d S |dk rF| j d S td| ƒ‚d S )Nr   é
   é   é   é)   é   zUnknown version: )Ú
lengthbitsr   )r
   Úverr   r   r   ÚgetLengthBits9   s    


zQR.getLengthBitsc                 C   s
   t | jƒS r   r   r   r   r   r   Ú	getLengthB   s    zQR.getLengthc                 C   s
   t | jƒS r   )Úreprr   r   r   r   r   Ú__repr__E   s    zQR.__repr__c                 C   s2   |  | jd¡ |  |¡}|r.|  t| jƒ|¡ d S )Né   ©ÚputÚmoder    r   r   ©r
   ÚbufferÚversionZlenbitsr   r   r   Úwrite_headerH   s    
zQR.write_headerc                 C   sŒ   |   ||¡ tt| jƒg| j Ž D ]d}d}d}t| jƒD ]@}|| d ur8|t| jƒ9 }|| j || ¡7 }|| j	| 7 }q8| 
||¡ q"d S r   )r+   r   Úiterr   ÚgroupÚranger   ÚcharsÚindexr   r&   )r
   r)   r*   Úgr   ÚnÚir   r   r   ÚwriteN   s    zQR.write)Ú__name__Ú
__module__Ú__qualname__r   r   r-   r   r   Úpropertyr   r    r!   r#   r+   r4   r   r   r   r   r   %   s   
	r   c                   @   s,   e Zd Ze d¡jZdZdZdZ	dZ
dZdS )ÚQRNumberz[0-9]*$Ú
0123456789)r$   é   r;   r;   r   )r   é   é   N©r5   r6   r7   ÚreÚcompileÚmatchr   r/   r   r-   r'   r   r   r   r   r   r9   Z   s   r9   c                   @   s,   e Zd Ze d¡jZdZdZdZ	dZ
dZdS )Ú
QRAlphaNumz[-0-9A-Z $%*+./:]*$z-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:)é   é   r   )é	   é   é   Nr>   r   r   r   r   rB   b   s   rB   c                   @   s,   e Zd ZdZdZdZdZdd„ Zdd„ Zd	S )
Ú
QR8bitByte)é   r   r$   )rI   é   rJ   c                 C   s"   t |tƒr| d¡| _n|| _d S )Nzutf-8)Ú
isinstanceÚunicodeÚencoder   r	   r   r   r   r   p   s    
zQR8bitByte.__init__c                 C   s:   |   ||¡ | jD ]"}t|tƒr(t|ƒ}| |d¡ qd S )NrI   )r+   r   rK   ÚstrÚordr&   )r
   r)   r*   Úcr   r   r   r4   v   s
    

zQR8bitByte.writeN)	r5   r6   r7   r   r-   r'   r   r   r4   r   r   r   r   rH   j   s   rH   c                   @   s4   e Zd ZdZdZdZdZdd„ Zdd„ Zd	d
„ Z	dS )ÚQRKanji©rG   r   rI   ©rI   r   r<   c                 C   s0   z|   |¡| _W n ty*   tdƒ‚Y n0 d S )NzNot valid kanji)Úunicode_to_qrkanjir   ÚUnicodeEncodeErrorr   r	   r   r   r   r   ƒ   s    zQRKanji.__init__c                 C   s^  g }t |ƒD �]J\}}z<| d¡}ztt|ƒ\}}W n tyN   |\}}Y n0 W nb ty� } z&td|||d |jd ƒ‚W Y d }~n.d }~0  ty´   td|||d dƒ‚Y n0 |d> |B }d|  krÖdkrün n"|d8 }|d	@ d? d
 |d@  }nRd|  k�rdk�r:n n"|d8 }|d	@ d? d
 |d@  }ntd|||d dƒ‚| |¡ q|S )Nz	shift-jisZqrkanjir   r$   úillegal multibyte sequencerI   i@�  iüŸ  é ÿ  éÀ   éÿ   i@à  i¿ë  i@Á  ©	Ú	enumeraterM   ÚmaprO   Ú	TypeErrorrU   Úargsr   Úappend©r
   r   Úcodesr3   rP   ÚdÚer   r   r   rT   ‰   s4    
.ÿ
ÿzQRKanji.unicode_to_qrkanjic                 C   s(   |   ||¡ | jD ]}| |d¡ qd S ©NrG   ©r+   r   r&   ©r
   r)   r*   rb   r   r   r   r4   ¥   s    
zQRKanji.writeN)
r5   r6   r7   r   r-   r'   r   r   rT   r4   r   r   r   r   rQ   }   s   rQ   c                   @   s<   e Zd ZdZdZdZdZdd„ Zdd„ Zd	d
„ Z	dd„ Z
dS )ÚQRHanzirR   r   rG   rS   c                 C   s0   z|   |¡| _W n ty*   tdƒ‚Y n0 d S )NzNot valid hanzi)Úunicode_to_qrhanzir   rU   r   r	   r   r   r   r   °   s    zQRHanzi.__init__c                 C   s^  g }t |ƒD �]J\}}z<| d¡}ztt|ƒ\}}W n tyN   |\}}Y n0 W nb ty� } z&td|||d |jd ƒ‚W Y d }~n.d }~0  ty´   td|||d dƒ‚Y n0 |d> |B }d|  krÖdkrün n"|d8 }|d	@ d? d
 |d@  }nRd|  k�rdk�r:n n"|d8 }|d	@ d? d
 |d@  }ntd|||d dƒ‚| |¡ q|S )NÚgb2312Zqrhanzir   r$   rV   rI   i¡¡  iþª  rW   é`   rY   i¡°  iþú  i¡¦  rZ   r`   r   r   r   rh   ¶   s4    
.ÿ
ÿzQRHanzi.unicode_to_qrhanzic                 C   s>   |  | jd¡ |  dd¡ |  |¡}|r:|  t| jƒ|¡ d S )Nr$   r   r%   r(   r   r   r   r+   Ò   s
    
zQRHanzi.write_headerc                 C   s(   |   ||¡ | jD ]}| |d¡ qd S rd   re   rf   r   r   r   r4   Ù   s    
zQRHanzi.writeN)r5   r6   r7   r   r-   r'   r   r   rh   r+   r4   r   r   r   r   rg   ª   s   rg   c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚQRECIé   ©r   r   r   c                 C   s(   d|  k rdk sn t dƒ‚|| _d S )Nr   i?B zECI out of range)r   r   r	   r   r   r   r   ä   s    zQRECI.__init__c                 C   sd   |   ||¡ | jdkr&| | jd¡ n:| jdkrD| | jdB d¡ n| jdkr`| | jdB d¡ d S )	Né   rI   iÿ?  i €  rJ   iÿÿ i  À é   re   ©r
   r)   r*   r   r   r   r4   ê   s    


zQRECI.writeN©r5   r6   r7   r'   r   r   r4   r   r   r   r   rk   à   s   rk   c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚQRStructAppendr;   rm   c                 C   sR   d|  k rdksn t dƒ‚d|  k r2dks<n t dƒ‚|| _|| _|| _d S )Nr   rJ   zpart out of range [1,16]ztotal out of range [1,16])r   ÚpartÚtotalÚparity)r
   rs   rt   ru   r   r   r   r   ÷   s    zQRStructAppend.__init__c                 C   s:   |   ||¡ | | jd¡ | | jd¡ | | jd¡ d S )Nr$   rI   )r+   r&   rs   rt   ru   rp   r   r   r   r4      s    zQRStructAppend.writeNrq   r   r   r   r   rr   ó   s   	rr   c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚQRFNC1FirstrD   rm   c                 C   s   d S r   r   r   r   r   r   r   
  s    zQRFNC1First.__init__c                 C   s   |   ||¡ d S r   )r+   rp   r   r   r   r4     s    zQRFNC1First.writeNrq   r   r   r   r   rv     s   rv   c                   @   s(   e Zd Ze d¡jZdZdZdd„ Z	dS )ÚQRFNC1Secondz^([A-Za-z]|[0-9][0-9])$rE   rm   c                 C   sD   |   ||¡ | j}t|ƒdkr,t|ƒd }nt|ƒ}| |d¡ d S )Nr   éd   rI   )r+   r   r   rO   Úintr&   rf   r   r   r   r4     s    zQRFNC1Second.writeN)
r5   r6   r7   r?   r@   rA   r   r'   r   r4   r   r   r   r   rw     s   rw   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	g d¢g d¢g d¢g d¢g d¢g d¢g d¢gZ
dd„ Zdd„ Zdd„ Zg d¢g d¢g d¢g d¢g d¢gZdd„ Zdd„ Zdd „ Zd!d"„ Zd#Zd$d%„ Zd&d'„ Zd#Zd(d)„ Zd*d+„ Zd,Zd-Zed.d/„ ƒZed0d1„ ƒZd#S )2ÚQRCodec                 C   s(   || _ || _d | _d| _d | _g | _d S r   )r*   ÚerrorCorrectLevelÚmodulesÚmoduleCountÚ	dataCacheÚdataList)r
   r*   r{   r   r   r   r      s    zQRCode.__init__c              	   C   sb   t |tƒr|}n<ttttfD ]*}z||ƒ}W  qLW q tyD   Y q0 qt‚| j |¡ d | _	d S r   )
rK   r   r9   rB   rQ   rH   r   r   r_   r~   )r
   r   ZnewDataÚconvr   r   r   ÚaddData(  s    

zQRCode.addDatac                 C   s   | j | | S r   )r|   )r
   ÚrowÚcolr   r   r   ÚisDark8  s    zQRCode.isDarkc                 C   s   | j S r   ©r}   r   r   r   r   ÚgetModuleCount;  s    zQRCode.getModuleCountc                 C   st   t ddƒD ]d}t || j¡}tdd„ |D ƒƒ}d}| jD ]$}|d7 }|| |¡7 }||j7 }q8||d kr
 qpq
|S )Nr   é(   c                 s   s   | ]}|j V  qd S r   )Ú	dataCount)Ú.0Úblockr   r   r   Ú	<genexpr>B  ó    z+QRCode.calculate_version.<locals>.<genexpr>r   r$   rI   )r.   Ú	QRRSBlockÚgetRSBlocksr{   r   r   r    r   )r
   r*   ÚrsBlocksÚtotalDataCountÚlengthr   r   r   r   Úcalculate_version>  s    
zQRCode.calculate_versionc                 C   s(   | j d u r|  ¡ | _ |  d|  ¡ ¡ d S )NF)r*   r’   ÚmakeImplÚgetBestMaskPatternr   r   r   r   ÚmakeL  s    

zQRCode.makec                    s¼   ˆ j d d ˆ _‡ fdd„tˆ jƒD ƒˆ _ˆ  dd¡ ˆ  ˆ jd d¡ ˆ  dˆ jd ¡ ˆ  ¡  ˆ  ¡  ˆ  ||¡ ˆ j dkrŠˆ  |¡ ˆ j	d krªt
 ˆ j ˆ jˆ j¡ˆ _	ˆ  ˆ j	|¡ d S )Nr$   é   c                    s   g | ]}d gˆ j  ‘qS )Fr…   ©r‰   Úxr   r   r   Ú
<listcomp>S  s   ÿz#QRCode.makeImpl.<locals>.<listcomp>r   rl   )r*   r}   r.   r|   ÚsetupPositionProbePatternÚsetupPositionAdjustPatternÚsetupTimingPatternÚsetupTypeInfoÚsetupTypeNumberr~   rz   Ú
createDatar{   r   ÚmapData)r
   ÚtestÚmaskPatternr   r   r   r“   Q  s$    
ÿ


þzQRCode.makeImpl)TTTTTTT)TFFFFFT)TFTTTFTc                 C   sè   |dkr`dgd | j |d  ||d …< |dkrHd| j |d  |d < q€d| j |d  |d < n dgd | j |d  ||d …< t| jƒD ]X\}}|| j ||  ||d …< |dkrÌd| j ||  |d < qŠd| j ||  |d < qŠd S )Nr   Frl   r   rI   )r|   r[   Ú_positionProbePattern)r
   r‚   rƒ   r   r   r   r   r   rš   m  s      z QRCode.setupPositionProbePatternc                 C   sH   d}d}t dƒD ]2}|  d|¡ t | ¡}|dks:||kr|}|}q|S )Nr   rI   T)r.   r“   ÚQRUtilÚgetLostPoint)r
   ZminLostPointÚpatternr3   Ú	lostPointr   r   r   r”     s    
zQRCode.getBestMaskPatternc                 C   s`   t d| jd ƒD ]}|d dk| j| d< qt t ddg¡| jd ¡| jd d| jd …< d S )NrI   r   r   rC   TFrJ   )r.   r}   r|   Ú	itertoolsÚisliceÚcycle)r
   r   r   r   r   rœ   Š  s
    ÿzQRCode.setupTimingPattern)TTTTT)TFFFT)TFTFTc                 C   s”   t  | j¡}| jd }t ||¡D ]l\}}|dkrF|dks"||krFq"n||krX|dkrXq"t| jƒD ]*\}}|| j|| d  |d |d …< qbq"d S )NrI   r   r;   )	r¤   ÚgetPatternPositionr*   r}   r¨   Úproductr[   Ú_positionAdjustPatternr|   )r
   ÚposÚmaxposr‚   rƒ   r   r   r   r   r   r›   ˜  s    
z!QRCode.setupPositionAdjustPatternc                 C   s    t  | j¡}tdƒD ]>}| o,||? d@ dk}|| j|d  |d | j d d < qtdƒD ]>}| ot||? d@ dk}|| j|d | j d d  |d < q\d S )Né   r   r;   rI   )r¤   ÚgetBCHTypeNumberr*   r.   r|   r}   )r
   r¡   r   r3   Úmodr   r   r   rž   £  s    &zQRCode.setupTypeNumberc                 C   s"  | j d> |B }t |¡}tdƒD ]f}| o8||? d@ dk}|dk rR|| j| d< q |dk rn|| j|d  d< q || j| jd |  d< q tdƒD ]v}| o¨||? d@ dk}|dk rÌ|| jd | j| d < q�|dk rð|| jd d| d d < q�|| jd d| d < q�| | j| jd  d< d S )Nr;   é   r   rC   rI   rE   )r{   r¤   ÚgetBCHTypeInfor.   r|   r}   )r
   r¡   r¢   r   r   r3   r²   r   r   r   r�   ¬  s"    
zQRCode.setupTypeInfoc           
      c   s¤  t  t| jd ddƒtdddƒ¡}ttd| jd ƒƒtt  tdƒtd| jƒ¡ƒttd| jƒƒf}td	d
„ |D ƒƒ}t | j¡}t	t j 
dd
„ |D ƒ¡ƒ}| jd }|D ]ø}|| }}|dkrÂd}n|| jd krÖd}nd}|| D ]º}tdƒD ]¬}	||	 }	| jdk�r@|dk �r$|	| jd k�r$qîn|dk �r@|| jd k�r@qî||v �r�|	|v �r�|dk �rr|	dk �s�|	|k�s�|	dk rî|dk �s�||k�s�qî|	|fV  qîqâq¦d S )Nr   rC   éþÿÿÿrD   r   rE   rI   rl   c                 s   s   | ]}t t|ƒƒV  qd S r   )ÚlistÚreversed)r‰   r   r   r   r   r‹   Ê  rŒ   z*QRCode._dataPosIterator.<locals>.<genexpr>c                 s   s,   | ]$}|d  |d ||d |d  fV  qdS )r   r   Nr   )r‰   Úpr   r   r   r‹   Í  s   rF   r   )r¨   Úchainr.   r}   r¶   Útupler¤   r«   r*   ÚsetÚfrom_iterable)
r
   ÚcolsÚrowsZrrowsZpposr¯   rƒ   Zrowidxr‚   rP   r   r   r   Ú_dataPosIteratorÄ  sH    
ÿþÿ


ÿÿÿzQRCode._dataPosIteratorNc                 C   s   | j st|  ¡ ƒ| _ | j S r   )Ú_dataPosListr¶   r¿   r   r   r   r   ÚdataPosIteratorç  s    zQRCode.dataPosIteratorc                 c   s&   |D ]}dD ]}t ||@ ƒV  qqd S )N)é€   é@   é    rJ   rI   r$   r   r   )Úbool)r
   r   ÚbyteÚbitr   r   r   Ú_dataBitIteratorì  s    zQRCode._dataBitIteratorc                 C   s    | j st|  |¡ƒ| _ t| j ƒS r   )Ú_dataBitListr¶   rÈ   r,   r	   r   r   r   ÚdataBitIteratoró  s    zQRCode.dataBitIteratorc                 C   sP   |   |¡}t |¡}t|  ¡ |dd�D ]$\\}}}||||ƒA | j| |< q&d S )NF©Ú	fillvalue)rÊ   r¤   ÚgetMaskr   rÁ   r|   )r
   r   r¢   r   Úmaskrƒ   r‚   Zdarkr   r   r   r    ø  s    


ÿzQRCode.mapDataéì   r–   c                 C   sò   t  | |¡}tƒ }|D ]}| || ¡ qd}|D ]}||j7 }q0| ¡ |d krhtd| ¡ |d f ƒ‚| ¡ d |d krˆ| dd¡ | ¡ d dkr¤| d¡ qˆ| ¡ |d kr¶qæ| t	j
d¡ | ¡ |d krÖqæ| t	jd¡ q¤t	 ||¡S )Nr   rI   zcode length overflow. (%d > %d)r$   F)r�   rŽ   ÚQRBitBufferr4   rˆ   ÚgetLengthInBitsÚ	Exceptionr&   ÚputBitrz   ÚPAD0ÚPAD1ÚcreateBytes)r*   r{   r   r�   r)   r   r�   rŠ   r   r   r   rŸ     s,    ÿzQRCode.createDatac                    sò   d}d}d}d}g }g }|D ]²}||j 7 }|j}	|j |	 }
t||	ƒ}t||
ƒ}| | j|||	 … ¡ ||	7 }t |
¡}t|d | ¡ d ƒ}| 	|¡‰ | ¡ d }ˆ  ¡ }| ‡ fdd„t
|| |ƒD ƒ¡ qdd„ t t|Ž t|Ž ¡D ƒ}|S )Nr   éÿÿÿÿr   c                    s"   g | ]}|d krˆ   |¡nd ‘qS )r   )Úget)r‰   r3   ©ZmodPolyr   r   r™   5  s   ÿz&QRCode.createBytes.<locals>.<listcomp>c                 S   s"   g | ]}|D ]}|d ur|‘qqS r   r   )r‰   Úddrb   r   r   r   r™   8  s   þ)Ú
totalCountrˆ   Úmaxr_   r)   r¤   ÚgetErrorCorrectPolynomialÚQRPolynomialr!   r²   r.   r¨   r¹   r   )r)   r�   ÚoffsetZ
maxDcCountZ
maxEcCountZtotalCodeCountZdcdataZecdatarŠ   ZdcCountZecCountZrsPolyZrawPolyZrLenZmLenr   r   rÙ   r   rÖ      s4    





ÿ

ÿzQRCode.createBytes)r5   r6   r7   r   r�   r„   r†   r’   r•   r“   r£   rš   r”   rœ   r­   r›   rž   r�   r¿   rÀ   rÁ   rÈ   rÉ   rÊ   r    rÔ   rÕ   ÚstaticmethodrŸ   rÖ   r   r   r   r   rz     sP   ù
û	!
rz   c                   @   s   e Zd ZdZdZdZdZdS )ÚQRErrorCorrectLevelr   r   r;   r   N)r5   r6   r7   ÚLÚMÚQÚHr   r   r   r   rá   >  s   rá   c                   @   s,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
ÚQRMaskPatternr   r   r   r;   r$   rD   rC   rl   N)r5   r6   r7   Z
PATTERN000Z
PATTERN001Z
PATTERN010Z
PATTERN011Z
PATTERN100Z
PATTERN101Z
PATTERN110Z
PATTERN111r   r   r   r   ræ   D  s   ræ   c                )   @   sÊ  e Zd Zg ddgddgddgddgddgg d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d ¢g d!¢g d"¢g d#¢g d$¢g d%¢g d&¢g d'¢g d(¢g(Zd)Zd*Zd+Zed,d-„ ƒZed.d/„ ƒZ	ed0d1„ ƒZ
ed2d3„ ƒZd4d5„ d6d5„ d7d5„ d8d5„ d9d5„ d:d5„ d;d5„ d<d5„ d=œZed>d?„ ƒZed@dA„ ƒZedBdC„ ƒZedDdE„ ƒZeg dF¢fdGdH„ƒZedIdJ„ ƒZedKdL„ ƒZdMS )Nr¤   rC   r°   é   é   é   é"   )rC   rç   é&   )rC   ro   é*   )rC   rè   é.   )rC   é   é2   )rC   ré   é6   )rC   rÄ   é:   )rC   rê   é>   )rC   rè   rí   éB   )rC   rè   é0   éF   )rC   rè   rï   éJ   )rC   ré   rð   éN   )rC   ré   é8   éR   )rC   ré   rñ   éV   )rC   rê   rò   éZ   )rC   rî   rï   éH   é^   )rC   rè   rï   rö   éb   )rC   ré   rð   r÷   éf   )rC   rî   rð   éP   éj   )rC   rÄ   rñ   éT   én   )rC   ré   rñ   rú   ér   )rC   rê   rò   rû   év   )rC   rè   rï   rö   rþ   éz   )rC   ré   rð   r÷   rÿ   é~   )rC   rè   é4   r÷   éh   é‚   )rC   ré   rø   rù   él   é†   )rC   rê   é<   rú   ép   éŠ   )rC   ré   rñ   rú   r  éŽ   )rC   rê   rò   rû   r  é’   )rC   ré   rð   r÷   rÿ   r  é–   )rC   ro   rï   éL   rÿ   rÂ   éš   )rC   rî   rð   r   r  é„   éž   )rC   rÄ   rñ   r  r  éˆ   é¢   )rC   rè   rð   rù   r  r  é¦   )rC   ré   rñ   rú   r  r  éª   i7  i%  iT  c                 C   sV   | d> }t  |¡t  t j¡ dkrD|t jt  |¡t  t j¡ > N }q| d> |B t jA S )Nr   r   )r¤   ÚgetBCHDigitÚG15ÚG15_MASK©r   rb   r   r   r   r´   €  s    
ÿ
zQRUtil.getBCHTypeInfoc                 C   sP   | d> }t  |¡t  t j¡ dkrD|t jt  |¡t  t j¡ > N }q| d> |B S )Nr<   r   )r¤   r  ÚG18r  r   r   r   r±   ˆ  s    
ÿ
zQRUtil.getBCHTypeNumberc                 C   s"   d}| dkr|d7 }| dL } q|S ©Nr   r   r   )r   Údigitr   r   r   r  �  s
    
zQRUtil.getBCHDigitc                 C   s   t j| d  S ©Nr   )r¤   ÚPATTERN_POSITION_TABLE)r*   r   r   r   r«   ˜  s    zQRUtil.getPatternPositionc                 C   s   | | d dkS ©Nr   r   r   ©r3   Újr   r   r   Ú<lambda>�  rŒ   zQRUtil.<lambda>c                 C   s   | d dkS r$  r   r%  r   r   r   r'  ž  rŒ   c                 C   s   |d dkS ©Nr;   r   r   r%  r   r   r   r'  Ÿ  rŒ   c                 C   s   | | d dkS r(  r   r%  r   r   r   r'     rŒ   c                 C   s   | d |d  d dkS ©Nr   r;   r   r   r%  r   r   r   r'  ¡  rŒ   c                 C   s   | | d | | d  dkS r)  r   r%  r   r   r   r'  ¢  rŒ   c                 C   s    | | d | | d  d dkS r)  r   r%  r   r   r   r'  £  rŒ   c                 C   s    | | d | | d  d dkS )Nr;   r   r   r   r%  r   r   r   r'  ¤  rŒ   )r   r   r   r;   r$   rD   rC   rl   c                 C   s
   | j | S r   )r¢   )Úclsr¢   r   r   r   rÍ   §  s    zQRUtil.getMaskc                 C   s8   t dgdƒ}t| ƒD ]}| t dt |¡gdƒ¡}q|S )Nr   r   )rÞ   r.   ÚmultiplyÚQRMathÚgexp)ZerrorCorrectLengthÚar3   r   r   r   rÝ   «  s    z QRUtil.getErrorCorrectPolynomialc                 C   sŠ   d}dg}d }|D ]\}|rjdd„ t ||ƒD ƒ}dd„ t||dd�D ƒ}|t|ƒ7 }dd„ t||dd�D ƒ}|}q|tdd„ |D ƒƒ7 }|S )Nr   c                 S   s   g | ]\}}||A ‘qS r   r   ©r‰   r.  Úbr   r   r   r™   º  rŒ   z-QRUtil.maskScoreRule1vert.<locals>.<listcomp>c                 S   s(   g | ] \}}|d kr|o"|d  d ‘qS ©r$   r;   r   r/  r   r   r   r™   »  s   þrË   c                 S   s    g | ]\}}|rd n|d ‘qS )r   r   r   r/  r   r   r   r™   ¿  s   ÿc                 S   s    g | ]}|d kr|d  d ‘qS r1  r   )r‰   r0  r   r   r   r™   Ä  rŒ   )Úzipr   r   )r*  r|   ÚscoreZ	lastCountÚlastRowr‚   ÚchangedZscoresr   r   r   ÚmaskScoreRule1vert²  s$    ÿÿÿzQRUtil.maskScoreRule1vertc           	      C   s�   d}|d }|dd … D ]r}|d |d  }}t |dd … |dd … ƒD ]<\}}||  krn|  krn|krzn n|d7 }|| }}qH|}q|S )Nr   r   r;   )r2  )	r*  r|   r3  r4  r‚   ZlastCol0ZlastCol1Zcol0Zcol1r   r   r   ÚmaskScoreRule2Ç  s    ""zQRUtil.maskScoreRule2)TFTTTFTFFFFc                 C   sb   t |ƒ}d}|D ]L}d}t |ƒ| }||k r|||| … |krR|d7 }||7 }q$|d7 }q$q|S )Nr   r‡   r   )r   )r*  r|   r¦   Z
patternlenr3  r‚   r&  Zmaxjr   r   r   ÚmaskScoreRule3horÕ  s    
zQRUtil.maskScoreRule3horc                 C   s:   t |ƒd }tdd„ |D ƒƒ}dtd| | d ƒd  S )Nr   c                 s   s   | ]}t |ƒV  qd S r   )r   )r‰   r‚   r   r   r   r‹   ë  rŒ   z(QRUtil.maskScoreRule4.<locals>.<genexpr>r   rx   rï   rD   )r   r   Úabs)r*  r|   Z	cellCountÚcountr   r   r   ÚmaskScoreRule4è  s    zQRUtil.maskScoreRule4c                 C   sp   d}||   |j¡7 }||   t|jŽ ¡7 }||  |j¡7 }||  |j¡7 }||  t|jŽ ¡7 }||  |j¡7 }|S r   )r6  r|   r2  r7  r8  r;  )r*  ZqrCoder§   r   r   r   r¥   î  s    zQRUtil.getLostPointN)r5   r6   r7   r#  r  r  r  rà   r´   r±   r  r«   r¢   ÚclassmethodrÍ   rÝ   r6  r7  r8  r;  r¥   r   r   r   r   r¤   N  s˜   Ø+



ø



þ
r¤   c                   @   s$   e Zd Zedd„ ƒZedd„ ƒZdS )r,  c                 C   s    | dk rt d|  d ƒ‚t|  S )Nr   zglog(ú))rÒ   Ú	LOG_TABLE©r2   r   r   r   Úglogþ  s    zQRMath.glogc                 C   s,   | dk r| d7 } q | dkr$| d8 } qt |  S )Nr   rY   é   )Ú	EXP_TABLEr?  r   r   r   r-    s
    

zQRMath.gexpN)r5   r6   r7   rà   r@  r-  r   r   r   r   r,  ý  s   
r,  c                 C   s   g | ]}|‘qS r   r   r—   r   r   r   r™     rŒ   r™   rA  c                 C   s   g | ]}|‘qS r   r   r—   r   r   r   r™     rŒ   rI   r   r$   rD   rC   rY   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )rÞ   c                 C   sb   t |ƒdkr tt |ƒd | ƒ‚d}|t |ƒk rF|| dkrF|d7 }q$||d … dg|  | _d S )Nr   ú/r   )r   rÒ   Únum)r
   rD  Úshiftrß   r   r   r   r     s    
zQRPolynomial.__init__c                 C   s
   | j | S r   )rD  )r
   r0   r   r   r   rØ     s    zQRPolynomial.getc                 C   s
   t | jƒS r   )r   rD  r   r   r   r   r!   "  s    zQRPolynomial.getLengthc                 C   s~   dg|   ¡ |  ¡  d  }t|   ¡ ƒD ]L}t|  ¡ ƒD ]:}|||   t t |  |¡¡t | |¡¡ ¡N  < q6q&t|dƒS r   )r!   r.   r,  r-  r@  rØ   rÞ   )r
   rc   rD  r3   r&  r   r   r   r+  %  s    ÿzQRPolynomial.multiplyc                    sv   |   ¡ |  ¡ k r| S t | jd ¡t |jd ¡ ‰ ‡ fdd„t| j|jƒD ƒ}|| j|  ¡ d … 7 }t|dƒ |¡S )Nr   c                    s(   g | ] \}}|t  t  |¡ˆ  ¡A ‘qS r   )r,  r-  r@  )r‰   ÚnnÚen©Zratior   r   r™   1  s   ÿz$QRPolynomial.mod.<locals>.<listcomp>)r!   r,  r@  rD  r2  rÞ   r²   )r
   rc   rD  r   rH  r   r²   -  s     
ÿzQRPolynomial.modN)r5   r6   r7   r   rØ   r!   r+  r²   r   r   r   r   rÞ     s
   rÞ   c                ¡   @   sð  e Zd Zg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d ¢g d!¢g d"¢g d#¢g d$¢g d%¢g d&¢g d'¢g d(¢g d)¢g d*¢g d+¢g d,¢g d-¢g d.¢g d/¢g d0¢g d1¢g d2¢g d3¢g d4¢g d5¢g d6¢g d7¢g d8¢g d9¢g d:¢g d;¢g d<¢g d=¢g d>¢g d?¢g d@¢g dA¢g dB¢g dC¢g dD¢g dE¢g dF¢g dG¢g dH¢g dI¢g dJ¢g dK¢g dL¢g dM¢g dN¢g dO¢g dP¢g dQ¢g dR¢g dS¢g dT¢g dU¢g dV¢g dW¢g dX¢g dY¢g dZ¢g d[¢g d\¢g d]¢g d^¢g d_¢g d`¢g da¢g db¢g dc¢g dd¢g de¢g df¢g dg¢g dh¢g di¢g dj¢g dk¢g dl¢g dm¢g dn¢g do¢g dp¢g dq¢g dr¢g ds¢g dt¢g du¢g dv¢g dw¢g dx¢g dy¢g dz¢g d{¢g d|¢g d}¢g d~¢g d¢g d€¢g d�¢g d‚¢g dƒ¢g d„¢g d…¢g d†¢g d‡¢g dˆ¢g d‰¢g dŠ¢g d‹¢g dŒ¢g d�¢g dŽ¢g d�¢g d�¢g d‘¢g d’¢g d“¢g d”¢g d•¢g d–¢g d—¢g d˜¢g d™¢g dš¢g d›¢g dœ¢g d�¢g dž¢g dŸ¢g d ¢g Zd¡d¢„ Zed£d¤„ ƒZed¥d¦„ ƒZd§S )¨r�   )r   rè   é   )r   rè   rJ   )r   rè   rG   )r   rè   rE   )r   é,   rê   )r   rJ  rî   )r   rJ  rç   )r   rJ  rJ   )r   rõ   é7   )r   rõ   rJ  )r   é#   r–   )r   rL  rG   )r   rx   r   )r   rï   rÄ   )r   rï   ro   )r$   é   rE   )r   r  r  )r   éC   é+   )r   é!   r³   r   rê   rJ   )r   rP  rF   r   rê   r<   )r   rú   éD   )r$   rO  r   )r$   rO  rI  )r$   rO  r³   )r   rþ   r÷   )r$   é1   é   )r   rÄ   r=   r$   rP  r³   )r$   é'   rG   r   r‡   r=   )r   éy   éa   )r   r  rë   r   é=   rT  )r$   r‡   r°   r   r   rI  )r$   r‡   r=   r   r   r³   )r   r  ét   )r;   rñ   é$   r   é;   é%   )r$   rY  rJ   r$   r[  r–   )r$   rY  r<   r$   r[  rG   )r   rú   rQ  r   éW   éE   )r$   r]  rO  r   rõ   rJ  )rC   rO  rI  r   rJ  é   )rC   rO  r³   r   rJ  rJ   )r$   ée   éQ   )r   r   rï   r$   r`  é3   )r$   rï   rç   r$   ra  é   )r;   rY  r<   rI   r[  rG   )r   rX  é\   r   éu   é]   )rC   rñ   rY  r   rZ  r[  )r$   rí   r^  rC   é/   é   )rl   rì   r=   r$   rO  r³   )r$   é…   ék   )rI   rZ  r[  r   r  rë   )rI   rJ  r^  r$   é-   rg  )r<   rP  rF   r$   rê   r<   )r;   é‘   és   r   r  rX  )r$   rÃ   r‡   rD   éA   r   )rF   rY  rJ   rD   r[  r–   )rF   rY  r<   rD   r[  rG   )rD   ém   r\  r   r  éX   )rD   rm  r   rD   ró   rì   )rD   rð   ro   rl   rK  rM  )rF   rY  r<   )rD   r  rþ   r   é{   éc   )rl   éI   rj  r;   rö   rí   )r³   rO  rI  r   rJ  r^  )r;   rj  r³   rG   rí   rJ   )r   é‡   ri  rD   r  r  )r   rö   rí   r   éK   rf  )r   rï   rç   r³   ra  rb  )r   rì   r=   r–   rO  r³   )rD   r  éx   r   é—   rU  )rE   r]  rO  r$   rõ   rJ  )r–   rï   rç   r   ra  rb  )r   rì   r=   rI  rO  r³   )r;   é�   éq   r$   r  r  )r;   rõ   rJ  rF   éG   rj  )r–   rf  rg  r$   rô   rç   )rE   rT  rG   rJ   r‡   r=   )r;   rs  ri  rD   r  r  )r;   rN  r   rG   rQ  rì   )r³   rð   ro   rD   rK  rM  )r³   rO  r³   r   rJ  rJ   )r$   é�   rX  r$   rk  rd  )r–   rQ  rì   )r–   rï   rç   rC   ra  rb  )rI  rí   rJ   rC   rf  r–   )r   é‹   éo   rl   éŒ   r  )r–   rö   rí   )rl   rð   ro   rJ   rK  rM  )rê   r[  rG   )r$   rv  rU  rD   é˜   r  )r$   rt  rf  r=   r  rô   )rF   rð   ro   r=   rK  rM  )rJ   rj  r³   r=   rí   rJ   )rC   é“   rd  r$   é”   r  )rC   rr  rj  r=   rö   rí   )rF   rð   ro   rJ   rK  rM  )ré   rí   rJ   r   rf  r–   )rI   r  r  r$   rh  ri  )rI   rt  rf  rG   r  rô   )rl   rð   ro   rç   rK  rM  )rç   rj  r³   rG   rí   rJ   )r   r  r  r   é�   rl  )rI  rö   rí   r$   rt  rf  )rî   rï   rç   rC   ra  rb  )rP  rí   rJ   r$   rf  r–   )rI   r~  r  r$   é™   rp  )rç   rr  rj  r;   rö   rí   )rI   é5   rb  rè   rð   ro   )r<   rj  r³   rî   rí   rJ   )r;   r  rd  r   r€  r  )r;   rr  rj  rb  rö   rí   )r$   rð   ro   rS  rK  rM  )rF   rj  r³   rS  rí   rJ   )rl   r  rX  rl   r  rd  )rg  rr  rj  rl   rö   rí   )r   rƒ  rb  r[  rð   ro   )rI  rj  r³   rè   rí   rJ   )rD   rk  rl  r   r  rX  )rI  rt  rf  r   r  rô   )r³   rð   ro   rM  rK  rM  )rb  rj  r³   rM  rí   rJ   )rG   rk  rl  r;   r  rX  )r   rö   rí   é   rt  rf  )rì   rð   ro   r   rK  rM  )rb  rj  r³   rî   rí   rJ   )r–   rk  rl  )r   rö   rí   rb  rt  rf  )r   rð   ro   rL  rK  rM  )rI  rj  r³   rL  rí   rJ   )r–   rk  rl  r   r  rX  )r=   rö   rí   rg  rt  rf  )r„  rð   ro   rI  rK  rM  )rF   rj  r³   rí   rí   rJ   )rG   rk  rl  rC   r  rX  )r=   rö   rí   rb  rt  rf  )rJ  rð   ro   rl   rK  rM  )rZ  rí   rJ   r   rf  r–   )r<   rv  rU  rl   r~  r  )r<   rt  rf  rè   r  rô   )rT  rð   ro   r=   rK  rM  )rç   rj  r³   r   rí   rJ   )rC   rv  rU  r=   r~  r  )rC   rt  rf  rê   r  rô   )rí   rð   ro   r   rK  rM  )r   rj  r³   rÃ   rí   rJ   )r–   r~  r  r$   r‚  rp  )r„  rö   rí   r=   rt  rf  )rR  rð   ro   r   rK  rM  )ro   rj  r³   rí   rí   rJ   )r$   r~  r  r°   r‚  rp  )rG   rö   rí   rÄ   rt  rf  )rô   rð   ro   r=   rK  rM  )rì   rj  r³   rÄ   rí   rJ   )r^  r  rd  r$   r€  r  )r‡   rt  rf  rl   r  rô   )rO  rð   ro   rç   rK  rM  )r   rj  r³   rN  rí   rJ   )rI  r€  r  rC   é•   éw   )r°   rt  rf  rS  r  rô   )rê   rð   ro   rê   rK  rM  )r^  rj  r³   rW  rí   rJ   c                 C   s   || _ || _d S r   )rÛ   rˆ   )r
   rÛ   rˆ   r   r   r   r   0  s    zQRRSBlock.__init__c           
      C   s˜   t  | |¡}|d kr(td|  d | ƒ‚t|ƒd }g }t|ƒD ]R}||d d  }||d d  }||d d  }t|ƒD ]}	| t ||ƒ¡ q|q@|S )Nzbad rs block @ version:z/errorCorrectLevel:r;   r   r   r   )r�   ÚgetRsBlockTablerÒ   r   r.   r_   )
r*   r{   ZrsBlockr‘   r¶   r3   r:  rÛ   rˆ   r&  r   r   r   rŽ   4  s     ÿÿzQRRSBlock.getRSBlocksc                 C   sˆ   |t jkr tj| d d d  S |t jkr@tj| d d d  S |t jkr`tj| d d d  S |t jkr€tj| d d d  S d S d S )Nr   r$   r   r   r;   )rá   râ   r�   ÚRS_BLOCK_TABLErã   rä   rå   )r*   r{   r   r   r   r‡  D  s    



zQRRSBlock.getRsBlockTableN)r5   r6   r7   rˆ  r   rà   rŽ   r‡  r   r   r   r   r�   7  sP  € Œ y
r�   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )rÐ   c                 C   s   g | _ d| _d S r   )r)   r‘   r   r   r   r   r   R  s    zQRBitBuffer.__init__c                 C   s   d  dd„ | jD ƒ¡S )NÚ.c                 S   s   g | ]}t |ƒ‘qS r   )rN   )r‰   r2   r   r   r   r™   W  rŒ   z(QRBitBuffer.__repr__.<locals>.<listcomp>)Újoinr)   r   r   r   r   r#   V  s    zQRBitBuffer.__repr__c                 C   s&   |d }| j | d|d  ? d@ dkS )NrI   rl   r   )r)   )r
   r0   ÚbufIndexr   r   r   rØ   Y  s    zQRBitBuffer.getc                 C   s0   t |ƒD ]"}|  ||| d ? d@ dk¡ qd S r"  )r.   rÓ   )r
   rD  r‘   r3   r   r   r   r&   ]  s    zQRBitBuffer.putc                 C   s   | j S r   )r‘   r   r   r   r   rÑ   a  s    zQRBitBuffer.getLengthInBitsc                 C   sV   | j d }t| jƒ|kr$| j d¡ |rD| j|  d| j d ? O  < |  j d7  _ d S )NrI   r   rÂ   r   )r‘   r   r)   r_   )r
   rÇ   r‹  r   r   r   rÓ   d  s    
zQRBitBuffer.putBitN)	r5   r6   r7   r   r#   rØ   r&   rÑ   rÓ   r   r   r   r   rÐ   Q  s   rÐ   )r?   r¨   r   r   rL   Ú	NameErrorrN   r   r9   rB   rH   rQ   rg   rk   rr   rv   rw   rz   rá   ræ   r¤   r,  r.   rB  r>  r3   rÞ   r�   rÐ   r   r   r   r   Ú<module>   sX   
5-6  !
 0
ÿ
ÿ!  