
    \jz                         d dl Z d dlZd dlmZ d dlZd dlmZmZmZmZm	Z	m
Z
mZ d dlmZ ej                  rd dl mZ 	 d dlmZ dZ G d de      Zy# e$ r d dlZY w xY w)	    N)chain)AnyCallableDictMappingPatternSequenceUnion)RstrBase)Randomd   c                        e Zd ZdZ ej
                  de      fdddeddf fdZde	ee
e   f   defd	Zd
edefdZdedefdZdee   defdZdedefdZdedededefdZ xZS )XegerzInspired by the Java library Xeger: http://code.google.com/p/xeger/
    This class adds functionality to Rstr allowing users to generate a
    semi-random string from a regular expression.r   _randomcustom_alphabetsreturnNc                      t           |fi | i  _         fd fd fd fd fd fdd _        d  fd	d
  fd fdd  fd fd fd fdd  fd fd fdd d _        y )Nc                  "     j                   d   S )Ndigits
_alphabetsselfs   4/root/env/lib/python3.12/site-packages/rstr/xeger.py<lambda>z Xeger.__init__.<locals>.<lambda>&   s    dooh&?     c                  "     j                   d   S )N	nondigitsr   r   s   r   r   z Xeger.__init__.<locals>.<lambda>'   s    $//+*F r   c                  "     j                   d   S )N
whitespacer   r   s   r   r   z Xeger.__init__.<locals>.<lambda>(   s    dool&C r   c                  "     j                   d   S )Nnonwhitespacer   r   s   r   r   z Xeger.__init__.<locals>.<lambda>)   s    $///*J r   c                  "     j                   d   S )Nwordr   r   s   r   r   z Xeger.__init__.<locals>.<lambda>*   s    T__V%< r   c                  "     j                   d   S )Nnonwordr   r   s   r   r   z Xeger.__init__.<locals>.<lambda>+   s    )C r   )category_digitcategory_not_digitcategory_spacecategory_not_spacecategory_wordcategory_not_wordc                     t        |       S N)chrxs    r   r   z Xeger.__init__.<locals>.<lambda>/   s
    Q r   c                     j                   j                  t        j                  j	                  t        |       d            S N )r   choicestring	printablereplacer/   r1   r   s    r   r   z Xeger.__init__.<locals>.<lambda>0   s1    T\\%8%89I9I9Q9QRUVWRXZ\9]%^ r   c                      yr3    r0   s    r   r   z Xeger.__init__.<locals>.<lambda>1       r   c                 &    j                  |       S r.   )
