§
    ÈtºfòN  ã                   ór   — d Z ddlmZ ddlmZ ddlmZmZmZm	Z	 ddl
mZmZ ddl
mZ  G d„ d	e¦  «        Zd
S )z,
Tests for the public interface of Automat.
é    )Úreduce)ÚTestCase)ÚArgSpecÚ_getArgNamesÚ_getArgSpecÚ_filterArgsé   )ÚMethodicalMachineÚNoTransition)Ú_methodicalc                   ó„   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚMethodicalTestsz)
    Tests for L{MethodicalMachine}.
    c                 óä   —  G d„ dt           ¦  «        } |¦   «         }|                      |                     ¦   «         dg¦  «         |                      |                     ¦   «         dg¦  «         dS )a!  
        L{MethodicalMachine} provides a way for you to declare a state machine
        with inputs, outputs, and states as methods.  When you have declared an
        input, an output, and a state, calling the input method in that state
        will produce the specified output.
        c                   ó¬  — e Zd Z e¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Z	e 
                    d¬¦  «        d„ ¦   «         Ze 
                    ¦   «         d„ ¦   «         Ze                     eeeg¬¦  «         e                     eee	g¬¦  «         d	S )
ú7MethodicalTests.test_oneTransition.<locals>.Machinationc                 ó   — dS ©zan inputN© ©Úselfs    ú\/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/automat/_test/test_methodical.pyÚanInputz?MethodicalTests.test_oneTransition.<locals>.Machination.anInput   ó   € € € ó    c                 ó   — dS )z	an outputúan-output-valuer   r   s    r   ÚanOutputz@MethodicalTests.test_oneTransition.<locals>.Machination.anOutput!   s
   € ð )Ð(r   c                 ó   — dS )zanother outputúanother-output-valuer   r   s    r   ÚanotherOutputzEMethodicalTests.test_oneTransition.<locals>.Machination.anotherOutput&   s
   € ð .Ð-r   T©Úinitialc                 ó   — dS ©za stateNr   r   s    r   ÚanStatez?MethodicalTests.test_oneTransition.<locals>.Machination.anState+   r   r   c                 ó   — dS )zanother stateNr   r   s    r   ÚanotherStatezDMethodicalTests.test_oneTransition.<locals>.Machination.anotherState/   r   r   ©ÚenterÚoutputsN)Ú__name__Ú
__module__Ú__qualname__r
   ÚmachineÚinputr   Úoutputr   r    Ústater%   r'   Úuponr   r   r   ÚMachinationr      s  € € € € € Ø'Ð'Ñ)Ô)ˆGØ�]Š]‰_Œ_ðð ñ Œ_ðð �^Š^ÑÔð)ð )ñ Ôð)ð �^Š^ÑÔð.ð .ñ Ôð.ð �]Š] 4ˆ]Ñ(Ô(ðð ñ )Ô(ðð �]Š]‰_Œ_ð ð  ñ Œ_ð ð �LŠL˜¨¸x¸jˆLÑIÔIÐIØ×Ò˜g¨\Ø'4 oð ñ 7ô 7ð 7ð 7ð 7r   r3   r   r   N)ÚobjectÚassertEqualr   )r   r3   Úms      r   Útest_oneTransitionz"MethodicalTests.test_oneTransition   sƒ   € ð	7ð 	7ð 	7ð 	7ð 	7�&ñ 	7ô 	7ð 	7ð8 ˆK‰MŒMˆØ×Ò˜Ÿš™œÐ'8Ð&9Ñ:Ô:Ð:Ø×Ò˜Ÿš™œÐ'=Ð&>Ñ?Ô?Ð?Ð?Ð?r   c                 óZ  ‡— t          ¦   «         Š G ˆfd„dt          ¦  «        } |¦   «         }|                      t          ¦  «        5 }|j         ddd¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         |                      |j        ‰¦  «         dS )a4  
        L{MethodicalMachine} is an implementation detail.  If you attempt to
        access it on an instance of your class, you will get an exception.
        However, since tools may need to access it for the purposes of, for
        example, visualization, you may access it on the class itself.
        c                   ó   •— e Zd Z” ZdS )ú@MethodicalTests.test_machineItselfIsPrivate.<locals>.MachinationN)r+   r,   r-   r.   )ÚexpectedMachines   €r   r3   r:   D   s   ø€ € € € € Ø%ˆGˆGˆGr   r3   Nz-MethodicalMachine is an implementation detail)	r
   r4   ÚassertRaisesÚAttributeErrorr.   ÚassertInÚstrÚ	exceptionÚassertIs)r   r3   ÚmachinationÚcmr;   s       @r   Útest_machineItselfIsPrivatez+MethodicalTests.test_machineItselfIsPrivate<   s  ø€ õ ,Ñ-Ô-ˆð	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&�&ñ 	&ô 	&ð 	&à!�k‘m”mˆØ×Ò�~Ñ.Ô.ð 	 °"ØÔÐð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 à�ŠÐEÝ˜"œ,Ñ'Ô'ñ	)ô 	)ð 	)à�Š�kÔ)¨?Ñ;Ô;Ð;Ð;Ð;s   Á	AÁA!Á$A!c                 óª  —  G d„ dt           ¦  «        } |¦   «         }|                     ¦   «          |                      |j        d¦  «          |¦   «         }|                      t
          ¦  «        5 }|j         ddd¦  «         n# 1 swxY w Y   |                      |j        d¦  «         |                      dt          |j	        ¦  «        ¦  «         dS )au  
        One of the benefits of using a state machine is that your output method
        implementations don't need to take invalid state transitions into
        account - the methods simply won't be called.  This property would be
        broken if client code called output methods directly, so output methods
        are not directly visible under their names.
        c                   ó
  — e Zd Z e¦   «         ZdZe                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Z	e 
                    d¬¦  «        d„ ¦   «         Z
e
                     ee
