a
    ç´«jåA  ã                   @   sô   U d dl Z d dlmZ d dlmZmZmZmZmZm	Z	m
Z
 d dlmZmZmZ d dlmZ d dlmZ eeee   Zi Zeeef ed< ddd	„Zd
d„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZeded�Z eded�Z!G dd„ dee  ƒZ"dS )é    N)Úbisect_left)ÚGenericÚ
NamedTupleÚOptionalÚTypeVarÚcastÚoverloadÚLiteral)Ú	constantsÚ
exceptionsÚutil)Ú	BaseImage)Ú
PyPNGImageÚprecomputed_qr_blanksc                 K   s    t f i |¤Ž}| | ¡ | ¡ S ©N)ÚQRCodeÚadd_dataÚ
make_image)ÚdataÚkwargsÚqr© r   úJ/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/qrcode/main.pyÚmake   s    
r   c                 C   s    t | ƒdkrtd| › d�ƒ‚d S )Nr   zInvalid box size (was z, expected larger than 0)©ÚintÚ
ValueError©Úsizer   r   r   Ú_check_box_size   s    r   c                 C   s   t | ƒdk rtd|  ƒ‚d S )Nr   z=Invalid border value (was %s, expected 0 or larger than that)r   r   r   r   r   Ú_check_border!   s    ÿr    c                 C   sN   | d u rd S t | tƒs*tdt| ƒ› d�ƒ‚| dk s:| dkrJtd| › d�ƒ‚d S )NzInvalid mask pattern (was z, expected int)r   é   z(Mask pattern should be in range(8) (got ú))Ú
isinstancer   Ú	TypeErrorÚtyper   )Úmask_patternr   r   r   Ú_check_mask_pattern(   s    
ÿr'   c                 C   s   dd„ | D ƒS )Nc                 S   s   g | ]}|d d … ‘qS r   r   )Ú.0Úrowr   r   r   Ú
<listcomp>4   ó    z!copy_2d_array.<locals>.<listcomp>r   )Úxr   r   r   Úcopy_2d_array3   s    r-   c                   @   sd   e Zd ZU eed< eed< eed< eed< eed< eed< eed< eed< eed	< ed
œdd„ZdS )ÚActiveWithNeighborsZNWÚNZNEÚWÚmeÚEZSWÚSZSE©Úreturnc                 C   s   | j S r   )r1   ©Úselfr   r   r   Ú__bool__B   s    zActiveWithNeighbors.__bool__N)Ú__name__Ú
__module__Ú__qualname__ÚboolÚ__annotations__r8   r   r   r   r   r.   7   s   
r.   ÚGenericImage)ÚboundÚGenericImageLocalc                   @   sp  e Zd ZU eed< dZee ed< dej	ddddfee
e  dœdd„Zeed	œd
d„ƒZejdd	œdd„ƒZedd„ ƒZejdd„ ƒZdd„ Zd;dd„Zd<dd„Zdd„ Zdd„ Zd=dd„Zdd„ Zd>d d!„Zd?d#d$„Zed@ed ed%œd&d'„ƒZedAe
e ed%œd(d'„ƒZdBd)d'„Zeeed*œd+d,„Zd-d.„ Z d/d0„ Z!d1d2„ Z"d3d4„ Z#d5d6„ Z$d7d8„ Z%eee&d*œd9d:„Z'dS )Cr   ÚmodulesNÚ_versioné
   é   )Úimage_factoryc                 C   sb   t |ƒ t|ƒ || _t|ƒ| _t|ƒ| _t|ƒ| _|| _|| _|d urVt	|t
ƒsVJ ‚|  ¡  d S r   )r   r    Úversionr   Úerror_correctionÚbox_sizeÚborderr&   rE   Ú
issubclassr   Úclear)r7   rF   rG   rH   rI   rE   r&   r   r   r   Ú__init__N   s    	


