
    =h<                        d Z ddlmZ ddlmZmZmZmZ ddlm	Z	  G d d      Z
 G d d      Z G d	 d
      Z G d d      Z G d d      Z	 	 	 	 ddZy)zpTools for working with `collations`_.

.. _collations: https://www.mongodb.com/docs/manual/reference/collation/
    )annotations)AnyMappingOptionalUnion)commonc                  ,    e Zd ZdZdZ	 dZ	 dZ	 dZ	 dZy)CollationStrengthzd
    An enum that defines values for `strength` on a
    :class:`~pymongo.collation.Collation`.
                   N)	__name__
__module____qualname____doc__PRIMARY	SECONDARYTERTIARY
QUATERNARY	IDENTICAL     a/var/www/html/phonemate/phone_mate_backend/venv/lib/python3.12/site-packages/pymongo/collation.pyr
   r
      s1    
 G4I*H'J;INr   r
   c                      e Zd ZdZdZ	 dZy)CollationAlternateze
    An enum that defines values for `alternate` on a
    :class:`~pymongo.collation.Collation`.
    znon-ignorableshiftedN)r   r   r   r   NON_IGNORABLESHIFTEDr   r   r   r   r   0   s    
 $M@Gr   r   c                      e Zd ZdZdZ	 dZy)CollationMaxVariablezh
    An enum that defines values for `max_variable` on a
    :class:`~pymongo.collation.Collation`.
    punctspaceN)r   r   r   r   PUNCTSPACEr   r   r   r"   r"   C   s    
 E2E#r   r"   c                       e Zd ZdZdZ	 dZ	 dZy)CollationCaseFirstzf
    An enum that defines values for `case_first` on a
    :class:`~pymongo.collation.Collation`.
    upperloweroffN)r   r   r   r   UPPERLOWEROFFr   r   r   r(   r(   P   s!    
 E*E*
C3r   r(   c                      e Zd ZdZdZ	 	 	 	 	 	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
dZedd       ZddZddZ	ddZ
y)	Collationa{
  Collation

    :Parameters:
      - `locale`: (string) The locale of the collation. This should be a string
        that identifies an `ICU locale ID` exactly. For example, ``en_US`` is
        valid, but ``en_us`` and ``en-US`` are not. Consult the MongoDB
        documentation for a list of supported locales.
      - `caseLevel`: (optional) If ``True``, turn on case sensitivity if
        `strength` is 1 or 2 (case sensitivity is implied if `strength` is
        greater than 2). Defaults to ``False``.
      - `caseFirst`: (optional) Specify that either uppercase or lowercase
        characters take precedence. Must be one of the following values:

          * :data:`~CollationCaseFirst.UPPER`
          * :data:`~CollationCaseFirst.LOWER`
          * :data:`~CollationCaseFirst.OFF` (the default)

      - `strength`: (optional) Specify the comparison strength. This is also
        known as the ICU comparison level. This must be one of the following
        values:

          * :data:`~CollationStrength.PRIMARY`
          * :data:`~CollationStrength.SECONDARY`
          * :data:`~CollationStrength.TERTIARY` (the default)
          * :data:`~CollationStrength.QUATERNARY`
          * :data:`~CollationStrength.IDENTICAL`

        Each successive level builds upon the previous. For example, a
        `strength` of :data:`~CollationStrength.SECONDARY` differentiates
        characters based both on the unadorned base character and its accents.

      - `numericOrdering`: (optional) If ``True``, order numbers numerically
        instead of in collation order (defaults to ``False``).
      - `alternate`: (optional) Specify whether spaces and punctuation are
        considered base characters. This must be one of the following values:

          * :data:`~CollationAlternate.NON_IGNORABLE` (the default)
          * :data:`~CollationAlternate.SHIFTED`

      - `maxVariable`: (optional) When `alternate` is
        :data:`~CollationAlternate.SHIFTED`, this option specifies what
        characters may be ignored. This must be one of the following values:

          * :data:`~CollationMaxVariable.PUNCT` (the default)
          * :data:`~CollationMaxVariable.SPACE`

      - `normalization`: (optional) If ``True``, normalizes text into Unicode
        NFD. Defaults to ``False``.
      - `backwards`: (optional) If ``True``, accents on characters are
        considered from the back of the word to the front, as it is done in some
        French dictionary ordering traditions. Defaults to ``False``.
      - `kwargs`: (optional) Keyword arguments supplying any additional options
        to be sent with this Collation object.

    .. versionadded: 3.4

    )
__documentNc
                   t        j                  d|      }d|i| _        |#t        j                  d|      | j                  d<   |#t        j                  d|      | j                  d<   |#t        j                  d|      | j                  d<   |#t        j                  d|      | j                  d<   |#t        j                  d|      | j                  d<   |#t        j                  d|      | j                  d<   |#t        j                  d|      | j                  d<   |	#t        j                  d	|	      | j                  d	<   | j                  j                  |
       y )
