
    G
e<3                     ~    d dl Z d dlmZ d dlmZ d dl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 ZdS )    N)defaultdict)zip_longestc                 ,    t          j        d|           S )NNFKD)unicodedata	normalizess    4lib/python3.11/site-packages/jellyfish/_jellyfish.py
_normalizer      s     +++    c                     t          j        dt                     t          | t                    s$t          dt          |           j        z            d S )NzSThe jellyfish._jellyfish module is deprecated and will be removed in jellyfish 1.0.zexpected str or unicode, got %s)warningswarnDeprecationWarning
isinstancestr	TypeErrortype__name__r	   s    r   _check_typer      sZ    M]   a N9DGG<LLMMMN Nr   c                    t          |            t          |           | |k    rdS t          |           dz   }t          |          dz   }| s|dz
  S |s|dz
  S d }t          |          }t          d|          D ]y}||gdg|dz
  z  z   }}t          d|          D ]W}||         dz   }||dz
           dz   }	||dz
           | |dz
           ||dz
           k    rdndz   }
t          |
||	          ||<   Xz|d         S )Nr      )r   lenrangemin)s1s2rowscolsprevcurrcdeletion	insertionedits              r   levenshtein_distancer)      s4   OOOOOO	Rxxqr77Q;Dr77Q;D ax axD
++C1d^^ 4 4!sdQh//cq$ 	4 	4AAw{HAE
QIA;r!a%yBq1uI'='=!!1EDx33CFF		4 r7Nr   c                 j   t          |            t          |           t          |           }t          |          }|r|sdS t          ||          }t          ||          }|dz  dz
  }|dk     rd}dg|z  }dg|z  }	d}
t	          |           D ]i\  }}t          d||z
            }t          ||z   |dz
            }t          ||dz             D ]'}|	|         s||         |k    rdx||<   |	|<   |
dz  }
 n(j|
sdS dx}}t	          |          D ]@\  }}|r9t          ||          D ]}|	|         r|dz   } n| |         ||         k    r|dz  }A|dz  }t          |
          }
|
|z  |
|z  z   |
|z
  |
z  z   dz  }|r|dk    rt          |d	          }d}||k     r/| |         ||         k    r|dz  }||k     r| |         ||         k    |r||d
z  d|z
  z  z  }|rU|d	k    rO|
|dz   k    rFd|
z  ||z   k    r:|d|z
  t          |
|z
  dz
            t          ||z   |dz  z
  dz             z  z  z  }|S )Ng           r   r   FT   gffffff?   g?g      ?)r   r   r   max	enumerater   float)r   r   long_tolerance
winklerizes1_lens2_lenmin_lensearch_ranges1_flagss2_flagscommon_charsis1_chlowhijktrans_counts1_fweights                       r   _jaro_winklerrC   0   s#   OOOOOOWWFWWF  s&&!!Gvv&&L A%*LawHwH LbMM  5!Q%&&\!6A:..sBF## 	 	AA; 2a5E>>,00hqk!  s AX&& ! !4 	!1f%%  A; AAE !u1~~q AK &&L 6!V#$k)\9: 	

F  fsllOO!ee1AFA !ee1A 	/a#gv..F 	!q1u$$L GaK//sV|lQ&*++eFVOa!e4Ka4O.P.PP F Mr   c                 &    t          | |dd          S )NFrC   )r   r   s     r   jaro_similarityrF      s    R...r   Fc                 &    t          | ||d          S )NTrE   )r   r   r1   s      r   jaro_winkler_similarityrH      s    R666r   c           
         t          |            t          |           t          |           }t          |          |z   }t          t                    }fdt	          |dz             D             }||d         d<   t	          d|dz             D ]}|||dz            d<   |||dz            d<   t	          ddz             D ]}||d         |dz   <   ||d         |dz   <   t	          d|dz             D ]}d}t	          ddz             D ]}|||dz
                    }	|}
d}| |dz
           ||dz
           k    rd}|}t          ||         |         |z   ||dz            |         dz   ||         |dz            dz   ||	         |
         ||	z
  dz
  z   dz   ||
z
  dz
  z             ||dz            |dz   <   ||| |dz
           <   ||dz            dz            S )Nc                 "    g | ]}d gdz   z  S )r   r+    ).0xlen2s     r   