zQRCode.__init__r4   c                 C   s   | j d u r|  ¡  tt| j ƒS r   )rB   Úbest_fitr   r   r6   r   r   r   rF   e   s    
zQRCode.versionc                 C   s$   |d urt |ƒ}t |¡ || _d S r   )r   r   Úcheck_versionrB   )r7   Úvaluer   r   r   rF   k   s    
c                 C   s   | j S r   )Ú_mask_patternr6   r   r   r   r&   r   s    zQRCode.mask_patternc                 C   s   t |ƒ || _d S r   )r'   rP   )r7   Úpatternr   r   r   r&   v   s    c                 C   s   g g| _ d| _d| _g | _dS )z*
        Reset the internal data.
        r   N)rA   Úmodules_countÚ
data_cacheÚ	data_listr6   r   r   r   rK   {   s    zQRCode.clearé   c                 C   sR   t |tjƒr| j |¡ n.|r6| j tj||d�¡ n| j t |¡¡ d| _dS )a  
        Add data to this QR Code.

        :param optimize: Data will be split into multiple chunks to optimize
            the QR size by finding to more compressed modes of at least this
            length. Set to ``0`` to avoid optimizing at all.
        )ÚminimumN)r#   r   ZQRDatarT   ÚappendÚextendZoptimal_data_chunksrS   )r7   r   Úoptimizer   r   r   r   „   s    zQRCode.add_dataTc                 C   sJ   |s| j du r| j| j d� | jdu r8|  d|  ¡ ¡ n|  d| j¡ dS )zÉ
        Compile the data into a QR Code array.

        :param fit: If ``True`` (or if a size has not been provided), find the
            best fit for the data to avoid data overflow errors.
        N©ÚstartF)rF   rM   r&   ÚmakeImplÚbest_mask_pattern)r7   Úfitr   r   r   r   ”   s
    
zQRCode.makec                    sè   ˆ j d d ˆ _ˆ j tv r,ttˆ j  ƒˆ _nj‡ fdd„tˆ jƒD ƒˆ _ˆ  dd¡ ˆ  ˆ jd d¡ ˆ  dˆ jd ¡ ˆ  ¡  ˆ  ¡  tˆ jƒtˆ j < ˆ  	||¡ ˆ j dkr¶ˆ  
|¡ ˆ jd u rÖt ˆ j ˆ jˆ j¡ˆ _ˆ  ˆ j|¡ d S )NrD   é   c                    s   g | ]}d gˆ j  ‘qS r   )rR   )r(   Úir6   r   r   r*   ¨   s   z#QRCode.makeImpl.<locals>.<listcomp>r   r!   )rF   rR   r   r-   rA   ÚrangeÚsetup_position_probe_patternÚsetup_position_adjust_patternÚsetup_timing_patternÚsetup_type_infoÚsetup_type_numberrS   r   Zcreate_datarG   rT   Úmap_data)r7   Útestr&   r   r6   r   r\   ¢   s(    

ÿ


ÿzQRCode.makeImplc                 C   sú   t ddƒD ]ê}|| dks
| j|| kr*q
t ddƒD ]¾}|| dks4| j|| krTq4d|  krhdkrtn n|dv sÄd|  krˆdkr”n n|dv sÄd|  kr¨dkrÜn n0d|  krÀdkrÜn nd| j||  || < q4d	| j||  || < q4q
d S )
Néÿÿÿÿé   r   é   >   r   rk   é   rD   TF©ra   rR   rA   )r7   r)   ÚcolÚrÚcr   r   r   rb   ¾   s8    ÿÿ
ÿþþ
þýý
ýý
z#QRCode.setup_position_probe_patternc                 C   s¶   |du rd}t  |¡ t  |¡}t  ¡ }| jD ]2}| |jd¡ | t|ƒ||j ¡ | |¡ q.t|ƒ}t	t j
| j ||ƒ| _| jdkr’t ¡ ‚|t  | j¡ur°| j| jd� | jS )zD
        Find the minimum size required to fit in the data.
        Né   rD   é)   rZ   )r   rN   Zmode_sizes_for_versionZ	BitBufferrT   ÚputÚmodeÚlenÚwriter   ZBIT_LIMIT_TABLErG   rF   r   ZDataOverflowErrorrM   )r7   r[   Z
mode_sizesÚbufferr   Zneeded_bitsr   r   r   rM   Ð   s$    


ÿ
zQRCode.best_fitc                 C   sJ   d}d}t dƒD ]4}|  d|¡ t | j¡}|dks<||kr|}|}q|S )z7
        Find the most efficient mask pattern.
        r   rj   T)ra   r\   r   Ú
