
    
gOA                     V   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
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Zd	 Zd
 Zd Zd Z G d de          Z  e
de          Z! e
de          Z" G d dee!                   Z#dS )    N)bisect_left)
DictGenericList
NamedTupleOptionalTypeTypeVarcastoverloadLiteral)	constants
exceptionsutil)	BaseImage)
PyPNGImageprecomputed_qr_blanksc                 l    t          di |}|                    |            |                                S )N )QRCodeadd_data
make_image)datakwargsqrs      =/var/www/api/venv/lib/python3.11/site-packages/qrcode/main.pymaker      s5    			&		BKK==??    c                 R    t          |           dk    rt          d|  d          d S )Nr   zInvalid box size (was z, expected larger than 0)int
ValueErrorsizes    r   _check_box_sizer%      s2    
4yyA~~Q$QQQRRR ~r   c                 P    t          |           dk     rt          d| z            d S )Nr   z=Invalid border value (was %s, expected 0 or larger than that)r    r#   s    r   _check_borderr'   $   s2    
4yy1}}KdR
 
 	
 }r   c                     | d S t          | t                    s t          dt          |            d          | dk     s| dk    rt	          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_patterns    r   _check_mask_patternr/   +   s    lC(( 
Ll););LLL
 
 	
 a<!++SLSSSTTT ,+r   c                     d | D             S )Nc                 "    g | ]}|d d          S Nr   ).0rows     r   
<listcomp>z!copy_2d_array.<locals>.<listcomp>7   s        sCF   r   r   )xs    r   copy_2d_arrayr7   6   s      a    r   c                   v    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	<   d
efdZdS )ActiveWithNeighborsNWNNEWmeESWSSEreturnc                     | j         S r2   )r>   selfs    r   __bool__zActiveWithNeighbors.__bool__E   s	    wr   N)__name__
__module____qualname__bool__annotations__rG   r   r   r   r9   r9   :   s         HHHGGGHHHGGGHHHGGGHHHGGGHHH$      r   r9   GenericImage)boundGenericImageLocalc                      e Zd ZU eed<   dZee         ed<   dej	        ddddfdee
e                  fdZedefd	            Zej        d&d
            Zed             Zej        d             Zd Zd'dZd(dZd Zd Zd)dZd Zd)dZd*dZe	 d)ded         defd            Ze	 d)de
e         defd            Zd)dZdededefdZd Z d  Z!d! Z"d" Z#d# Z$d$ Z%dedede&fd%Z'dS )+r   modulesN_version
      image_factoryc                 >   t          |           t          |           || _        t          |          | _        t          |          | _        t          |          | _        || _        || _        |t          |t                    sJ |                                  d S r2   )r%   r'   versionr!   error_correctionbox_sizeborderr.   rU   
issubclassr   clear)rF   rW   rX   rY   rZ   rU   r.   s          r   __init__zQRCode.__init__Q   s     	!!!f #$4 5 5H &kk(*$mY77777

r   rC   c                 l    | j         |                                  t          t          | j                   S r2   )rR   best_fitr   r!   rE   s    r   rW   zQRCode.versionh   s)    = MMOOOC'''r   c                 ^    |#t          |          }t          j        |           || _        d S r2   )r!   r   check_versionrR   )rF   values     r   rW   zQRCode.versionn   s/    JJEu%%%r   c                     | j         S r2   )_mask_patternrE   s    r   r.   zQRCode.mask_patternu   s    !!r   c                 2    t          |           || _        d S r2   )r/   rd   )rF   patterns     r   r.   zQRCode.mask_patterny   s    G$$$$r   c                 @    g g| _         d| _        d| _        g | _        dS )z*
        Reset the internal data.
        r   N)rQ   modules_count
data_cache	data_listrE   s    r   r\   zQRCode.clear~   s'     tr      c                 8   t          |t          j                  r| j                            |           n]|r/| j                            t          j        ||                     n,| j                            t          j        |                     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   QRDatarj   appendextendoptimal_data_chunksri   )rF   r   optimizes      r   r   zQRCode.add_data   s     dDK(( 	5N!!$'''' 	5N!!$":4"R"R"RSSSSN!!$+d"3"3444r   Tc                     |s| j         |                     | j                    | j        *|                     d|                                            dS |                     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)rW   r_   r.   makeImplbest_mask_pattern)rF   fits     r   r   zQRCode.make   su      	.4<'MMM---$MM%!7!7!9!9:::::MM%!233333r   c                      j         dz  dz    _         j         t          v r%t          t           j                             _        n fdt           j                  D              _                             dd                                 j        dz
  d                                d j        dz
                                                                                 t           j                  t           j         <    	                    ||            j         dk    r 
                    |            j        *t          j         j          j         j                   _                              j        |           d S )NrT      c                 &    g | ]}d gj         z  S r2   )rh   )r3   irF   s     r   r5   z#QRCode.makeImpl.<locals>.<listcomp>   s0       01++  r   r   r)   )rW   rh   r   r7   rQ   rangesetup_position_probe_patternsetup_position_adjust_patternsetup_timing_patternsetup_type_infosetup_type_numberri   r   create_datarX   rj   map_data)rF   testr.   s   `  r   rv   zQRCode.makeImpl   s   !\A-2<000()>t|)LMMDLL   5:4;M5N5N  DL --a333--d.@1.DaHHH--a1Ca1GHHH..000%%'''2?2M2M!$,/T<000<1""4(((?"".d3T^ DO 	do|44444r   c                    t          dd          D ]}||z   dk    s| j        ||z   k    rt          dd          D ]}||z   dk    s| j        ||z   k    rd|cxk    rdk    rn n|dv s4d|cxk    rdk    rn n|dv s d|cxk    rdk    r*n n'd|cxk    rdk    rn nd| j        ||z            ||z   <   yd	| j        ||z            ||z   <   d S )
