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   úT/var/www/html/premium_crap/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    	
	