a
    ҏi                     @   s   d dl m Z  ddlmZ ddlmZ G dd de ZdddZd	d
 Zdd Zdd Z	ee	Z	dd Z
dd ZeeZdd ZeeZdd ZeeZdd ZeeZdd ZeeZG dd deZdS )    )greenlet   )TestCase)fails_leakcheckc                   @   s<   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZeZ	dS )genletNc                 O   s   || _ || _d | _d S N)argskwdschild)selfr   r	    r   T/home/Claro/venv/lib/python3.9/site-packages/greenlet/tests/test_generator_nested.py__init__   s    zgenlet.__init__c                 C   s   | j \}|| ji | j d S r   )fnr   r	   )r   r   r   r   r   run   s    z
genlet.runc                 C   s   | S r   r   r   r   r   r   __iter__   s    zgenlet.__iter__c                 C   s
   || _ d S r   )r
   )r   r
   r   r   r   	set_child   s    zgenlet.set_childc                 C   sP   | j r.| j }|j r$|}|j }d |_ q| }nt | _|  }| rH|S td S r   )r
   switchr   
getcurrentparentStopIteration)r   r
   tmpresultr   r   r   __next__   s    

zgenlet.__next__)
__name__
__module____qualname__r   r   r   r   r   r   nextr   r   r   r   r      s   r   c                 C   sT   t  }|dkrFt|ts"td|dkr6|j| |j}|d8 }q||  d S )Nr   zyield outside a genletr   )r   r   
isinstancer   RuntimeErrorr   r   r   )valuelevelgr   r   r   Yield-   s    

r$   c                    s   G  fdddt }|S )Nc                       s   e Zd Z fZdS )zGenlet.<locals>.TheGenletN)r   r   r   r   r   funcr   r   	TheGenlet<   s   r'   )r   )r&   r'   r   r%   r   Genlet;   s    r(   c                 c   s&   t | D ]}||d  |V  qd S Nr   )rangeappendnseenir   r   r   g1C   s    r0   c                 C   s(   t | D ]}||d  t| qd S r)   )r*   r+   r$   r,   r   r   r   g2I   s    r1   c                 C   s   t |  d S r   r$   )r/   r   r   r   nestedQ   s    r3   c                 C   s(   t | D ]}||d  t| qd S r)   )r*   r+   r3   r,   r   r   r   g3U   s    r4   c                 C   s2   | dkrd S t | d D ]}t| qt|  d S )Nr   r   )axr$   r-   iir   r   r   a\   s
    
r8   c                    sP   t | dkrD| D ]0  fddt fdd| D D }|sJ qnt|  d S )Nr   c                    s   g | ]}t  g| qS r   r2   ).0per   r   
<listcomp>i       zperms.<locals>.<listcomp>c                    s   g | ]}| kr|qS r   r   )r9   xr;   r   r   r=   i   r>   )lenpermsr$   )lr?   r   r;   r   rA   e   s
    $rA   c                 C   s*   t d| D ]}t| t|| d q
d S )Nr      )r*   r$   r6   r   r   r   gr1p   s    rD   c                 C   s   t | D ]}|| qd S r   )rD   r+   )r-   r.   r7   r   r   r   gr2x   s    rE   c                   @   s8   e Zd Zdd Zedd Zdd Zdd Zd	d
 ZdS )NestedGeneratorTestsc                 C   s2   g }t d|D ]}|| q| |g d d S )N   )r   r   rC         	   rH      )rE   r+   assertEqualr   r.   r7   r   r   r   test_layered_genlets   s    z)NestedGeneratorTests.test_layered_genletsc                 C   s   t ttd}t|}| t|d | g d| | g d| g }tt ttdt ttdD ]}|| qn| |g dg dfg dg dfg d	g d
fg dg dfg dg dfg dg dfg d S )NrH      )r   r   rC   rI   )rI   rC   r   r   rI   )r   r   rC   )r   r   rI   rC   )r   rC   r   )r   rC   r   rI   )r   r   rC   )r   rC   rI   r   )r   rC   r   )r   rI   r   rC   )rC   r   r   )r   rI   rC   r   )rC   r   r   )rA   listr*   rL   r@   ZassertInzipr+   )r   Z	gen_permspermutationsresr7   r   r   r   test_permutations   s    &z&NestedGeneratorTests.test_permutationsc                 C   sT   t ttfD ]D}g }tdD ]}|d|D ]}|| q(q| |dg d  q
d S )NrI   rG   )
r   r   rC   r   rI   rC   rH   rI   rG   rH   )r0   r1   r4   r*   r+   rL   )r   r#   r.   _jr   r   r   test_genlet_simple   s    z'NestedGeneratorTests.test_genlet_simplec                 C   s$   zt d W n ty   Y n0 d S )N
   )r$   r    r   r   r   r   test_genlet_bad   s    z$NestedGeneratorTests.test_genlet_badc                 C   s    g }t dD ]}|| qd S )NrG   )r5   r+   rM   r   r   r   test_nested_genlets   s    z(NestedGeneratorTests.test_nested_genletsN)	r   r   r   rN   r   rT   rW   rY   rZ   r   r   r   r   rF      s   
rF   N)r   )r    r   Z	leakcheckr   r   r$   r(   r0   r1   r3   r4   r8   r5   rA   rD   rE   rF   r   r   r   r   <module>   s(   '
