
    "gv                     .    d dl Z ddlmZ  G d de      Zy)    N   )method_cachec                   h     e Zd ZdZd Zd Zd Zd Zd Z fdZ	d Z
e fd	       Zd
 ZddZ xZS )
FoldedCasea{  
    A case insensitive string class; behaves just like str
    except compares equal when the only variation is case.

    >>> s = FoldedCase('hello world')

    >>> s == 'Hello World'
    True

    >>> 'Hello World' == s
    True

    >>> s != 'Hello World'
    False

    >>> s.index('O')
    4

    >>> s.split('O')
    ['hell', ' w', 'rld']

    >>> sorted(map(FoldedCase, ['GAMMA', 'alpha', 'Beta']))
    ['alpha', 'Beta', 'GAMMA']

    Sequence membership is straightforward.

    >>> "Hello World" in [s]
    True
    >>> s in ["Hello World"]
    True

    You may test for set inclusion, but candidate and elements
    must both be folded.

    >>> FoldedCase("Hello World") in {s}
    True
    >>> s in {FoldedCase("Hello World")}
    True

    String inclusion works as long as the FoldedCase object
    is on the right.

    >>> "hello" in FoldedCase("Hello World")
    True

    But not if the FoldedCase object is on the left:

    >>> FoldedCase('hello') in 'Hello World'
    False

    In that case, use in_:

    >>> FoldedCase('hello').in_('Hello World')
    True

    >>> FoldedCase('hello') > FoldedCase('Hello')
    False
    c                 D    | j                         |j                         k  S Nlowerselfothers     M/var/www/openai/venv/lib/python3.12/site-packages/importlib_metadata/_text.py__lt__zFoldedCase.__lt__C       zz|ekkm++    c                 D    | j                         |j                         kD  S r   r	   r   s     r   __gt__zFoldedCase.__gt__F   r   r   c                 D    | j                         |j                         k(  S r   r	   r   s     r   __eq__zFoldedCase.__eq__I       zz|u{{},,r   c                 D    | j                         |j                         k7  S r   r	   r   s     r   __ne__zFoldedCase.__ne__L   r   r   c                 4    t        | j                               S r   )hashr
   )r   s    r   __hash__zFoldedCase.__hash__O   s    DJJL!!r   c                 Z    t         |          j                  |j                               S r   )superr
   __contains__)r   r   	__class__s     r   r   zFoldedCase.__contains__R   s     w}++EKKM::r   c                     | t        |      v S )zDoes self appear in other?)r   r   s     r   in_zFoldedCase.in_U   s    z%(((r   c                      t         |          S r   )r   r
   )r   r   s    r   r
   zFoldedCase.lowerZ   s    w}r   c                 \    | j                         j                  |j                               S r   )r
   index)r   subs     r   r$   zFoldedCase.index^   s    zz|!!#))+..r   c                     t        j                  t        j                  |      t         j                        }|j	                  | |      S r   )recompileescapeIsplit)r   splittermaxsplitpatterns       r   r+   zFoldedCase.splita   s0    **RYYx0"$$7}}T8,,r   ) r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r!   r   r
   r$   r+   __classcell__)r   s   @r   r   r      sJ    9v,,--";)
  /-r   r   )r'   
_functoolsr   strr    r   r   <module>r8      s    	 $\- \-r   