
    @wgOA                        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#y)    N)bisect_left)
DictGenericList
NamedTupleOptionalTypeTypeVarcastoverloadLiteral)	constants
exceptionsutil)	BaseImage)
PyPNGImageprecomputed_qr_blanksc                 Z    t        di |}|j                  |        |j                         S )N )QRCodeadd_data
make_image)datakwargsqrs      B/var/www/horilla/myenv/lib/python3.12/site-packages/qrcode/main.pymaker      s'    		&	BKK==?    c                 >    t        |       dk  rt        d|  d      y )Nr   zInvalid box size (was z, expected larger than 0)int
ValueErrorsizes    r   _check_box_sizer%      s(    
4yA~1$7PQRR r   c                 <    t        |       dk  rt        d| z        y )Nr   z=Invalid border value (was %s, expected 0 or larger than that)r    r#   s    r   _check_borderr'   $   s'    
4y1}KdR
 	
 r   c                     | y t        | t              st        dt        |        d      | dk  s| dkD  rt	        d|  d      y )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);(<OL
 	
 a<!+CL>QRSTT ,r   c                 2    | D cg c]  }|d d  	 c}S c c}w Nr   )xrows     r   copy_2d_arrayr4   6   s     sCF   s   c                   t    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y)ActiveWithNeighborsNWNNEWmeESWSSEreturnc                     | j                   S r1   )r;   selfs    r   __bool__zActiveWithNeighbors.__bool__E   s    wwr   N)__name__
__module____qualname__bool__annotations__rD   r   r   r   r6   r6   :   s;    HGHGHGHGH$ r   r6   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'y)(r   modulesN_version
      image_factoryc                    t        |       t        |       || _        t        |      | _        t        |      | _        t        |      | _        || _        || _        |t        |t              sJ | j                          y r1   )r%   r'   versionr!   error_correctionbox_sizeborderr.   rR   
issubclassr   clear)rC   rT   rU   rV   rW   rR   r.   s          r   __init__zQRCode.__init__Q   sp     	!f #$4 5H &k(*$mY777

r   r@   c                 n    | j                   | j                          t        t        | j                         S r1   )rO   best_fitr   r!   rB   s    r   rT   zQRCode.versionh   s&    == MMOC''r   c                 V    | t        |      }t        j                  |       || _        y r1   )r!   r   check_versionrO   )rC   values     r   rT   zQRCode.versionn   s&    JEu%r   c                     | j                   S r1   )_mask_patternrB   s    r   r.   zQRCode.mask_patternu   s    !!!r   c                 (    t        |       || _        y r1   )r/   ra   )rC   patterns     r   r.   zQRCode.mask_patterny   s    G$$r   c                 >    g g| _         d| _        d| _        g | _        y)z*
        Reset the internal data.
        r   N)rN   modules_count
data_cache	data_listrB   s    r   rY   zQRCode.clear~   s#     tr   c                 \   t        |t        j                        r#| j                  j	                  |       d| _        y|r8| j                  j                  t        j                  ||             d| _        y| j                  j	                  t        j                  |             d| _        y)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   QRDatarg   appendextendoptimal_data_chunksrf   )rC   r   optimizes      r   r   zQRCode.add_data   s~     dDKK(NN!!$'
 	 NN!!$":":4"RS  NN!!$++d"34r   c                     |s| j                   | j                  | j                          | j                  !| j                  d| j	                                y| j                  d| j                         y)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)rT   r\   r.   makeImplbest_mask_pattern)rC   fits     r   r   zQRCode.make   sY     4<<'MMM-$MM%!7!7!9:MM%!2!23r   c                 d   | j                   dz  dz   | _        | j                   t        v r"t        t        | j                            | _        nt        | j                        D cg c]  }d g| j                  z   c}| _        | j                  dd       | j                  | j                  dz
  d       | j                  d| j                  dz
         | j                          | j                          t        | j                        t        | j                   <   | j                  ||       | j                   dk\  r| j                  |       | j                  :t        j                  | j                   | j                  | j                        | _        | j!                  | j                  |       y c c}w )NrQ      r   r)   )rT   re   r   r4   rN   rangesetup_position_probe_patternsetup_position_adjust_patternsetup_timing_patternsetup_type_infosetup_type_numberrf   r   create_datarU   rg   map_data)rC   testr.   is       r   rr   zQRCode.makeImpl   sX   !\\A-2<<00()>t||)LMDL 6;4;M;M5N01+++DL --a3--d.@.@1.DaH--a1C1Ca1GH..0%%'2?2M!$,,/T<0<<1""4(??""..d33T^^DO 	doo|4)s   #F-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 s.d|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   <   wd	| j                  ||z      ||z   <     y )
