o
    ÕèFh3  ã                   @   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   úM/var/www/html/loop/nvenv/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   sD   |dk r
t | ƒ| S ztt| ||d ƒƒW S  ty!   tdƒd ‚w )Nr   é   zindex out of range)Ú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   r1   r2   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   /   r   z/BlankChoiceIterator.__iter__.<locals>.<genexpr>)r   r1   Úanyr   r2   )r   r1   r   r   r   r   r*   -   s
   €zBlankChoiceIterator.__iter__N©r+   r,   r-   r.   r3   r*   r   r   r   r   r   &   s    r   c                   @   r0   )r   z=Iterator to lazily normalize choices generated by a callable.c                 C   s
   || _ d S r   )Úfunc)r   r9   r   r   r   r3   7   s   
zCallableChoiceIterator.__init__c                 c   s   � t |  ¡ ƒE d H  d S r   )r   r9   r)   r   r   r   r*   :   s   €zCallableChoiceIterator.__iter__Nr8   r   r   r   r   r   4   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)r1   Ú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>m   s   $ z%normalize_choices.<locals>.<listcomp>)Údjango.db.models.enumsr?   r
   r	   rA   rB   r1   r   Úitemsr   r   r7   r   r   Ú	TypeErrorÚ
ValueError)r5   r>   r?   r   r=   r   r   G   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    	
	