o
     ¢*ZM…  ã                   @   s  d dl Z d dlZzd dlmZ W n
   d dlmZ Y ze W n ey*   eZY nw 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eƒ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< q´e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   úV/var/www/html/env/lib/python3.10/site-packages/reportlab/graphics/barcode/qrencoder.pyÚ__init__*   s   
zQR.__init__c                 C   ó
   t | jƒS r   ©Úlenr   ©r
   r   r   r   Ú__len__/   ó   
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   sR   d|  k r
dk rn n| j d S |dk r| j d S |dk r#| j d S td| ƒ‚)Nr   é
   é   é   é)   é   zUnknown version: )Ú
lengthbitsr   )r
   Úverr   r   r   ÚgetLengthBits9   s   


zQR.getLengthBitsc                 C   r   r   r   r   r   r   r   Ú	getLengthB   r   zQR.getLengthc                 C   r   r   )Úreprr   r   r   r   r   Ú__repr__E   r   zQR.__repr__c                 C   s6   |  | jd¡ |  |¡}|r|  t| jƒ|¡ d S d S )Né   ©ÚputÚmoder"   r   r   ©r
   ÚbufferÚversionÚlenbitsr   r   r   Úwrite_headerH   s
   
ÿzQR.write_headerc                 C   sŒ   |   ||¡ tt| jƒg| j Ž D ]2}d}d}t| jƒD ] }|| d ur<|t| jƒ9 }|| j || ¡7 }|| j	| 7 }q| 
||¡ 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   r0   r   r   Úpropertyr   r"   r#   r%   r.   r7   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©r8   r9   r:   ÚreÚcompileÚmatchr   r2   r   r0   r)   r    r   r   r   r   r<   Z   ó    r<   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   )é	   é   é   NrA   r   r   r   r   rF   b   rE   rF   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&   )rM   é   rN   c                 C   s$   t |tƒr| d¡| _d S || _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 )NrM   )r.   r   rO   ÚstrÚordr(   )r
   r+   r,   Úcr   r   r   r7   v   s   

ýzQR8bitByte.writeN)	r8   r9   r:   r   r0   r)   r    r   r7   r   r   r   r   rL   j   s    rL   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©rK   r   rM   ©rM   r   r?   c                 C   ó*   z	|   |¡| _W d S  ty   tdƒ‚w )NzNot valid kanji)Úunicode_to_qrkanjir   ÚUnicodeEncodeErrorr   r	   r   r   r   r   ƒ   ó
   ÿzQRKanji.__init__c                 C   óH  g }t |ƒD ]›\}}z| d¡}z	tt|ƒ\}}W n ty&   |\}}Y nw W n) tyA } ztd|||d |jd ƒ‚d }~w tyQ   td|||d dƒ‚w |d> |B }d|  krbdkrun n|d8 }|d	@ d? d
 |d@  }n'd|  krdkr’n n|d8 }|d	@ d? d
 |d@  }n
td|||d dƒ‚| |¡ q|S )Nz	shift-jisÚqrkanjir   r&   úillegal multibyte sequencerM   i@�  iüŸ  é ÿ  éÀ   éÿ   i@à  i¿ë  i@Á  ©	Ú	enumeraterQ   ÚmaprS   Ú	TypeErrorrZ   Úargsr   Úappend©r
   r   Úcodesr6   rT   ÚdÚer   r   r   rY   ‰   ó<   
