o
    e                     @   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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< qed&d$D ]Zeed(  eed)  A eed*  A eed&  A ee< qed+D ]Zeeee < qG 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   TD:\Projects\ConvertPro\env\Lib\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versionZ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   r/   r   r   propertyr   r"   r#   r%   r-   r6   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r7   r8   r9   recompilematchr   r1   r   r/   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   )	         Nr@   r   r   r   r   rE   b   rD   rE   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&   )rL      rM   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 )NrL   )r-   r   rN   strordr(   )r
   r+   r,   cr   r   r   r6   v   s   

zQR8bitByte.writeN)	r7   r8   r9   r   r/   r)   r    r   r6   r   r   r   r   rK   j   s    rK   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rJ   r   rL   rL   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rn n|d8 }|d	@ d? d
 |d@  }n
td|||d d|| q|S )Nz	shift-jisZqrkanjir   r&   illegal multibyte sequencerL   i@  i           i@  i  i@  		enumeraterP   maprR   	TypeErrorrY   argsr   appendr
   r   codesr5   rS   der   r   r   rX      <   
zQRKanji.unicode_to_qrkanjic                 C   (   |  || | jD ]}||d q	d S NrJ   r-   r   r(   r
   r+   r,   rh   r   r   r   r6         
zQRKanji.writeN)
r7   r8   r9   r   r/   r)   r    r   rX   r6   r   r   r   r   rT   }   s    rT   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 )QRHanzirU   r   rJ   rV   c                 C   rW   )NzNot valid hanzi)unicode_to_qrhanzir   rY   r   r	   r   r   r   r      rZ   zQRHanzi.__init__c                 C   r[   )Ngb2312Zqrhanzir   r&   r\   rL   i  i  r]   `   r_   i  i  i  r`   rf   r   r   r   rq      rj   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   rk   rl   rm   rn   r   r   r   r6      ro   zQRHanzi.writeN)r7   r8   r9   r   r/   r)   r    r   rq   r-   r6   r   r   r   r   rp      s    rp   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   rL   i?  i   rM   i i      rm   r
   r+   r,   r   r   r   r6      s   


zQRECI.writeNr7   r8   r9   r)   r    r   r6   r   r   r   r   ru      s
    ru   c                   @   rt   )QRStructAppendr=   rw   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   rM   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&   rL   )r-   r(   r}   r~   r   rz   r   r   r   r6      s   zQRStructAppend.writeNr{   r   r   r   r   r|      s
    	r|   c                   @   rt   )QRFNC1FirstrG   rw   c                 C   s   d S r   r   r   r   r   r   r   
  s   zQRFNC1First.__init__c                 C   s   |  || d S r   )r-   rz   r   r   r   r6     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])$rH   rw   c                 C   sD   |  || | j}t|dkrt|d }nt|}||d d S )Nr   d   rL   )r-   r   r   rR   intr(   rn   r   r   r   r6     s   zQRFNC1Second.writeN)
r7   r8   r9   rA   rB   rC   r   r)   r    r6   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   )
rN   r   r;   rE   rT   rK   r   r   re   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      | 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&   rL   )r0   	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   rv   )r,   r   r0   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   Frv   r   rL   )r   ra   _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   rL   T)r0   r   QRUtilgetLostPoint)r
   ZminLostPointpatternr5   	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 )NrL   r   r   rF   TFrM   )r0   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 )NrL   r   r=   )	r   getPatternPositionr,   r   r   productra   _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=   rL   )r   getBCHTypeNumberr,   r0   r   r   )r
   r   r   r5   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   rF   rL   rH   )r   r   getBCHTypeInfor0   r   r   )r
   r   r   r   r   r5   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rqx|dk r|| jd krqx||v r|	|v r|dk r|	dk s|	|ks|	dk r|dk s||ksqx|	|fV  qxqrqTd S )Nr   rF   rG   r   rH   rL   rv   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    
