o
    h                     @   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   W/var/www/html/venv/lib/python3.10/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 |_ |j s	| }n	t | _|  }| r&|S t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   sZ   t  }|dkr&t|tstd|dkr|j| |j}|d8 }|dks||  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   (   t | D ]}||d  t| qd S r)   )r*   r+   r$   r,   r   r   r   g2I      
r2   c                 C   s   t |  d S r   r$   )r/   r   r   r   nestedQ   s   r5   c                 C   r1   r)   )r*   r+   r5   r,   r   r   r   g3U   r3   r6   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
   
r:   c                    sR   t | dkr#| D ]  fddt fdd| D D }|s J qd S t|  d S )Nr   c                    s   g | ]	}t  g| qS r   r4   ).0per   r   
<listcomp>i   s    zperms.<locals>.<listcomp>c                    s   g | ]}| kr|qS r   r   )r;   xr=   r   r   r?   i   s    )lenpermsr$   )lr@   r   r=   r   rB   e   s   $
rB   c                 C   s*   t d| D ]}t| t|| d qd S )Nr      )r*   r$   r8   r   r   r   gr1p   s   rE   c                 C   s   t | D ]}|| qd S r   )rE   r+   )r-   r.   r9   r   r   r   gr2x   s   rF   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   rD         	   rI      )rF   r+   assertEqualr   r.   r9   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 ]}|| q7| |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 )NrI      )r   r   rD   rJ   )rJ   rD   r   r   rJ   )r   r   rD   )r   r   rJ   rD   )r   rD   r   )r   rD   r   rJ   )r   r   rD   )r   rD   rJ   r   )r   rD   r   )r   rJ   r   rD   )rD   r   r   )r   rJ   rD   r   )rD   r   r   )rB   listr*   rM   rA   assertInzipr+   )r   	gen_permspermutationsresr9   r   r   r   test_permutations   s   &z&NestedGeneratorTests.test_permutationsc                 C   sT   t ttfD ]"}g }tdD ]}|d|D ]}|| qq| |dg d  qd S )NrJ   rH   )
r   r   rD   r   rJ   rD   rI   rJ   rH   rI   )r0   r2   r6   r*   r+   rM   )r   r#   r.   _jr   r   r   test_genlet_simple   s   z'NestedGeneratorTests.test_genlet_simplec                 C   s$   zt d W d S  ty   Y d S w )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 )NrH   )r7   r+   rN   r   r   r   test_nested_genlets   s   z(NestedGeneratorTests.test_nested_genletsN)	r   r   r   rO   r   rW   rZ   r\   r]   r   r   r   r   rG      s    
rG   N)r   )r    r   	leakcheckr   r   r$   r(   r0   r2   r5   r6   r:   r7   rB   rE   rF   rG   r   r   r   r   <module>   s*   
'