þ€€ÿÿÿzQRKanji.unicode_to_qrkanjic                 C   ó(   |   ||¡ | jD ]}| |d¡ q	d S ©NrK   ©r.   r   r(   ©r
   r+   r,   rj   r   r   r   r7   ¥   ó   
ÿzQRKanji.writeN)
r8   r9   r:   r   r0   r)   r    r   rY   r7   r   r   r   r   rU   }   s    rU   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 )ÚQRHanzirV   r   rK   rW   c                 C   rX   )NzNot valid hanzi)Úunicode_to_qrhanzir   rZ   r   r	   r   r   r   r   °   r[   zQRHanzi.__init__c                 C   r\   )NÚgb2312Úqrhanzir   r&   r^   rM   i¡¡  iþª  r_   é`   ra   i¡°  iþú  i¡¦  rb   rh   r   r   r   rs   ¶   rl   zQRHanzi.unicode_to_qrhanzic                 C   sB   |  | jd¡ |  dd¡ |  |¡}|r|  t| jƒ|¡ d S d S )Nr&   r   r'   r*   r   r   r   r.   Ò   s   
ÿzQRHanzi.write_headerc                 C   rm   rn   ro   rp   r   r   r   r7   Ù   rq   zQRHanzi.writeN)r8   r9   r:   r   r0   r)   r    r   rs   r.   r7   r   r   r   r   rr   ª   s    rr   c                   @   ó$   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t dƒ‚ 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   sl   |   ||¡ | jdkr| | jd¡ d S | jdkr$| | jdB d¡ d S | jdkr4| | jdB d¡ d S d S )	Né   rM   iÿ?  i €  rN   iÿÿ i  À é   ro   ©r
   r+   r,   r   r   r   r7   ê   s   


ÿzQRECI.writeN©r8   r9   r:   r)   r    r   r7   r   r   r   r   rx   à   s
    rx   c                   @   rw   )ÚQRStructAppendr>   rz   c                 C   s^   d|  k rdkst dƒ‚ t dƒ‚d|  k rdks$t dƒ‚ t dƒ‚|| _|| _|| _d S )Nr   rN   zpart out of range [1,16]ztotal out of range [1,16])r   ÚpartÚtotalÚparity)r
   r€   r�   r‚   r   r   r   r   ÷   s   ÿÿ
zQRStructAppend.__init__c                 C   s:   |   ||¡ | | jd¡ | | jd¡ | | jd¡ d S )Nr&   rM   )r.   r(   r€   r�   r‚   r}   r   r   r   r7      s   zQRStructAppend.writeNr~   r   r   r   r   r   ó   s
    	r   c                   @   rw   )ÚQRFNC1FirstrH   rz   c                 C   s   d S r   r   r   r   r   r   r   
  s   zQRFNC1First.__init__c                 C   s   |   ||¡ d S r   )r.   r}   r   r   r   r7     s   zQRFNC1First.writeNr~   r   r   r   r   rƒ     s
    rƒ   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])$rI   rz   c                 C   sD   |   ||¡ | j}t|ƒdkrt|ƒd }nt|ƒ}| |d¡ d S )Nr   éd   rM   )r.   r   r   rS   Úintr(   rp   r   r   r   r7     s   zQRFNC1Second.writeN)
r8   r9   r:   rB   rC   rD   r   r)   r    r7   r   r   r   r   r„     s
    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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   s\   t |tƒr|}nttttfD ]}z||ƒ}W  n ty    Y qw t‚| j |¡ d | _	d S r   )
rO   r   r<   rF   rU   rL   r   rŒ   rg   r‹   )r
   r   Ú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   ó   | j S r   ©rŠ   r   r   r   r   ÚgetModuleCount;  ó   zQRCode.getModuleCountc                 C   sv   t ddƒD ]3}t || j¡}tdd„ |D ƒƒ}d}| jD ]}|d7 }|| |¡7 }||j7 }q||d kr8 |S q|S )Nr   é(   c                 s   s   � | ]}|j V  qd S r   )Ú	dataCount)Ú.0Úblockr   r   r   Ú	<genexpr>B  s   € z+QRCode.calculate_version.<locals>.<genexpr>r   r&   rM   )r1   Ú	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rEˆ  |¡ ˆ j	d krUt
 ˆ 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   ry   )r,   rŠ   r1   r‰   ÚsetupPositionProbePatternÚsetupPositionAdjustPatternÚsetupTimingPatternÚsetupTypeInfoÚsetupTypeNumberr‹   r‡   Ú
createDatarˆ   rŒ   ÚmapData)r
   ÚtestÚmaskPatternr   r   r   r¢   Q  s$   
ÿ


þzQRCode.makeImpl)TTTTTTT)TFFFFFT)TFTTTFTc                 C   sè   |dkr0dgd | j |d  ||d …< |dkr$d| j |d  |d < nd| j |d  |d < ndgd | j |d  ||d …< t| jƒD ],\}}|| j ||  ||d …< |dkrfd| j ||  |d < qEd| j ||  |d < qEd S )Nr   Fry   r   rM   )r‰   rc   Ú_positionProbePattern)r
   r�   r‘   r   r   r   r   r   r©   m  s     ûz QRCode.setupPositionProbePatternc                 C   sH   d}d}t dƒD ]}|  d|¡ t | ¡}|dks||kr!|}|}q|S )Nr   rM   T)r1   r¢   ÚQRUtilÚgetLostPoint)r
   ÚminLostPointÚpatternr6   Ú	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 )NrM   r   r   rG   TFrN   )r1   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 ]5\}}|dkr"|dks!||kr"q||kr+|dkr+qt| jƒD ]\}}|| j|| d  |d |d …< q0qd S )NrM   r   r>   )	r³   ÚgetPatternPositionr,   rŠ   r¸   Úproductrc   Ú_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 ]}| o:||? d@ dk}|| j|d | j d d  |d < q.d S )Né   r   r>   rM   )r³   ÚgetBCHTypeNumberr,   r1   r‰   rŠ   )r
   r°   r   r6   Úmodr   r   r   r­   £  s   &&þzQRCode.setupTypeNumberc                 C   s"  | j d> |B }t |¡}tdƒD ]3}| o||? d@ dk}|dk r)|| j| d< q|dk r7|| j|d  d< q|| j| jd |  d< qtdƒD ];}| oT||? d@ dk}|dk rf|| jd | j| d < qH|dk rx|| jd d| d d < qH|| jd d| d < qH| | j| jd  d< d S )Nr>   é   r   rG   rM   rI   )rˆ   r³   ÚgetBCHTypeInfor1   r‰   rŠ   )r
   r°   r±   r   r   r6   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 ]o}||}}|dkrbd}n|| jd krld}nd}|| D ]P}tdƒD ]I}	||	 }	| jdkr›|dk r�|	| jd kr�qx|dk r›|| jd kr›qx||v r¼|	|v r¼|dk r¯|	dk s¼|	|ks¼|	dk r»|dk s¼||ks¼qx|	|fV  qxqrqTd S )Nr   rG   éþÿÿÿrH   r   rI   rM   ry   c                 s   s   � | ]	}t t|ƒƒV  qd S r   )ÚlistÚreversed)r™   r   r   r   r   r›   Ê  s   € 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   € 
ÿrJ   r   )r¸   Úchainr1   rŠ   rÆ   Útupler³   r»   r,   ÚsetÚfrom_iterable)
r
   ÚcolsÚrowsÚrrowsÚpposr¿   r‘   Úrowidxr�   rT   r   r   r   Ú_dataPosIteratorÄ  sF   €
ÿþ
ÿ


ôÿû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)é€   é@   é    rN   rM   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�   Údarkr   r   r   r¯   ø  s   


ÿþzQRCode.mapDataéì   r¥   c                 C   s  t  | |¡}tƒ }|D ]}| || ¡ qd}|D ]}||j7 }q| ¡ |d kr4td| ¡ |d f ƒ‚| ¡ d |d krD| dd¡ | ¡ d dkrY| d¡ | ¡ d dksL	 | ¡ |d krcn| t	j
d¡ | ¡ |d krsn| t	jd¡ qZt	 ||¡S )Nr   rM   zcode length overflow. (%d > %d)r&   F)rœ   r�   ÚQRBitBufferr7   r˜   ÚgetLengthInBitsÚ	Exceptionr(   ÚputBitr‡   ÚPAD0ÚPAD1ÚcreateBytes)r,   rˆ   rŒ   rž   r+   r   rŸ   rš   r   r   r   r®     s2   ÿ
ÿúzQRCode.createDatac                    sò   d}d}d}d}g }g }|D ]Y}||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™   r6   ©ÚmodPolyr   r   r¨   5  s    ÿz&QRCode.createBytes.<locals>.<listcomp>c                 S   s"   g | ]}|D ]}|d ur|‘qqS r   r   )r™   Úddrj   r   r   r   r¨   8  s    þ
þ)Ú
totalCountr˜   Úmaxrg   r+   r³   ÚgetErrorCorrectPolynomialÚQRPolynomialr#   rÂ   r1   r¸   rÉ   r   )r+   rž   ÚoffsetÚ
maxDcCountÚ
maxEcCountÚtotalCodeCountÚdcdataÚecdatarš   ÚdcCountÚecCountÚrsPolyÚrawPolyÚrLenÚmLenr   r   rí   r   rê      s4   






ÿ
ÿzQRCode.createBytes)r8   r9   r:   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   r‡     sR    ù
û	!
r‡   c                   @   s   e Zd ZdZdZdZdZdS )ÚQRErrorCorrectLevelr   r   r>   r   N)r8   r9   r:   Ú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&   rH   rG   ry   N)r8   r9   r:   Ú
PATTERN000Ú
PATTERN001Ú
PATTERN010Ú
PATTERN011Ú
PATTERN100Ú
PATTERN101Ú
PATTERN110Ú
PATTERN111r   r   r   r   r  D  s    r  c                	   @   s  e Zd Zg 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(¢‘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³   rG   rÀ   é   é   é   é"   )rG   r  é&   )rG   r|   é*   )rG   r  é.   )rG   é   é2   )rG   r  é6   )rG   r×   é:   )rG   r  é>   )rG   r  r  éB   )rG   r  é0   éF   )rG   r  r  éJ   )rG   r  r  éN   )rG   r  é8   éR   )rG   r  r  éV   )rG   r  r  éZ   )rG   r  r  éH   é^   )rG   r  r  r  éb   )rG   r  r  r  éf   )rG   r  r  éP   éj   )rG   r×   r  éT   én   )rG   r  r  r"  ér   )rG   r  r  r#  év   )rG   r  r  r  r&  éz   )rG   r  r  r  r'  é~   )rG   r  é4   r  éh   é‚   )rG   r  r   r!  él   é†   )rG   r  é<   r"  ép   éŠ   )rG   r  r  r"  r,  éŽ   )rG   r  r  r#  r-  é’   )rG   r  r  r  r'  r/  é–   )rG   r|   r  éL   r'  rÕ   éš   )rG   r  r  r(  r)  é„   éž   )rG   r×   r  r*  r+  éˆ   é¢   )rG   r  r  r!  r+  r7  é¦   )rG   r  r  r"  r,  r8  éª   i7  i%  iT  c                 C   sn   | d> }t  |¡t  t j¡ dkr.|t jt  |¡t  t j¡ > N }t  |¡t  t j¡ dks| d> |B t jA S )Nr   r   )r³   ÚgetBCHDigitÚG15ÚG15_MASK©r   rj   r   r   r   rÄ   €  s   
ÿÿzQRUtil.getBCHTypeInfoc                 C   sh   | d> }t  |¡t  t j¡ dkr.|t jt  |¡t  t j¡ > N }t  |¡t  t j¡ dks| d> |B S )Nr?   r   )r³   rC  ÚG18rF  r   r   r   rÁ   ˆ  s   
ÿÿzQRUtil.getBCHTypeNumberc                 C   s(   d}| dkr|d7 }| dL } | dks|S ©Nr   r   r   )r   Údigitr   r   r   rC  �  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   ó   | | d dkS ©Nr   r   r   ©r6   Újr   r   r   Ú<lambda>�  ó    zQRUtil.<lambda>c                 C   s   | d dkS rM  r   rN  r   r   r   rP  ž  ó    c                 C   s   |d dkS ©Nr>   r   r   rN  r   r   r   rP  Ÿ  rR  c                 C   rL  rS  r   rN  r   r   r   rP     rQ  c                 C   s   | d |d  d dkS ©Nr   r>   r   r   rN  r   r   r   rP  ¡  ó    c                 C   s   | | d | | d  dkS rT  r   rN  r   r   r   rP  ¢  s    c                 C   s    | | d | | d  d dkS rT  r   rN  r   r   r   rP  £  ó     c                 C   s    | | d | | d  d dkS )Nr>   r   r   r   rN  r   r   r   rP  ¤  rV  )r   r   r   r>   r&   rH   rG   ry   c                 C   ó
   | 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ó   r1   ÚmultiplyÚQRMathÚgexp)ÚerrorCorrectLengthÚar6   r   r   r   rò   «  s   z QRUtil.getErrorCorrectPolynomialc                 C   sŠ   d}dg}d }|D ].}|r5d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¨   º  rU  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 r`  r   )r™   r_  r   r   r   r¨   Ä  rV  )Úzipr   r   )rX  r‰   ÚscoreÚ	lastCountÚlastRowr�   ÚchangedÚscoresr   r   r   ÚmaskScoreRule1vert²  s$   ÿÿÿzQRUtil.maskScoreRule1vertc           	      C   s�   d}|d }|dd … D ]9}|d |d }}t |dd … |dd … ƒD ]\}}||  kr7|  kr7|kr=n n|d7 }||}}q$|}q|S )Nr   r   r>   )ra  )	rX  r‰   rb  rd  r�   ÚlastCol0ÚlastCol1Úcol0Úcol1r   r   r   ÚmaskScoreRule2Ç  s   ""zQRUtil.maskScoreRule2)TFTTTFTFFFFc                 C   sh   t |ƒ}d}|D ])}d}t |ƒ| }||k r1|||| … |kr)|d7 }||7 }n|d7 }||k sq|S )Nr   r—   r   )r   )rX  r‰   r¶   Ú
