a
    7XhE                     @   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< 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   i/var/www/viveiro_mudafortebrasil/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rdkrn 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rdkrn 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rt
 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 < qd| j |d  |d < n dgd | j |d  ||d < t| jD ]X\}}|| j ||  ||d < |dkrd| j ||  |d < qd| j ||  |d < qd 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rd}n|| jd krd}nd}|| D ]}tdD ]}	||	 }	| jdkr@|dk r$|	| jd kr$qn|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sq|	|fV  qqqd 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rq|t	j
d | |d krq|t	jd qt	||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gZdd Zedd Zedd ZdS )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rt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

!  