lost_pointrA   )r7   Zmin_lost_pointrQ   r`   rx   r   r   r   r]   î   s    zQRCode.best_mask_patternc                 C   sÚ   |du rddl }|j}| ¡ s&tdƒ‚| jdu r8|  ¡  | j}| dd|d d   d ¡ t|ƒD ]J}| d	¡ t|ƒD ](}| j	| | r˜| d
¡ qz| d	¡ qz| d¡ qd| dd|d d   d ¡ | 
¡  dS )zz
        Output the QR Code only using TTY colors.

        If the data has not been compiled yet, make it first.
        Nr   ú	Not a ttyz[1;47mú rl   rD   z[0m
z[1;47m  [40mz  z[1;47m  [0m
)ÚsysÚstdoutÚisattyÚOSErrorrS   r   rR   rv   ra   rA   Úflush)r7   Úoutr{   Úmodcountro   rp   r   r   r   Ú	print_tty   s$    

zQRCode.print_ttyFc           	         s&  |du rt j}|r"| ¡ s"tdƒ‚ˆjdu r4ˆ ¡  ˆj‰dd„ dD ƒ}|rPd‰ ˆ r\| ¡  tdœ‡ ‡‡fdd	„}t	ˆj
 ˆˆj
 d
ƒD ]�}|rºˆ r¦|ˆˆj
 d k r°| d¡ | d¡ t	ˆj
 ˆˆj
 ƒD ].}|||ƒ||d |ƒd>  }| || ¡ qÎ|�r| d¡ | d¡ qˆ| ¡  dS )zË
        Output the QR Code using ASCII characters.

        :param tty: use fixed TTY color codes (forces invert=True)
        :param invert: invert the ASCII characters (solid <-> transparent)
        Nry   c                 S   s   g | ]}t |fƒ d ¡‘qS )Úcp437)ÚbytesÚdecode)r(   Úcoder   r   r   r*   /  r+   z&QRCode.print_ascii.<locals>.<listcomp>)éÿ   éß   éÜ   éÛ   Tr4   c                    sV   ˆ r"ˆj r"t| |ƒˆˆj  kr"dS t| |ƒdk s>t| |ƒˆkrBdS ttˆj|  | ƒS )Nrq   r   )rI   ÚmaxÚminr   r   rA   )r,   Úy©Úinvertr�   r7   r   r   Ú
get_module5  s
    z&QRCode.print_ascii.<locals>.get_modulerl   rq   z[48;5;232mz[38;5;255mz[0mÚ
)r{   r|   r}   r~   rS   r   rR   Úreverser   ra   rI   rv   r   )	r7   r€   Úttyr�   Úcodesr�   ro   rp   Úposr   rŽ   r   Úprint_ascii  s2    



zQRCode.print_ascii)rE   r5   c                 K   s   d S r   r   ©r7   rE   r   r   r   r   r   I  s    zQRCode.make_imagec                 K   s   d S r   r   r—   r   r   r   r   N  s    c                 K   s(  |  d¡s(|  d¡s(|  d¡s(|  d¡r<| jtjkr<tdƒ‚t| jƒ | jdu rX|  ¡  |durpt	|t
ƒsšJ ‚n*| j}|du ršddlm}m} |r–|nt}|| j| j| jfd	| ji|¤Ž}|j�rt| jƒD ]F}t| jƒD ]6}|jrö|j||| d
� qÚ| j| | rÚ| ||¡ qÚqÌ|j�r$| ¡  |S )zu
        Make an image from the QR Code data.

        If the data has not been compiled yet, make it first.
        Zembedded_image_pathZembedded_imageZembeded_image_pathZembeded_imagezOError correction level must be ERROR_CORRECT_H if an embedded image is providedNr   )ÚImageÚPilImageZqrcode_modules)r   )ÚgetrG   r
   ZERROR_CORRECT_Hr   r   rH   rS   r   rJ   r   rE   Zqrcode.image.pilr˜   r™   r   rI   rR   rA   Zneeds_drawrectra   Zneeds_contextZdrawrect_contextZdrawrectZneeds_processingÚprocess)r7   rE   r   r˜   r™   Zimro   rp   r   r   r   r   S  sR    ÿþýü
ûÿ

ýüû)r)   rn   r5   c                 C   s0   |dko.|t | jƒk o.|dko.|t | j| ƒk S )Nr   )ru   rA   )r7   r)   rn   r   r   r   Úis_constrained†  s    ÿþüzQRCode.is_constrainedc                 C   s„   t d| jd ƒD ].}| j| d d ur(q|d dk| j| d< qt d| jd ƒD ].}| jd | d urhqP|d dk| jd |< qPd S )Nrj   rk   rl   r   rm   )r7   ro   rp   r   r   r   rd   Ž  s    zQRCode.setup_timing_patternc                 C   sÖ   t  | j¡}tt|ƒƒD ]¸}|| }tt|ƒƒD ]ž}|| }| j| | d urPq0tddƒD ]r}tddƒD ]b}|dksœ|dksœ|dksœ|dksœ|dkr´|dkr´d| j||  || < qhd| j||  || < qhqZq0qd S )Néþÿÿÿé   rl   r   TF)r   Zpattern_positionrF   ra   ru   rA   )r7   r•   r`   r)   Újrn   ro   rp   r   r   r   rc   ™  s.    ÿþýüûûz$QRCode.setup_position_adjust_patternc                 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é   rq   rž   rj   )r   ZBCH_type_numberrF   ra   rA   rR   )r7   rh   Úbitsr`   Úmodr   r   r   rf   ²  s    &zQRCode.setup_type_numberc                 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ž   é   rq   rk   rj   é	   )rG   r   ZBCH_type_infora   rA   rR   )r7   rh   r&   r   r¡   r`   r¢   r   r   r   re   ½  s"    
zQRCode.setup_type_infoc                 C   s  d}| j d }d}d}t |¡}t|ƒ}t| j d ddƒD ]Â}	|	dkrN|	d8 }	|	|	d f}
|
D ]p}| j| | d u r^d}||k r”|| |? d@ dk}|||ƒr¤| }|| j| |< |d8 }|dkr^|d7 }d}q^||7 }|dk sê| j |krZ||8 }| }q:qZq:d S )Nri   rq   r!   r   r�   rk   F)rR   r   Ú	mask_funcru   ra   rA   )r7   r   r&   Úincr)   ZbitIndexZ	byteIndexr¥   Údata_lenrn   Z	col_rangerp   Zdarkr   r   r   rg   Ú  s6    


