
    =wgP                     t   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZmZ  ed       Z G d de      Z ed      Z ed	      Z G d
 de      Z G d de      Z G d de      Zd%dZd%dZefdZd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d  Z' G d! d"e      Z(d# Z)d$ Z*y)&    )print_functionN)bisect_left)defaultdict)	iteritemsnext	text_typeunichrxrangec                       e Zd Zd Zd Zy)Markerc                     || _         y Nname)selfr   s     J/var/www/horilla/myenv/lib/python3.12/site-packages/whoosh/automata/fsa.py__init__zMarker.__init__   s	    	    c                      d| j                   z  S )Nz<%s>r   r   s    r   __repr__zMarker.__repr__   s    		!!r   N)__name__
__module____qualname__r   r    r   r   r   r      s    "r   r   EPSILONANYc                   j    e Zd Zd Zd Zd Zd Zd Zd ZddZ	d	 Z
d
 Zd Zd Zd Zd ZddZd Zy)FSAc                 >    || _         i | _        t               | _        y r   )initialtransitionssetfinal_statesr   r!   s     r   r   zFSA.__init__    s    Er   c                 4    t        | j                               S r   )len
all_statesr   s    r   __len__zFSA.__len__%   s    4??$%%r   c                     | j                   |j                   k7  ry| j                  |j                  k7  ry| j                  }|j                  }t        |      t        |      k7  ry|D ]  }||   ||   k7  s y y)NFT)r!   r$   r"   list)r   otherstotkeys        r   __eq__z
FSA.__eq__(   s|    <<5==( 2 228tBx 	C#w"S'!	 r   c                     t        | j                        }t        | j                        D ]$  \  }}|j                  |j	                                & |S r   )r#   r"   r   updatevalues)r   statesetsrctranss       r   r(   zFSA.all_states6   sG    t''(#D$4$45 	,JCOOELLN+	,r   c                 v    t               }t        | j                        D ]  \  }}|j                  |        |S r   )r#   r   r"   r2   )r   labelsr5   r6   s       r   
all_labelszFSA.all_labels<   s8    #D$4$45 	!JCMM% 	!r   c                 L    t        | j                  j                  |g             S r   )iterr"   get)r   r5   s     r   
get_labelszFSA.get_labelsB   s     D$$((b122r   Nc              #      K   || j                         n|}| j                  |      r| t        | j                  |            D ]2  }| j	                  ||      }| j                  |||z         D ]  }|  4 y wr   )startis_finalsortedr=   
next_stategenerate_all)r   statesofarlabelnewstatestrings         r   rC   zFSA.generate_allE   sz      %

5==KDOOE23 	Eue4H++HeemD 	s   A:A<c                     | j                   S r   r!   r   s    r   r?   z	FSA.startN       ||r   c                     t         r   NotImplementedError)r   rD   rF   s      r   rB   zFSA.next_stateQ       !!r   c                     t         r   rM   r   rD   s     r   r@   zFSA.is_finalT   rO   r   c                     t         r   rM   r   r5   rF   dests       r   add_transitionzFSA.add_transitionW   rO   r   c                     t         r   rM   rQ   s     r   add_final_statezFSA.add_final_stateZ   rO   r   c                     t         r   rM   r   s    r   to_dfaz
FSA.to_dfa]   rO   r   c                     | j                         }|D ])  }|rt        d|d|d       | j                  ||      }|r) n | j                  |      S )Nz  z->)r?   printrB   r@   )r   rH   debugrD   rF   s        r   acceptz
FSA.accept`   sV    

 	EdE45OOE51E	 }}U##r   c                     | j                   j                  |j                          | j                  D ]#  }| j                  |t        |j
                         % |j                  | _        y r   )r"   r2   r$   rU   r   r!   )r   fsarD   s      r   appendz
FSA.appendm   sS    0&& 	=Ew<	=,,r   )N F)r   r   r   r   r)   r0   r(   r9   r=   rC   r?   rB   r@   rU   rW   rY   r]   r`   r   r   r   r   r      sM    "
&3"""""$-r   r   c                   r    e Zd Zd Zej
                  fdZd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zy)NFAc                 >    i | _         t               | _        || _        y r   )r"   r#   r$   r!   r%   s     r   r   zNFA.__init__w   s    Er   c                     | j                         }| j                  D ]H  }||v rdnd}t        |||       | j                  |   }|D ]  }||   }| j                  |      rdnd} J y N@ )filez||ra   )r?   r"   r[   r@   )	r   streamstartsr5   begxsrF   destsends	            r   dumpzNFA.dump|   su    ## 	;C#CC#s(!!#&B ;5	"mmE2d;		;r   c                 ^    t        | j                  t        | j                  g                  S r   )	frozenset_expandr#   r!   r   s    r   r?   z	NFA.start   s!    c4<<.&9:;;r   c                     | j                   j                  |i       j                  |t                     j                  |       y r   )r"   
setdefaultr#   addrS   s       r   rU   zNFA.add_transition   s2    ##C,77suEII$Or   c                 :    | j                   j                  |       y r   r$   rw   rQ   s     r   rW   zNFA.add_final_state       e$r   c              #      K   t        | j                        D ]&  \  }}t        |      D ]  \  }}|D ]	  }|||f   ( y wr   )r   r"   )r   r5   r6   rF   ro   rT   s         r   tripleszNFA.triples   sX     #D$4$45 	+JC )% 0 +u! +Dud**++	+s   A Ac                 J    t        | j                  j                  |            S r   )boolr$   intersection)r   statess     r   r@   zNFA.is_final   s    D%%226:;;r   c                     | j                   }t        |      }|r_|j                         }||v rHt        ||   v r=||   t           j	                  |      }|j                  |       |j                  |       |r_|S r   )r"   r#   popr   
differencer2   )r   r   r"   frontierrD   
new_statess         r   rt   zNFA._expand   sv    &&v;LLNE#;u3E(E(/8CCFK

+j)  r   c                     | j                   }t               }|D ]E  }||v s||   }||v r|j                  ||          t        |v s.|j                  |t                  G t	        | j                  |            S r   )r"   r#   r2   r   rs   rt   )r   r   rF   r"   dest_statesrD   rn   s          r   rB   zNFA.next_state   s}    &&e 	0E# 'B;&&r%y1"9&&r#w/	0 k233r   c                 r    | j                   }t               }|D ]  }||v s|j                  ||           |S r   )r"   r#   r2   )r   r   r"   r8   rD   s        r   r=   zNFA.get_labels   sC    && 	2E#k%01	2 r   c                     t        |j                        D ]_  \  }}| j                  j                  |i       }t        |      D ]0  \  }}|j                  |t                     }|j	                  |       2 a y r   )r   r"   rv   r#   r2   )r   r,   s
othertransr6   rF   
otherdestsro   s           r   embedz	NFA.embed   sq    &u'8'89 	)MAz$$//26E%.z%: )!z((6Z()	)r   c                     | j                  |       | j                  |t        |j                         |j                  D ]  }| j                  |t        |        y r   )r   rU   r   r!   r$   )r   r5   r,   rT   
finalstates        r   insertz
NFA.insert   sM    

5 	C%--8,, 	;J
GT:	;r   c                 .   t        | j                               }| j                         g}t               }|r|j                         }| j	                  |      r|j                  |       | j                  |      }|D ]  }|t        u r| j                  ||      }||vrD|j                  |       |j                  |       | j	                  |      r|j                  |       |t        u r|j                  ||       |j                  |||        |r|S r   )DFAr?   r#   r   r@   rW   r=   r   rB   r`   rw   r   set_default_transitionrU   )r   dfar   seencurrentr8   rF   	new_states           r   rY   z
NFA.to_dfa   s    $**,JJL>ullnG}}W%##G,__W-F BG# OOGU;	D(OOI.HHY'}}Y/++I6C<..w	B&&wyAB $ 
r   N)r   r   r   r   sysstdoutrq   r?   rU   rW   r|   r@   rt   rB   r=   r   r   rY   r   r   r   rd   rd   v   sM    
 ** ;<P%+<	
4);r   rd   c                   v    e Zd Zd Zej
                  fdZd Zd Zd Z	d Z
d Zd Zdd	Zd
 ZddZd Zd Zy)r   c                 Z    || _         i | _        i | _        t               | _        i | _        y r   )r!   r"   defaultsr#   r$   	outlabelsr%   s     r   r   zDFA.__init__   s)    Er   c                     t        | j                        D ]\  }|| j                  k(  rdnd}t        |||       | j                  |   }t        |      D ]  }||   }| j	                  |      rdnd} ^ y rg   )rA   r"   r!   r[   r@   )r   rk   r5   rm   rn   rF   rT   rp   s           r   rq   zDFA.dump   sx    $**+ 	:C,##C#s(!!#&B :%y"mmD1dr:		:r   c                     | j                   S r   rJ   r   s    r   r?   z	DFA.start   rK   r   c                 B    || j                   j                  |i       |<   y r   )r"   rv   rS   s       r   rU   zDFA.add_transition   s    6:##C,U3r   c                 "    || j                   |<   y r   )r   )r   r5   rT   s      r   r   zDFA.set_default_transition   s    !cr   c                 :    | j                   j                  |       y r   ry   rQ   s     r   rW   zDFA.add_final_state   rz   r   c                     || j                   v S r   )r$   rQ   s     r   r@   zDFA.is_final   s    ))))r   c                     | j                   j                  |i       }|j                  || j                  j                  |d             S r   )r"   r<   r   )r   r5   rF   r6   s       r   rB   zDFA.next_state  s<      $$S"-yy 1 1#t <==r   c                    | j                         }g }d}t        |      D ]2  \  }}|j                  |d | ||f       | j                  ||      }|r2 n |j                  |d |dz    |d f       | j	                  |      r|S |rk|j                         \  }}}| j                  |||      }|r>||z  }| j                  ||      }| j	                  |      r|S |j                  ||d f       |rky )Nr      )asbytes)r?   	enumerater`   rB   r@   r   find_next_edge)r   rH   r   rD   stackirF   paths           r   next_valid_stringzDFA.next_valid_string  s   

 !&) 	8HAuLL&!*eU34OOE51E		8 LL&!a%.%67==M !&D%''ug'FEu5=='KdE401  r   c                 b   ||rdnd}n|r|dz   nt        t        |      dz         }| j                  j                  |i       }||v s|| j                  v r|S 	 | j
                  |   }t        ||      }|t        |      k  r||   S y # t        $ r t        |      x| j
                  |<   }Y Ew xY w)N     r   )
r	   ordr"   r<   r   r   KeyErrorrA   r   r'   )r   r   rF   r   r6   r8   poss          r   r   zDFA.find_next_edge$  s    =&GEE#*UQYs5zA~0FE  $$Q+E>Q$--/L	7^^A&F &%(V#;  	7)/6DNN1	7s   B #B.-B.c                 8   | j                   }t               }|r|j                  |       |g}t               }|ra|j                         }|j                  |       t	        ||         D ],  \  }}|j                  |       ||vs|j                  |       . |ra|S r   )r"   r#   rw   r   r   r`   )	r   r5   	inclusiver"   reachedr   r   _rT   s	            r   reachable_fromzDFA.reachable_from7  s    &&%KKu))+CHHSM$[%56 '4D!t#LL&'  r   c                    | j                   }| j                  }| j                  |      }t        |      D ]
  }||vs||=  | j                  j                  |      }| j                         }d}|||z
  g}|rd}t        t        |            D ]  }	||	   }
d}|D ]  }d }t               }|
D ]D  }||   j                  |      }|||D ]	  }||v s|} +||vs0|j                  |       d}d}F |s[|
|z
  }|j                  |	       |j                  |       |j                  |          |ri }i d }|D ]4  }
|
j                         }||u r|}||<   i ||<   |
D ]  }||u r|}||<    6 |J t        fd|D              }t        |      D ]%  \  }}||   }t        |      D ]  \  }}|   ||<    ' |D cg c]	  }||vs| }}t               }|D ]F  }t        ||   j                               }|j!                  |       |r3|j                  |       ||= H |j                         D ]  }t        |      D ]  }||   |v s||=   || _         || _        || _        y c c}w )NTFc              3   (   K   | ]	  }|     y wr   r   ).0r   mappings     r   	<genexpr>zDFA.minimize.<locals>.<genexpr>  s     ::s   )r"   r!   r   r+   r$   r   r9   r
   r'   r#   r<   rw   r   r`   r   r3   discard)r   r"   r!   	reachabler5   r$   r8   changedpartsr   partchanged_partrF   	next_partnew_partrD   rT   pold_part	new_transnew_initialrepresentative
new_finalsdr6   non_final_srcsremovingro   tr   s                                @r   minimizezDFA.minimizeI  s   &&,, ''0	$ 	%C)#$	% ((55i@" y<78GCJ' Qx$# E $I"uH!% 
4*5155e<+(0). !6A'+qy45	!6 "&Y!6 (U 3*./3
4 $#'(?		!X.X.' 8 	  		0D!XXZN(,&4GN#(*In% 0G#"0K!/0		0 &&& :\::
!), 	)HE1&E(/ )t"4=%)	) *3L#c6K#LL5! 	#C	#--/0EMM#S!cN	# !!# 	!Aa !U8x'%!	!
 %"&! Ms   	I/I/c                     | S r   r   r   s    r   rY   z
DFA.to_dfa  s    r   Nrb   )T)r   r   r   r   r   r   rq   r?   rU   r   rW   r@   rB   r   r   r   r   rY   r   r   r   r   r      sN     ** :;"%*>>&$U'nr   r   c           	        	
 t        j                  |      	i 
	
fd}t         || j                              }t	        | j
                        D ]7  \  }}t	        |      D ]$  \  }}|j                   ||      | ||             & 9 | j                  D ]  }|j                   ||              t	        | j                        D ]#  \  }}|j                   ||       ||             % |S )Nc                 >    | v r|    }|S t              }|| <   |S r   )r   )rD   newnumcr   s     r   remapzrenumber_dfa.<locals>.remap  s4    GU^F  !WF#GENr   )	itertoolscountr   r!   r   r"   rU   r$   rW   r   r   )r   baser   newdfar5   r6   rF   rT   r   r   r   s            @@r   renumber_dfar     s    AG s{{#$F0 B
U$U+ 	BKE4!!%*eU4[A	BB && 2
uZ012s||, ?	T%%eCj%+>?Mr   c                    t        j                  |      }| j                  }t        |      D ]  \  }}||   }t	        t        |            D ]  \  }}|t
        u r|t        u rt        t        |t              sJ |j                  d      }t        |      D ]J  \  }	}
|	t        |      dz
  k  r!t        |      }| j                  ||
|       |}8| j                  ||
|       L ||=   y )Nutf8r   )r   r   r"   r   r+   r   r   	Exception
isinstancer   encoder   r'   r   rU   )r   r   r   r"   r5   r6   rF   rT   label8r   byter-   s               r   	u_to_utf8r     s    A//K, !
UC 	% 01 	!KE4#!%333f-(0 <GAt3v;?*!!W**3b9 **3d;< %L	!!r   c              #      K   | j                  |      }|r2 ||      }|y||k(  r| |t        z  }| j                  |      }|r1yyw)a  
    Uses lookup_func to find all words within levenshtein distance k of word.

    Args:
      word: The word to look up
      k: Maximum edit distance
      lookup_func: A single argument function that returns the first word in the
        database that is greater than or equal to the input argument.
    Yields:
      Every matching word within levenshtein distance k from the database.
    N)r   unull)r   lookup_funcfirstmatchr/   s        r   find_all_matchesr     sW      !!%(E
% ;C<K5LC%%c* s   AA	A	c                 J   t               }t        |      }t        | j                        D ]2  \  }}t        |      D ]  \  }}|D ]  }|j	                  |||        ! 4 | j
                  D ]  }|j	                  |t        |        |j                  | j                         |S r   )	objectrd   r   r"   rU   r$   r   rW   r!   )	nr   nfar5   r6   rF   destsetrT   r   s	            r   reverse_nfar     s    A
a&C. 5
U'. 	5NE7 5""445	55 nn 3
1gz23		"Jr   c                    | j                         } |j                         }| j                         |j                         f}t        |      }|g}|r|j                         }|\  }}t	        | j
                  |         }	t	        |j
                  |         }
|	j                  |
      D ]  }| j                  ||      }|j                  ||      } ||d u|d u      s5||f}|j                  |||       |j                  |        || j                  |      |j                  |            s|j                  |        |r|S r   )rY   r?   r   r   r#   r"   r   rB   rU   r`   r@   rW   )dfa1opdfa2r?   r   r   r5   state1state2trans1trans2rF   rT   s                r   productr     s+   ;;=D;;=DZZ\4::<(E
e*CGE
iikT%%f-.T%%f-.((0 	.E__VU3F__VU3F&$fD&89'""3t4T"dmmF+T]]6-BC''-	.  Jr   c                 8    t        | t        j                  |      S r   )r   operatorand_r   r   s     r   r   r     s    4--r   c                 8    t        | t        j                  |      S r   )r   r   or_r   s     r   unionr     s    4t,,r   c                       t        t              S r   )	basic_nfar   r   r   r   epsilon_nfar    s    Wr   c                       t        t              S r   )r  r   r   r   r   dot_nfar    s    S>r   c                     t               }t               }t        |      }|j                  || |       |j                  |       |S r   r   rd   rU   rW   )rF   r   er   s       r   r  r  #  s>    AA
a&Cq%#Jr   c                     t               }t               }t        |      }| D ]  }|j                  |||        |j                  |       |S r   r  )r8   r   r  r   rF   s        r   charset_nfar	  ,  sM    AA
a&C (1eQ'(Jr   c                     t               }t               }t        |      }| D ]!  }t               }|j                  |||       |}# |j                  |       |S r   r  )rH   r   r  r   rF   s        r   
string_nfar  6  s[    AA
a&C H1eQ' Jr   c                     t               }t               }t        |      }|j                  || |       |j                  |||       |j                  |       |S r   r   rd   r   rW   )n1n2r   r  r   s        r   
choice_nfar  B  sN    AA
a&C JJq"aJJq"aJr   c                     t               }t               }t               }t        |      }|j                  || |       |j                  |||       |j                  |       |S r   r  )r  r  r   mr  r   s         r   
concat_nfar  Q  sS    AAA
a&CJJq"aJJq"aJr   c                 
   t               }t               }t        |      }|j                  || |       |j                  |t        |       | j
                  D ]  }|j                  |t        |        |j                  |       |S r   )r   rd   r   rU   r   r$   rW   )r   r   r  r   r   s        r   star_nfar  \  su    AA
a&C JJq!Qq'1%nn 3
:w23Jr   c                 ,    t        | t        |             S r   )r  r  r   s    r   plus_nfar  n  s    a!%%r   c                 *    t        | t                     S r   )r  r  r  s    r   optional_nfar  r  s    a''r   c                   $    e Zd Zd Zd Zd Zd Zy)DMNodec                 .    || _         i | _        d| _        y )NF)r   arcsfinal)r   r   s     r   r   zDMNode.__init__y  s    	
r   c                 D    d| j                   d| j                         dS )N<z, >)r   tupler   s    r   r   zDMNode.__repr__~  s    !VVTZZ\22r   c                 4    t        | j                               S r   )hashr#  r   s    r   __hash__zDMNode.__hash__  s    DJJL!!r   c                 l    t        t        t        | j                                    }|| j                  fS r   )r#  rA   r   r  r  )r   r  s     r   r#  zDMNode.tuple  s)    VIdii012TZZr   N)r   r   r   r   r   r&  r#  r   r   r   r  r  x  s    
3" r   r  c                 j   t        d      }t        j                  d      }d}i }t        d      g}| D ]  }||k  rt	        d      |st	        d      d}|t        |      k  rF|t        |      k  r8||   ||   k(  r-|dz  }|t        |      k  r|t        |      k  r||   ||   k(  r-|}t        ||||dz   |       ||d  D ]C  }	t        t        |            }
|
j                  |d   j                  |	<   |j                  |
       E d|d   _        |} t        |      dkD  rt        |||d|       |S )Nr   r   ra   zStrings must be in orderzCan't add empty stringT)r   r   r   r  r   r'   
add_suffixr   r   r  r`   r  )stringsr   r   lastr   nodesrH   r   	prefixlenrF   nodes              r   strings_dfar0    sO   
a&CADDAYKE T>677455 #d)mCKDGvay4HFA #d)mCKDGvay4H	 	3tY]D9 IJ' 	E$q'?D$(FFE"INN5!LL		 b	14 5zA~3tQ-Jr   c                    t        |      |kD  r|j                         }|j                         }	 ||   }|d   }|t        |      dz
     }	||j                  |	<   t        |j                        D ]  \  }
}| j                  ||
|        t        |      |kD  ry y # t        $ r1 |j
                  }|j                  r| j                  |       |||<   Y zw xY w)Nr)  r   )
r'   r   r#  r  r   r   r  rW   r   rU   )r   r-  r,  downtor   r/  tupthisparentinlabelrF   rT   s               r   r*  r*    s    
e*v
yy{jjl	(9D 2YF3u:>*G#'FKK  %TYY/ 	2KE4tUD1	2+ e*v
  	66Dzz##D)DI		s   B 7CC)r   )+
__future__r   r   r   r   bisectr   collectionsr   whoosh.compatr   r   r   r	   r
   r   r   r   r   r   r   rd   r   r   r   r   r   r   r   r   r  r  r  r	  r  r  r  r  r  r  r  r0  r*  r   r   r   <module>r;     s    %   
  # D D 	q	
"V " 
Um
R-& R-nh# hV@# @J.!0 .3 +4
..-	$&( V  "$N2r   