
    ?peg2                     t    d dl Z d dlmZ d dlm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y)    N)defaultdict)zip_longestc                 .    t        j                  d|       S )NNFKD)unicodedata	normalizess    6/usr/lib/python3/dist-packages/jellyfish/_jellyfish.py
_normalizer      s      ++    c                 f    t        | t              s!t        dt        |       j                  z        y )Nzexpected str or unicode, got %s)
isinstancestr	TypeErrortype__name__r	   s    r   _check_typer   
   s,    a9DG<L<LLMM r   c                    t        |        t        |       | |k(  ryt        |       dz   }t        |      dz   }| s|dz
  S |s|dz
  S d }t        |      }t        d|      D ]c  }||gdg|dz
  z  z   }}t        d|      D ]C  }||   dz   }||dz
     dz   }	||dz
     | |dz
     ||dz
     k(  rdndz   }
t        |
||	      ||<   E e |d   S )Nr      )r   lenrangemin)s1s2rowscolsprevcurrcdeletion	insertionedits              r   levenshtein_distancer&      s   OO	Rxr7Q;Dr7Q;DaxaxD
+C1d^ 4!sdQh//cq$ 	4AAw{HAE
QIA;r!a%yBq1uI'=!1EDx3CF		44 r7Nr   c                    t        |        t        |       t        |       }t        |      }|r|syt        ||      }t        ||      }|dz  dz
  }|dk  rd}dg|z  }dg|z  }	d}
t	        |       D ]Y  \  }}t        d||z
        }t        ||z   |dz
        }t        ||dz         D ]!  }|	|   r	||   |k(  sdx||<   |	|<   |
dz  }
 Y [ |
sydx}}t	        |      D ]6  \  }}|s	t        ||      D ]  }|	|   s	|dz   } n | |   |   k7  s2|dz  }8 |dz  }t        |
      }
|
|z  |
|z  z   |
|z
  |
z  z   dz  }|r|dkD  rt        |d	      }d}||k  r!| |   ||   k(  r|dz  }||k  r| |   ||   k(  r|r||d
z  d|z
  z  z  }|rJ|d	kD  rE|
|dz   kD  r=d|
z  ||z   k\  r2|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_winklerr@   *   s   OOWFWF&&!Gvv&L A%*LawHwH LbM 5!Q%&\!6A:.sBF# 	AA;2a5E>,00hqk!		  AX& !41f% A;AA !u1~q ! AK &L 6!V#$k)\9: 	

F fslO!e1AFA !e1Aa#gv..F !q1u$L GaK/sV|lQ&*+eFVOa!e4Ka4O.PP F Mr   c                     t        | |dd      S )NFr@   )r   r   s     r   jaro_similarityrC   |   s    R..r   c                     t        | ||d      S )NTrB   )r   r   r.   s      r   jaro_winkler_similarityrE      s    R66r   c           
         t        |        t        |       t        |       }t        |      }||z   }t        t              }t	        |dz         D cg c]  }dg|dz   z   }}||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 c c}w )Nr(   r   r   )r   r   r   intr   r   )r   r   len1len2infinitedaxscorer7   dbr;   i1j1costs                 r   damerau_levenshtein_distancerR      s   OOr7Dr7Dd{H 
S	B (-TAX7!aSD1H7E7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$$9 8s   E<c                 b   t        |        | syt        |       } | j                         } d}| d   g}d}|D ]  \  }}| d   |v s|} n d }| dd  D ]B  }|D ](  \  }}||v s||k7  r|j                  |       |dz  }|} n |dk7  r|dk7  rd }|dk(  sB n |dd|z
  z  z  }dj	                  |      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   soundexrn      s    N1A		AL dVFE " 	cQ44<D
 AB% % 
	ID#~$;MM#&QJE
	 }3A: cQYF776?r   c                     t        |        t        |       t        |      t        |       kD  r|| }} t        |       t        |      z
  }t        |      D ]  \  }}|| |   k7  s|dz  } |S )Nr   )r   r   r,   )r   r   distancer7   r"   s        r   hamming_distancerq      sq    OO 2wRRB 2wR H" 11:MH Or   c                 :   t        |        | sy| j                         } g }| j                  d      r	d| dd  z   } nd| j                  d      r| dd  } nM| j                  d      r	d| dd  z   } n3| j                  d	      r	d
| dd  z   } n| j                  d      rd| dd  z   } | j                  d      r	| d d dz   } n| j                  d      r| d d dz   } |j	                  | d          d}t        |       }||k  rB| |   }|dk(  r|dz   |k  r| |dz      dk(  rd}|dz  }n|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  }nh|d"k(  rL| |dz
     dvs,|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%   k7  r|j	                  |       |dz  }||k  rBdj                  |      }|j                  d      r
|dk7  r|d d% }|j                  d&      r|d d dz   }|j                  d      r
|dk7  r|d d% }|S )'NrT   MACMCCr)   KNr   KC)PHPFFFr(   SCHSSS)IEEEY)rY   RTRDNTNDDr   EVAFAEIOUAQGZSMNCHSSPra   Frb   r   AY)r   rd   
startswithendswithre   r   rf   )r
   keyr7   len_schs        r   nysiisr      s#   N		A
