
    xnhf                        d dl mZ d Zd Z G d d      Z G d d      Z G d d	      Z G d
 d      Z G d d      Z G d d      Z	y)    )annotationsc                   | sg S t        | d         dk(  r%t        | ||      j                         j                  S g }| D ]o  }|\  }}}||kD  s||kD  rd}t	        |      ||k(  r|dk7  rd}t	        |      ||k(  r|dk7  rd}t	        |      |dk(  rT|j                  t        |||             q t        t        |      dz
        D ]  }	||	dz      j                  ||	   j                  k  s"||	dz      j                  ||	   j                  k  rd}t	        |      ||	dz      j                  ||	   j                  k(  sw||	dz      j                  ||	   j                  k(  sd	}t	        |       |S )
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
             b/var/www/html/profi_bot/bot/venv/lib/python3.12/site-packages/rapidfuzz/distance/_initialize_py.py_list_to_editopsr      s   
 	
3q6{asGX.99;DDDF')$	7HW8 33CS/!g)x"73CS/!xI$93CS/! fY:;% * 3v;?#!a%=  6!9#4#44q1u8N8NQWXYQZQcQc8c8CS/!!a%=  F1I$5$55&Q-:P:PTZ[\T]TfTf:f-CS/! $ M    c           
        | rt        | d         dk(  r%t        | ||      j                         j                  S g }| D ]  }|\  }}}}}	||kD  s|	|kD  rd}
t	        |
      ||k  s|	|k  rd}
t	        |
      |dv r||z
  |	|z
  k7  s||k(  rd}
t	        |
      |dk(  r||k7  s||	k(  rd}
t	        |
      |dk(  r||k(  s||	k7  rd}
t	        |
      |rK|d   j
                  |k(  r9|d   j                  |k(  r'|d   j                  |k(  r||d   _        |	|d   _        |j                  t        |||||	              |d   j                  dk7  s|d   j                  dk7  rd}
t	        |
      |d   j                  |k7  s|d   j                  |k7  rd	}
t	        |
      t        t        |      d
z
        D ]S  }||d
z      j                  ||   j                  k7  s#||d
z      j                  ||   j                  k7  sHd}
t	        |
       |S )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   sP   
 #c!f+"sGX.99;DDDF>@;	9gz8W8 33CS/!Y(Z"73CS/!,,'I2ET^I^2^bkovbv3CS/! i7&:jH>T3CS/! i7&:jH>T3CS/! 2JNNi'F2J,>,>),KPVWYPZPcPcgqPq!(F2J"*F2JfY	7JQR9 > aya6!9#7#71#<DobzW$r
