
    k"g3                         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      M/var/www/html/djangosite/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                     |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)listnextr   StopIteration
IndexError)r    indexs     r   __getitem__zBaseChoiceIterator.__getitem__   sR    19: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+   r/   __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    r7   r8   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>/   s     N85!5J&Ns   )r   r7   anyr   r8   )r    r7   r!   s      r   r/   zBlankChoiceIterator.__iter__-   sL     T\\*Nu7MNN(((( )s$   AAA	AAAANr0   r1   r2   r3   r9   r/   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    rC   s     r   r9   zCallableChoiceIterator.__init__7   s	    	r#   c              #   R   K   t        | j                               E d {    y 7 wr   )r   rC   r.   s    r   r/   zCallableChoiceIterator.__iter__:   s     $TYY[111s   '%'Nr@   r   r#   r   r   r   4   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)r7   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%   rI   )django.db.models.enumsrL   r   r
   rO   rP   r7   r   itemsr   r   r?   r   r   r   	TypeError
ValueError)r=   rJ   rL   kvs        r   r   r   G   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 . . +
 
., 2/ 22 '( ,r#   