
    hj                         d dl mZmZmZmZ d dlmZmZmZ d dl	m
Z
 g dZ G d d      Z G d de      Z G d	 d
e      Zd Zd ddZy)    )CallableIterableIteratorMapping)isliceteezip_longest)Promise)BaseChoiceIteratorBlankChoiceIteratorCallableChoiceIteratorflatten_choicesnormalize_choicesc                   .     e Zd ZdZ fdZd Zd Z xZS )r   z*Base class for lazy iterators for choices.c           	          t        |t              r&t        d t        | |t	                     D              S t
        |   |      S )Nc              3   ,   K   | ]  \  }}||k(    y wN ).0abs      Q/var/www/django_project/virt/lib/python3.12/site-packages/django/utils/choices.py	<genexpr>z,BaseChoiceIterator.__eq__.<locals>.<genexpr>   s     W$!QqAvWs   )	fillvalue)
isinstancer   allr	   objectsuper__eq__)selfother	__class__s     r   r   zBaseChoiceIterator.__eq__   s8    eX&W+dEVX*VWWWw~e$$    c                     t        |t              s|dk  rt        |       |   S 	 t        t	        | ||dz               S # t
        $ r t        d      d w xY w)Nr      zindex out of range)r   slicelistnextr   StopIteration
IndexError)r    indexs     r   __getitem__zBaseChoiceIterator.__getitem__   s]    eU#uqy :e$$	=tUEAI677 	=12<	=s	   > Ac                     t        d      )Nz8BaseChoiceIterator subclasses must implement __iter__().)NotImplementedErrorr    s    r   __iter__zBaseChoiceIterator.__iter__!   s    !F
 	
r#   )__name__
__module____qualname____doc__r   r,   r0   __classcell__)r"   s   @r   r   r      s    4%
=
r#   r   c                       e Zd ZdZd Zd Zy)r   z)Iterator to lazily inject a blank choice.c                      || _         || _        y r   )choicesblank_choice)r    r8   r9   s      r   __init__zBlankChoiceIterator.__init__*   s    (r#   c              #      K   t        | j                        \  }}t        d t        |      D              s| j                  E d {    |E d {    y 7 7 w)Nc              3   *   K   | ]  \  }}|d v   yw)) NNr   )r   value_s      r   r   z/BlankChoiceIterator.__iter__.<locals>.<genexpr>0   s     N85!5J&Ns   )r   r8   anyr   r9   )r    r8   r!   s      r   r0   zBlankChoiceIterator.__iter__.   sL     T\\*Nu7MNN(((( )s$   AAA	AAAANr1   r2   r3   r4   r:   r0   r   r#   r   r   r   '   s    3)r#   r   c                       e Zd ZdZd Zd Zy)r   z=Iterator to lazily normalize choices generated by a callable.c                     || _         y r   )func)r    rD   s     r   r:   zCallableChoiceIterator.__init__8   s	    	r#   c              #   R   K   t        | j                               E d {    y 7 wr   )r   rD   r/   s    r   r0   zCallableChoiceIterator.__iter__;   s     $TYY[111s   '%'NrA   r   r#   r   r   r   5   s    G2r#   r   c              #   z   K   | xs dD ],  \  }}t        |t        t        f      r|E d{    '||f . y7 w)z*Flatten choices by removing nested values.r   N)r   r'   tuple)r8   value_or_grouplabel_or_nesteds      r   r   r   ?   sC     +2=b 2'oe}5&&& /11	2&s   (;9;depthc          
      ~   ddl m} | xxt        d x\     | S  xt        d x\     | S  xt        d x\     | S  xt
        d x\     | S   x|d x\    | j                  S  xt        d x\   |dk  r | j                         } nu xt        d x	\   |dk  r na xt        d x\   |dk  rt        d | D              s n; xt        d x\   |dk(  r t        |       S  t        d x\   |dk  r	 |        } n 	 | S 	 | D cg c]  \  }}|t        ||dz         f c}}S c c}}w # t        t         f$ r | cY S w xY w)z=Normalize choices values consistently for fields and widgets.r   )ChoicesTyper      c              3   R   K   | ]  }t        |t        t        t        f       ! y wr   )r   r
   bytesstr)r   xs     r   r   z$normalize_choices.<locals>.<genexpr>^   s#      1
56Jq7E3/01
s   %'r%   rJ   )django.db.models.enumsrM   r   r
   rP   rQ   r8   r   itemsr   r   r@   r   r   r   	TypeError
ValueError)r>   rK   rM   kvs        r   r   r   H   st    3
?!!? L	 "IGI? L	 %.? L	 18%#%? L	 ;@?
 []==   WY%!)YKKME XZ519Z
   XZ519S 1
:?1
 .
Z
   XZ5A:Z)%00  Z519GE LGLMtq!%auqy9:MMMz" 
 s$   =D( D"D( "D( (D<;D<N)collections.abcr   r   r   r   	itertoolsr   r   r	   django.utils.functionalr
   __all__r   r   r   r   r   r   r#   r   <module>r]      sN    A A . . +
 
0, 2/ 22 '( ,r#   