U
    ;gB                  .   @   s\  d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	 dZ
dZdZdZe
d	ed
edediZe
dededed	iZe
dededediZdZedee d Zd	dddZg ddgddgddgddgddgdddgdddgdddgddd gddd!gdd"d#gddd$gdddd%gddd&d'gddd d(gddd!d)gddd*d+gddd#d,gddd$d-gddd d.d/gddd d(d0gddd!d)d1gddd!d2d3gdd"d#d4d5gddd#d,d6gddd$d-d7gddd d(d0d8gddd!d)d1d9gddd:d)d;d<gddd*d+d=d>gddd?d,d@dAgddd#d,d6dBgddd$d-d7dCgddd!d)d1d9dDgddd dEd1dFdGgddd!d2d3dHdIgdd"d#d4d5dJdKgddd!d+d5dAdLgddd#d,d6dBdMgg(ZdNZdOZdPZdQZdRZdSdT ZdUdV edD ZdWdX ZdYdZ Z d[d\ Z!d]d^ Z"d_d` Z#dadb Z$dcdd Z%dedf Z&dgdh Z'didj Z(dkdl Z)dmdn Z*dodp Z+ddqdrZ,dsdt Z-dudv Z.dwdx Z/G dydz dzZ0G d{d| d|Z1e1ee	 d}d~dZ2dd Z3dS )    N)List)LUTbase
exceptions)RSBlock            
   	                  s-   0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:s   ^[s   ]*\Z   )   r   r                  "   &      *   .      2   6       :   >   B   0   F   J   N   8   R   V   Z   H   ^   b   f   P   j   T   n   r   v   z   ~   4   h      l      <   p               L                           i7  i%  iT        c                 C   s   | j S N
data_count)block rS   //tmp/pip-unpacked-wheel-ij2mbwps/qrcode/util.py_data_counte   s    rU   c                    s*   g | ]" d g fddt ddD  qS )r   c              
      s&   g | ]}d t ttt|  qS )r
   )summaprU   r   	rs_blocks).0versionerror_correctionrS   rT   
<listcomp>k   s   z<listcomp>.<listcomp>r   )   )range)rY   rS   r[   rT   r]   i   s   
r]   c                 C   sF   | d> }t |t t dkr6|tt |t t > N }q| d> |B tA S )Nr   r   )	BCH_digitG15G15_MASKdatadrS   rS   rT   BCH_type_infos   s    rf   c                 C   sB   | d> }t |t t dkr6|tt |t t > N }q| d> |B S )Nr   r   )r`   G18rc   rS   rS   rT   BCH_type_number{   s    rh   c                 C   s"   d}| dkr|d7 }| dL } q|S )Nr   r   rS   )rd   digitrS   rS   rT   r`      s
    
r`   c                 C   s   t | d  S Nr   )PATTERN_POSITION_TABLErZ   rS   rS   rT   pattern_position   s    rm   c                 C   s   | dkrdd S | dkr dd S | dkr0dd S | dkr@d	d S | d
krPdd S | dkr`dd S | dkrpdd S | dkrdd S t d|  dS )z>
    Return the mask function for the given mask pattern.
    r   c                 S   s   | | d dkS Nr   r   rS   ijrS   rS   rT   <lambda>       zmask_func.<locals>.<lambda>r   c                 S   s   | d dkS rn   rS   ro   rS   rS   rT   rr      rs   r   c                 S   s   |d dkS Nr   r   rS   ro   rS   rS   rT   rr      rs   r   c                 S   s   | | d dkS rt   rS   ro   rS   rS   rT   rr      rs   r	   c                 S   s$   t | d t |d  d dkS Nr   r   r   )mathfloorro   rS   rS   rT   rr      rs      c                 S   s   | | d | | d  dkS ru   rS   ro   rS   rS   rT   rr      rs   r   c                 S   s    | | d | | d  d dkS ru   rS   ro   rS   rS   rT   rr      rs   r   c                 S   s    | | d | | d  d dkS )Nr   r   r   rS   ro   rS   rS   rT   rr      rs   zBad mask pattern: N)	TypeError)patternrS   rS   rT   	mask_func   s"    r{   c                 C   s    | dk rt S | dk rtS tS d S )Nr      )MODE_SIZE_SMALLMODE_SIZE_MEDIUMMODE_SIZE_LARGErl   rS   rS   rT   mode_sizes_for_version   s
    r   c                 C   s4   | t tttfkr td|  dt| t||  S )NInvalid mode ())MODE_NUMBERMODE_ALPHA_NUMMODE_8BIT_BYTE