patternlenrb  r�   rO  Ú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›   ë  s   € z(QRUtil.maskScoreRule4.<locals>.<genexpr>r   r…   r  rH   )r   r   Úabs)rX  r‰   Ú	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   )rg  r‰   ra  rl  ro  rs  )rX  ÚqrCoder·   r   r   r   r´   î  s   zQRUtil.getLostPointN)r8   r9   r:   rK  rD  rG  rE  r   rÄ   rÁ   rC  r»   r±   Úclassmethodrà   rò   rg  rl  ro  rs  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 )rZ  c                 C   s    | dk rt d|  d ƒ‚t|  S )Nr   zglog(ú))ræ   Ú	LOG_TABLE©r5   r   r   r   Úglogþ  s   zQRMath.glogc                 C   s8   | dk r| d7 } | dk s| dkr| d8 } | dkst |  S )Nr   ra   é   )Ú	EXP_TABLErx  r   r   r   r[    s   ÿÿzQRMath.gexpN)r8   r9   r:   r   ry  r[  r   r   r   r   rZ  ý  s
    
rZ  c                 C   ó   g | ]}|‘qS r   r   r¦   r   r   r   r¨     rQ  r¨   rz  c                 C   r|  r   r   r¦   r   r   r   r¨     rQ  rM   r   r&   rH   rG   ra   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   sx   t |ƒdkrtt |ƒd | ƒ‚d}|t |ƒk r.|| dkr.|d7 }|t |ƒk r.|| dks||d … dg|  | _d S )Nr   ú/r   )r   ræ   Únum)r
   r~  Úshiftrô   r   r   r   r     s   ÿzQRPolynomial.__init__c                 C   rW  r   )r~  )r
   r3   r   r   r   rì     r   zQRPolynomial.getc                 C   r   r   )r   r~  r   r   r   r   r#   "  r   zQRPolynomial.getLengthc                 C   s~   dg|   ¡ |  ¡  d  }t|   ¡ ƒD ]&}t|  ¡ ƒD ]}|||   t t |  |¡¡t | |¡¡ ¡N  < qqt|dƒS rH  )r#   r1   rZ  r[  ry  rì   ró   )r
   rk   r~  r6   rO  r   r   r   rY  %  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   )rZ  r[  ry  )r™   ÚnnÚen©Úratior   r   r¨   1  s    ÿz$QRPolynomial.mod.<locals>.<listcomp>)r#   rZ  ry  r~  ra  ró   rÂ   )r
   rk   r~  r   r‚  r   rÂ   -  s    