N   r      >   r   r      rQ   TFrw   re   rN   )rC   r3   colrcs        r   rx   z#QRCode.setup_position_probe_pattern   s    r1 	;AQw"} 2 2cAg =2q\ ;7b=D$6$6#'$A ![q[Q&[Q!VQ!Q!59DLLq)#'25:DLLq)#'2;		;r   c                    |d}t        j                  |       t        j                  |      }t        j                         }| j                  D ]W  }|j                  |j                  d       |j                  t        |      ||j                            |j                  |       Y t        |      }t        t         j                  | j                     ||      | _        | j                  dk(  rt        j                         |t        j                  | j                        ur| j                  | j                         | j                  S )zD
        Find the minimum size required to fit in the data.
           rQ   )   rp   )r   r^   mode_sizes_for_version	BitBufferrg   putmodelenwriter   BIT_LIMIT_TABLErU   rT   r   DataOverflowErrorr\   )rC   rq   
mode_sizesbufferr   needed_bitss         r   r\   zQRCode.best_fit   s    =E5! 007
!NN 	DJJtyy!$JJs4y*TYY"78JJv	
 &k"  !6!67e
 <<2..00 T88FFMMM-||r   c                     d}d}t        d      D ]B  }| j                  d|       t        j                  | j                        }|dk(  s||kD  s?|}|}D |S )z7
        Find the most efficient mask pattern.
        r   r   T)rw   rr   r   