Nlocale	caseLevel	caseFirststrengthnumericOrdering	alternatemaxVariablenormalization	backwards)r   validate_string_Collation__documentvalidate_booleanvalidate_integerupdate)selfr3   r4   r5   r6   r7   r8   r9   r:   r;   kwargss              r   __init__zCollation.__init__   sJ    ''&9+3V*< +1+B+B;PY+ZDOOK( +1+A+A+y+YDOOK(*0*A*A*h*WDOOJ'&171H1H!?2DOO-.  +1+A+A+y+YDOOK("-3-C-CMS^-_DOOM*$/5/F/F0DOOO,  +1+B+B;PY+ZDOOK(v&r   c                6    | j                   j                         S )zThe document representation of this collation.

        .. note::
          :class:`Collation` is immutable. Mutating the value of
          :attr:`document` does not mutate this :class:`Collation`.
        )r=   copy)rA   s    r   documentzCollation.document   s     ##%%r   c                n    | j                   dj                  dj                  fdD                    S )NzCollation({})z, c              3  2   K   | ]  }| d |     yw)=Nr   ).0keyrF   s     r   	<genexpr>z%Collation.__repr__.<locals>.<genexpr>   s$     /_V^s3%q#8I0JV^s   )rF   formatjoin)rA   rF   s    @r   __repr__zCollation.__repr__   s-    ==%%dii/_V^/_&_``r   c                `    t        |t              r| j                  |j                  k(  S t        S N)
isinstancer0   rF   NotImplementedrA   others     r   __eq__zCollation.__eq__   s%    eY'==ENN22r   c                    | |k(   S rQ   r   rT   s     r   __ne__zCollation.__ne__   s    5=  r   )NNNNNNNN)r3   strr4   Optional[bool]r5   Optional[str]r6   zOptional[int]r7   rZ   r8   r[   r9   r[   r:   rZ   r;   rZ   rB   r   returnNone)r\   zdict[str, Any])r\   rY   )rU   r   r\   bool)r   r   r   r   	__slots__rC   propertyrF   rO   rV   rX   r   r   r   r0   r0   `   s    8t  I
 %)#'"&*.#'%)(,$(#'#' "#' !	#'
  #' (#' !#' ##' &#' "#' #' 
#'J & &a
!r   r0   c                z    | y t        | t              r| j                  S t        | t              r| S t	        d      )NzFcollation must be a dict, an instance of collation.Collation, or None.)rR   r0   rF   dict	TypeError)values    r   validate_collation_or_nonere      s;     }%#~~%
\
]]r   N)rd   z-Optional[Union[Mapping[str, Any], Collation]]r\   zOptional[dict[str, Any]])r   
__future__r   typingr   r   r   r   pymongor   r
   r   r"   r(   r0   re   r   r   r   <module>ri      sg    # 0 0 O O, &
$ 
$4 4 v! v!r	^8	^	^r   