rI   r   )r   chainr0   r   r   tupler   r   r,   setfrom_iterable)
r
   colsrowsZrrowsZpposr   r   Zrowidxr   rS   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)   @       rM   rL   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 }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   rL   zcode length overflow. (%d > %d)r&   F)r   r   QRBitBufferr6   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   r5   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   ddrh   r   r   r   r   8  s    
)
totalCountr   maxre   r+   r   getErrorCorrectPolynomialQRPolynomialr#   r   r0   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)r7   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   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)r7   r8   r9   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&   rG   rF   rv   N)r7   r8   r9   Z
PATTERN000Z
PATTERN001Z
PATTERN010Z
PATTERN011Z
PATTERN100Z
PATTERN101Z
PATTERN110Z
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   rF   r            "   )rF   r   &   )rF   ry   *   )rF   r   .   )rF      2   )rF   r   6   )rF   r   :   )rF   r   >   )rF   r   r   B   )rF   r   0   F   )rF   r   r   J   )rF   r   r   N   )rF   r   8   R   )rF   r   r   V   )rF   r   r   Z   )rF   r   r   H   ^   )rF   r   r   r  b   )rF   r   r   r  f   )rF   r   r   P   j   )rF   r   r   T   n   )rF   r   r   r  r   )rF   r   r   r  v   )rF   r   r   r  r	  z   )rF   r   r   r  r
  ~   )rF   r   4   r  h      )rF   r   r  r  l      )rF   r   <   r  p      )rF   r   r   r  r     )rF   r   r   r  r     )rF   r   r   r  r
  r     )rF   ry   r   L   r
  r      )rF   r   r   r  r        )rF   r   r   r  r        )rF   r   r   r  r  r     )rF   r   r   r  r  r     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   rh   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   r&  G18r)  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   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      | | d dkS Nr   r   r   r5   jr   r   r   <lambda>      zQRUtil.<lambda>c                 C   s   | d dkS r0  r   r1  r   r   r   r3        c                 C   s   |d dkS Nr=   r   r   r1  r   r   r   r3    r5  c                 C   r/  r6  r   r1  r   r   r   r3    r4  c                 C   s   | d |d  d dkS Nr   r=   r   r   r1  r   r   r   r3        c                 C   s   | | d | | d  dkS r7  r   r1  r   r   r   r3    s    c                 C   s    | | d | | d  d dkS r7  r   r1  r   r   r   r3         c                 C   s    | | d | | d  d dkS )Nr=   r   r   r   r1  r   r   r   r3    r9  )r   r   r   r=   r&   rG   rF   rv   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   r0   multiplyQRMathgexp)ZerrorCorrectLengthar5   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     r8  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 rB  r   )r   rA  r   r   r   r     r9  )zipr   r   )r;  r   scoreZ	lastCountlastRowr   changedZ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=   )rC  )	r;  r   rD  rE  r   ZlastCol0ZlastCol1Zcol0Z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   )r;  r   r   Z
patternlenrD  r   r2  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     s    z(QRUtil.maskScoreRule4.<locals>.<genexpr>r   r   r   rG   )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   )rG  r   rC  rH  rI  rL  )r;  ZqrCoder   r   r   r   r     s   zQRUtil.getLostPointN)r7   r8   r9   r.  r'  r*  r(  r   r   r   r&  r   r   classmethodr   r   rG  rH  rI  rL  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r4   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   r_      )	EXP_TABLErP  r   r   r   r>    s   zQRMath.gexpN)r7   r8   r9   r   rQ  r>  r   r   r   r   r=    s
    
r=  c                 C      g | ]}|qS r   r   r   r   r   r   r     r4  r   rR  c                 C   rT  r   r   r   r   r   r   r     r4  rL   r   r&   rG   rF   r_   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
   rV  shiftr   r   r   r   r     s   zQRPolynomial.__init__c                 C   r:  r   )rV  )r
   r2   r   r   r   r     r   zQRPolynomial.getc                 C   r   r   )r   rV  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 r+  )r#   r0   r=  r>  rQ  r   r   )r
   ri   rV  r5   r2  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>  rQ  )r   nnenratior   r   r   1  s    z$QRPolynomial.mod.<locals>.<listcomp>)r#   r=  rQ  rV  rC  r   r   )r
   ri   rV  r   rZ  r   r   -  s    
