
    ii5                    "   d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
 d dlmZmZmZmZmZmZ d dlmZ d dlmZ  G d de          Z ed	          Z G d
 deee                   Z ed          Z G d deee                   ZddZddZdS )    )annotations)ABCabstractmethod)CallableIterableIteratorMappingMutableSequence)AbstractSetAnyGenericSetTypeVarcast)	ParamSpec)ParameterExceptionc                  B    e Zd ZdZedd            Zed	d            ZdS )
CoverageContainerBasea  Base class for coverage container implementations.

    A coverage container is a wrapper providing values for a particular field. Coverage containers return field values and
    track a "done" state to indicate that all coverage examples have been generated.
    returnr   c                    dS )zProvide the next valueN selfs    x/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/polyfactory/utils/model_coverage.py
next_valuez CoverageContainerBase.next_value   	     	    boolc                    dS )zEIndicate if this container has provided every coverage example it hasNr   r   s    r   is_donezCoverageContainerBase.is_done   r   r   N)r   r   r   r   )__name__
__module____qualname____doc__r   r   r    r   r   r   r   r      s^             ^    ^  r   r   Tc                  2    e Zd ZdZddZddZdd
ZddZdS )CoverageContainera  A coverage container that wraps a collection of values.

    When calling ``next_value()`` a greater number of times than the length of the given collection will cause duplicate
    examples to be returned (wraps around).

    If there are any coverage containers within the given collection, the values from those containers are essentially merged
    into the parent container.
    	instancesIterable[T]r   Nonec                l    d| _         t          |          | _        | j        sd}t          |          d S )Nr   z1CoverageContainer must have at least one instance)_poslist
_instances
ValueError)r   r)   msgs      r   __init__zCoverageContainer.__init__+   s;    	y// 	"ECS//!	" 	"r   r&   c                .   | j         | j        t          | j                   z           }t          |t                    rH|                                }|                                r| xj        dz  c_        t          d|          S | xj        dz  c_        |S )N   r&   )r/   r-   len
isinstancer   r   r    r   )r   valueresults      r   r   zCoverageContainer.next_value2   s    	C,@,@ @Ae233 	%%%''F}} 		Q		V$$$		Q		r   r   c                <    | j         t          | j                  k    S N)r-   r5   r/   r   s    r   r    zCoverageContainer.is_done>   s    yC0000r   strc                B    d| j          d|                                  dS )NzCoverageContainer(instances=z
, is_done=))r/   r    r   s    r   __repr__zCoverageContainer.__repr__A   s%    ZdoZZZZZZr   N)r)   r*   r   r+   r   r&   r!   )r   r;   )r"   r#   r$   r%   r2   r   r    r>   r   r   r   r(   r(   !   st         " " " "
 
 
 
1 1 1 1[ [ [ [ [ [r   r(   Pc                  *    e Zd ZdZdd
ZddZddZdS )CoverageContainerCallablezA coverage container that wraps a callable.

    When calling ``next_value()`` the wrapped callable is called to provide a value.
    funcCallable[P, T]argsP.argskwargsP.kwargsr   r+   c                0    || _         || _        || _        d S r:   )_func_args_kwargs)r   rC   rE   rG   s       r   r2   z"CoverageContainerCallable.__init__N   s    

r   r&   c                    	  | j         | j        i | j        S # t          $ r }d| j         d}t	          |          |d }~ww xY w)NzUnsupported type: zJ

Either extend the providers map or add a factory function for this type.)rJ   rK   rL   	Exceptionr   )r   er1   s      r   r   z$CoverageContainerCallable.next_valueS   so    	14:tz:T\::: 	1 	1 	1 Btz  B  B  BC$S))q0	1s    
A>Ar   c                    dS NTr   r   s    r   r    z!CoverageContainerCallable.is_doneZ   s    tr   N)rC   rD   rE   rF   rG   rH   r   r+   r?   r!   )r"   r#   r$   r%   r2   r   r    r   r   r   rB   rB   H   sZ         
   
1 1 1 1     r   rB   
unresolvedr   r   tuple[Any, bool]c                4   t          | t                    r<t          |                                           \  }}||                                 o|fS t          | t
                    rQi }d}|                                 D ]4\  }}t          |          \  }}t          |          \  }}	|||<   |o|o|	}5||fS t          | t          t          f          r\g }d}| D ]-}t          |          \  }
}|	                    |
           |o|}.t          | t                    rt          |          }||fS t          | t                    rM t          |                       }d}| D ]-}t          |          \  }
}|                    |
           |o|}.||fS t          t          |           t                    rb t          |                       }d}g }| D ]-}t          |          \  }
}|	                    |
           |o|}.|                    |          |fS | dfS rQ   )r6   r   _resolve_nextr   r    r	   itemstupler
   appendr   typeadd
issubclassr   union)rR   r8   donedone_statuskeyr7   val_resolvedval_donekey_resolvedkey_doneresolvedresolved_valuess               r   rU   rU   ^   sl   *344 5$Z%:%:%<%<==z))++444*g&& #$**,, 	@ 	@JC%25%9%9"L(%23%7%7"L(#/F< %?(?xKK{""*uo677 	# 	/ 	/E*511NHdMM(###%.$KKj%(( 	#6]]F{""*c"" #!j!!## 	/ 	/E*511NHdJJx   %.$KK{""$z""K00 :!j!!## 	/ 	/E*511NHd""8,,,%.$KK||O,,k99tr   rG   dict[str, Any]Iterator[dict[str, Any]]c              #  F   K   d}|st          |           \  }}|V  |d S d S )NF)rU   )rG   r]   rd   s      r   resolve_kwargs_coverageri      sK      D &v..$      r   N)rR   r   r   rS   )rG   rf   r   rg   )
__future__r   abcr   r   collections.abcr   r   r   r	   r
   typingr   r   r   r   r   r   typing_extensionsr   polyfactory.exceptionsr   r   r&   r(   r@   rB   rU   ri   r   r   r   <module>rp      s   " " " " " " # # # # # # # # R R R R R R R R R R R R R R @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ' ' ' ' ' ' 5 5 5 5 5 5    C   $ GCLL![ ![ ![ ![ ![-wqz ![ ![ ![H IcNN     5wqz   ,- - - -`     r   