e	g¬¦  «         dS )	ú;MethodicalTests.test_outputsArePrivate.<locals>.Machinationr   c                 ó   — dS r   r   r   s    r   r   zCMethodicalTests.test_outputsArePrivate.<locals>.Machination.anInputY   r   r   c                 ó&   — | xj         dz  c_         d S ©Né   )Úcounterr   s    r   r   zDMethodicalTests.test_outputsArePrivate.<locals>.Machination.anOutput\   s   € à�” Ñ!�”��r   Tr!   c                 ó   — dS )za machine stateNr   r   s    r   r1   zAMethodicalTests.test_outputsArePrivate.<locals>.Machination.state_   r   r   r(   N)r+   r,   r-   r
   r.   rL   r/   r   r0   r   r1   r2   r   r   r   r3   rG   V   sª   € € € € € Ø'Ð'Ñ)Ô)ˆGØˆGØ�]Š]‰_Œ_ðð ñ Œ_ðà�^Š^ÑÔð"ð "ñ Ôð"à�]Š] 4ˆ]Ñ(Ô(ð"ð "ñ )Ô(ð"à�JŠJ�w e°h°ZˆJÑ@Ô@Ð@Ð@Ð@r   r3   rK   Nr   zlMachination.anOutput is a state-machine output method; to produce this output, call an input method instead.)
r4   r   r5   rL   r<   r=   r   r>   r?   r@   )r   r3   Úmach1Úmach2rC   s        r   Útest_outputsArePrivatez&MethodicalTests.test_outputsArePrivateN   s)  € ð	Að 	Að 	Að 	Að 	A�&ñ 	Aô 	Að 	Að �‘”ˆØ�Š‰ŒˆØ×Ò˜œ¨Ñ*Ô*Ð*Ø�‘”ˆØ×Ò�~Ñ.Ô.ð 	°"ØŒNˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×Ò˜œ¨Ñ*Ô*Ð*à�ŠðAå�”ÑÔñ	
ô 	
ð 	
ð 	
ð 	
s   Á1BÂB	ÂB	c                 óä   —  G d„ dt           ¦  «        } |¦   «         }|                      |                     ¦   «         dg¦  «         |                      |                     ¦   «         dg¦  «         dS )zw
        Two machines may co-exist happily on the same instance; they don't
        interfere with each other.
        c                   óú  — e Zd Z e¦   «         Z e¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Ze 	                    d¬¦  «        d„ ¦   «         Z
e 	                    d¬¦  «        d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Ze
                     ee
