o
    ÕÜg†  ã                   @   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   ú^/var/www/html/api-tag/env/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*   
'