a
    vÜaû  ã                   @   s¼   d dl 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 jƒZdS )é    N)Úgreenletc                   @   s8   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZeZdS )Úgenletc                 O   s   || _ || _d | _d S ©N)ÚargsÚkwdsÚchild)Úselfr   r   © r	   úClib/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__N)	Ú__name__Ú
__module__Ú__qualname__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>.GenletN)r   r   r   r   r	   ©Úfuncr	   r
   ÚGenlet;   s   r%   )r   )r$   r%   r	   r#   r
   r%   :   s    r%   c                 c   s&   t | ƒD ]}| |d ¡ |V  qd S ©Nr   )ÚrangeÚappend©ÚnÚseenÚir	   r	   r
   Úg1B   s    r-   c                 C   s(   t | ƒD ]}| |d ¡ t|ƒ qd S r&   )r'   r(   r"   r)   r	   r	   r
   Úg2H   s    r.   c                 C   s   t | ƒ d S r   ©r"   )r,   r	   r	   r
   ÚnestedP   s    r0   c                 C   s(   t | ƒD ]}| |d ¡ t|ƒ qd S r&   )r'   r(   r0   r)   r	   r	   r
   Úg3T   s    r1   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
    
r5   c                    sH   t | ƒdkr<| D ](‰ ‡ fdd„t‡ fdd„| D ƒƒD ƒ qnt| ƒ d S )Nr   c                    s   g | ]}t ˆ g| ƒ‘qS r	   r/   )Ú.0Úp©Úer	   r
   Ú
<listcomp>h   ó    zperms.<locals>.<listcomp>c                    s   g | ]}|ˆ kr|‘qS r	   r	   )r6   Úxr8   r	   r
   r:   h   r;   )ÚlenÚpermsr"   )Úlr	   r8   r
   r>   d   s    (r>   c                 C   s*   t d| ƒD ]}t|ƒ t|| dƒ q
d S )Nr   é   )r'   r"   r3   r	   r	   r
   Úgr1n   s    rA   c                 C   s   t | ƒD ]}| |¡ qd S r   )rA   r(   )r*   r+   r4   r	   r	   r
   Úgr2v   s    rB   c                   @   s4   e Zd Zdd„ Z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   r@   é   é   é	   rE   é   )rB   r(   ÚassertEqual©r   r+   r4   r	   r	   r
   Útest_layered_genlets~   s    z)NestedGeneratorTests.test_layered_genletsc                 C   sæ   t ttdƒƒƒ}t|ƒ}|  t|ƒd¡ |  g d¢|v ¡ |  g d¢|v ¡ g }tt ttdƒƒƒt ttdƒƒƒƒD ]}| |¡ qr|  |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 )NrE   é   )r   r   r@   rF   )rF   r@   r   r   rF   )r   r   r@   )r   r   rF   r@   )r   r@   r   )r   r@   r   rF   )r   r   r@   )r   r@   rF   r   )r   r@   r   )r   rF   r   r@   )r@   r   r   )r   rF   r@   r   )r@   r   r   )r>   Úlistr'   rI   r=   Z
assertTrueÚzipr(   )r   Z	gen_permsÚpermutationsÚresr4   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 )NrF   rD   )
r   r   r@   r   rF   r@   rE   rF   rD   rE   )r-   r.   r1   r'   r(   rI   )r   r!   r+   ÚkÚ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 )NrD   )r2   r(   rJ   r	   r	   r
   Útest_nested_genlets¢   s    z(NestedGeneratorTests.test_nested_genletsN)r   r   r   rK   rQ   rT   rV   rW   r	   r	   r	   r
   rC   }   s
   rC   )r   )Zunittestr   r   r"   r%   r-   r.   r0   r1   r5   r2   r>   rA   rB   ZTestCaserC   r	   r	   r	   r
   Ú<module>   s&   '