MODE_KANJIry   check_versionr   )moderZ   rS   rS   rT   length_in_bits   s    r   c                 C   s$   | dk s| dkr t d|  dd S )Nr   (   zInvalid version (was z, expected 1 to 40))
ValueErrorrl   rS   rS   rT   r      s    r   c                 C   sD   t | }d}t| |}|t| |7 }|t| |7 }|t| |7 }|S Nr   )len_lost_point_level1_lost_point_level2_lost_point_level3_lost_point_level4)modulesmodules_count
lost_pointrS   rS   rT   r      s    
r   c           	         s:  d}t |}dg|d   |D ]t}| | }|d }d}|D ]>}|| |krT|d7 }q:|dkrl |  d7  < d}|| }q:|dkr |  d7  < q|D ]x}| d | }d}|D ]F}| | | |kr|d7 }q|dkr |  d7  < d}| | | }q|dkr |  d7  < q|t fddt d|d D 7 }|S )Nr   r   rx   c                 3   s   | ]} | |d   V  qdS )r   NrS   )rY   Zeach_length	containerrS   rT   	<genexpr>   s   z%_lost_point_level1.<locals>.<genexpr>)r_   rV   )	r   r   r   modules_rangerowthis_rowZprevious_colorlengthcolrS   r   rT   r      s@    



r   c           
      C   s   d}t |d }|D ]z}| | }| |d  }t|}|D ]T}||d  }	|	||d  krdt|d  q8|	|| krtq8q8|	|| krq8q8|d7 }q8q|S )Nr   r   r   r_   iternext)
r   r   r   r   r   r   Znext_rowZmodules_range_iterr   Z	top_rightrS   rS   rT   r      s     r   c           	      C   s  t |}t |d }d}|D ]&}| | }t|}d}|D ]}||d  s,||d  r,||d  s,||d  r,||d  s,||d  r||d  r||d	  r||d
  s||d  s||d  r$||d  s,||d  s,||d	  s,||d
  r,||d  r,||d  r,|d7 }||d  r:t|d  q:q|D ]v}t|}d}|D ]\}| |d  | s| |d  | r| |d  | s| |d  | r| |d  | s| |d  | r,| |d  | r,| |d	  | r,| |d
  | s,| |d  | s,| |d  | r| |d  | s| |d  | s| |d	  | s| |d
  | r| |d  | r| |d  | r|d7 }| |d  | r`t|d  q`qJ|S )Nr   r   r   r	   rx   r   r   r   r   r   r
   r   r   )	r   r   r   Zmodules_range_shortr   r   r   Zmodules_range_short_iterr   rS   rS   rT   r     s    








	












	
r   c                 C   s>   t tt | }t||d  }tt|d d d }|d S )Nr   d   r   rx   r   )rV   rW   floatintabs)r   r   Z
dark_countpercentZratingrS   rS   rT   r   [  s    r   c                 c   s   t | } d}dtt d }t| |krPtd| d }td| d }n2dt|d d }t|| }t|| }t| |}|D ]N\}}|rt	|t
d	d
V  qt||D ]$\}}	|rtnt}
t	|	|
d	d
V  qqdS )z
    An iterator returning QRData chunks optimized to the data content.

    :param minimum: The minimum number of bytes in a row to split as a chunk.
    s   \d   [   ]   ^s   +$   {asciis   ,}F)r   
check_dataN)to_bytestringreescape	ALPHA_NUMr   compilestrencode_optimal_splitQRDatar   r   r   )rd   ZminimumZnum_patternZalpha_patternZ	re_repeatZnum_bitsZis_numchunkZis_alphaZ	sub_chunkr   rS   rS   rT   optimal_data_chunksc  s     
r   c                 c   sp   | r^t || }|sq^| |  }}|r>d| d | fV  d| || fV  | |d  } q | rld| fV  d S )NFT)r   searchstartend)rd   rz   matchr   r   rS   rS   rT   r   }  s    r   c                 C   s   t | tst| d} | S )z^
    Convert data to a (utf-8 encoded) byte-string if it isn't a byte-string
    already.
    zutf-8)
isinstancebytesr   r   rd   rS   rS   rT   r     s    
r   c                 C   s   |   rtS t| rtS tS )z<
    Calculate the optimal mode for this chunk of data.
    )isdigitr   RE_ALPHA_NUMr   r   r   r   rS   rS   rT   optimal_mode  s
    