eg¦  «         e                     eeeg¦  «         d	S )
ú8MethodicalTests.test_multipleMachines.<locals>.MultiMachc                 ó   — dS )zinput ANr   r   s    r   ÚinputAz?MethodicalTests.test_multipleMachines.<locals>.MultiMach.inputA{   r   r   c                 ó   — dS )zinput BNr   r   s    r   ÚinputBz?MethodicalTests.test_multipleMachines.<locals>.MultiMach.inputB~   r   r   Tr!   c                 ó   — dS )z	initial ANr   r   s    r   ÚinitialAzAMethodicalTests.test_multipleMachines.<locals>.MultiMach.initialA�   r   r   c                 ó   — dS )z	initial BNr   r   s    r   ÚinitialBzAMethodicalTests.test_multipleMachines.<locals>.MultiMach.initialB„   r   r   c                 ó   — dS ©NÚAr   r   s    r   ÚoutputAz@MethodicalTests.test_multipleMachines.<locals>.MultiMach.outputA‡   ó   € à�sr   c                 ó   — dS ©NÚBr   r   s    r   ÚoutputBz@MethodicalTests.test_multipleMachines.<locals>.MultiMach.outputBŠ   r`   r   N)r+   r,   r-   r
   ÚaÚbr/   rU   rW   r1   rY   r[   r0   r_   rd   r2   r   r   r   Ú	MultiMachrS   w   s0  € € € € € Ø!Ð!Ñ#Ô#ˆAØ!Ð!Ñ#Ô#ˆAà�WŠW‰YŒYðð ñ ŒYðà�WŠW‰YŒYðð ñ ŒYðà�WŠW˜TˆWÑ"Ô"ðð ñ #Ô"ðà�WŠW˜TˆWÑ"Ô"ðð ñ #Ô"ðà�XŠX‰ZŒZðð ñ ŒZðà�XŠX‰ZŒZðð ñ ŒZðà�MŠM˜& (¨W¨IÑ6Ô6Ð6Ø�MŠM˜& (¨W¨IÑ6Ô6Ð6Ð6Ð6r   rg   r^   rc   N)r4   r5   rU   rW   )r   rg   Úmms      r   Útest_multipleMachinesz%MethodicalTests.test_multipleMachinesr   s   € ð
	7ð 	7ð 	7ð 	7ð 	7�ñ 	7ô 	7ð 	7ð2 ˆY‰[Œ[ˆØ×Ò˜Ÿš™œ s eÑ,Ô,Ð,Ø×Ò˜Ÿš™œ s eÑ,Ô,Ð,Ð,Ð,r   c                 óž   ‡— ddl Š G ˆfd„dt          ¦  «        } |¦   «         }|                      |                     ¦   «         d¦  «         dS )zR
        Outputs can be combined with the "collector" argument to "upon".
        r   Nc                   óL  •— e Zd Z e¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Ze 	                    d¬¦  «        d„ ¦   «         Z	e	 
                    ee	eegˆ fd„¬¦  «         d	S )
ú4MethodicalTests.test_collectOutputs.<locals>.Machinec                 ó   — dS r   r   r   s    r   r/   z:MethodicalTests.test_collectOutputs.<locals>.Machine.inputœ   r   r   c                 ó   — dS r]   r   r   s    r   r_   z<MethodicalTests.test_collectOutputs.<locals>.Machine.outputAŸ   r`   r   c                 ó   — dS rb   r   r   s    r   rd   z<MethodicalTests.test_collectOutputs.<locals>.Machine.outputB¢   r`   r   Tr!   c                 ó   — dS r$   r   r   s    r   r1   z:MethodicalTests.test_collectOutputs.<locals>.Machine.state¥   r   r   c                 ó.   •— t          ‰j        | ¦  «        S ©N)r   Úadd)ÚxÚoperators    €r   ú<lambda>z=MethodicalTests.test_collectOutputs.<locals>.Machine.<lambda>©   s   ø€ ­6°(´,ÀÑ+BÔ+B€ r   ©Ú	collectorN)r+   r,   r-   r
   r6   r/   r0   r_   rd   r1   r2   )ru   s   €r   ÚMachinerl   š   så   ø€ € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW‰YŒYðð ñ ŒYðà�XŠX‰ZŒZðð ñ ŒZðà�XŠX‰ZŒZðð ñ ŒZðà�WŠW˜TˆWÑ"Ô"ðð ñ #Ô"ðà�JŠJ�u˜e g¨wÐ%7Ø!BÐ!BÐ!BÐ!Bð ñ Dô Dð Dð Dð Dr   ry   ÚAB)ru   r4   r5   r/   )r   ry   r6   ru   s      @r   Útest_collectOutputsz#MethodicalTests.test_collectOutputs•   s}   ø€ ð 	ˆˆˆð	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	D•fñ 	Dô 	Dð 	Dð  ˆG‰IŒIˆØ×Ò˜Ÿš™œ DÑ)Ô)Ð)Ð)Ð)r   c                 ó"  —  G d„ dt           ¦  «        } |¦   «         }|                      t          ¦  «        5 }|                     ddd¦  «         ddd¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         dS )z>
        Input methods preserve their declared names.
        c                   óš   — e Zd Z e¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     d¬¦  «        d„ ¦   «         ZdS )ú-MethodicalTests.test_methodName.<locals>.Mechc                 ó   — dS r   r   r   s    r   ÚdeclaredInputNamez?MethodicalTests.test_methodName.<locals>.Mech.declaredInputName´   r   r   Tr!   c                 ó   — dS )r1   Nr   r   s    r   ÚaStatez4MethodicalTests.test_methodName.<locals>.Mech.aState·   r   r   N)	r+   r,   r-   r
   r6   r/   r€   r1   r‚   r   r   r   ÚMechr~   ²   sk   € € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW‰YŒYðð ñ ŒYðà�WŠW˜TˆWÑ"Ô"ðð ñ #Ô"ðð ð r   rƒ   ÚtooÚmanyÚ	argumentsNr€   )r4   r<   Ú	TypeErrorr€   r>   r?   r@   )r   rƒ   r6   rC   s       r   Útest_methodNamezMethodicalTests.test_methodName®   sÜ   € ð	ð 	ð 	ð 	ð 	•6ñ 	ô 	ð 	ð ˆD‰FŒFˆØ×Ò�yÑ)Ô)ð 	<¨RØ×Ò  v¨{Ñ;Ô;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<à�ŠÐ)­3¨r¬|Ñ+<Ô+<Ñ=Ô=Ð=Ð=Ð=s   ¸AÁA Á#A c                 óÊ   —  G d„ dt           ¦  «        } |¦   «         }|                      |                     d¦  «        dg¦  «         |                      |j        d¦  «         dS )zW
        If an input takes an argument, it will pass that along to its output.
        c                   ó  — e Zd Z e¦   «         Ze                     ¦   «         dd„¦   «         Ze                     d¬¦  «        d„ ¦   «         Ze                     ¦   «         dd„¦   «         Ze                     eeeg¦  «         dS )	ú:MethodicalTests.test_inputWithArguments.<locals>.MechanismrK   c                 ó   — dS r   r   ©r   rt   Úys      r   r/   z@MethodicalTests.test_inputWithArguments.<locals>.Mechanism.inputÆ   r   r   Tr!   c                 ó   — dS r$   r   r   s    r   r1   z@MethodicalTests.test_inputWithArguments.<locals>.Mechanism.stateÉ   r   r   c                 ó   — || _         ||z   S rr   ©Ú_xr�   s      r   r0   zAMethodicalTests.test_inputWithArguments.<locals>.Mechanism.outputÌ   s   € à�”Ø˜1‘u�r   N©rK   )	r+   r,   r-   r
   r6   r/   r1   r0   r2   r   r   r   Ú	Mechanismr‹   Ä   s¬   € € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW‰YŒYðð ð ñ ŒYðà�WŠW˜TˆWÑ"Ô"ðð ñ #Ô"ðà�XŠX‰ZŒZðð ð ñ ŒZðð �JŠJ�u˜e f XÑ.Ô.Ð.Ð.Ð.r   r”   é   é   N)r4   r5   r/   r’   ©r   r”   r6   s      r   Útest_inputWithArgumentsz'MethodicalTests.test_inputWithArgumentsÀ   sy   € ð	/ð 	/ð 	/ð 	/ð 	/�ñ 	/ô 	/ð 	/ð ˆI‰KŒKˆØ×Ò˜Ÿš ™œ a SÑ)Ô)Ð)Ø×Ò˜œ˜qÑ!Ô!Ð!Ð!Ð!r   c                 óP  —  G d„ dt           ¦  «        } |¦   «         }|                      |                     d¦  «        g d¢¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |                     d¬¦  «        g d¢¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |                     d	d¦  «        g d
¢¦  «         |                      |j        d	¦  «         |                      |j        d¦  «         |                      |                     dd¬¦  «        g d¢¦  «         |                      |j        d¦  «         |                      |j        d¦  «         dS )z@
        Inputs pass arguments that output will accept.
        c                   ó~  — e Zd Z e¦   «         Ze                     ¦   «         d
d„¦   «         Ze                     d¬¦  «        d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Z	e                     ¦   «         d„ ¦   «         Z
e                     eeee	e
g¦  «         d	S )úCMethodicalTests.test_outputWithSubsetOfArguments.<locals>.MechanismrK   c                 ó   — dS r   r   r�   s      r   r/   zIMethodicalTests.test_outputWithSubsetOfArguments.<locals>.Mechanism.inputÝ   r   r   Tr!   c                 ó   — dS r$   r   r   s    r   r1   zIMethodicalTests.test_outputWithSubsetOfArguments.<locals>.Mechanism.stateà   r   r   c                 ó   — || _         |S rr   r‘   )r   rt   s     r   ÚoutputXzKMethodicalTests.test_outputWithSubsetOfArguments.<locals>.Mechanism.outputXã   ó   € à�”Ø�r   c                 ó   — || _         |S rr   )Ú_y)r   rŽ   s     r   ÚoutputYzKMethodicalTests.test_outputWithSubsetOfArguments.<locals>.Mechanism.outputYç   r    r   c                 ó   — d S rr   r   r   s    r   ÚoutputNoArgszPMethodicalTests.test_outputWithSubsetOfArguments.<locals>.Mechanism.outputNoArgsë   ó   € à�tr   Nr“   )r+   r,   r-   r
   r6   r/   r1   r0   rŸ   r£   r¥   r2   r   r   r   r”   r›   Û   sð   € € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW‰YŒYðð ð ñ ŒYðà�WŠW˜TˆWÑ"Ô"ðð ñ #Ô"ðà�XŠX‰ZŒZðð ñ ŒZðð �XŠX‰ZŒZðð ñ ŒZðð �XŠX‰ZŒZðð ñ ŒZðà�JŠJ�u˜e g¨w¸Ð%EÑFÔFÐFÐFÐFr   r”   r•   )r•   rK   NrK   r–   ©rt   )r–   rK   Né   )r¨   r•   Né   r	   )rŽ   )r©   r	   NN)r4   r5   r/   r’   r¢   r—   s      r   Ú test_outputWithSubsetOfArgumentsz0MethodicalTests.test_outputWithSubsetOfArguments×   s§  € ð	Gð 	Gð 	Gð 	Gð 	G�ñ 	Gô 	Gð 	Gð* ˆI‰KŒKˆð 	×Ò˜Ÿš ™œ \ \ \Ñ2Ô2Ð2Ø×Ò˜œ˜qÑ!Ô!Ð!Ø×Ò˜œ˜qÑ!Ô!Ð!ð 	×Ò˜Ÿš 1˜™œ | | |Ñ4Ô4Ð4Ø×Ò˜œ˜qÑ!Ô!Ð!Ø×Ò˜œ˜qÑ!Ô!Ð!ð 	×Ò˜Ÿš  A™œ¨¨¨Ñ5Ô5Ð5Ø×Ò˜œ˜qÑ!Ô!Ð!Ø×Ò˜œ˜qÑ!Ô!Ð!ð 	×Ò˜Ÿš  a˜™œ¨,¨,¨,Ñ7Ô7Ð7Ø×Ò˜œ˜qÑ!Ô!Ð!Ø×Ò˜œ˜qÑ!Ô!Ð!Ð!Ð!r   c                 óT  ‡ — t          j        ¦   «          t          j        ¦   «           G ˆ fd„dt          ¦  «        } G d„ dt          ¦  «        } |¦   «                              ¦   «           G d„ dt          ¦  «        } |¦   «                              ¦   «           G d„ dt          ¦  «        } |¦   «                              ¦   «           G d	„ d
t          ¦  «        } |¦   «                              ¦   «           G d„ dt          ¦  «        } |¦   «                              ¦   «          dS )zE
        The wrapped input function must have an empty body.
        c                   ó   •— e Zd Z e¦   «         Z”                      e¦  «        5 Ze                     ¦   «         d„ ¦   «         Zddd¦  «         n# 1 swxY w Y   ”  	                     e
ej        ¦  «        d¦  «         dS )úAMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.Mechanismc                 ó"   — t          ¦   «          dS r   ©Úlistr   s    r   r/   zGMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.Mechanism.input  s   € õ ‘F”F�F�F�Fr   Nzfunction body must be empty)r+   r,   r-   r
   r6   r<   Ú
ValueErrorrC   r/   r5   r?   r@   r   s   €r   r”   r­     sË   ø€ € € € € Ø!Ð!Ñ#Ô#ˆAØ×"Ò" :Ñ.Ô.ð °"Ø—’‘”ðð ñ ”ððð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
 ×Ò˜S˜S ¤Ñ.Ô.Ð0MÑNÔNÐNÐNÐNs   ¥AÁAÁAr”   c                   óÊ   — e Zd Z e¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     d¬¦  «        d„ ¦   «         Ze                     eeg ¬¦  «         dS )úNMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringc                 ó   — dS r   r   r   s    r   r/   zTMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstring.input  r   r   Tr!   c                 ó   — dS ©zstarting stateNr   r   s    r   ÚstartzTMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstring.start"  r   r   r(   N©	r+   r,   r-   r
   r6   r/   r1   r·   r2   r   r   r   ÚMechanismWithDocstringr³     s   € € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW‰YŒYðð ñ ŒYðà�WŠW˜TˆWÑ"Ô"ð!ð !ñ #Ô"ð!à�JŠJ�u E°2ˆJÑ6Ô6Ð6Ð6Ð6r   r¹   c                   óÊ   — e Zd Z e¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     d¬¦  «        d„ ¦   «         Ze                     eeg ¬¦  «         dS )úIMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithPassc                 ó   — d S rr   r   r   s    r   r/   zOMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithPass.input*  s   € à�r   Tr!   c                 ó   — dS r¶   r   r   s    r   r·   zOMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithPass.start-  r   r   r(   Nr¸   r   r   r   ÚMechanismWithPassr»   (  s   € € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW‰YŒYðð ñ ŒYðà�WŠW˜TˆWÑ"Ô"ð!ð !ñ #Ô"ð!à�JŠJ�u E°2ˆJÑ6Ô6Ð6Ð6Ð6r   r¾   c                   óÊ   — e Zd Z e¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     d¬¦  «        d„ ¦   «         Ze                     eeg ¬¦  «         dS )úUMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringAndPassc                 ó   — dS r   r   r   s    r   r/   z[MethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringAndPass.input5  s	   € ð �r   Tr!   c                 ó   — dS r¶   r   r   s    r   r·   z[MethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringAndPass.start9  r   r   r(   Nr¸   r   r   r   ÚMechanismWithDocstringAndPassrÀ   3  s�   € € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW‰YŒYðð ñ ŒYðð �WŠW˜TˆWÑ"Ô"ð!ð !ñ #Ô"ð!à�JŠJ�u E°2ˆJÑ6Ô6Ð6Ð6Ð6r   rÃ   c                   óÊ   — e Zd Z e¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     d¬¦  «        d„ ¦   «         Ze                     eeg ¬¦  «         dS )úLMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismReturnsNonec                 ó   — d S rr   r   r   s    r   r/   zRMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismReturnsNone.inputA  r¦   r   Tr!   c                 ó   — dS r¶   r   r   s    r   r·   zRMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismReturnsNone.startD  r   r   r(   Nr¸   r   r   r   ÚMechanismReturnsNonerÅ   ?  s   € € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW‰YŒYðð ñ ŒYðà�WŠW˜TˆWÑ"Ô"ð!ð !ñ #Ô"ð!à�JŠJ�u E°2ˆJÑ6Ô6Ð6Ð6Ð6r   rÈ   c                   óÊ   — e Zd Z e¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     d¬¦  «        d„ ¦   «         Ze                     eeg ¬¦  «         dS )ú\MethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringAndReturnsNonec                 ó   — dS r   r   r   s    r   r/   zbMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringAndReturnsNone.inputL  s	   € ð �tr   Tr!   c                 ó   — dS r¶   r   r   s    r   r·   zbMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringAndReturnsNone.startP  r   r   r(   Nr¸   r   r   r   Ú$MechanismWithDocstringAndReturnsNonerÊ   J  s�   € € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW‰YŒYðð ñ ŒYðð �WŠW˜TˆWÑ"Ô"ð!ð !ñ #Ô"ð!à�JŠJ�u E°2ˆJÑ6Ô6Ð6Ð6Ð6r   rÍ   N)r   Ú_emptyÚ
_docstringr4   r/   )r   r”   r¹   r¾   rÃ   rÈ   rÍ   s   `      r   Útest_inputFunctionsMustBeEmptyz.MethodicalTests.test_inputFunctionsMustBeEmpty  sÊ  ø€ õ 	ÔÑÔÐÝÔÑ Ô Ð ð	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	O�ñ 	Oô 	Oð 	Oð	7ð 	7ð 	7ð 	7ð 	7¥Vñ 	7ô 	7ð 	7ð 	ÐÑ Ô ×&Ò&Ñ(Ô(Ð(ð	7ð 	7ð 	7ð 	7ð 	7¥ñ 	7ô 	7ð 	7ð 	ÐÑÔ×!Ò!Ñ#Ô#Ð#ð		7ð 		7ð 		7ð 		7ð 		7­Fñ 		7ô 		7ð 		7ð 	&Ð%Ñ'Ô'×-Ò-Ñ/Ô/Ð/ð	7ð 	7ð 	7ð 	7ð 	7¥6ñ 	7ô 	7ð 	7ð 	ÐÑÔ×$Ò$Ñ&Ô&Ð&ð		7ð 		7ð 		7ð 		7ð 		7µ6ñ 		7ô 		7ð 		7ð 	-Ð,Ñ.Ô.×4Ò4Ñ6Ô6Ð6Ð6Ð6r   c                 ó2   ‡ —  G ˆ fd„dt           ¦  «        }dS )zœ
        All the argument lists of the outputs for a given input must match; if
        one does not the call to C{upon} will raise a C{TypeError}.
        c                   ó(  •— e Zd Z e¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Z	e 
                    ¦   «         d„ ¦   «         Z
”                      e¦  «        5 Ze
                     ee
ee	g¦  «         ddd¦  «         n# 1 swxY w Y   ”                      d eej        ¦  «        ¦  «         ”                      d eej        ¦  «        ¦  «         dS )ú;MethodicalTests.test_inputOutputMismatch.<locals>.Mechanismc                 ó   — dS r   r   ©r   re   s     r   ÚnameOfInputzGMethodicalTests.test_inputOutputMismatch.<locals>.Mechanism.nameOfInput^  r   r   c                 ó   — dS )zan output that matchesNr   rÕ   s     r   ÚoutputThatMatcheszMMethodicalTests.test_inputOutputMismatch.<locals>.Mechanism.outputThatMatchesa  r   r   c                 ó   — dS )zan output that doesn't matchNr   )r   rf   s     r   ÚoutputThatDoesntMatchzQMethodicalTests.test_inputOutputMismatch.<locals>.Mechanism.outputThatDoesntMatchd  r   r   c                 ó   — dS r$   r   r   s    r   r1   zAMethodicalTests.test_inputOutputMismatch.<locals>.Mechanism.stateg  r   r   NrÖ   rÚ   )r+   r,   r-   r
   r6   r/   rÖ   r0   rØ   rÚ   r1   r<   r‡   rC   r2   r>   r?   r@   r   s   €r   r”   rÓ   \  s…  ø€ € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW‰YŒYðð ñ ŒYðà�XŠX‰ZŒZð)ð )ñ ŒZð)à�XŠX‰ZŒZð/ð /ñ ŒZð/à�WŠW‰YŒYðð ñ ŒYðà×"Ò" 9Ñ-Ô-ð H°Ø—
’
˜;¨Ð0AØ0Eð0Gñ Hô Hð HðHð Hð Hñ Hô Hð Hð Hð Hð Hð Hð Høøøð Hð Hð Hð Hð �MŠM˜-¨¨¨R¬\Ñ):Ô):Ñ;Ô;Ð;Ø�MŠMÐ1°3°3°r´|Ñ3DÔ3DÑEÔEÐEÐEÐEs   ÂB?Â?CÃCr”   N©r4   ©r   r”   s   ` r   Útest_inputOutputMismatchz(MethodicalTests.test_inputOutputMismatchW  sM   ø€ ð
	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	F�ñ 	Fô 	Fð 	Fð 	Fð 	Fr   c                 ó˜   —  G d„ dt           ¦  «        } |¦   «         }|                     ¦   «         \  }|                      |d¦  «         dS )zI
        It is possible to write a self-loop by omitting "enter"
        c                   ór  — e Zd Z e¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Ze 	                    d¬¦  «        d„ ¦   «         Z
d„ Ze
                     eg ¬¦  «         e
                     eeg¬¦  «         d	S )
ú1MethodicalTests.test_stateLoop.<locals>.Mechanismc                 ó   — dS r   r   r   s    r   r/   z7MethodicalTests.test_stateLoop.<locals>.Mechanism.inputv  r   r   c                 ó   — dS r   r   r   s    r   Úsay_hiz8MethodicalTests.test_stateLoop.<locals>.Mechanism.say_hiy  r   r   c                 ó   — dS )NÚhir   r   s    r   Ú_start_say_hiz?MethodicalTests.test_stateLoop.<locals>.Mechanism._start_say_hi|  r¦   r   Tr!   c                 ó   — dS r$   r   r   s    r   r·   z7MethodicalTests.test_stateLoop.<locals>.Mechanism.start  r   r   c                 ó   — dS )za state with no inputsNr   r   s    r   Úsaid_hiz9MethodicalTests.test_stateLoop.<locals>.Mechanism.said_hi‚  r   r   )r*   N)r+   r,   r-   r
   r6   r/   rä   r0   rç   r1   r·   rê   r2   r   r   r   r”   rá   t  sæ   € € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW‰YŒYðð ñ ŒYðà�WŠW‰YŒYðð ñ ŒYðà�XŠX‰ZŒZðð ñ ŒZðà�WŠW˜TˆWÑ"Ô"ðð ñ #Ô"ðð)ð )ð )à�JŠJ�u bˆJÑ)Ô)Ð)Ø�JŠJ�v¨ ˆJÑ7Ô7Ð7Ð7Ð7r   r”   ræ   N)r4   rä   r5   )r   r”   Úa_mechanismÚ
a_greetings       r   Útest_stateLoopzMethodicalTests.test_stateLoopp  sh   € ð	8ð 	8ð 	8ð 	8ð 	8�ñ 	8ô 	8ð 	8ð$  �i‘k”kˆØ"×)Ò)Ñ+Ô+‰ˆØ×Ò˜ TÑ*Ô*Ð*Ð*Ð*r   c                 ód   —  G d„ dt           ¦  «        } |¦   «                              ¦   «          dS )zF
        It is possible to write a transition with no outputs
        c                   ó  — e Zd Z e¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     d¬¦  «        d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Z	e 
                    ee	¬¦  «         dS )ú6MethodicalTests.test_defaultOutputs.<locals>.Mechanismc                 ó   — dS )zfinal transitionNr   r   s    r   Úfinishz=MethodicalTests.test_defaultOutputs.<locals>.Mechanism.finish‘  r   r   Tr!   c                 ó   — dS )za start stateNr   r   s    r   r·   z<MethodicalTests.test_defaultOutputs.<locals>.Mechanism.start”  r   r   c                 ó   — dS )za final stateNr   r   s    r   Úfinishedz?MethodicalTests.test_defaultOutputs.<locals>.Mechanism.finished—  r   r   )r)   N)r+   r,   r-   r
   r6   r/   rò   r1   r·   rõ   r2   r   r   r   r”   rð   �  sž   € € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW‰YŒYð#ð #ñ ŒYð#à�WŠW˜TˆWÑ"Ô"ð ð  ñ #Ô"ð à�WŠW‰YŒYð ð  ñ ŒYð à�JŠJ�v XˆJÑ.Ô.Ð.Ð.Ð.r   r”   N)r4   rò   rÝ   s     r   Útest_defaultOutputsz#MethodicalTests.test_defaultOutputs‹  sL   € ð	/ð 	/ð 	/ð 	/ð 	/�ñ 	/ô 	/ð 	/ð 	ˆ	‰Œ×ÒÑÔÐÐÐr   c                 ó¼   — t          dddddddt          fdt          ff¬¦  «        }|                      t	          |¦  «        dddt          fdt          fh¦  «         dS )zC
        Type annotations should be included in the set of
        )re   rf   Nr   re   rf   )ÚargsÚvarargsÚvarkwÚdefaultsÚ
kwonlyargsÚkwonlydefaultsÚannotations)r   Úintr?   r5   r   )r   Úspecs     r   Útest_getArgNamesz MethodicalTests.test_getArgNames�  s}   € õ ØØØØØØØ�s˜ c­3 ZÐ0ð
ñ 
ô 
ˆð 	×ÒÝ˜ÑÔØ�#˜�S�z C­ :Ð.ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó    — t          d„ ¦  «        }t          d„ ¦  «        }d}t          |i ||¦  «        \  }}|                      ||¦  «         dS )zl
        filterArgs() should not filter the `args` parameter
        if outputSpec accepts `*args`.
        c                  ó   — d S rr   r   ©rø   Úkwargss     r   rv   z1MethodicalTests.test_filterArgs.<locals>.<lambda>µ  s   € ¸€ r   c                  ó   — d S rr   r   r  s     r   rv   z1MethodicalTests.test_filterArgs.<locals>.<lambda>¶  s   € ¸€ r   r   N)r   r   rA   )r   Ú	inputSpecÚ
outputSpecÚargsInÚargsOutÚ_s         r   Útest_filterArgszMethodicalTests.test_filterArgs°  s\   € õ
  Ð <Ð <Ñ=Ô=ˆ	Ý Ð!=Ð!=Ñ>Ô>ˆ
ØˆÝ  ¨¨Y¸
ÑCÔC‰
ˆ�Ø�Š�f˜gÑ&Ô&Ð&Ð&Ð&r   c                 ó2   ‡ —  G ˆ fd„dt           ¦  «        }dS )zI
        A L{MethodicalMachine} can only have one initial state.
        c                   óü   •— e Zd Z e¦   «         Ze                     d¬¦  «        d„ ¦   «         Z”                      e¦  «        5  e                     d¬¦  «        d„ ¦   «         Z	ddd¦  «         dS # 1 swxY w Y   dS )úCMethodicalTests.test_multipleInitialStatesFailure.<locals>.WillFailTr!   c                 ó   — dS )z&The first initial state -- this is OK.Nr   r   s    r   ÚfirstInitialStatezUMethodicalTests.test_multipleInitialStatesFailure.<locals>.WillFail.firstInitialStateÄ  r   r   c                 ó   — dS )z4The second initial state -- results in a ValueError.Nr   r   s    r   ÚsecondInitialStatezVMethodicalTests.test_multipleInitialStatesFailure.<locals>.WillFail.secondInitialStateÉ  r   r   N)
r+   r,   r-   r
   r6   r1   r  r<   r±   r  r   s   €r   ÚWillFailr  Á  sú   ø€ € € € € Ø!Ð!Ñ#Ô#ˆAà�WŠW˜TˆWÑ"Ô"ð9ð 9ñ #Ô"ð9ð ×"Ò" :Ñ.Ô.ð Kð KØ—’ �Ñ&Ô&ðKð Kñ 'Ô&ðKðKð Kð Kñ Kô Kð Kð Kð Kð Kð Kð Kð Køøøð Kð Kð Kð Kð Kð Ks   Á A1Á1A5Á8A5r  NrÜ   ©r   r  s   ` r   Ú!test_multipleInitialStatesFailurez1MethodicalTests.test_multipleInitialStatesFailure¼  sM   ø€ ð

	Kð 
	Kð 
	Kð 
	Kð 
	Kð 
	Kð 
	K•vñ 
	Kô 
	Kð 
	Kð 
	Kð 
	Kr   c                 ó2   ‡ —  G ˆ fd„dt           ¦  «        }dS )zc
        A L{MethodicalMachine} can only have one transition per start/event
        pair.
        c                   ó’  •— e Zd Z e¦   «         Ze                     d¬¦  «        d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Z	e 
                    e	eg ¬¦  «         ”                      e¦  «        5  e 
                    e	eg ¬¦  «         ddd¦  «         dS # 1 swxY w Y   dS )úAMethodicalTests.test_multipleTransitionsFailure.<locals>.WillFailTr!   c                 ó   — dS )zWe start here.Nr   r   s    r   r·   zGMethodicalTests.test_multipleTransitionsFailure.<locals>.WillFail.start×  r   r   c                 ó   — dS )zRainbows end.Nr   r   s    r   ÚendzEMethodicalTests.test_multipleTransitionsFailure.<locals>.WillFail.endÚ  r   r   c                 ó   — dS )z	An event.Nr   r   s    r   ÚeventzGMethodicalTests.test_multipleTransitionsFailure.<locals>.WillFail.eventÞ  r   r   r(   N)r+   r,   r-   r
   r6   r1   r·   r  r/   r  r2   r<   r±   r   s   €r   r  r  Ô  s-  ø€ € € € € Ø!Ð!Ñ#Ô#ˆAà�WŠW˜TˆWÑ"Ô"ð!ð !ñ #Ô"ð!à�WŠW‰YŒYð ð  ñ ŒYð ð �WŠW‰YŒYðð ñ ŒYðà�JŠJ�u C°ˆJÑ4Ô4Ð4Ø×"Ò" :Ñ.Ô.ð 9ð 9Ø—