C 	||EAabEM	
d	abE	
c	!AB%K	
l	#1QR5L	
e	AabEM 	zz,crFSL	
2	3crFSL JJqt 	
AFE
e)qT9Q1QU8s?BFA7]B3YB3YB3YB3Y1us1v~!AE(c/3Y1QUQU+t3BFA3Y1q53q6>aAh#oBFA3Ya!eHG#AA1QU87#:AQQx7"q1uX3Y1QU8w.1q5Bb6SWR[ JJrN	QO e)R ''#,C ||CSCZ#2h ||D#2hn ||CSCZ#2h Jr   c                 $   t        |        | j                         j                  dd      } g }d }d}| D ]"  }|s	|dvr||k7  r|j                  |       |}d}$ t	        |      dkD  rdj                  |d d |dd  z         S dj                  |      S )	N rT   Tr   F   r)   )r   rd   replacere   r   rf   )r
   codexr   firstr"   s        r   match_rating_codexr   N  s    N 	
	#r"AEDE  Qg%!t)LLO 5zA~wwuRay5:-..wwu~r   c                    t        |       }t        |      }t        |      }t        |      }g }g }t        ||z
        dk\  ry ||z   }|dk  rd}	n|dk  rd}	n
|dk  rd}	nd}	t        ||      D ]2  \  }
}|
|k7  s|
r|j	                  |
       |s"|j	                  |       4 dx}}t        t        |      t        |            D ]  \  }
}|
|k7  s|
r|dz  }|s|dz  } d	t        ||      z
  |	k\  S )
Nr)   r*            r(   r   r   r   )r   r   absr   re   reversedr+   )r   r   codex1codex2rH   rI   res1res2lensum
min_ratingc1c2unmatched_count1unmatched_count2s                 r   match_rating_comparisonr   g  s)   #F#Fv;Dv;DDD 4$;1 D[F{
	1
	2

 ff-  B8BB  +,+'htnhtn= &B8 A%  A% & $&677JFFr   c                    t        |        g }t        | j                               } | j                  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k7  r|dz  }Z|dv r$|dk(  s| |dz
     dk(  r|j                  |       n|d	k(  r&|dk7  r| |dz
     d
k(  r|rq|j                  d	       n^|dk(  rV|dk(  r|dk(  s|dk(  r|j                  d       |dz  }n2|dv r|j                  d       |dz  }n|j                  d       n|dk(  r4|dk(  r|dv r|j                  d       |dz  }n|j                  d       n|dv r|j                  |       n|dk(  rJ|dv r|j                  d       n|dk(  r|r|dvr|dz  }n|dk(  r	|s|dz  }nw|j                  d       nd|dk(  r'|dk(  s|dv s| |dz
     dvrK|j                  d       n8|dk(  r$|dk(  s| |dz
     dk7  r"|j                  d       n|dk(  r0|dk(  r|j                  d       |dz  }n|j                  d       n|dk(  r|j                  d       n|dk(  rQ|dk(  r|j                  d       |dz  }n|dk(  r|dv r|j                  d       |dz  }n|j                  d       nl|dk(  rW|dk(  r|dv r|j                  d       nK|dk(  r|j                  d       |dz  }n.|dk7  s|dk7  r#|j                  d       n|dk(  r|j                  d       n|dk(  r7|dk(  r|dk(  r|dz  }|j                  d       n|dv r|j                  d       n|dk(  rZ|dk(  r2|dk(  s	|dk(  r|dv r|j                  d       n|j                  d       n|j                  d       |j                  d       n^|dk(  r|dv rU|j                  d       nC|d k(  r|j                  d       n,|dk(  r't	        |      dkD  r|d!   dk7  r|j                  d       |dz  }|t	        |       k  rd"j                  |      j                         S )#N)kngnpnwraer   r   z*****r(   r"   aeiour   bmr7   ahrL   ieyr
   r<   dgr;   tfjlmnrnpfqoarc   vwyzr   rT   )r   r   lowerr   r   re   rf   rd   )r
   rh   r7   r"   nextnextnexts         r   	metaphoner     sR   NF1779A 	||23abE	A
c!f*aDs1vz>qQxw 3q6A:~1QU87 9cFA<Av1q5Sa #X!V!a%CTc"#Xs{x3$#+c"Qc"Qc"#Xs{x50c"Qc"(]MM!#Xu}c"hg.EQXQc"#XAvAa!eHG,Cc"#XAv1q5Sc"#Xs{c"Qc"#XMM##Xs{c"QT!1c"Qc"#Xs{x4/c"c"QCc"#XMM##XAv$#+Qc"c"#XAv3;43;8t3CMM#&MM#&c"c"#Xwc"#XMM##X6{Q6":#4c"	QG c!f*J 776?  ""r   )F)r   collectionsr   	itertoolsr   r   r   r&   r@   rC   rE   rR   rn   rq   r   r   r   r    r   r   <module>r      sY     # !,N
6Od/7(%V-`"[|2'GTr#r   