r   c                   @   s2   e Zd ZdZdddZdd Zdd	 Zd
d ZdS )r   zS
    Data held in a QR compatible format.

    Doesn't currently handle KANJI.
    NTc                 C   sl   |rt |}|dkr t|| _nB|| _|tttfkrDtd| d|rb|t|k rbtd| || _dS )zg
        If ``mode`` isn't provided, the most compact QR data type possible is
        chosen.
        Nr   r   z-Provided data can not be represented in mode )	r   r   r   r   r   r   ry   r   rd   )selfrd   r   r   rS   rS   rT   __init__  s    zQRData.__init__c                 C   s
   t | jS rO   )r   rd   r   rS   rS   rT   __len__  s    zQRData.__len__c                 C   s   | j tkrRtdt| jdD ]2}| j||d  }tt| }|t|| qn| j tkrtdt| jdD ]^}| j||d  }t|dkr|t	
|d d t	
|d  d qn|t	
|d qnn| j}|D ]}||d qd S )	Nr   r   r   r   -   r   r   r
   )r   r   r_   r   rd   NUMBER_LENGTHputr   r   r   find)r   bufferrp   chars
bit_lengthrd   crS   rS   rT   write  s"    

 zQRData.writec                 C   s
   t | jS rO   )reprrd   r   rS   rS   rT   __repr__  s    zQRData.__repr__)NT)__name__
__module____qualname____doc__r   r   r   r   rS   rS   rS   rT   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S )	BitBufferc                 C   s   g | _ d| _d S r   )r   r   r   rS   rS   rT   r     s    zBitBuffer.__init__c                 C   s   d dd | jD S )N.c                 S   s   g | ]}t |qS rS   )r   )rY   nrS   rS   rT   r]     s     z&BitBuffer.__repr__.<locals>.<listcomp>)joinr   r   rS   rS   rT   r     s    zBitBuffer.__repr__c                 C   s,   t |d }| j| d|d  ? d@ dkS )Nr
   r   r   )rv   rw   r   )r   index	buf_indexrS   rS   rT   get  s    zBitBuffer.getc                 C   s0   t |D ]"}| ||| d ? d@ dk qd S rj   )r_   put_bit)r   numr   rp   rS   rS   rT   r     s    zBitBuffer.putc                 C   s   | j S rO   )r   r   rS   rS   rT   r     s    zBitBuffer.__len__c                 C   sV   | j d }t| j|kr$| jd |rD| j|  d| j d ? O  < |  j d7  _ d S )Nr
   r   rE   r   )r   r   r   append)r   bitr   rS   rS   rT   r     s    
zBitBuffer.put_bitN)	r   r   r   r   r   r   r   r   r   rS   rS   rS   rT   r     s   r   )r   rX   c              	      s  dd}d}g }g }|D ]}|j }|j| }t||}t||} fddt|D }	|7 |tjkrttj| d}
n6tdgd}
t|D ]}|
tdt|gd }
qt|	t	|
d }||
 }g }t	|| }t|D ](}|| }|
|dkr|| nd q|
|	 |
| qg }t|D ].}|D ]"}|t	|k r>|
||  q>q6t|D ].}|D ]"}|t	|k rv|
||  qvqn|S )Nr   c                    s   g | ]}d  j |  @ qS )   )r   )rY   rp   r   offsetrS   rT   r]     s     z create_bytes.<locals>.<listcomp>r   )rQ   Ztotal_countmaxr_   r   Z
rsPoly_LUTr   Z
PolynomialZgexpr   r   )r   rX   Z
maxDcCountZ
maxEcCountZdcdataZecdataZrs_blockZdcCountZecCountZ
current_dcZrsPolyrp   ZrawPolyZmodPolyZ
current_ecZ
mod_offsetZmodIndexrd   dcecrS   r   rT   create_bytes  sH    





r   c                 C   s"  t  }|D ]4}||jd |t|t|j|  || q
t| |}tdd |D }t||krt	
dt||f tt|t| dD ]}|d qt|d }|rtd| D ]}|d q|t| d }	t|	D ],}
|
d dkr
|td q|td qt||S )	Nr	   c                 s   s   | ]}|j d  V  qdS )r
   NrP   )rY   rR   rS   rS   rT   r   1  s     zcreate_data.<locals>.<genexpr>z:Code length overflow. Data size (%s) > size available (%s)Fr
   r   r   )r   r   r   r   r   r   r   rX   rV   r   ZDataOverflowErrorr_   minr   PAD0PAD1r   )rZ   r\   Z	data_listr   rd   rX   Z	bit_limit_ZdelimitZbytes_to_fillrp   rS   rS   rT   create_data'  s2    
r   )r	   )4rv   r   typingr   Zqrcoder   r   r   Zqrcode.baser   r   r   r   r   r}   r~   r   r   r   r   r   r   rk   ra   rg   rb   r   r   rU   r_   ZBIT_LIMIT_TABLErf   rh   r`   rm   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   rS   rS   rT   <module>   s               






+

		+L

74