ÿzQRPolynomial.modN)r8   r9   r:   r   rì   r#   rY  rÂ   r   r   r   r   ró     s    ró   c                   @   s0  e Zd Z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 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 ¢‘Zd¡d¢„ Zed£d¤„ ƒZed¥d¦„ ƒZd§S )¨rœ   )r   r  é   )r   r  rN   )r   r  rK   )r   r  rI   )r   é,   r  )r   r…  r  )r   r…  r  )r   r…  rN   )r   r  é7   )r   r  r…  )r   é#   r¥   )r   r‡  rK   )r   r…   r(  )r   r  r×   )r   r  r|   )r&   é   rI   )r   r4  r3  )r   éC   é+   )r   é!   rÃ   r   r  rN   )r   r‹  rJ   r   r  r?   )r   r"  éD   )r&   rŠ  r   )r&   rŠ  r„  )r&   rŠ  rÃ   )r   r&  r  )r&   é1   é   )r   r×   r@   r&   r‹  rÃ   )r&   é'   rK   r   r—   r@   )r   éy   éa   )r   r5  r  r   é=   r�  )r&   r—   rÀ   r   r   r„  )r&   r—   r@   r   r   rÃ   )r   r9  ét   )r>   r  é$   r   é;   é%   )r&   r”  rN   r&   r–  r¥   )r&   r”  r?   r&   r–  rK   )r   r"  rŒ  r   éW   éE   )r&   r˜  rŠ  r   r  r…  )rG   rŠ  r„  r   r…  é   )rG   rŠ  rÃ   r   r…  rN   )r&   ée   éQ   )r   r(  r  r&   r›  é3   )r&   r  r  r&   rœ  é   )r>   r”  r?   rM   r–  rK   )r   r“  é\   r   éu   é]   )rG   r  r”  r   r•  r–  )r&   r  r™  rG   é/   é   )ry   r  r@   r&   rŠ  rÃ   )r&   é…   ék   )rM   r•  r–  r   r5  r  )rM   r…  r™  r&   é-   r¢  )r?   r‹  rJ   r&   r  r?   )r>   é‘   és   r   r9  r“  )r&   rÖ   r—   rH   éA   r   )rJ   r”  rN   rH   r–  r¥   )rJ   r”  r?   rH   r–  rK   )rH   ém   r—  r   r+  éX   )rH   r¨  r   rH   r  r  )rH   r  r|   ry   r†  rˆ  )rJ   r”  r?   )rH   r.  r&  r   é{   éc   )ry   éI   r¥  r>   r  r  )rÃ   rŠ  r„  r   r…  r™  )r>   r¥  rÃ   rK   r  rN   )r   é‡   r¤  rH   r?  r3  )r   r  r  r   éK   r¡  )r   r  r  rÃ   rœ  r�  )r   r  r@   r¥   rŠ  rÃ   )rH   r:  éx   r   é—   r�  )rI   r˜  rŠ  r&   r  r…  )r¥   r  r  r   rœ  r�  )r   r  r@   r„  rŠ  rÃ   )r>   é�   éq   r&   r8  r,  )r>   r  r…  rJ   éG   r¥  )r¥   r¡  r¢  r&   r  r  )rI   r�  rK   rN   r—   r@   )r>   r®  r¤  rH   r?  r3  )r>   r‰  r   rK   rŒ  r  )rÃ   r  r|   rH   r†  rˆ  )rÃ   rŠ  rÃ   r   r…  rN   )r&   é�   r“  r&   r¦  rŸ  )r¥   rŒ  r  )r¥   r  r  rG   rœ  r�  )r„  r  rN   rG   r¡  r¥   )r   é‹   éo   ry   éŒ   r6  )r¥   r  r  )ry   r  r|   rN   r†  rˆ  )r  r–  rK   )r&   r±  r�  rH   é˜   r.  )r&   r¯  r¡  r@   r;  r  )rJ   r  r|   r@   r†  rˆ  )rN   r¥  rÃ   r@   r  rN   )rG   é“   rŸ  r&   é”   r-  )rG   r­  r¥  r@   r  r  )rJ   r  r|   rN   r†  rˆ  )r  r  rN   r   r¡  r¥   )rM   r=  r)  r&   r£  r¤  )rM   r¯  r¡  rK   r;  r  )ry   r  r|   r  r†  rˆ  )r  r¥  rÃ   rK   r  rN   )r   r8  r,  r   é�   r§  )r„  r  r  r&   r¯  r¡  )r  r  r  rG   rœ  r�  )r‹  r  rN   r&   r¡  r¥   )rM   r¹  r.  r&   é™   r«  )r  r­  r¥  r>   r  r  )rM   é5   r�  r  r  r|   )r?   r¥  rÃ   r  r  rN   )r>   rº  rŸ  r   r»  r-  )r>   r­  r¥  r�  r  r  )r&   r  r|   rŽ  r†  rˆ  )rJ   r¥  rÃ   rŽ  r  rN   )ry   r9  r“  ry   rº  rŸ  )r¢  r­  r¥  ry   r  r  )r   r¾  r�  r–  r  r|   )r„  r¥  rÃ   r  r  rN   )rH   r¦  r§  r   r9  r“  )r„  r¯  r¡  r   r;  r  )rÃ   r  r|   rˆ  r†  rˆ  )r�  r¥  rÃ   rˆ  r  rN   )rK   r¦  r§  r>   r9  r“  )r   r  r  é   r¯  r¡  )r  r  r|   r   r†  rˆ  )r�  r¥  rÃ   r  r  rN   )r¥   r¦  r§  )r   r  r  r�  r¯  r¡  )r   r  r|   r‡  r†  rˆ  )r„  r¥  rÃ   r‡  r  rN   )r¥   r¦  r§  r   r9  r“  )r@   r  r  r¢  r¯  r¡  )r¿  r  r|   r„  r†  rˆ  )rJ   r¥  rÃ   r  r  rN   )rK   r¦  r§  rG   r9  r“  )r@   r  r  r�  r¯  r¡  )r…  r  r|   ry   r†  rˆ  )r•  r  rN   r   r¡  r¥   )r?   r±  r�  ry   r¹  r.  )r?   r¯  r¡  r  r;  r  )r�  r  r|   r@   r†  rˆ  )r  r¥  rÃ   r   r  rN   )rG   r±  r�  r@   r¹  r.  )rG   r¯  r¡  r  r;  r  )r  r  r|   r   r†  rˆ  )r   r¥  rÃ   rÖ   r  rN   )r¥   r¹  r.  r&   r½  r«  )r¿  r  r  r@   r¯  r¡  )r�  r  r|   r   r†  rˆ  )r|   r¥  rÃ   r  r  rN   )r&   r¹  r.  rÀ   r½  r«  )rK   r  r  r×   r¯  r¡  )r  r  r|   r@   r†  rˆ  )r  r¥  rÃ   r×   r  rN   )r™  rº  rŸ  r&   r»  r-  )r—   r¯  r¡  ry   r;  r  )rŠ  r  r|   r  r†  rˆ  )r   r¥  rÃ   r‰  r  rN   )r„  r»  r-  rG   é•   éw   )rÀ   r¯  r¡  rŽ  r;  r  )r  r  r|   r  r†  rˆ  )r™  r¥  rÃ   r’  r  rN   c                 C   s   || _ || _d S r   )rð   r˜   )r
   rð   r˜   r   r   r   r   0  ó   