N   r      >   r   r      rT   TFr}   rh   rQ   )rF   r4   colrcs        r   r~   z#QRCode.setup_position_probe_pattern   s.   r1 	; 	;AQw"}} 2cAg = =2q\\ ; ;7b==D$6#'$A$A ![[[[q[[[[[Q&[[Q!VQ!Q!59DLq)#'225:DLq)#'22;		; 	;r   c                 z   |d}t          j        |           t          j        |          }t          j                    }| j        D ]`}|                    |j        d           |                    t          |          ||j                            |                    |           at          |          }t          t           j
        | j                 ||          | _        | j        dk    rt          j                    |t          j        | j                  ur|                     | j                   | j        S )zD
        Find the minimum size required to fit in the data.
        N   rT   )   rt   )r   ra   mode_sizes_for_version	BitBufferrj   putmodelenwriter   BIT_LIMIT_TABLErX   rW   r   DataOverflowErrorr_   )rF   ru   
mode_sizesbufferr   needed_bitss         r   r_   zQRCode.best_fit   s    =E5!!! 077
!!N 	 	DJJty!$$$JJs4yy*TY"7888JJv&kk" !67e
 
 <2.000 T8FFFFMMM---|r   c                     d}d}t          d          D ]A}|                     d|           t          j        | j                  }|dk    s||k    r|}|}B|S )z7
        Find the most efficient mask pattern.
        r   r   T)r}   rv   r   