zQRPolynomial.modN)r7   r8   r9   r   r   r#   r<  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dd Zedd Zedd ZdS )r   )r   r      )r   r   rM   )r   r   rJ   )r   r   rH   )r   ,   r   )r   r]  r   )r   r]  r   )r   r]  rM   )r   r   7   )r   r   r]  )r   #   r   )r   r_  rJ   )r   r   r  )r   r   r   )r   r   ry   )r&      rH   )r   r  r  )r   C   +   )r   !   r   r   r   rM   )r   rc  rI   r   r   r>   )r   r  D   )r&   rb  r   )r&   rb  r\  )r&   rb  r   )r   r	  r  )r&   1      )r   r   r?   r&   rc  r   )r&   '   rJ   r   r   r?   )r   y   a   )r   r  r   r   =   rg  )r&   r   r   r   r   r\  )r&   r   r?   r   r   r   )r   r  t   )r=   r   $   r   ;   %   )r&   rl  rM   r&   rn  r   )r&   rl  r>   r&   rn  rJ   )r   r  rd  r   W   E   )r&   rp  rb  r   r   r]  )rF   rb  r\  r   r]     )rF   rb  r   r   r]  rM   )r&   e   Q   )r   r  r   r&   rs  3   )r&   r   r   r&   rt     )r=   rl  r>   rL   rn  rJ   )r   rk  \   r   u   ]   )rF   r   rl  r   rm  rn  )r&   r   rq  rF   /      )rv   r   r?   r&   rb  r   )r&      k   )rL   rm  rn  r   r  r   )rL   r]  rq  r&   -   rz  )r>   rc  rI   r&   r   r>   )r=      s   r   r  rk  )r&   r   r   rG   A   r   )rI   rl  rM   rG   rn  r   )rI   rl  r>   rG   rn  rJ   )rG   m   ro  r   r  X   )rG   r  r   rG   r   r   )rG   r   ry   rv   r^  r`  )rI   rl  r>   )rG   r  r	  r   {   c   )rv   I   r}  r=   r  r   )r   rb  r\  r   r]  rq  )r=   r}  r   rJ   r   rM   )r      r|  rG   r"  r  )r   r  r   r   K   ry  )r   r   r   r   rt  ru  )r   r   r?   r   rb  r   )rG   r  x   r      rh  )rH   rp  rb  r&   r   r]  )r   r   r   r   rt  ru  )r   r   r?   r\  rb  r   )r=      q   r&   r  r  )r=   r   r]  rI   G   r}  )r   ry  rz  r&   r   r   )rH   rg  rJ   rM   r   r?   )r=   r  r|  rG   r"  r  )r=   ra  r   rJ   rd  r   )r   r   ry   rG   r^  r`  )r   rb  r   r   r]  rM   )r&      rk  r&   r~  rw  )r   rd  r   )r   r   r   rF   rt  ru  )r\  r   rM   rF   ry  r   )r      o   rv      r  )r   r  r   )rv   r   ry   rM   r^  r`  )r   rn  rJ   )r&   r  rh  rG      r  )r&   r  ry  r?   r  r   )rI   r   ry   r?   r^  r`  )rM   r}  r   r?   r   rM   )rF      rw  r&      r  )rF   r  r}  r?   r  r   )rI   r   ry   rM   r^  r`  )r   r   rM   r   ry  r   )rL   r   r  r&   r{  r|  )rL   r  ry  rJ   r  r   )rv   r   ry   r   r^  r`  )r   r}  r   rJ   r   rM   )r   r  r  r      r  )r\  r  r   r&   r  ry  )r   r   r   rF   rt  ru  )rc  r   rM   r&   ry  r   )rL   r  r  r&      r  )r   r  r}  r=   r  r   )rL   5   ru  r   r   ry   )r>   r}  r   r   r   rM   )r=   r  rw  r   r  r  )r=   r  r}  ru  r  r   )r&   r   ry   rf  r^  r`  )rI   r}  r   rf  r   rM   )rv   r  rk  rv   r  rw  )rz  r  r}  rv   r  r   )r   r  ru  rn  r   ry   )r\  r}  r   r   r   rM   )rG   r~  r  r   r  rk  )r\  r  ry  r   r  r   )r   r   ry   r`  r^  r`  )ru  r}  r   r`  r   rM   )rJ   r~  r  r=   r  rk  )r   r  r      r  ry  )r   r   ry   r   r^  r`  )ru  r}  r   r   r   rM   )r   r~  r  )r   r  r   ru  r  ry  )r   r   ry   r_  r^  r`  )r\  r}  r   r_  r   rM   )r   r~  r  r   r  rk  )r?   r  r   rz  r  ry  )r  r   ry   r\  r^  r`  )rI   r}  r   r   r   rM   )rJ   r~  r  rF   r  rk  )r?   r  r   ru  r  ry  )r]  r   ry   rv   r^  r`  )rm  r   rM   r   ry  r   )r>   r  rh  rv   r  r  )r>   r  ry  r   r  r   )rg  r   ry   r?   r^  r`  )r   r}  r   r   r   rM   )rF   r  rh  r?   r  r  )rF   r  ry  r   r  r   )r   r   ry   r   r^  r`  )r   r}  r   r   r   rM   )r   r  r  r&   r  r  )r  r  r   r?   r  ry  )re  r   ry   r   r^  r`  )ry   r}  r   r   r   rM   )r&   r  r  r   r  r  )rJ   r  r   r   r  ry  )r   r   ry   r?   r^  r`  )r   r}  r   r   r   rM   )rq  r  rw  r&   r  r  )r   r  ry  rv   r  r   )rb  r   ry   r   r^  r`  )r   r}  r   ra  r   rM   )r\  r  r  rF      w   )r   r  ry  rf  r  r   )r   r   ry   r   r^  r`  )rq  r}  r   rj  r   rM   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   r0   re   )
r,   r   ZrsBlockr   r   r5   rK  r   r   r2  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)r7   r8   r9   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   )rQ   )r   r4   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 )NrL   rv   r   )r+   )r
   r2   bufIndexr   r   r   r   Y  s   zQRBitBuffer.getc                 C   s0   t |D ]}| ||| d ? d@ dk qd S r-  )r0   r   )r
   rV  r   r5   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 )NrL   r   r   r   )r   r   r+   re   )r
   r   r  r   r   r   r   d  s   
zQRBitBuffer.putBitN)	r7   r8   r9   r   r%   r   r(   r   r   r   r   r   r   r   Q  s    r   )rA   r   r   r   rO   	NameErrorrQ   r   r;   rE   rK   rT   rp   ru   r|   r   r   r   r   r   r   r=  r0   rS  rO  r5   r   r   r   r   r   r   r   <module>   s\   5-6  !
 0


!  