_handle_inr9   s    r   r   z Xeger.__init__.<locals>.<lambda>2   s    DOOA. r   c                 *    j                  dd      S )N   
)exclude)r7   r9   s    r   r   z Xeger.__init__.<locals>.<lambda>3   s    T^^At^< r   c                 d    t        | d   | d   dz         D cg c]  }t        |       c}S c c}w )Nr   r@   )ranger/   )r1   is     r   r   z Xeger.__init__.<locals>.<lambda>4   s+    adAaD1H0EF1AF Fs   -c                 ,     j                   |           S r.   )_categoriesr9   s    r   r   z Xeger.__init__.<locals>.<lambda>5   s    "5$"2"21"5"7 r   c                 p    dj                  fdj                  j                  | d         D              S )Nr4   c              3   @   K   | ]  }j                  |        y wr.   _handle_state.0rE   r   s     r   	<genexpr>z3Xeger.__init__.<locals>.<lambda>.<locals>.<genexpr>6   s     'a!(:(:1(='a   r@   )joinr   r5   r9   s    r   r   z Xeger.__init__.<locals>.<lambda>6   s,    'at||GZGZ[\]^[_G`'a a r   c                 &    j                  |       S r.   )_handle_groupr9   s    r   r   z Xeger.__init__.<locals>.<lambda>7   s    D$6$6q$9 r   c                 >    dj                  fd| d   D              S )Nr4   c              3   @   K   | ]  }j                  |        y wr.   rJ   rL   s     r   rN   z3Xeger.__init__.<locals>.<lambda>.<locals>.<genexpr>8   s     'L!(:(:1(='LrO   r@   )rP   r9   s    r   r   z Xeger.__init__.<locals>.<lambda>8   s    'Lqt'L L r   c                      yr3   r;   r0   s    r   r   z Xeger.__init__.<locals>.<lambda>9   r<   r   c                 "    j                   |    S r.   )_cacher9   s    r   r   z Xeger.__init__.<locals>.<lambda>:   s    $++a. r   c                 "     j                   |  S r.   _handle_repeatr9   s    r   r   z Xeger.__init__.<locals>.<lambda>;       $7D$7$7$; r   c                 "     j                   |  S r.   rY   r9   s    r   r   z Xeger.__init__.<locals>.<lambda><   r[   r   c                     dgS )NFr;   r0   s    r   r   z Xeger.__init__.<locals>.<lambda>=   s     r   )literalnot_literalatinanyrD   categorybranch
subpatternassert
assert_notgroupref
min_repeat
max_repeatnegate)super__init__rW   rG   _cases)r   r   r   	__class__s   `  r   rm   zXeger.__init__    ss     	5$45&(?"FC"J<!C=
 (^.<F7a9L&0;;'9
r   string_or_regexc                 0   	 t        j                  t        t           |      j                  }t        j                  |      }| j                  |      }| j                  j                          |S # t
        $ r t        j                  t        |      }Y gw xY wr.   )typingcastr   strpatternAttributeError	sre_parseparse_build_stringrW   clear)r   rp   ru   parsedresults        r   xegerzXeger.xeger@   sw    	8kk'#,@HHG )##F+  	8kk#7G	8s   +A/ /#BBr{   c                 v    g }|D ]"  }|j                  | j                  |             $ dj                  |      S r3   )appendrK   rP   )r   r{   newstrstates       r   ry   zXeger._build_stringK   s;     	5EMM$,,U34	5wwvr   r   c                     |\  }}|j                   j                         }|dk(  r|j                   j                         } | j                  |   |      S )Nrc   )namelowerrn   )r   r   opcodevalues       r   rK   zXeger._handle_stateQ   sM    ""$ZJJ$$&E"t{{6"5))r   r   c                 p     dj                   fd|d   D              }|d   r| j                  |d   <   |S )Nr4   c              3   @   K   | ]  }j                  |        y wr.   rJ   rL   s     r   rN   z&Xeger._handle_group.<locals>.<genexpr>Y   s     B1++A.BrO   r   )rP   rW   )r   r   r|   s   `  r   rR   zXeger._handle_groupX   s9    Bb	BB8$*DKKa!r   c                      t        t         fd|D               }|d   du r4t        t        t        j                        j                  |dd              } j                  j                  |      S )Nc              3   @   K   | ]  }j                  |        y wr.   rJ   rL   s     r   rN   z#Xeger._handle_in.<locals>.<genexpr>_        !GA$"4"4Q"7!GrO   r   Fr@   )listr   setr6   r7   
differencer   r5   )r   r   
candidatess   `  r   r>   zXeger._handle_in^   s_    %!G!GHI
a=E!c&"2"23>>z!"~NOJ||"":..r   start_range	end_rangec                      g }t        |t        f      } j                  j                  ||      }t	        |      D ]+  }|j                  dj                   fd|D                     - dj                  |      S )Nr4   c              3   @   K   | ]  }j                  |        y wr.   rJ   rL   s     r   rN   z'Xeger._handle_repeat.<locals>.<genexpr>i   r   rO   )minSTAR_PLUS_LIMITr   randintrD   r   rP   )r   r   r   r   r|   timesrE   s   `      r   rZ   zXeger._handle_repeatd   sk    O45	$$[)<u 	IAMM"''!G!GGH	Iwwvr   )__name__
__module____qualname____doc__rr   rs   randomrt   rm   r
   r   r}   r   ry   rK   r	   rR   r>   intrZ   __classcell__)ro   s   @r   r   r      s    5
 #.&++h"?

UX
	
@	U3+<%= 	# 	C C *3 *3 *8C= S / / /# # c c r   r   )r   r6   	itertoolsr   rr   r   r   r   r   r   r	   r
   rstr.rstr_baser   TYPE_CHECKINGr   
re._parser_parserrw   ImportErrorr   r   r;   r   r   <module>r      sZ        I I I #	" OH O  s   A 	AA