zQRRSBlock.__init__c           
      C   s˜   t  | |¡}|d krtd|  d | ƒ‚t|ƒd }g }t|ƒD ])}||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   r1   rg   )
r,   rˆ   ÚrsBlockr    rÆ   r6   rr  rð   r˜   rO  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r0tj| d d d  S |t jkr@tj| d d 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)r8   r9   r:   rÅ  r   r   r�   rÃ  r   r   r   r   rœ   7  sÌ   ùø	÷
öóòñðíìëêçæåäá à!ß"Þ%Û&Ú'Ù(Ø+Õ,Ô-Ó.Ò1Ï2Î3Í4Ì7É8È9Ç:Æ=Ã>Â?Á@ÀC½D¼E»FºI·J¶KµL´O±P°Q¯R®U«VªW©X¨[¥\¤]£^¢aŸbžc�dœg™h˜i—j–m“n’o‘p�s�tŒu‹vŠy‡z†{…|„�  �ÿ  �þ  �ý  �ú  �ù  �ø 	 �÷  �ô  �ó  �ò  �ñ  �î  �í  �ì  �ë  �è  �ç  �æ  �å  �â  �á   �à ! �ß $ �Ü % �Û & �Ú ' �Ù * �Ö + �Õ , �Ô - �Ó 0 �Ð 1 �Ï 2 �Î 3 �Í 6 �Ê 7 �É 8 �È 9 �Ç < �Ä = �Ã > �Â ? �Á B �¾ C �½ D �¼ E �» H �¸ I �· J �¶ K �µ N �² O �± P �° Q �¯ T �¬ U �« V �ª W �© Z �¦ [ �¥ \ �¤ ] �£ ` �  a �Ÿ b �ž c �� f �š g �™ h �˜ i �— l �” m �“ n �’ o �‘ r �Ž s �� t �Œ u �‹ 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  rÂ  zQRBitBuffer.__init__c                 C   s   d  dd„ | jD ƒ¡S )NÚ.c                 S   s   g | ]}t |ƒ‘qS r   )rR   )r™   r5   r   r   r   r¨   W  s    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 )NrM   ry   r   )r+   )r
   r3   ÚbufIndexr   r   r   rì   Y  s   zQRBitBuffer.getc                 C   s0   t |ƒD ]}|  ||| d ? d@ dk¡ qd S rJ  )r1   rç   )r
   r~  r    r6   r   r   r   r(   ]  s    ÿzQRBitBuffer.putc                 C   r“   r   )r    r   r   r   r   rå   a  r–   zQRBitBuffer.getLengthInBitsc                 C   sV   | j d }t| jƒ|kr| j d¡ |r"| j|  d| j d ? O  < |  j d7  _ d S )NrM   r   rÕ   r   )r    r   r+   rg   )r
   rÚ   rÈ  r   r   r   rç   d  s   
zQRBitBuffer.putBitN)	r8   r9   r:   r   r%   rì   r(   rå   rç   r   r   r   r   rä   Q  s    rä   )rB   r¸   r   r   rP   Ú	NameErrorrR   r   r<   rF   rL   rU   rr   rx   r   rƒ   r„   r‡   r  r  Úobjectr³   rZ  r1   r{  rw  r6   ró   rœ   rä   r   r   r   r   Ú<module>   s\   þ5-6  !
 0
ÿ

ÿ!  