(;(;x(GGo3v;?#!a%=""fQi&7&776!a%=;S;SW]^_W`WiWi;i=CS/! $
 Mr   c                  4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	MatchingBlockz1
    Triple describing matching subsequences
    c                .    || _         || _        || _        y Nabsize)selfr3   r4   r5   s       r   __init__zMatchingBlock.__init__m   s    	r   c                     yNr!    r6   s    r   __len__zMatchingBlock.__len__r       r   c                    	 t        |      dk7  ryt        |d   | j                  k(  xr& |d   | j                  k(  xr |d   | j                  k(        S # t
        $ r Y yw xY wNr!   Fr   r
      )r   boolr3   r4   r5   	TypeErrorr6   others     r   __eq__zMatchingBlock.__eq__u   sf    	5zQaDFF*[uQx466/A[eAhRVR[R[F[\\ 		   A AA 	A A c                |    |dv r| j                   S |dv r| j                  S |dv r| j                  S d}t        |      )N   r      r
      r@   r#   z MatchingBlock index out of range)r3   r4   r5   
IndexErrorr6   r   r   s      r   __getitem__zMatchingBlock.__getitem__~   sB    <66M<66M<990or   c              #  :   K   t        d      D ]	  }| |     y wr9   r   r6   r   s     r   __iter__zMatchingBlock.__iter__        qAq'M    c                V    d| j                    d| j                   d| j                   dS )NzMatchingBlock(a=z, b=z, size=)r2   r;   s    r   __repr__zMatchingBlock.__repr__   s)    !$&&dffXWTYYKqIIr   N
__name__
__module____qualname____doc__r7   r<   rE   rO   rS   rX   r:   r   r   r/   r/   h   s&    
	Jr   r/   c                  4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	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                .    || _         || _        || _        y r1   r'   r   r   )r6   r'   r   r   s       r   r7   zEditop.__init__   s     r   c                     yr9   r:   r;   s    r   r<   zEditop.__len__   r=   r   c                    	 t        |      dk7  ryt        |d   | j                  k(  xr& |d   | j                  k(  xr |d   | j                  k(        S # t
        $ r Y yw xY wr?   )r   rA   r'   r   r   rB   rC   s     r   rE   zEditop.__eq__   sg    	5zQaDHH,gqT\\1IgeTUhZ^ZgZgNghh 		rF   c                |    |dv r| j                   S |dv r| j                  S |dv r| j                  S d}t        |      )NrH   rJ   rL   zEditop index out of range)r'   r   r   rM   rN   s      r   rO   zEditop.__getitem__   sC    <88O<<<<== )or   c              #  :   K   t        d      D ]	  }| |     y wr9   rQ   rR   s     r   rS   zEditop.__iter__   rT   rU   c                V    d| j                   d| j                   d| j                   dS )NzEditop(tag=z
, src_pos=z, dest_pos=rW   r`   r;   s    r   rX   zEditop.__repr__   s*    TXXL
4<<.DMM?Z[\\r   NrY   r:   r   r   r   r      s&    "!
	]r   r   c                      e Zd ZdZ	 	 	 ddZed        Zd Zd Zd Z	d Z
d	 Zd
 Zd Zed        Zej                   d        Zed        Zej                   d        Zd Zd Zd Zd Zd Zd Zy)r$   zH
    List like object of Editops describing how to turn s1 into s2.
    Nc                D    || _         || _        t        |||      | _        y r1   )_src_len	_dest_lenr   r   )r6   editopsr   r   s       r   r7   zEditops.__init__   "      !('8Dr   c                "    |j                         S )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_opcodeszEditops.from_opcodes        !!##r   c           
        t         j                  t               }| j                  |_        | j                  |_        g }d}d}d}|t	        | j
                        k  r|| j
                  |   j                  k  s|| j
                  |   j                  k  r~|j                  t        d|| j
                  |   j                  || j
                  |   j                               | j
                  |   j                  }| j
                  |   j                  }|}|}| j
                  |   j                  }|t	        | j
                        k  r| j
                  |   j                  |k(  r|| j
                  |   j                  k(  r|| j
                  |   j                  k(  r|dk(  r|dz  }|dz  }n|dk(  r|dz  }n
|dk(  r|dz  }|dz  }|t	        | j
                        k  rU| j
                  |   j                  |k(  r9|| j
                  |   j                  k(  r|| j
                  |   j                  k(  r|j                  t        |||||             |t	        | j
                        k  r|| j                  k  s|| j                  k  r2|j                  t        d|| j                  || j                               ||_        |S )z
        Convert to Opcodes

        Returns
        -------
        opcodes : Opcodes
            Editops converted to Opcodes
        r   r	   r"   r
   r   r   )r   __new__rh   ri   r   r   r   r   r   r*   r'   r   r   r&   )	r6   xr   r   r   r   	src_begin
dest_beginr'   s	            r   r%   zEditops.as_opcodes   sj    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/t}}Q/777a 0 9 99)#qLGMHH_MHH_qLGQ C&&MM!$((C/t}}Q/777a 0 9 99 MM&i*hOPC #dmm$$F T\\!X%=MM&'4<<4==YZ
r   c                   g }d}d}| D ]  }||j                   k  s||j                  k  r_t        |j                   |z
  |j                  |z
        }|dkD  r|j                  t	        |||             |j                   }|j                  }|j
                  dk(  r|dz  }|dz  }|j
                  dk(  r|dz  }|j
                  dk(  s|dz  } || j                  k  s|| j                  k  rGt        | j                  |z
  | j                  |z
        }|dkD  r|j                  t	        |||             |j                  t	        | j                  | j                  d             |S )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   )r6   r   r   r   r   lengths         r   as_matching_blockszEditops.as_matching_blocks   s=    B#x"++'=RZZ'12;;3IJA:MM-6"JK**;;vv"1A8#18#A   T\\!X%=/1IJFzmGXvFGmDLL$--CDr   c                R    | j                   D cg c]  }t        |       c}S c c}w )zr
        Convert Editops to a list of tuples.

        This is the equivalent of ``[x for x in editops]``
        )r   tupler6   r   s     r   as_listzEditops.as_listD  s$     %)MM2Mbb	M222   $c                    t         j                  t               }| j                  |_        | j                  |_        | j                  dd |_        |S )z*
        performs copy of Editops
        N)r$   rr   rh   ri   r   r6   rs   s     r   copyzEditops.copyL  =     OOG$]]
nn]]2&
r   c                2   g }| D ]M  }|j                   }|dk(  rd}n|dk(  rd}|j                  t        ||j                  |j                               O t
        j                  t
              }| j                  |_        | j                  |_
        ||_        |S )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$   rr   r   rh   r   ri   r   r6   r   r   r'   rs   s        r   inversezEditops.inverseV  s    . B&&ChMM&bkk2::>?  OOG$]]
ll
r   c                <   t         j                  t               }| j                  |_        | j                  |_        t	        |      t	        |       kD  rd}t        |      dgt	        |       t	        |      z
  z  |_        d}d}d}|D ]  }|t	        |       k7  rg|| j                  |   k7  rU| j                  |   ||<   ||   xj                  |z  c_        |dz  }|dz  }|t	        |       k7  r|| j                  |   k7  rU|t	        |       k(  rd}t        |      |j                  dk(  r|dz  }n|j                  dk(  r|dz  }|dz  } |t	        |       k7  rC| j                  |   ||<   ||   xj                  |z  c_        |dz  }|dz  }|t	        |       k7  rC|S )a#  
        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$   rr   rh   ri   r   r   r   r   r'   )r6   subsequenceresultr   offsetop_pos
result_possops           r   remove_subsequencezEditops.remove_subsequence}  s    )-->>{c$i'4CS/!&CIK0@$@A 
CCI%#v1F*F%)]]6%:z"z"**f4*a
!	 CI%#v1F*F T"8 o%ww("!H$!aKF# ( D	!!%v!6F::&&&0&!OJaKF	 D	! r   c                   d}d}| j                   D ]  }||j                  k  r|||   z  }|dz  }||j                  k  r|j                  dk(  r|||j                     z  }|dz  }V|j                  dk(  r|||j                     z  }x|j                  dk(  s|dz  } |t	        |      k  r|||   z  }|dz  }|t	        |      k  r|S )at  
        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   )r6   source_stringdestination_stringres_strr   r   s         r   applyzEditops.apply  s    " --BBJJ&=111 BJJ& vv"-bkk::18#-bkk::8#1   M**}W--GqLG M** r   c                    | j                   S r1   rh   r;   s    r   r   zEditops.src_len      }}r   c                    || _         y r1   r   r6   values     r   r   zEditops.src_len  	    r   c                    | j                   S r1   ri   r;   s    r   r   zEditops.dest_len      ~~r   c                    || _         y r1   r   r   s     r   r   zEditops.dest_len  	    r   c                    t        |t              sy| j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S NF)
isinstancer$   r   r   r   rC   s     r   rE   zEditops.__eq__  L    %)}}.t4<<5==3PtUYUbUbfkftftUttr   c                ,    t        | j                        S r1   )r   r   r;   s    r   r<   zEditops.__len__      4==!!r   c                    | j                   |= y r1   r   )r6   keys     r   __delitem__zEditops.__delitem__  s    MM#r   c                \   t        |t              r| j                  |   S |j                  t	        | j                              \  }}}|dk  rd}t        |      t        j                  t              }| j                  |_        | j                  |_	        | j                  |||   |_        |S )Nr   z6step sizes below 0 lead to an invalid order of editops)
r   intr   indicesr   r   r$   rr   rh   ri   )r6   r   startstopstepr   rs   s          r   rO   zEditops.__getitem__  s    c3==%%KKDMM(:;tT!8JCS/!OOG$]]
nn]]5d?3
r   c              #  8   K   | j                   E d {    y 7 wr1   r   r;   s    r   rS   zEditops.__iter__
       ==     c                t    ddj                  d | D              z   d| j                   d| j                   dz   S )Nz	Editops([, c              3  2   K   | ]  }t        |        y wr1   repr.0r   s     r   	<genexpr>z#Editops.__repr__.<locals>.<genexpr>       #<tDHt   ], src_len=, dest_len=rW   joinr   r   r;   s    r   rX   zEditops.__repr__  @    $))#<t#<<<T\\NZefjfsfsettu?vv	
r   Nr   r   )rZ   r[   r\   r]   r7   classmethodro   r%   ry   r}   r   r   r   r   propertyr   setterr   rE   r<   r   rO   rS   rX   r:   r   r   r$   r$      s     	E $ $ 7r"H3%N7r'R   ^^    __ u"!
r   r$   c                  4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	r*   ai  
    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                J    || _         || _        || _        || _        || _        y r1   r'   r+   r(   r,   r)   )r6   r'   r+   r(   r,   r)   s         r   r7   zOpcode.__init__0  s%    "$ r   c                     yNr   r:   r;   s    r   r<   zOpcode.__len__7  r=   r   c                   	 t        |      dk7  ryt        |d   | j                  k(  xrN |d   | j                  k(  xr: |d   | j                  k(  xr& |d   | j
                  k(  xr |d   | j                  k(        S # t        $ r Y yw xY wNr   Fr   r
   r@   r!      )r   rA   r'   r+   r(   r,   r)   rB   rC   s     r   rE   zOpcode.__eq__:  s    	5zQaDHH$ .!H..!H,. !H/. !H-   		   A< A*A< <	BBc                    |dv r| j                   S |dv r| j                  S |dv r| j                  S |dv r| j                  S |dv r| j                  S d}t        |      N>   r   >   r
   >   r@   rI   >   r!   rK   >   r   r#   zOpcode index out of range)r'   r+   r(   r,   r)   rM   rN   s      r   rO   zOpcode.__getitem__I  se    <88O<>>!<<<<??"<== )or   c              #  :   K   t        d      D ]	  }| |     y wr   rQ   rR   s     r   rS   zOpcode.__iter__X  rT   rU   c                    d| j                   d| j                   d| j                   d| j                   d| j                   dS )NzOpcode(tag=, src_start=
, src_end=, dest_start=, dest_end=rW   r   r;   s    r   rX   zOpcode.__repr__\  sI    $((\$..1ADLL> Z//*+dmm_AG	
r   NrY   r:   r   r   r*   r*     s%    8!
r   r*   c                      e Zd ZdZ	 	 	 ddZed        Zd Zd Zd Z	d Z
d	 Zd
 Zed        Zej                  d        Zed        Zej                  d        Zd Zd Zd Zd Zd Zy)r   a  
    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                D    || _         || _        t        |||      | _        y r1   )rh   ri   r-   r&   )r6   rn   r   r   s       r   r7   zOpcodes.__init__k  rk   r   c                "    |j                         S )z
        Create Opcodes from Editops

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

        Returns
        -------
        opcodes : Opcodes
            Editops converted to Opcodes
        )r%   )rm   rj   s     r   from_editopszOpcodes.from_editopsu  rp   r   c           
     "   t         j                  t               }| j                  |_        | j                  |_        g }| D ]D  }|j                  dk(  r^t        |j                  |j                  z
        D ]8  }|j                  t        d|j                  |z   |j                  |z                : q|j                  dk(  r[t        |j                  |j                  z
        D ]5  }|j                  t        d|j                  |j                  |z                7 |j                  dk(  st        |j                  |j                  z
        D ]5  }|j                  t        d|j                  |z   |j                               7 G ||_        |S )z
        Convert Opcodes to Editops

        Returns
        -------
        editops : Editops
            Opcodes converted to Editops
        r"   r   r   )r$   rr   rh   ri   r'   r   r(   r+   r   r   r,   r)   r   )r6   rs   r   r   js        r   r   z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                x   g }| D ]  }|j                   dk(  st        |j                  |j                  z
  |j                  |j
                  z
        }|dkD  sS|j                  t        |j                  |j
                  |              |j                  t        | j                  | j                  d             |S )z
        Convert to matching blocks

        Returns
        -------
        matching blocks : list[MatchingBlock]
            Opcodes converted to matching blocks
        r	   r   )
r'   rw   r(   r+   r)   r,   r   r/   r   r   )r6   r   r   rx   s       r   ry   zOpcodes.as_matching_blocks  s     Bvv RZZ",,6bmm8STA:MM-bmmV"TU	  	mDLL$--CDr   c                R    | j                   D cg c]  }t        |       c}S c c}w )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}   zOpcodes.as_list  s$     %)MM2Mbb	M222r~   c                    t         j                  t               }| j                  |_        | j                  |_        | j                  dd |_        |S )z*
        performs copy of Opcodes
        N)r   rr   rh   ri   r&   r   s     r   r   zOpcodes.copy  r   r   c           
     ^   g }| D ]c  }|j                   }|dk(  rd}n|dk(  rd}|j                  t        ||j                  |j                  |j
                  |j                               e t        j                  t              }| j                  |_
        | j                  |_        ||_        |S )a  
        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   rr   r   rh   r   ri   r&   r   s        r   r   zOpcodes.inverse  s    2 B&&ChMM&bmmR[[",,PRPZPZ[\  OOG$]]
ll
r   c                    d}| j                   D ]Y  }|j                  dk(  r|||j                  |j                   z  }/|j                  dv s>|||j                  |j
                   z  }[ |S )at  
        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)   )r6   r   r   r   r   s        r   r   zOpcodes.apply  sj    " --Bvv =

CC00-bmmbkkJJ	   r   c                    | j                   S r1   r   r;   s    r   r   zOpcodes.src_len  r   r   c                    || _         y r1   r   r   s     r   r   zOpcodes.src_len  r   r   c                    | j                   S r1   r   r;   s    r   r   zOpcodes.dest_len  r   r   c                    || _         y r1   r   r   s     r   r   zOpcodes.dest_len  r   r   c                    t        |t              sy| j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   )r   r   r   r   r&   rC   s     r   rE   zOpcodes.__eq__  r   r   c                ,    t        | j                        S r1   )r   r&   r;   s    r   r<   zOpcodes.__len__!  r   r   c                Z    t        |t              r| j                  |   S d}t        |      )NzExpected index)r   r   r&   rB   )r6   r   r   s      r   rO   zOpcodes.__getitem__$  s*    c3==%%nr   c              #  8   K   | j                   E d {    y 7 wr1   )r&   r;   s    r   rS   zOpcodes.__iter__+  r   r   c                t    ddj                  d | D              z   d| j                   d| j                   dz   S )Nz	Opcodes([r   c              3  2   K   | ]  }t        |        y wr1   r   r   s     r   r   z#Opcodes.__repr__.<locals>.<genexpr>0  r   r   r   r   rW   r   r;   s    r   rX   zOpcodes.__repr__.  r   r   r   )rZ   r[   r\   r]   r7   r   r   r   ry   r}   r   r   r   r   r   r   r   rE   r<   rO   rS   rX   r:   r   r   r   r   c  s     	E $ $ 6&3'R6   ^^    __ u"!
r   r   c                  4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	ScoreAlignmentz
    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                J    || _         || _        || _        || _        || _        y r1   scorer+   r(   r,   r)   )r6   r   r+   r(   r,   r)   s         r   r7   zScoreAlignment.__init__=  s'     
"$ r   c                     yr   r:   r;   s    r   r<   zScoreAlignment.__len__K  r=   r   c                   	 t        |      dk7  ryt        |d   | j                  k(  xrN |d   | j                  k(  xr: |d   | j                  k(  xr& |d   | j
                  k(  xr |d   | j                  k(        S # t        $ r Y yw xY wr   )r   rA   r   r+   r(   r,   r)   rB   rC   s     r   rE   zScoreAlignment.__eq__N  s    	5zQaDJJ& .!H..!H,. !H/. !H-   		r   c                    |dv r| j                   S |dv r| j                  S |dv r| j                  S |dv r| j                  S |dv r| j                  S d}t        |      r   )r   r+   r(   r,   r)   rM   rN   s      r   rO   zScoreAlignment.__getitem__]  sf    <::<>>!<<<<??"<== )or   c              #  :   K   t        d      D ]	  }| |     y wr   rQ   rR   s     r   rS   zScoreAlignment.__iter__l  rT   rU   c                    d| j                    d| j                   d| j                   d| j                   d| j                   dS )NzScoreAlignment(score=r   r   r   r   rW   r   r;   s    r   rX   zScoreAlignment.__repr__p  sJ    #DJJ<|DNN;K L||nM$//1B+dmm_\]_	
r   NrY   r:   r   r   r   r   4  s%    !
r   r   N)

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