<listcomp>z0damerau_levenshtein_distance.<locals>.<listcomp>   s$    777!aSD1H777r   r+   r   r   )r   r   r   intr   r   )r   r   len1infinitedascorer:   dbr>   i1j1costrN   s               @r   damerau_levenshtein_distancerY      s+   OOOOOOr77Dr77Dd{H 
S		B 8777uTAX777EE!HQK1dQh  "a!eQa!eQ1dQh  "aQaQ1dQh  q$(## 	 	ABq1uIBBD!a%yBq1uI%%"%ad"a!eQ!#aQ!#b	"R!,q0AFQJ?	# #E!a%LQ 2a!e9?4!8$$r   c                    t          |            | sdS t          |           } |                                 } d}| d         g}d}|D ]\  }}| d         |v r|} nd }| dd          D ]H}|D ]-\  }}||v r$||k    r|                    |           |dz  }|} n.|dk    r|dk    rd }|dk    r nI|dd|z
  z  z  }d                    |          S )	N ))BFPV1)CGJKQSXZ2)DT3)L4)MN5)R6r   r   HWr-   0)r   r   upperappendjoin)r
   replacementsresultcountlsetsublastletters           r   soundexru      s9   NNN r1A			AL dVFE "  	cQ44<<DE  ABB%  % 
	 
	ID#~~$;;MM#&&&QJE  }}3A::E  cQYF776??r   c                    t          |            t          |           t          |          t          |           k    r|| }} t          |           t          |          z
  }t          |          D ]\  }}|| |         k    r|dz  }|S )Nr   )r   r   r/   )r   r   distancer:   r%   s        r   hamming_distancerx      s    OOOOOO 2wwRRB 2wwR H"  11::MHOr   c                    t          |            | sdS |                                 } g }|                     d          rd| dd          z   } n|                     d          r| dd          } nh|                     d          rd| dd          z   } nE|                     d	          rd
| dd          z   } n"|                     d          rd| dd          z   } |                     d          r| d d         dz   } n"|                     d          r| d d         dz   } |                    | d                    d}t          |           }||k     r| |         }|dk    r!|dz   |k     r| |dz            dk    r	d}|dz  }n2|dv rd}n*|dk    rd}n |dk    rd}n|dk    rd}n|dk    r+|dz   t          |           k     r| |dz            dk    rd}nd}n|dk    r| |dz   |dz            dk    rd }|dz  }n|d!k    r-|dz   t          |           k     r| |dz            d"k    rd#}|dz  }n|d"k    rb| |dz
           dvs9|dz   t          |           k     r| |dz            dvs|dz   t          |           k    r| |dz
           dv rd}n*| |dz
           }n|d$k    r| |dz
           dv r| |dz
           }|d%         |d%         d%         k    r|                    |           |dz  }||k     d                    |          }|                    d          r|dk    r
|d d%         }|                    d&          r|d d         dz   }|                    d          r|dk    r
|d d%         }|S )'Nr[   MACMCCr,   KNr   KC)PHPFFFr+   SCHSSS)IEEEY)r`   RTRDNTNDDr   EVAFAEIOUAQGZSMNCHSSPrh   Fri   r   AY)r   rk   
startswithendswithrl   r   rm   )r
   keyr:   len_schs        r   nysiisr      s
   NNN r			A
C 	||E 	AabbEM	
d		 abbE	
c		 !ABB%K	
l	#	# 1QRR5L	
e		 AabbEM 	zz, crcFSL	
2	3	3 crcFSL JJqt 	
AFFE
e))qT99Q1QU8s??BFAA7]]BB3YYBB3YYBB3YYBB3YY1us1vv~~!AE(c//3YY1QUQU]+t33BFAA3YY1q53q66>>aAh#ooBFAA3YYa!eHG##AA1QU87#:#:AQQx7""q1uX3YY1QU8w..1q5Bb6SWR[  JJrNNN	QO e))R ''#,,C ||C SCZZ#2#h ||D #2#hn ||C SCZZ#2#h Jr   c                 p   t          |            |                                                     dd          } g }d }d}| D ]'}|s
|dvr||k    r|                    |           |}d}(t	          |          dk    r(d                    |d d         |dd          z             S d                    |          S )	N r[   Tr   F   r,   )r   rk   replacerl   r   rm   )r
   codexr"   firstr%   s        r   match_rating_codexr   R  s    NNN 	
		#r""AEDE    	Qg%%!t))LLOOO 5zzA~~wwuRaRy5:-...wwu~~r   c                 H   t          |           }t          |          }t          |          }t          |          }g }g }t          ||z
            dk    rd S ||z   }|dk    rd}	n|dk    rd}	n|dk    rd}	nd}	t          ||          D ]9\  }
}|
|k    r.|
r|                    |
           |r|                    |           :dx}}t          t          |          t          |                    D ]\  }
}|
|k    r|
r|dz  }|r|dz  }d	t          ||          z
  |	k    S )