zQRCode.map_datac                 C   s’   | j du r|  ¡  | js| jS t| jƒ| jd  }dg| g| j }dg| j }| jD ] }| |ttt |ƒ | ¡ qV|dg| g| j 7 }|S )z¦
        Return the QR Code as a multidimensional array, including the border.

        To return the array without a border, set ``self.border`` to 0 first.
        Nrl   F)	rS   r   rI   rA   ru   rW   r   Úlistr<   )r7   Úwidthr†   Zx_borderÚmoduler   r   r   Ú
get_matrix  s    

zQRCode.get_matrixc                 C   s`   g }t |d |d ƒD ]@}t |d |d ƒD ](}| |  ||¡oPt| j| | ƒ¡ q,qt|Ž S )Nrq   rl   )ra   rW   rœ   r<   rA   r.   )r7   r)   rn   Úcontextro   rp   r   r   r   Úactive_with_neighbors  s
    (zQRCode.active_with_neighbors)rU   )T)N)N)NFF)N)N)N)(r9   r:   r;   ÚModulesTyper=   rB   r   r   r
   ZERROR_CORRECT_Mr%   r>   rL   ÚpropertyrF   Úsetterr&   rK   r   r   r\   rb   rM   r]   r‚   r–   r   r	   r   r@   r<   rœ   rd   rc   rf   re   rg   r«   r.   r­   r   r   r   r   r   J   sb   
ù
ú

	




+ ÿþ ÿþ
3)r   )N)#r{   Úbisectr   Útypingr   r   r   r   r   r   r	   Zqrcoder
   r   r   Zqrcode.image.baser   Zqrcode.image.purer   r¨   r<   r®   r   Údictr   r=   r   r   r    r'   r-   r.   r>   r@   r   r   r   r   r   Ú<module>   s    
$

