
    k*if                        S SK Jr  S rS r " S S5      r " S S5      r " S S	5      r " S
 S5      r " S S5      r " S S5      r	g)    )annotationsc                   U (       d  / $ [        U S   5      S:X  a$  [        XU5      R                  5       R                  $ / nU  Hr  nUu  pVnXa:  d  Xr:  a  Sn[	        U5      eXa:X  a  US:w  a  Sn[	        U5      eXr:X  a  US:w  a  Sn[	        U5      eUS:X  a  MW  UR                  [        XVU5      5        Mt     [        [        U5      S-
  5       H  n	X9S-      R                  X9   R                  :  d!  X9S-      R                  X9   R                  :  a  Sn[	        U5      eX9S-      R                  X9   R                  :X  d  Mu  X9S-      R                  X9   R                  :X  d  M  S	n[	        U5      e   U$ )
Nr      List of edit operations invalidinsertdeleteequal   z$List of edit operations out of orderzDuplicated edit operation)
lenOpcodes
as_editops_editops
ValueErrorappendEditoprangesrc_posdest_pos)
opssrc_lendest_lenblocksop	edit_typer   r   msgis
             a/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/rapidfuzz/distance/_initialize_py.py_list_to_editopsr      ss   
 	
3q6{asX.99;DDDF')$	H 33CS/!)x"73CS/!I$93CS/! fY:;% * 3v;?#a%=  69#4#441u8N8NQWQZQcQc8c8CS/!a%=  FI$5$55&Q-:P:PTZT]TfTf:f-CS/! $ M    c           
     @   U (       a  [        U S   5      S:X  a$  [        XU5      R                  5       R                  $ / nU  GH  nUu  pVpxn	Xq:  d  X:  a  Sn
[	        U
5      eXv:  d  X:  a  Sn
[	        U
5      eUS;   a  Xv-
  X-
  :w  d  Xg:X  a  Sn
[	        U
5      eUS:X  a  Xg:w  d  X:X  a  Sn
[	        U
5      eUS:X  a  Xg:X  d  X:w  a  Sn
[	        U
5      eU(       aM  US   R
                  U:X  a:  US   R                  U:X  a'  US   R                  U:X  a  XsS   l        XS   l        M  UR                  [        XVXxU	5      5        GM     US   R                  S:w  d  US   R                  S:w  a  Sn
[	        U
5      eUS   R                  U:w  d  US   R                  U:w  a  S	n
[	        U
5      e[        [        U5      S
-
  5       HR  nX;S
-      R                  X;   R                  :w  d#  X;S
-      R                  X;   R                  :w  d  MG  Sn
[	        U
5      e   U$ )Nr      r   >   r	   replacer   r   z4List of edit operations does not start at position 0z7List of edit operations does not end at the string endsr
   z)List of edit operations is not continuous)r   Editops
as_opcodes_opcodesr   tagsrc_enddest_endr   Opcode	src_start
dest_startr   )r   r   r   r   r   r   r+   r(   r,   r)   r   r   s               r   _list_to_opcodesr-   2   s!   
 #c!f+"sX.99;DDDF>@;	g8 33CS/!("73CS/!,,'2EI^2^bkbv3CS/! i&:j>T3CS/! i&:j>T3CS/! 2JNNi'F2J,>,>),KPVWYPZPcPcgqPq!(2J"*2JfY7QR9 > aya6!9#7#71#<DobzW$r
(;(;x(GGo3v;?#a%=""fi&7&776a%=;S;SW]W`WiWi;i=CS/! $
 Mr   c                  <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)MatchingBlockh   z)
Triple describing matching subsequences
c                (    Xl         X l        X0l        g Nabsize)selfr4   r5   r6   s       r   __init__MatchingBlock.__init__m   s    	r   c                    gNr!    r7   s    r   __len__MatchingBlock.__len__r       r   c                     [        U5      S:w  a  g[        US   U R                  :H  =(       a+    US   U R                  :H  =(       a    US   U R                  :H  5      $ ! [
         a     gf = fNr!   Fr   r
      )r   boolr4   r5   r6   	TypeErrorr7   others     r   __eq__MatchingBlock.__eq__u   sf    	5zQaDFF*[uQx466/A[eAhRVR[R[F[\\ 		   A AA 
A,+A,c                    US;   a  U R                   $ US;   a  U R                  $ US;   a  U R                  $ Sn[        U5      e)N   r      r
      rC   r#   z MatchingBlock index out of range)r4   r5   r6   
IndexErrorr7   r   r   s      r   __getitem__MatchingBlock.__getitem__~   sB    <66M<66M<990or   c              #  <   #    [        S5       H	  nX   v   M     g 7fr;   r   r7   r   s     r   __iter__MatchingBlock.__iter__        qA'M    c                V    SU R                    SU R                   SU R                   S3$ )NzMatchingBlock(a=z, b=z, size=)r3   r=   s    r   __repr__MatchingBlock.__repr__   s)    !$&&dffXWTYYKqIIr   r3   N__name__
__module____qualname____firstlineno____doc__r8   r>   rH   rS   rX   r^   __static_attributes__r<   r   r   r/   r/   h   s&    
	Jr   r/   c                  <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)r      a  
Tuple like object describing an edit operation.
It is in the form (tag, src_pos, dest_pos)

The tags are strings, with these meanings:

+-----------+---------------------------------------------------+
| tag       | explanation                                       |
+===========+===================================================+
| 'replace' | src[src_pos] should be replaced by dest[dest_pos] |
+-----------+---------------------------------------------------+
| 'delete'  | src[src_pos] should be deleted                    |
+-----------+---------------------------------------------------+
| 'insert'  | dest[dest_pos] should be inserted at src[src_pos] |
+-----------+---------------------------------------------------+
c                (    Xl         X l        X0l        g r2   r'   r   r   )r7   r'   r   r   s       r   r8   Editop.__init__   s     r   c                    gr;   r<   r=   s    r   r>   Editop.__len__   r@   r   c                     [        U5      S:w  a  g[        US   U R                  :H  =(       a+    US   U R                  :H  =(       a    US   U R                  :H  5      $ ! [
         a     gf = frB   )r   rD   r'   r   r   rE   rF   s     r   rH   Editop.__eq__   sg    	5zQaDHH,gqT\\1IgeTUhZ^ZgZgNghh 		rJ   c                    US;   a  U R                   $ US;   a  U R                  $ US;   a  U R                  $ Sn[        U5      e)NrL   rN   rP   zEditop index out of range)r'   r   r   rQ   rR   s      r   rS   Editop.__getitem__   sC    <88O<<<<== )or   c              #  <   #    [        S5       H	  nX   v   M     g 7fr;   rV   rW   s     r   rX   Editop.__iter__   rZ   r[   c                X    SU R                   < SU R                   SU R                   S3$ )NzEditop(tag=z
, src_pos=z, dest_pos=r]   rj   r=   s    r   r^   Editop.__repr__   s*    TXXL
4<<.DMM?Z[\\r   )r   r   r'   Nr`   r<   r   r   r   r      s&    "!
	]r   r   c                      \ rS rSrSr   SS jr\S 5       rS rS r	S r
S	 rS
 rS rS r\S 5       r\R"                  S 5       r\S 5       r\R"                  S 5       rS rS rS rS rS rS rSrg)r$      z@
List like object of Editops describing how to turn s1 into s2.
Nc                >    X l         X0l        [        XU5      U l        g r2   )_src_len	_dest_lenr   r   )r7   editopsr   r   s       r   r8   Editops.__init__         !(8Dr   c                "    UR                  5       $ )z
Create Editops from Opcodes

Parameters
----------
opcodes : Opcodes
    opcodes to convert to editops

Returns
-------
editops : Editops
    Opcodes converted to Editops
)r   )clsopcodess     r   from_opcodesEditops.from_opcodes        !!##r   c           
        [         R                  [         5      nU R                  Ul        U R                  Ul        / nSnSnSnU[	        U R
                  5      :  Ga  X0R
                  U   R                  :  d  X@R
                  U   R                  :  a~  UR                  [        SUU R
                  U   R                  UU R
                  U   R                  5      5        U R
                  U   R                  nU R
                  U   R                  nUnUnU R
                  U   R                  nU[	        U R
                  5      :  a  U R
                  U   R                  U:X  a  X0R
                  U   R                  :X  a  X@R
                  U   R                  :X  a  US:X  a  US-  nUS-  nOUS:X  a  US-  nOUS:X  a  US-  nUS-  nU[	        U R
                  5      :  aW  U R
                  U   R                  U:X  a:  X0R
                  U   R                  :X  a  X@R
                  U   R                  :X  a  M  UR                  [        XX7U5      5        U[	        U R
                  5      :  a  GM  X0R                  :  d  X@R                  :  a0  UR                  [        SX0R                  X@R                  5      5        X!l        U$ )zX
Convert to Opcodes

Returns
-------
opcodes : Opcodes
    Editops converted to Opcodes
r   r	   r"   r
   r   r   )r   __new__ry   rz   r   r   r   r   r   r*   r'   r   r   r&   )	r7   xr   r   r   r   	src_begin
dest_beginr'   s	            r   r%   Editops.as_opcodes   sP    OOG$]]
nn#dmm$$q)111Xa@P@Y@Y5Ya(00 a(11 --*22==+44I!J--"&&CC&&MM!$((C/}}Q/777a 0 9 99)#qLGMHH_MHH_qLGQ C&&MM!$((C/}}Q/777a 0 9 99 MM&hOPC #dmm$$F \\!X%=MM&'<<==YZ
r   c                   / nSnSnU  H  nX$R                   :  d  X4R                  :  a_  [        UR                   U-
  UR                  U-
  5      nUS:  a  UR                  [	        X#U5      5        UR                   nUR                  nUR
                  S:X  a  US-  nUS-  nM  UR
                  S:X  a  US-  nM  UR
                  S:X  d  M  US-  nM     X R                  :  d  X0R                  :  aG  [        U R                  U-
  U R                  U-
  5      nUS:  a  UR                  [	        X#U5      5        UR                  [	        U R                  U R                  S5      5        U$ )z|
Convert to matching blocks

Returns
-------
matching blocks : list[MatchingBlock]
    Editops converted to matching blocks
r   r"   r
   r   r   )r   r   minr   r/   r'   r   r   )r7   r   r   r   r   lengths         r   as_matching_blocksEditops.as_matching_blocks   s1    B#x++'=RZZ'12;;3IJA:MM-6"JK**;;vv"1A8#18#A   \\!X%=/1IJFzmGvFGmDLL$--CDr   c                X    U R                    Vs/ s H  n[        U5      PM     sn$ s  snf )zZ
Convert Editops to a list of tuples.

This is the equivalent of ``[x for x in editops]``
)r   tupler7   r   s     r   as_listEditops.as_listD  s$     %)MM2Mbb	M222   'c                    [         R                  [         5      nU R                  Ul        U R                  Ul        U R                  SS Ul        U$ )z
performs copy of Editops
N)r$   r   ry   rz   r   r7   r   s     r   copyEditops.copyL  =     OOG$]]
nn]]2&
r   c                6   / nU  HO  nUR                   nUS:X  a  SnOUS:X  a  SnUR                  [        X2R                  UR                  5      5        MQ     [
        R                  [
        5      nU R                  Ul        U R                  Ul
        Xl        U$ )a>  
Invert Editops, so it describes how to transform the destination string to
the source string.

Returns
-------
editops : Editops
    inverted Editops

Examples
--------
>>> from rapidfuzz.distance import Levenshtein
>>> Levenshtein.editops('spam', 'park')
[Editop(tag=delete, src_pos=0, dest_pos=0),
 Editop(tag=replace, src_pos=3, dest_pos=2),
 Editop(tag=insert, src_pos=4, dest_pos=3)]

>>> Levenshtein.editops('spam', 'park').inverse()
[Editop(tag=insert, src_pos=0, dest_pos=0),
 Editop(tag=replace, src_pos=2, dest_pos=3),
 Editop(tag=delete, src_pos=3, dest_pos=4)]
r   r   )r'   r   r   r   r   r$   r   r   ry   r   rz   r   r7   r   r   r'   r   s        r   inverseEditops.inverseV  s    . B&&ChMM&kk2::>?  OOG$]]
ll
r   c                L   [         R                  [         5      nU R                  Ul        U R                  Ul        [	        U5      [	        U 5      :  a  Sn[        U5      eS/[	        U 5      [	        U5      -
  -  Ul        SnSnSnU H  nU[	        U 5      :w  ag  XpR                  U   :w  aU  U R                  U   X&'   X&   =R                  U-  sl        US-  nUS-  nU[	        U 5      :w  a  XpR                  U   :w  a  MU  U[	        U 5      :X  a  Sn[        U5      eUR                  S:X  a  US-  nOUR                  S:X  a  US-  nUS-  nM     U[	        U 5      :w  aC  U R                  U   X&'   X&   =R                  U-  sl        US-  nUS-  nU[	        U 5      :w  a  MC  U$ )z
remove a subsequence

Parameters
----------
subsequence : Editops
    subsequence to remove (has to be a subset of editops)

Returns
-------
sequence : Editops
    a copy of the editops without the subsequence
z subsequence is not a subsequenceNr   r
   r   r   )	r$   r   ry   rz   r   r   r   r   r'   )r7   subsequenceresultr   offsetop_pos
result_possops           r   remove_subsequenceEditops.remove_subsequence}  s    )-->>{c$i'4CS/!&CIK0@$@A 
CCI%#v1F*F%)]]6%:""**f4*a
!	 CI%#v1F*F T"8 o%ww("!H$!aKF# ( D	!!%v!6F&&&0&!OJaKF	 D	! r   c                   SnSnU R                    H  nXER                  :  a  X1U   -  nUS-  nXER                  :  a  M  UR                  S:X  a  X2UR                     -  nUS-  nMW  UR                  S:X  a  X2UR                     -  nMz  UR                  S:X  d  M  US-  nM     U[	        U5      :  a  X1U   -  nUS-  nU[	        U5      :  a  M  U$ )a  
apply editops to source_string

Parameters
----------
source_string : str | bytes
    string to apply editops to
destination_string : str | bytes
    string to use for replacements / insertions into source_string

Returns
-------
mod_string : str
    modified source_string

 r   r
   r"   r   r   )r   r   r'   r   r   )r7   source_stringdestination_stringres_strr   r   s         r   applyEditops.apply  s    " --BJJ&111 JJ& vv"bkk::18#bkk::8#1   M**W--GqLG M** r   c                    U R                   $ r2   ry   r=   s    r   r   Editops.src_len      }}r   c                    Xl         g r2   r   r7   values     r   r   r         r   c                    U R                   $ r2   rz   r=   s    r   r   Editops.dest_len      ~~r   c                    Xl         g r2   r   r   s     r   r   r         r   c                    [        U[        5      (       d  gU R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ NF)
isinstancer$   r   r   r   rF   s     r   rH   Editops.__eq__  O    %))}}.t4<<5==3PtUYUbUbfkftftUttr   c                ,    [        U R                  5      $ r2   )r   r   r=   s    r   r>   Editops.__len__      4==!!r   c                    U R                   U	 g r2   r   )r7   keys     r   __delitem__Editops.__delitem__  s    MM#r   c                d   [        U[        5      (       a  U R                  U   $ UR                  [	        U R                  5      5      u  p#nUS:  a  Sn[        U5      e[        R                  [        5      nU R                  Ul        U R                  Ul	        U R                  X#U2   Ul        U$ )Nr   z6step sizes below 0 lead to an invalid order of editops)
r   intr   indicesr   r   r$   r   ry   rz   )r7   r   startstopstepr   r   s          r   rS   Editops.__getitem__  s    c3==%%KKDMM(:;T!8JCS/!OOG$]]
nn]]5d?3
r   c              #  8   #    U R                    S h  vN   g  N7fr2   r   r=   s    r   rX   Editops.__iter__
       ==     c                t    SSR                  S U  5       5      -   SU R                   SU R                   S3-   $ )Nz	Editops([, c              3  8   #    U  H  n[        U5      v   M     g 7fr2   repr.0r   s     r   	<genexpr>#Editops.__repr__.<locals>.<genexpr>       #<tDHHt   ], src_len=, dest_len=r]   joinr   r   r=   s    r   r^   Editops.__repr__  @    $))#<t#<<<T\\NZefjfsfsettu?vv	
r   )rz   r   ry   Nr   r   )ra   rb   rc   rd   re   r8   classmethodr   r%   r   r   r   r   r   r   propertyr   setterr   rH   r>   r   rS   rX   r^   rf   r<   r   r   r$   r$      s     	E $ $ 7r"H3%N7r'R   ^^    __ u"!
r   r$   c                  <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)r*   i  a  
Tuple like object describing an edit operation.
It is in the form (tag, src_start, src_end, dest_start, dest_end)

The tags are strings, with these meanings:

+-----------+-----------------------------------------------------+
| tag       | explanation                                         |
+===========+=====================================================+
| 'replace' | src[src_start:src_end] should be                    |
|           | replaced by dest[dest_start:dest_end]               |
+-----------+-----------------------------------------------------+
| 'delete'  | src[src_start:src_end] should be deleted.           |
|           | Note that dest_start==dest_end in this case.        |
+-----------+-----------------------------------------------------+
| 'insert'  | dest[dest_start:dest_end] should be inserted        |
|           | at src[src_start:src_start].                        |
|           | Note that src_start==src_end in this case.          |
+-----------+-----------------------------------------------------+
| 'equal'   | src[src_start:src_end] == dest[dest_start:dest_end] |
+-----------+-----------------------------------------------------+

Note
----
Opcode is compatible with the tuples returned by difflib's SequenceMatcher to make them
interoperable
c                @    Xl         X l        X0l        X@l        XPl        g r2   r'   r+   r(   r,   r)   )r7   r'   r+   r(   r,   r)   s         r   r8   Opcode.__init__0  s    "$ r   c                    gNr   r<   r=   s    r   r>   Opcode.__len__7  r@   r   c                B    [        U5      S:w  a  g[        US   U R                  :H  =(       a]    US   U R                  :H  =(       aD    US   U R                  :H  =(       a+    US   U R
                  :H  =(       a    US   U R                  :H  5      $ ! [         a     gf = fNr   Fr   r
   rC   r!      )r   rD   r'   r+   r(   r,   r)   rE   rF   s     r   rH   Opcode.__eq__:  s    	5zQaDHH$ .!H..!H,. !H/. !H-   		   B A>B 
BBc                    US;   a  U R                   $ US;   a  U R                  $ US;   a  U R                  $ US;   a  U R                  $ US;   a  U R                  $ Sn[        U5      eN>   r   >   r
   >   rC   rM   >   r!   rO   >   r   r#   zOpcode index out of range)r'   r+   r(   r,   r)   rQ   rR   s      r   rS   Opcode.__getitem__I  se    <88O<>>!<<<<??"<== )or   c              #  <   #    [        S5       H	  nX   v   M     g 7fr   rV   rW   s     r   rX   Opcode.__iter__X  rZ   r[   c                    SU R                   < SU R                   SU R                   SU R                   SU R                   S3$ )NzOpcode(tag=, src_start=
, src_end=, dest_start=, dest_end=r]   r   r=   s    r   r^   Opcode.__repr__\  sI    $((\$..1ADLL> Z//*+dmm_AG	
r   )r)   r,   r(   r+   r'   Nr`   r<   r   r   r*   r*     s%    8!
r   r*   c                      \ rS rSrSr   SS jr\S 5       rS rS r	S r
S	 rS
 rS r\S 5       r\R                   S 5       r\S 5       r\R                   S 5       rS rS rS rS rS rSrg)r   ic  z
List like object of Opcodes describing how to turn s1 into s2.
The first Opcode has src_start == dest_start == 0, and remaining tuples
have src_start == the src_end from the tuple preceding it,
and likewise for dest_start == the previous dest_end.
Nc                >    X l         X0l        [        XU5      U l        g r2   )ry   rz   r-   r&   )r7   r   r   r   s       r   r8   Opcodes.__init__k  r}   r   c                "    UR                  5       $ )z
Create Opcodes from Editops

Parameters
----------
editops : Editops
    editops to convert to opcodes

Returns
-------
opcodes : Opcodes
    Editops converted to Opcodes
)r%   )r   r{   s     r   from_editopsOpcodes.from_editopsu  r   r   c           
     <   [         R                  [         5      nU R                  Ul        U R                  Ul        / nU  GHQ  nUR                  S:X  aa  [        UR                  UR                  -
  5       H9  nUR                  [        SUR                  U-   UR                  U-   5      5        M;     Mu  UR                  S:X  a^  [        UR                  UR                  -
  5       H6  nUR                  [        SUR                  UR                  U-   5      5        M8     M  UR                  S:X  d  M  [        UR                  UR                  -
  5       H6  nUR                  [        SUR                  U-   UR                  5      5        M8     GMT     X!l        U$ )z`
Convert Opcodes to Editops

Returns
-------
editops : Editops
    Opcodes converted to Editops
r"   r   r   )r$   r   ry   rz   r'   r   r(   r+   r   r   r,   r)   r   )r7   r   r   r   js        r   r   Opcodes.as_editops  s(    OOG$]]
nnBvv"rzzBLL89AMM&BLL14DbmmVWFW"XY :8#r{{R]]:;AMM&2<<QRAR"ST <8#rzzBLL89AMM&2<<!3CR]]"ST :  
r   c                   / nU  H  nUR                   S:X  d  M  [        UR                  UR                  -
  UR                  UR
                  -
  5      nUS:  d  MW  UR                  [        UR                  UR
                  U5      5        M     UR                  [        U R                  U R                  S5      5        U$ )z|
Convert to matching blocks

Returns
-------
matching blocks : list[MatchingBlock]
    Opcodes converted to matching blocks
r	   r   )
r'   r   r(   r+   r)   r,   r   r/   r   r   )r7   r   r   r   s       r   r   Opcodes.as_matching_blocks  s     Bvv RZZ",,6bmm8STA:MM-bmmV"TU	  	mDLL$--CDr   c                X    U R                    Vs/ s H  n[        U5      PM     sn$ s  snf )z
Convert Opcodes to a list of tuples, which is compatible
with the opcodes of difflibs SequenceMatcher.

This is the equivalent of ``[x for x in opcodes]``
)r&   r   r   s     r   r   Opcodes.as_list  s$     %)MM2Mbb	M222r   c                    [         R                  [         5      nU R                  Ul        U R                  Ul        U R                  SS Ul        U$ )z
performs copy of Opcodes
N)r   r   ry   rz   r&   r   s     r   r   Opcodes.copy  r   r   c           
     b   / nU  He  nUR                   nUS:X  a  SnOUS:X  a  SnUR                  [        X2R                  UR                  UR
                  UR                  5      5        Mg     [        R                  [        5      nU R                  Ul
        U R                  Ul        Xl        U$ )al  
Invert Opcodes, so it describes how to transform the destination string to
the source string.

Returns
-------
opcodes : Opcodes
    inverted Opcodes

Examples
--------
>>> from rapidfuzz.distance import Levenshtein
>>> Levenshtein.opcodes('spam', 'park')
[Opcode(tag=delete, src_start=0, src_end=1, dest_start=0, dest_end=0),
 Opcode(tag=equal, src_start=1, src_end=3, dest_start=0, dest_end=2),
 Opcode(tag=replace, src_start=3, src_end=4, dest_start=2, dest_end=3),
 Opcode(tag=insert, src_start=4, src_end=4, dest_start=3, dest_end=4)]

>>> Levenshtein.opcodes('spam', 'park').inverse()
[Opcode(tag=insert, src_start=0, src_end=0, dest_start=0, dest_end=1),
 Opcode(tag=equal, src_start=0, src_end=2, dest_start=1, dest_end=3),
 Opcode(tag=replace, src_start=2, src_end=3, dest_start=3, dest_end=4),
 Opcode(tag=delete, src_start=3, src_end=4, dest_start=4, dest_end=4)]
r   r   )r'   r   r*   r,   r)   r+   r(   r   r   r   ry   r   rz   r&   r   s        r   r   Opcodes.inverse  s    2 B&&ChMM&mmR[[",,PRPZPZ[\  OOG$]]
ll
r   c                    SnU R                    H]  nUR                  S:X  a  X1UR                  UR                   -  nM0  UR                  S;   d  MB  X2UR                  UR
                   -  nM_     U$ )a  
apply opcodes to source_string

Parameters
----------
source_string : str | bytes
    string to apply opcodes to
destination_string : str | bytes
    string to use for replacements / insertions into source_string

Returns
-------
mod_string : str
    modified source_string

r   r	   >   r   r"   )r&   r'   r+   r(   r,   r)   )r7   r   r   r   r   s        r   r   Opcodes.apply  se    " --Bvv 

CC00bmmbkkJJ	   r   c                    U R                   $ r2   r   r=   s    r   r   Opcodes.src_len  r   r   c                    Xl         g r2   r   r   s     r   r   r    r   r   c                    U R                   $ r2   r   r=   s    r   r   Opcodes.dest_len  r   r   c                    Xl         g r2   r   r   s     r   r   r    r   r   c                    [        U[        5      (       d  gU R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r   )r   r   r   r   r&   rF   s     r   rH   Opcodes.__eq__  r   r   c                ,    [        U R                  5      $ r2   )r   r&   r=   s    r   r>   Opcodes.__len__!  r   r   c                d    [        U[        5      (       a  U R                  U   $ Sn[        U5      e)NzExpected index)r   r   r&   rE   )r7   r   r   s      r   rS   Opcodes.__getitem__$  s-    c3==%%nr   c              #  8   #    U R                    S h  vN   g  N7fr2   )r&   r=   s    r   rX   Opcodes.__iter__+  r   r   c                t    SSR                  S U  5       5      -   SU R                   SU R                   S3-   $ )Nz	Opcodes([r   c              3  8   #    U  H  n[        U5      v   M     g 7fr2   r   r   s     r   r   #Opcodes.__repr__.<locals>.<genexpr>0  r   r   r   r   r]   r   r=   s    r   r^   Opcodes.__repr__.  r   r   )rz   r&   ry   r   )ra   rb   rc   rd   re   r8   r   r  r   r   r   r   r   r   r   r   r   r   rH   r>   rS   rX   r^   rf   r<   r   r   r   r   c  s     	E $ $ 6&3'R6   ^^    __ u"!
r   r   c                  <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)ScoreAlignmenti4  z
Tuple like object describing the position of the compared strings in
src and dest.

It indicates that the score has been calculated between
src[src_start:src_end] and dest[dest_start:dest_end]
c                @    Xl         X l        X0l        X@l        XPl        g r2   scorer+   r(   r,   r)   )r7   r+  r+   r(   r,   r)   s         r   r8   ScoreAlignment.__init__=  s     
"$ r   c                    gr   r<   r=   s    r   r>   ScoreAlignment.__len__K  r@   r   c                B    [        U5      S:w  a  g[        US   U R                  :H  =(       a]    US   U R                  :H  =(       aD    US   U R                  :H  =(       a+    US   U R
                  :H  =(       a    US   U R                  :H  5      $ ! [         a     gf = fr   )r   rD   r+  r+   r(   r,   r)   rE   rF   s     r   rH   ScoreAlignment.__eq__N  s    	5zQaDJJ& .!H..!H,. !H/. !H-   		r   c                    US;   a  U R                   $ US;   a  U R                  $ US;   a  U R                  $ US;   a  U R                  $ US;   a  U R                  $ Sn[        U5      er   )r+  r+   r(   r,   r)   rQ   rR   s      r   rS   ScoreAlignment.__getitem__]  sf    <::<>>!<<<<??"<== )or   c              #  <   #    [        S5       H	  nX   v   M     g 7fr   rV   rW   s     r   rX   ScoreAlignment.__iter__l  rZ   r[   c                    SU R                    SU R                   SU R                   SU R                   SU R                   S3$ )NzScoreAlignment(score=r   r   r   r   r]   r*  r=   s    r   r^   ScoreAlignment.__repr__p  sJ    #DJJ<|DNN;K L||nM$//1B+dmm_\]_	
r   )r)   r,   r+  r(   r+   Nr`   r<   r   r   r(  r(  4  s%    !
r   r(  N)

__future__r   r   r-   r/   r   r$   r*   r   r(  r<   r   r   <module>r8     sc    #)X3l&J &JR3] 3]lI
 I
X
M
 M
`N
 N
b@
 @
r   