’
˜5¨°R�
Ñ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð 9ð 9s   ÂB<Â<C ÃC r  NrÜ   r  s   ` r   Útest_multipleTransitionsFailurez/MethodicalTests.test_multipleTransitionsFailureÎ  sA   ø€ ð	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9•vñ 	9ô 	9ð 	9ð 	9ð 	9r   c                 óÀ  —  G d„ dt           ¦  «        } |¦   «         }|                      t          ¦  «        5 }|                     ¦   «          ddd¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         |                      dt          |j        ¦  «        ¦  «         |                     ¦   «          |                      t          ¦  «        5 }|                     ¦   «          ddd¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         |                      dt          |j        ¦  «        ¦  «         dS )z‘
        Calling any input method that lacks a transition for the machine's
        current state raises an informative L{NoTransition}.
        c                   ó<  — e Zd Z e¦   «         Ze                     d¬¦  «        d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Z	e                     ¦   «         d„ ¦   «         Z
e                     e	eg ¦  «         dS )úFMethodicalTests.test_badTransitionForCurrentState.<locals>.OnlyOnePathTr!   c                 ó   — dS )zStart state.Nr   r   s    r   r·   zLMethodicalTests.test_badTransitionForCurrentState.<locals>.OnlyOnePath.startî  r   r   c                 ó   — dS )z
End state.Nr   r   s    r   r  zJMethodicalTests.test_badTransitionForCurrentState.<locals>.OnlyOnePath.endñ  r   r   c                 ó   — dS )zMove from start to end.Nr   r   s    r   ÚadvancezNMethodicalTests.test_badTransitionForCurrentState.<locals>.OnlyOnePath.advanceô  r   r   c                 ó   — dS )z%A transition from nowhere to nowhere.Nr   r   s    r   ÚdeadEndzNMethodicalTests.test_badTransitionForCurrentState.<locals>.OnlyOnePath.deadEnd÷  r   r   N)r+   r,   r-   r
   r6   r1   r·   r  r/   r&  r(  r2   r   r   r   ÚOnlyOnePathr"  ì  s¿   € € € € € Ø!Ð!Ñ#Ô#ˆAØ�WŠW˜TˆWÑ"Ô"ðð ñ #Ô"ðà�WŠW‰YŒYðð ñ ŒYðà�WŠW‰YŒYð*ð *ñ ŒYð*à�WŠW‰YŒYð8ð 8ñ ŒYð8à�JŠJ�w  RÑ(Ô(Ð(Ð(Ð(r   r)  Nr(  r·   r  )r4   r<   r   r(  r>   r?   r@   r&  )r   r)  r.   rC   s       r   Ú!test_badTransitionForCurrentStatez1MethodicalTests.test_badTransitionForCurrentStateæ  s³  € ð	)ð 	)ð 	)ð 	)ð 	)�&ñ 	)ô 	)ð 	)ð  �+‘-”-ˆØ×Ò�|Ñ,Ô,ð 	°Ø�OŠOÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à�Š�i¥ R¤\Ñ!2Ô!2Ñ3Ô3Ð3Ø�Š�g�s 2¤<Ñ0Ô0Ñ1Ô1Ð1Ø�ŠÑÔÐØ×Ò�|Ñ,Ô,ð 	°Ø�OŠOÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à�Š�i¥ R¤\Ñ!2Ô!2Ñ3Ô3Ð3Ø�Š�e�S ¤Ñ.Ô.Ñ/Ô/Ð/Ð/Ð/s#   ¸AÁAÁ AÃ"DÄDÄ
Dc                 ó’   —  G d„ dt           ¦  «        }|                       |¦   «                              ¦   «         dddœ¦  «         dS )a   
        L{MethodicalMachine.serializer} is a decorator that modifies its
        decoratee's signature to take a "state" object as its first argument,
        which is the "serialized" argument to the L{MethodicalMachine.state}
        decorator.
        c                   óà   — e Zd Z e¦   «         Zd„ Ze                     dd¬¦  «        d„ ¦   «         Ze                     d¬¦  «        d„ ¦   «         Ze 	                    ¦   «         d	„ ¦   «         Z
d
S )ú1MethodicalTests.test_saveState.<locals>.Mechanismc                 ó   — d| _         d S rJ   ©Úvaluer   s    r   Ú__init__z:MethodicalTests.test_saveState.<locals>.Mechanism.__init__  s   € Ø�”
�
�
r   úfirst-stateT©Ú
serializedr"   c                 ó   — dS ©zFirst state.Nr   r   s    r   Úfirstz7MethodicalTests.test_saveState.<locals>.Mechanism.first  r   r   úsecond-state©r4  c                 ó   — dS ©zSecond state.Nr   r   s    r   Úsecondz8MethodicalTests.test_saveState.<locals>.Mechanism.second  r   r   c                 ó   — || j         dœS ©N©úmachine-stateú
some-valuer/  ©r   r1   s     r   Úsavez6MethodicalTests.test_saveState.<locals>.Mechanism.save  ó   € ð &+Ø"&¤*ðð ð r   N)r+   r,   r-   r
   r6   r1  r1   r7  r<  Ú
serializerrC  r   r   r   r”   r-    s¤   € € € € € Ø!Ð!Ñ#Ô#ˆAðð ð à�WŠW °tˆWÑ<Ô<ðð ñ =Ô<ðà�WŠW ˆWÑ/Ô/ð ð  ñ 0Ô/ð à�\Š\‰^Œ^ðð ñ Œ^ðð ð r   r”   r2  rK   r?  N)r4   r5   rC  rÝ   s     r   Útest_saveStatezMethodicalTests.test_saveState  su   € ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ð" 	×ÒØˆI‰KŒK×ÒÑÔà!.Øðð ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó–  —  G d„ dt           ¦  «        } |¦   «         }|                     ¦   «          |                     ¦   «         }|                     |¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         |                      |                     ¦   «         dddœ¦  «         dS )a/  
        L{MethodicalMachine.unserializer} decorates a function that becomes a
        machine-state unserializer; its return value is mapped to the
        C{serialized} parameter to C{state}, and the L{MethodicalMachine}
        associated with that instance's state is updated to that state.
        c                   óJ  — e Zd Z e¦   «         Zd„ Ze                     dd¬¦  «        d„ ¦   «         Ze                     d¬¦  «        d„ ¦   «         Ze 	                    ¦   «         d	„ ¦   «         Z	e 
                    ¦   «         d
„ ¦   «         Z
e 
                    ¦   «         d„ ¦   «         Ze                     e	ee
gd„ ¬¦  «         e                     e	eegd„ ¬¦  «         e                     ¦   «         d„ ¦   «         Ze                     ¦   «         d„ ¦   «         Zed„ ¦   «         ZdS )ú4MethodicalTests.test_restoreState.<locals>.Mechanismc                 ó"   — d| _         d| _        d S )NrK   F©r0  Ú	ranOutputr   s    r   r1  z=MethodicalTests.test_restoreState.<locals>.Mechanism.__init__4  s   € Ø�”
Ø!&�”��r   r2  Tr3  c                 ó   — dS r6  r   r   s    r   r7  z:MethodicalTests.test_restoreState.<locals>.Mechanism.first7  r   r   r8  r9  c                 ó   — dS r;  r   r   s    r   r<  z;MethodicalTests.test_restoreState.<locals>.Mechanism.second:  r   r   c                 ó   — dS r   r   r   s    r   r/   z:MethodicalTests.test_restoreState.<locals>.Mechanism.input=  r   r   c                 ó"   — d| _         d| _        dS )Nr	   TrK   rK  r   s    r   r0   z;MethodicalTests.test_restoreState.<locals>.Mechanism.output@  s   € à�”
Ø!%�”Ø�qr   c                 ó   — dS )Nr	   r   r   s    r   Úoutput2z<MethodicalTests.test_restoreState.<locals>.Mechanism.output2E  s   € à�qr   c                 ó,   — t          | ¦  «        d         S ©Nr   r¯   r§   s    r   rv   z=MethodicalTests.test_restoreState.<locals>.Mechanism.<lambda>I  s   € ­4°©7¬7°1¬:€ r   rw   c                 ó,   — t          | ¦  «        d         S rT  r¯   r§   s    r   rv   z=MethodicalTests.test_restoreState.<locals>.Mechanism.<lambda>K  s   € ­D°©G¬G°A¬J€ r   c                 ó   — || j         dœS r>  r/  rB  s     r   rC  z9MethodicalTests.test_restoreState.<locals>.Mechanism.saveL  rD  r   c                 ó,   — |d         | _         |d         S )NrA  r@  r/  )r   Úblobs     r   Ú_restorez=MethodicalTests.test_restoreState.<locals>.Mechanism._restoreS  s   € à! ,Ô/�”
Ø˜OÔ,Ð,r   c                 óD   —  | ¦   «         }|                      |¦  «         |S rr   )rY  )ÚclsrX  r   s      r   ÚfromBlobz=MethodicalTests.test_restoreState.<locals>.Mechanism.fromBlobX  s$   € à�s‘u”u�Ø—’˜dÑ#Ô#Ð#Ø�r   N)r+   r,   r-   r
   r6   r1  r1   r7  r<  r/   r0   rR  r2   rE  rC  ÚunserializerrY  Úclassmethodr\  r   r   r   r”   rI  2  sž  € € € € € Ø!Ð!Ñ#Ô#ˆAð'ð 'ð 'ð �WŠW °tˆWÑ<Ô<ðð ñ =Ô<ðà�WŠW ˆWÑ/Ô/ð ð  ñ 0Ô/ð à�WŠW‰YŒYðð ñ ŒYðà�XŠX‰ZŒZðð ñ ŒZðð �XŠX‰ZŒZðð ñ ŒZðà�JŠJ�u˜f v hØ!5Ð!5ð ñ 7ô 7ð 7à�KŠK˜˜v¨ yØ"6Ð"6ð ñ 8ô 8ð 8à�\Š\‰^Œ^ðð ñ Œ^ðð �^Š^ÑÔð-ð -ñ Ôð-ð ðð ñ Œ[ðð ð r   r”   Fr	   r8  r?  N)r4   r/   rC  r\  r5   rL  )r   r”   Úm1rX  Úm2s        r   Útest_restoreStatez!MethodicalTests.test_restoreState*  sÚ   € ð*	ð *	ð *	ð *	ð *	�ñ *	ô *	ð *	ðX ˆY‰[Œ[ˆØ
�Š‰
Œ
ˆ
Ø�wŠw‰yŒyˆØ×Ò Ñ%Ô%ˆØ×Ò˜œ uÑ-Ô-Ð-Ø×Ò˜Ÿš™œ QÑ'Ô'Ð'Ø×ÒØ�GŠG‰IŒIà!/Øðð ñ	
ô 	
ð 	
ð 	
ð 	
r   N)r+   r,   r-   Ú__doc__r7   rD   rP   ri   r{   rˆ   r˜   rª   rÐ   rÞ   rí   rö   r  r  r  r  r*  rF  ra  r   r   r   r   r      sS  € € € € € ðð ð&@ð &@ð &@ðR<ð <ð <ð$!
ð !
ð !
ðH -ð  -ð  -ðF*ð *ð *ð2>ð >ð >ð$"ð "ð "ð.-"ð -"ð -"ð`M7ð M7ð M7ð`Fð Fð Fð2+ð +ð +ð6ð ð ð$
ð 
ð 
ð&	'ð 	'ð 	'ðKð Kð Kð$9ð 9ð 9ð00ð 0ð 0ðD
ð 
ð 
ðD@
ð @
ð @
ð @
ð @
r   r   N)rb  Ú	functoolsr   Úunittestr   Úautomat._methodicalr   r   r   r   Ú r
   r   r   r   r   r   r   ú<module>rg     sÁ   ððð ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð ð\	
ð \	
ð \	
ð \	
ð \	
�hñ \	
ô \	
ð \	
ð \	
ð \	
r   