lost_pointrQ   )rF   min_lost_pointrf   r|   r   s        r   rw   zQRCode.best_mask_pattern   sk     q 	 	AMM$"""66JAvv*44!+r   c                 z   |ddl }|j        }|                                st          d          | j        |                                  | j        }|                    dd|dz  dz   z  z   dz              t          |          D ]|}|                    d	           t          |          D ]@}| j	        |         |         r|                    d
           +|                    d	           A|                    d           }|                    dd|dz  dz   z  z   dz              |
                                 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 r   rT   z[0m
z[1;47m  [40mz  z[1;47m  [0m
)sysstdoutisattyOSErrorri   r   rh   r   r}   rQ   flush)rF   outr   modcountr   r   s         r   	print_ttyzQRCode.print_tty  sF    ;JJJ*Czz|| 	'+&&&?"IIKKK%		,#A)9":;kIJJJx 	/ 	/AII,---8__ 6 6<?1% 6IIdOOOOII45555II-....		,#A)9":;kIJJJ		r   Fc                    	 |t           j        }|r#|                                st          d           j                                           j        	d dD             }|rdr|                                 dt          f	 fd}t           j
         	 j
        z   d          D ]}|r=r|	 j
        z   d	z
  k     r|                    d
           |                    d           t           j
         	 j
        z             D ]<} |||           ||d	z   |          d	z  z   }|                    ||                    =|r|                    d           |                    d           |                                 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)
        Nr   c                 T    g | ]%}t          |f                              d           &S )cp437)bytesdecode)r3   codes     r   r5   z&QRCode.print_ascii.<locals>.<listcomp>2  s.    QQQDw&&w//QQQr   )            TrC   c                     r%j         rt          | |          j         z   k    rdS t          | |          dk     st          | |          k    rdS t          t          j        |          |                   S )Nr   r   )rZ   maxminr   r!   rQ   )r6   yinvertr   rF   s     r   
get_modulez&QRCode.print_ascii.<locals>.get_module8  su     $+ #a))x$+7M*M*Mq1ayy1}}Aq		X 5 5qT\!_Q/000r   r   r   z[48;5;232mz[38;5;255mz[0m
)r   r   r   r   ri   r   rh   reverser!   r}   rZ   r   r   )
rF   r   ttyr   codesr   r   r   posr   s
   `  `     @r   print_asciizQRCode.print_ascii!  s    ;*C 	'szz|| 	'+&&&?"IIKKK%QQ<PQQQ 	F 	MMOOO	1 	1 	1 	1 	1 	1 	1 	1 	1 |X%;Q?? 
	 
	A , 0X%;a%?!?!?II.///		*+++DK<DK)?@@ & & jA&&**QUA*>*>!*CD		%*%%%% %		)$$$IIdOOOO		r   c                     d S r2   r   rF   rU   r   s      r   r   zQRCode.make_imageL  s	     sr   c                     d S r2   r   r   s      r   r   zQRCode.make_imageQ  s	      Cr   c                    |                     d          s|                     d          r$| j        t          j        k    rt	          d          t          | j                   | j        |                                  |t          |t                    sJ n| j        }|ddlm}m} |r|nt          } || j        | j        | j        fd| j        i|}|j        rwt)          | j                  D ]b}t)          | j                  D ]K}|j        r|                    |||            "| j        |         |         r|                    ||           Lc|j        r|                                 |S )	zu
        Make an image from the QR Code data.

        If the data has not been compiled yet, make it first.
        embeded_image_pathembeded_imagezOError correction level must be ERROR_CORRECT_H if an embedded image is providedNr   )ImagePilImageqrcode_modules)r   )getrX   r   ERROR_CORRECT_Hr"   r%   rY   ri   r   r[   r   rU   qrcode.image.pilr   r   r   rZ   rh   rQ   needs_drawrectr}   needs_contextdrawrect_contextdrawrectneeds_processingprocess)rF   rU   r   r   r   imr   r   s           r   r   zQRCode.make_imageV  s    JJ+,,	06

?0K0K	#y'@@@a   	&&&?"IIKKK$mY777777 .M$<<<<<<<< -2 Az]KM
 
  <	

 
 
  	*4-.. * *t122 * *A' *++AqT+::::a+ *Aq)))	*
  	JJLLL	r   r4   r   c                     |dk    o;|t          | j                  k     o#|dk    o|t          | j        |                   k     S )Nr   )r   rQ   )rF   r4   r   s      r   is_constrainedzQRCode.is_constrained  sO    1H -c$,'''-q- c$,s+,,,		
r   c                    t          d| j        dz
            D ]-}| j        |         d         |dz  dk    | j        |         d<   .t          d| j        dz
            D ]-}| j        d         |         |dz  dk    | j        d         |<   .d S )Nr   r   r   r   r   )rF   r   r   s      r   r   zQRCode.setup_timing_pattern  s    q$,q011 	, 	,A|Aq!-!"Q!DLOAq$,q011 	, 	,A|Aq!-!"Q!DLOA	, 	,r   c                    t          j        | j                  }t          t	          |                    D ]}||         }t          t	          |                    D ]}||         }| j        |         |         t          dd          D ]f}t          dd          D ]S}|dk    s|dk    s|dk    s|dk    s|dk    r|dk    rd| j        ||z            ||z   <   =d| j        ||z            ||z   <   Tgd S )N   r   r   TF)r   pattern_positionrW   r}   r   rQ   )rF   r   r|   r4   jr   r   r   s           r   r   z$QRCode.setup_position_adjust_pattern  s2   #DL11s3xx 	C 	CAa&C3s88__ C C!f<$S)5r1 C CA"2q\\ 
C 
CGG Avv Bww Avv !Q166=ADLq1#'::=BDLq1#'::
CCC	C 	Cr   c                 L   t          j        | j                  }t          d          D ]5}| o||z	  dz  dk    }|| j        |dz           |dz  | j        z   dz
  dz
  <   6t          d          D ]5}| o||z	  dz  dk    }|| j        |dz  | j        z   dz
  dz
           |dz  <   6d S )N   r   r   r   )r   BCH_type_numberrW   r}   rQ   rh   )rF   r   bitsr|   mods        r   r   zQRCode.setup_type_number  s    #DL11r 	K 	KA(5aA5CGJDLa Q);!;a!?!!CDDr 	K 	KA(5aA5CGJDLQ!33a7!;<Q!VDD	K 	Kr   c                 F   | j         dz  |z  }t          j        |          }t          d          D ]]}| o||z	  dz  dk    }|dk     r|| j        |         d<   (|dk     r|| j        |dz            d<   B|| j        | j        dz
  |z            d<   ^t          d          D ]i}| o||z	  dz  dk    }|dk     r|| j        d         | j        |z
  dz
  <   3|dk     r|| j        d         d|z
  dz
  dz   <   S|| j        d         d|z
  dz
  <   j| | j        | j        dz
           d<   d S )Nr      r   r   r   	   )rX   r   BCH_type_infor}   rQ   rh   )rF   r   r.   r   r   r|   r   s          r   r   zQRCode.setup_type_info  ss   %*l:!$'' r 	C 	CA(5aA5C1uu%(Q""Q),QU#A&&?BT/"4q89!<< r 	2 	2A(5aA5C1uu>AQ 2Q 6 :;;Q25QQ
Q//.1QQ
++ 7;(T'!+,Q///r   c                    d}| j         dz
  }d}d}t          j        |          }t          |          }t	          | j         dz
  dd          D ]}	|	dk    r|	dz  }	|	|	dz
  f}
	 |
D ]`}| j        |         |         Kd}||k     r||         |z	  dz  dk    } |||          r| }|| j        |         |<   |dz  }|dk    r|dz  }d}a||z  }|dk     s| j         |k    r	||z  }| }nd S )	Nr   r   r)   r   r   r   TF)rh   r   	mask_funcr   r}   rQ   )rF   r   r.   incr4   bitIndex	byteIndexr   data_lenr   	col_ranger   darks                r   r   zQRCode.map_data  s[    1$	N<00	t99+a/B77 	 	CaxxqcAgI" ) )A|C(+3$$x//%))_%@A$E!#KD$9S!,, ,'+8D/3S)!, A#r>>%NI'(Hs
77d0C773JC$C/. ;	 	r   c                 t   | j         |                                  | j        s| j        S t	          | j                  | j        dz  z   }dg|z  g| j        z  }dg| j        z  }| j        D ];}|                    |t          t          t                   |          z   |z              <|dg|z  g| j        z  z  }|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.
        Nr   F)	ri   r   rZ   rQ   r   ro   r   r   rK   )rF   widthr   x_bordermodules        r   
get_matrixzQRCode.get_matrix  s     ?"IIKKK{ 	 <DL!!DK!O3% 4;.7T[(l 	H 	HFKK4T
F#;#;;hFGGGG%5!DK//r   c                    g }t          |dz
  |dz             D ]d}t          |dz
  |dz             D ]K}|                    |                     ||          ot          | j        |         |                              Let          | S )Nr   r   )r}   ro   r   rK   rQ   r9   )rF   r4   r   contextr   r   s         r   active_with_neighborszQRCode.active_with_neighbors  s     sQwa(( 	W 	WA37C!G,, W Wt221a88UT$,q/RSBT=U=UVVVVW"G,,r   )rC   N)rk   )Tr2   )NFF)(rH   rI   rJ   ModulesTyperL   rR   r   r!   r   ERROR_CORRECT_Mr	   rM   r]   propertyrW   setterr.   r\   r   r   rv   r~   r_   rw   r   r   r   r   r   rO   rK   r   r   r   r   r   r   r   r9   r   r   r   r   r   r   M   s        "Hhsm""" "26:   \ 23   . ( ( ( ( X(
 ^   ^ " " X" % % %      4 4 4 45 5 58; ; ;$   <  $   <) ) ) )V -1 $T]	   X 7;   !"34 	      X , , , ,^
# 
C 
D 
 
 
 
	, 	, 	,C C C2	K 	K 	K; ; ;:' ' 'R  *- -3 -;N - - - - - -r   r   r2   )$r   bisectr   typingr   r   r   r   r   r	   r
   r   r   r   qrcoder   r   r   qrcode.image.baser   qrcode.image.purer   rK   r   r   r!   rL   r   r%   r'   r/   r7   r9   rM   rO   r   r   r   r   <module>r      s   




                              / . . . . . . . . . ' ' ' ' ' ' ( ( ( ( ( (4'(02 tC,- 2 2 2   S S S

 
 
U U U! ! !    *    w~Y777G/yAAA O- O- O- O- O-W\" O- O- O- O- O-r   