lost_pointrN   )rC   min_lost_pointrc   r   r   s        r   rs   zQRCode.best_mask_pattern   s`     q 	AMM$"6JAv*4!+	 r   c                 <   |ddl }|j                  }|j                         st        d      | j                  | j                          | j                  }|j                  dd|dz  dz   z  z   dz          t        |      D ]i  }|j                  d	       t        |      D ]7  }| j                  |   |   r|j                  d
       '|j                  d	       9 |j                  d       k |j                  dd|dz  dz   z  z   dz          |j                          y)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   rQ   z[0m
z[1;47m  [40mz  z[1;47m  [0m
)sysstdoutisattyOSErrorrf   r   re   r   rw   rN   flush)rC   outr   modcountr   r   s         r   	print_ttyzQRCode.print_tty  s    ;**Czz|+&&??"IIK%%		,#A)9":;kIJx 	/AII,-8_ 6<<?1%IIdOII45	6
 II-.	/ 			,#A)9":;kIJ		r   c                 8   
 |t         j                  }|r|j                         st        d       j                   j                           j                  
dD cg c]  }t        |f      j                  d       }}|rdr|j                          dt        f
 fd}t         j                   
 j                  z   d      D ]  }|r9r|
 j                  z   d	z
  k  r|j                  d
       |j                  d       t         j                   
 j                  z         D ]/  } |||       ||d	z   |      d	z  z   }	|j                  ||	          1 |r|j                  d       |j                  d        |j                          yc c}w )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   )            cp437Tr@   c                     r)j                   rt        | |      j                   z   k\  ryt        | |      dk  st        | |      k\  ryt        t        j
                  |    |         S )Nr   r   )rW   maxminr   r!   rN   )r2   yinvertr   rC   s     r   
get_modulez&QRCode.print_ascii.<locals>.get_module8  s\    $++#a)x$++7M*M1ay1}Aq	X 5T\\!_Q/00r   r   r   z[48;5;232mz[38;5;255mz[0m
)r   r   r   r   rf   r   re   bytesdecodereverser!   rw   rW   r   r   )rC   r   ttyr   codecodesr   r   r   posr   s   `  `      @r   print_asciizQRCode.print_ascii!  sl    ;**Cszz|+&&??"IIK%%<PQDw&&w/QQFMMO	1 	1 |X%;Q? 
	AX%;a%?!?II./		*+DKK<DKK)?@ & A&*QUA*>!*CD		%*%& 		)$IIdO
	 			1 Rs   "Fc                      y r1   r   rC   rR   r   s      r   r   zQRCode.make_imageL  s     r   c                      y r1   r   r   s      r   r   zQRCode.make_imageQ  s      r   c                    |j                  d      s|j                  d      r(| j                  t        j                  k7  rt	        d      t        | j                         | j                  | j                          |t        |t              s"J | j                  }|ddlm}m} |r|nt        } || j                   | j"                  | j                  fd| j$                  i|}|j&                  rzt)        | j"                        D ]b  }t)        | j"                        D ]H  }|j*                  r|j-                  |||        $| j$                  |   |   s7|j/                  ||       J d |j0                  r|j3                          |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 providedr   )ImagePilImageqrcode_modules)r   )getrU   r   ERROR_CORRECT_Hr"   r%   rV   rf   r   rX   r   rR   qrcode.image.pilr   r   r   rW   re   rN   needs_drawrectrw   needs_contextdrawrect_contextdrawrectneeds_processingprocess)rC   rR   r   r   r   imr   r   s           r   r   zQRCode.make_imageV  sc    JJ+,

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

 
 4--. *t112 *A''++AqT+:a+Aq)	** JJL	r   r3   r   c                     |dk\  xr< |t        | j                        k  xr" |dk\  xr |t        | j                  |         k  S )Nr   )r   rN   )rC   r3   r   s      r   is_constrainedzQRCode.is_constrained  sM    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   |<   / y )Nr   r   r   r   r   )rC   r   r   s      r   rz   zQRCode.setup_timing_pattern  s    q$,,q01 	,A||Aq!-!"Q!DLLOA	,
 q$,,q01 	,A||Aq!-!"Q!DLLOA	,r   c                    t        j                  | j                        }t        t	        |            D ]  }||   }t        t	        |            D ]  }||   }| j
                  |   |   t        dd      D ]b  }t        dd      D ]Q  }|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   <   S d   y )N   r   r   TF)r   pattern_positionrT   rw   r   rN   )rC   r   r   r3   jr   r   r   s           r   ry   z$QRCode.setup_position_adjust_pattern  s    ##DLL1s3x 	CAa&C3s8_ C!f<<$S)5r1 CA"2q\ 
CG Av Bw Av !Q16=ADLLq1#':=BDLLq1#':
CCC	Cr   c                 n   t        j                  | j                        }t        d      D ]=  }| xr ||z	  dz  dk(  }|| j                  |dz     |dz  | j
                  z   dz
  dz
  <   ? t        d      D ]=  }| xr ||z	  dz  dk(  }|| j                  |dz  | j
                  z   dz
  dz
     |dz  <   ? y )N   r   r   r   )r   BCH_type_numberrT   rw   rN   re   )rC   r   bitsr   mods        r   r|   zQRCode.setup_type_number  s    ##DLL1r 	KA(5aA5CGJDLLa Q););!;a!?!!CD	K r 	KA(5aA5CGJDLLQ!3!33a7!;<Q!VD	Kr   c                 ~   | j                   dz  |z  }t        j                  |      }t        d      D ]g  }| xr ||z	  dz  dk(  }|dk  r|| j                  |   d<   +|dk  r|| j                  |dz      d<   F|| j                  | j
                  dz
  |z      d<   i t        d      D ]s  }| xr ||z	  dz  dk(  }|dk  r#|| j                  d   | j
                  |z
  dz
  <   ;|dk  r|| j                  d   d|z
  dz
  dz   <   \|| j                  d   d|z
  dz
  <   u | | j                  | j
                  dz
     d<   y )Nr      r   r   r   	   )rU   r   BCH_type_inforw   rN   re   )rC   r   r.   r   r   r   r   s          r   r{   zQRCode.setup_type_info  si   %%*l:!!$' r 	CA(5aA5C1u%(Q"Q),QU#A&?BT//"4q89!<	C r 	2A(5aA5C1u>AQ 2 2Q 6 :;Q25QQ
Q/.1QQ
+	2 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 ]Z  }| j
                  |   |   d}||k  r||   |z	  dz  dk(  } |||      r| }|| j
                  |   |<   |dz  }|dk(  sT|dz  }d}\ ||z  }|dk  s| j                   |k  r	||z  }| } y )Nr   r   r)   r   r   r   F)re   r   	mask_funcr   rw   rN   )rC   r   r.   incr3   bitIndex	byteIndexr   data_lenr   	col_ranger   darks                r   r~   zQRCode.map_data  s<     1$	NN<0	t9++a/B7 	CaxqcAgI" )A||C(+3$$x/%))_%@A$E!#KD$S!,'+8D/3S)!, A#r>%NI'(H)" s
7d00C73JC$C/ 	r   c                    | j                   | j                          | j                  s| j                  S t	        | j                        | j                  dz  z   }dg|z  g| j                  z  }dg| j                  z  }| j                  D ].  }|j                  |t        t        t           |      z   |z          0 |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.
        r   F)	rf   r   rW   rN   r   rk   r   r   rH   )rC   widthr   x_bordermodules        r   
get_matrixzQRCode.get_matrix  s     ??"IIK{{<<DLL!DKK!O3% 4;;.7T[[(ll 	HFKK4T
F#;;hFG	H%5!DKK//r   c                     g }t        |dz
  |dz         D ]W  }t        |dz
  |dz         D ]@  }|j                  | j                  ||      xr t        | j                  |   |                B Y t        | S )Nr   r   )rw   rk   r   rH   rN   r6   )rC   r3   r   contextr   r   s         r   active_with_neighborszQRCode.active_with_neighbors  s     sQwa( 	WA37C!G, Wt221a8UT$,,q/RSBT=UVW	W #G,,r   )r@   N)   )Tr1   )NFF)(rE   rF   rG   ModulesTyperI   rO   r   r!   r   ERROR_CORRECT_Mr	   rJ   rZ   propertyrT   setterr.   rY   r   r   rr   rx   r\   rs   r   r   r   r   r   rL   rH   r   rz   ry   r|   r{   r~   r   r6   r   r   r   r   r   r   M   s   "Hhsm" "226:  \ 23. ( ( (
 ^^  " " % % 458;$<$<)V -1$T]	  7; !"34 	   ,^
# 
C 
D 
	,C2	K;:'R*- -3 -;N -r   r   r1   )$r   bisectr   typingr   r   r   r   r   r	   r
   r   r   r   qrcoder   r   r   qrcode.image.baser   qrcode.image.purer   rH   r   r   r!   rI   r   r%   r'   r/   r4   r6   rJ   rL   r   r   r   r   <module>r      s    
    / . ' (4'(02 tC,- 2S

U!*  ~Y7/yA O-W\" O-r   