Nr,   r-            r+   r   r   r   )r   r   absr   rl   reversedr.   )r   r   codex1codex2rQ   rN   res1res2lensum
min_ratingc1c2unmatched_count1unmatched_count2s                 r   match_rating_comparisonr   k  sr   ##F##Fv;;Dv;;DDD 4$;1t D[F{{

	1

	2


 ff--    B88  B  B*++'htnnhtnn== & &B88 & A%  & A% $&6777JFFr   c                 
   t          |            g }t          |                                           } |                     d          r
| dd          } d}|t	          |           k     r| |         }|t	          |           dz
  k     r| |dz            nd}|t	          |           dz
  k     r| |dz            nd}||k    r|dk    r|dz  }t|dv r,|dk    s| |dz
           dk    r|                    |           n8|d	k    r.|dk    r| |dz
           d
k    r|r|                    d	           n|dk    re|dk    r|dk    s|dk    r|                    d           |dz  }n|dv r|                    d           |dz  }n|                    d           n|dk    r=|dk    r |dv r|                    d           |dz  }nm|                    d           nV|dv r|                    |           n;|dk    rT|dv r|                    d           n|dk    r|r|dvr|dz  }n|dk    r	|s|dz  }n|                    d           n|dk    r.|dk    s|dv s| |dz
           dvr|                    d           n|dk    r,|dk    s| |dz
           dk    r|                    d           n{|dk    r9|dk    r|                    d           |dz  }nS|                    d           n<|dk    r|                    d           n|dk    r_|dk    r|                    d           |dz  }n|dk    r |dv r|                    d           |dz  }n|                    d           n|dk    rf|dk    r|dv r|                    d           n|dk    r|                    d           |dz  }nq|dk    s|dk    r|                    d           nN|dk    r|                    d           n1|dk    rB|dk    r"|dk    r|dz  }|                    d           n|dv r|                    d           n|dk    rm|dk    r<|dk    s
|dk    r|dv r|                    d           n|                    d           n|                    d           |                    d           nv|dk    r|dv r|                    d           nV|d k    r|                    d           n:|dk    r4t	          |          dk    r!|d!         dk    r|                    d           |dz  }|t	          |           k     d"                    |                                          S )#N)kngnpnwraer   r   z*****r+   r%   aeiour   bmr:   ahrM   ieyr
   r?   dgr>   tfjlmnrnpfqoarj   vwyzr   r[   )r   r   lowerr   r   rl   rm   rk   )r
   ro   r:   r%   nextnextnexts         r   	metaphoner     s   NNNF17799A 	||233 abbE	A
c!ff**aDs1vvz>>qQxxw 3q66A:~~1QU887 99cFA<<Avv1q5Sa   #XX!VV!a%CTc"""#XXs{{x3$#++c"""Qc"""Qc""""#XXs{{x500c"""Qc""""(]]MM!#XXu}}c""""hg.E.EQXQc""""#XXAvvAa!eHG,C,Cc"""#XXAvv1q5Sc"""#XXs{{c"""Qc""""#XXMM##XXs{{c"""QT!1!1c"""Qc""""#XXs{{x4//c""""c"""QCc"""#XXMM##XXAvv$#++Qc""""c"""#XXAvv3;;43;;8t3C3CMM#&&&&MM#&&&&c"""c""""#XXwc"""#XXMM##XX6{{Q6":#4#4c"""	QG c!ff**J 776??  """r   )F)r   collectionsr   	itertoolsr   r   r   r   r)   rC   rF   rH   rY   ru   rx   r   r   r   r   rK   r   r   <module>r      s&       # # # # # # ! ! ! ! ! ! , , ,N N N  6O O Od/ / /7 7 7 7(% (% (%V, , ,^  "Z Z Zz  2'G 'G 'GTr# r# r# r# r#r   