o
    {,hj                     @   s   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 dZG dd deZG d	d
 d
eZdd Zd dddZdS )    )CallableIterableIteratorMapping)isliceteezip_longest)Promise)BaseChoiceIteratorBlankChoiceIteratorCallableChoiceIteratorflatten_choicesnormalize_choicesc                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )r
   z*Base class for lazy iterators for choices.c                    s4   t |trtdd t| |t dD S t |S )Nc                 s   s    | ]	\}}||kV  qd S N ).0abr   r   J/var/www/html/rh/venv/lib/python3.10/site-packages/django/utils/choices.py	<genexpr>       z,BaseChoiceIterator.__eq__.<locals>.<genexpr>)	fillvalue)
isinstancer   allr   objectsuper__eq__)selfother	__class__r   r   r      s   
zBaseChoiceIterator.__eq__c                 C   sN   t |ts	|dk rt| | S ztt| ||d W S  ty&   tdd w )Nr      zindex out of range)r   slicelistnextr   StopIteration
IndexError)r   indexr   r   r   __getitem__   s   
zBaseChoiceIterator.__getitem__c                 C   s   t d)Nz8BaseChoiceIterator subclasses must implement __iter__().)NotImplementedErrorr   r   r   r   __iter__!   s   zBaseChoiceIterator.__iter__)__name__
__module____qualname____doc__r   r(   r+   __classcell__r   r   r   r   r
      s
    
r
   c                   @       e Zd ZdZdd Zdd ZdS )r   z)Iterator to lazily inject a blank choice.c                 C   s   || _ || _d S r   )choicesblank_choice)r   r2   r3   r   r   r   __init__*   s   
zBlankChoiceIterator.__init__c                 c   s@    t | j\}}tdd t|D s| jE d H  |E d H  d S )Nc                 s   s    | ]	\}}|d v V  qdS )) NNr   )r   value_r   r   r   r   0   r   z/BlankChoiceIterator.__iter__.<locals>.<genexpr>)r   r2   anyr   r3   )r   r2   r   r   r   r   r+   .   s
   zBlankChoiceIterator.__iter__Nr,   r-   r.   r/   r4   r+   r   r   r   r   r   '   s    r   c                   @   r1   )r   z=Iterator to lazily normalize choices generated by a callable.c                 C   s
   || _ d S r   )func)r   r:   r   r   r   r4   8   s   
zCallableChoiceIterator.__init__c                 c   s    t |  E d H  d S r   )r   r:   r*   r   r   r   r+   ;   s   zCallableChoiceIterator.__iter__Nr9   r   r   r   r   r   5   s    r   c                 c   s<    | pdD ]\}}t |ttfr|E dH  q||fV  qdS )z*Flatten choices by removing nested values.r   N)r   r#   tuple)r2   value_or_grouplabel_or_nestedr   r   r   r   ?   s   r   depthc             	      sZ  ddl m} |   td r   | S   td r   | S   td r(   | S   td r3   | S    |d r?  | jS   td rP  dk rQ |  } nE  t	d r]  dk r^ n8  t
d rs  dk rttdd | D st n"  td r  dkr t| S  td r  dk r|  } n 	 | S z
 fdd| D W S  ttfy   |  Y S w )	z=Normalize choices values consistently for fields and widgets.r   )ChoicesTyper      c                 s   s     | ]}t |tttfV  qd S r   )r   r	   bytesstr)r   xr   r   r   r   ^   s    
z$normalize_choices.<locals>.<genexpr>c                    s$   g | ]\}}|t | d  dfqS )r!   r>   )r   )r   kvr>   r   r   
<listcomp>n   s   $ z%normalize_choices.<locals>.<listcomp>)django.db.models.enumsr@   r
   r	   rB   rC   r2   r   itemsr   r   r8   r   r   	TypeError
ValueError)r6   r?   r@   r   r>   r   r   H   sL   

r   N)collections.abcr   r   r   r   	itertoolsr   r   r   django.utils.functionalr	   __all__r
   r   r   r   r   r   r   r   r   <module>   s    	
	