ó
    Î›‘hÁQ  ã                   ój   • S r SSKJr  SSKJr  SSKJrJrJrJ	r	  SSK
JrJr  SSK
Jr   " S S	\5      rg
)z,
Tests for the public interface of Automat.
é    )Úreduce)ÚTestCase)ÚArgSpecÚ_getArgNamesÚ_getArgSpecÚ_filterArgsé   )ÚMethodicalMachineÚNoTransition)Ú_methodicalc                   ó�   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rSrg)ÚMethodicalTestsé   z!
Tests for L{MethodicalMachine}.
c                 ó´   •  " S S[         5      nU" 5       nU R                  UR                  5       S/5        U R                  UR                  5       S/5        g)zù
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                   óD  • \ rS rSr\" 5       r\R                  5       S 5       r\R                  5       S 5       r	\R                  5       S 5       r
\R                  SS9S 5       r\R                  5       S 5       r\R                  \\\	/S	9  \R                  \\\
/S	9  S
rg)Ú7MethodicalTests.test_oneTransition.<locals>.Machinationé   c                 ó   • g©zan inputN© ©Úselfs    ÚaC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\automat/_test/test_methodical.pyÚanInputÚ?MethodicalTests.test_oneTransition.<locals>.Machination.anInput   ó   � ó    c                 ó   • g)z	an outputúan-output-valuer   r   s    r   ÚanOutputÚ@MethodicalTests.test_oneTransition.<locals>.Machination.anOutput!   s   € ð )r   c                 ó   • g)zanother outputúanother-output-valuer   r   s    r   ÚanotherOutputÚEMethodicalTests.test_oneTransition.<locals>.Machination.anotherOutput&   s   € ð .r   T©Úinitialc                 ó   • g©za stateNr   r   s    r   ÚanStateÚ?MethodicalTests.test_oneTransition.<locals>.Machination.anState+   r   r   c                 ó   • g)zanother stateNr   r   s    r   ÚanotherStateÚDMethodicalTests.test_oneTransition.<locals>.Machination.anotherState/   r   r   ©ÚenterÚoutputsr   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r
   ÚmachineÚinputr   Úoutputr    r$   Ústater*   r-   ÚuponÚ__static_attributes__r   r   r   ÚMachinationr      s¾   † Ù'Ó)ˆGà�]‰]‹_ñó ðð �^‰^Óñ)ó ð)ð �^‰^Óñ.ó ð.ð �]‰] 4ˆ]Ð(ñó )ðð �]‰]‹_ñ ó ð ð �L‰L˜¨¸x¸jˆLÑIØ×Ñ˜g¨\ÀMÀ?ÐÔSr   r<   r   r#   N)ÚobjectÚassertEqualr   )r   r<   Úms      r   Útest_oneTransitionÚ"MethodicalTests.test_oneTransition   sM   € ô	Tœ&ô 	Tñ8 ‹MˆØ×Ñ˜Ÿ™›Ð'8Ð&9Ô:Ø×Ñ˜Ÿ™›Ð'=Ð&>Õ?r   c                 óD  ^• [        5       m " U4S jS[        5      nU" 5       nU R                  [        5       nUR                    SSS5        U R                  S[        WR                  5      5        U R                  UR                  T5        g! , (       d  f       NP= f)a  
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                   ó   >• \ rS rSr Y rSrg)Ú@MethodicalTests.test_machineItselfIsPrivate.<locals>.MachinationéC   r   N)r2   r3   r4   r5   r6   r;   )ÚexpectedMachines   €r   r<   rD   C   s   ø† Ù%‹Gr   r<   Nz-MethodicalMachine is an implementation detail)	r
   r=   ÚassertRaisesÚAttributeErrorr6   ÚassertInÚstrÚ	exceptionÚassertIs)r   r<   ÚmachinationÚcmrF   s       @r   Útest_machineItselfIsPrivateÚ+MethodicalTests.test_machineItselfIsPrivate:   sy   ø€ ô ,Ó-ˆ÷	&œ&ô 	&ñ "“mˆØ×Ñœ~Ô.°"Ø×Ò÷ /à�‰Ø;¼SÀÇÁÓ=Nô	
ð 	�‰�k×)Ñ)¨?Õ;÷ /Õ.ús   ºBÂ
Bc                 óŽ  •  " S S[         5      nU" 5       nUR                  5         U R                  UR                  S5        U" 5       nU R	                  [
        5       nUR                    SSS5        U R                  UR                  S5        U R                  S[        WR                  5      5        g! , (       d  f       NP= f)aE  
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                   óÌ   • \ rS rSr\" 5       rSr\R                  5       S 5       r\R                  5       S 5       r
\R                  SS9S 5       r\R                  \\\
/S9  S	rg
)Ú;MethodicalTests.test_outputsArePrivate.<locals>.MachinationéW   r   c                 ó   • gr   r   r   s    r   r   ÚCMethodicalTests.test_outputsArePrivate.<locals>.Machination.anInput[   r   r   c                 ó.   • U =R                   S-  sl         g ©Né   )Úcounterr   s    r   r    ÚDMethodicalTests.test_outputsArePrivate.<locals>.Machination.anOutput_   s   € à—’ Ñ!–r   Tr&   c                 ó   • g)za machine stateNr   r   s    r   r9   ÚAMethodicalTests.test_outputsArePrivate.<locals>.Machination.statec   r   r   r/   r   N)r2   r3   r4   r5   r
   r6   rZ   r7   r   r8   r    r9   r:   r;   r   r   r   r<   rS   W   sw   † Ù'Ó)ˆGØˆGà�]‰]‹_ñó ðð �^‰^Óñ"ó ð"ð �]‰] 4ˆ]Ð(ñ"ó )ð"ð �J‰J�w e°h°ZˆJÔ@r   r<   rY   Nr   zlMachination.anOutput is a state-machine output method; to produce this output, call an input method instead.)
r=   r   r>   rZ   rG   rH   r    rI   rJ   rK   )r   r<   Úmach1Úmach2rN   s        r   Útest_outputsArePrivateÚ&MethodicalTests.test_outputsArePrivateN   s”   € ô	Aœ&ô 	Añ$ “ˆØ�‰ŒØ×Ñ˜Ÿ™¨Ô*Ù“ˆØ×Ñœ~Ô.°"Ø�NŠN÷ /à×Ñ˜Ÿ™¨Ô*à�‰ðAä�—‘Óõ	
÷	 /Õ.ús   ÁB6Â6
Cc                 ó´   •  " S S[         5      nU" 5       nU R                  UR                  5       S/5        U R                  UR                  5       S/5        g)z_
Two machines may co-exist happily on the same instance; they don't
interfere with each other.
c                   ó„  • \ rS rSr\" 5       r\" 5       r\R                  5       S 5       r\R                  5       S 5       r	\R                  SS9S 5       r\R                  SS9S 5       r\R                  5       S 5       r\R                  5       S	 5       r\R!                  \\\/5        \R!                  \	\\/5        S
rg)Ú8MethodicalTests.test_multipleMachines.<locals>.MultiMaché}   c                 ó   • g)zinput ANr   r   s    r   ÚinputAÚ?MethodicalTests.test_multipleMachines.<locals>.MultiMach.inputA�   r   r   c                 ó   • g)zinput BNr   r   s    r   ÚinputBÚ?MethodicalTests.test_multipleMachines.<locals>.MultiMach.inputB…   r   r   Tr&   c                 ó   • g)z	initial ANr   r   s    r   ÚinitialAÚAMethodicalTests.test_multipleMachines.<locals>.MultiMach.initialA‰   r   r   c                 ó   • g)z	initial BNr   r   s    r   ÚinitialBÚAMethodicalTests.test_multipleMachines.<locals>.MultiMach.initialB�   r   r   c                 ó   • g©NÚAr   r   s    r   ÚoutputAÚ@MethodicalTests.test_multipleMachines.<locals>.MultiMach.outputA‘   ó   € àr   c                 ó   • g©NÚBr   r   s    r   ÚoutputBÚ@MethodicalTests.test_multipleMachines.<locals>.MultiMach.outputB•   rw   r   r   N)r2   r3   r4   r5   r
   ÚaÚbr7   rg   rj   r9   rm   rp   r8   ru   r{   r:   r;   r   r   r   Ú	MultiMachrd   }   sÜ   † Ù!Ó#ˆAÙ!Ó#ˆAà�W‰W‹Yñó ðð �W‰W‹Yñó ðð �W‰W˜TˆWÐ"ñó #ðð �W‰W˜TˆWÐ"ñó #ðð �X‰X‹Zñó ðð �X‰X‹Zñó ðð �M‰M˜& (¨W¨IÔ6Ø�M‰M˜& (¨W¨I×6r   r   rt   rz   N)r=   r>   rg   rj   )r   r   Úmms      r   Útest_multipleMachinesÚ%MethodicalTests.test_multipleMachinesw   sG   € ô	7œô 	7ñ> ‹[ˆØ×Ñ˜Ÿ™› s eÔ,Ø×Ñ˜Ÿ™› s eÕ,r   c                 ó€   ^• SSK m " U4S jS[        5      nU" 5       nU R                  UR                  5       S5        g)zB
Outputs can be combined with the "collector" argument to "upon".
r   Nc                   ó  >• \ rS rSr\" 5       r\R                  5       S 5       r\R                  5       S 5       r\R                  5       S 5       r	\R                  SS9S 5       r
\
R                  \\
\\	/U 4S jS	9  S
rg)Ú4MethodicalTests.test_collectOutputs.<locals>.Machineé¦   c                 ó   • gr   r   r   s    r   r7   Ú:MethodicalTests.test_collectOutputs.<locals>.Machine.input©   r   r   c                 ó   • grs   r   r   s    r   ru   Ú<MethodicalTests.test_collectOutputs.<locals>.Machine.outputA­   rw   r   c                 ó   • gry   r   r   s    r   r{   Ú<MethodicalTests.test_collectOutputs.<locals>.Machine.outputB±   rw   r   Tr&   c                 ó   • gr)   r   r   s    r   r9   Ú:MethodicalTests.test_collectOutputs.<locals>.Machine.stateµ   r   r   c                 ó0   >• [        TR                  U 5      $ ©N)r   Úadd)ÚxÚoperators    €r   Ú<lambda>Ú=MethodicalTests.test_collectOutputs.<locals>.Machine.<lambda>½   s   ø€ ¤F¨8¯<©<¸Ô$;r   ©Ú	collectorr   N)r2   r3   r4   r5   r
   r?   r7   r8   ru   r{   r9   r:   r;   )r“   s   €r   ÚMachiner…   ¦   sš   ø† Ù!Ó#ˆAà�W‰W‹Yñó ðð �X‰X‹Zñó ðð �X‰X‹Zñó ðð �W‰W˜TˆWÐ"ñó #ðð �J‰JØØØ˜'Ð"Ü;ð	 ô r   r˜   ÚAB)r“   r=   r>   r7   )r   r˜   r?   r“   s      @r   Útest_collectOutputsÚ#MethodicalTests.test_collectOutputs    s3   ø€ ó 	÷	”fô 	ñ4 ‹IˆØ×Ñ˜Ÿ™› DÕ)r   c                 óþ   •  " S S[         5      nU" 5       nU R                  [        5       nUR                  SSS5        SSS5        U R	                  S[        WR                  5      5        g! , (       d  f       N4= f)z.
Input methods preserve their declared names.
c                   óx   • \ rS rSr\" 5       r\R                  5       S 5       r\R                  SS9S 5       r	Sr
g)Ú-MethodicalTests.test_methodName.<locals>.MechéÈ   c                 ó   • gr   r   r   s    r   ÚdeclaredInputNameÚ?MethodicalTests.test_methodName.<locals>.Mech.declaredInputNameË   r   r   Tr&   c                 ó   • g)r9   Nr   r   s    r   ÚaStateÚ4MethodicalTests.test_methodName.<locals>.Mech.aStateÏ   r   r   r   N)r2   r3   r4   r5   r
   r?   r7   r¡   r9   r¤   r;   r   r   r   ÚMechrž   È   sA   † Ù!Ó#ˆAà�W‰W‹Yñó ðð �W‰W˜TˆWÐ"ñó #ór   r¦   ÚtooÚmanyÚ	argumentsNr¡   )r=   rG   Ú	TypeErrorr¡   rI   rJ   rK   )r   r¦   r?   rN   s       r   Útest_methodNameÚMethodicalTests.test_methodNameÃ   s_   € ô
		”6ô 		ñ ‹FˆØ×ÑœyÔ)¨RØ×Ñ  v¨{Ô;÷ *à�‰Ð)¬3¨r¯|©|Ó+<Õ=÷ *Õ)ús   ¬A.Á.
A<c                 ó¬   •  " S S[         5      nU" 5       nU R                  UR                  S5      S/5        U R                  UR                  S5        g)zG
If an input takes an argument, it will pass that along to its output.
c                   óÔ   • \ rS rSr\" 5       r\R                  5       S	S j5       r\R                  SS9S 5       r\R                  5       S	S j5       r\R                  \\\/5        Sr
g)
Ú:MethodicalTests.test_inputWithArguments.<locals>.MechanisméÝ   c                 ó   • gr   r   ©r   r’   Úys      r   r7   Ú@MethodicalTests.test_inputWithArguments.<locals>.Mechanism.inputà   r   r   Tr&   c                 ó   • gr)   r   r   s    r   r9   Ú@MethodicalTests.test_inputWithArguments.<locals>.Mechanism.stateä   r   r   c                 ó   • Xl         X-   $ r�   ©Ú_xr²   s      r   r8   ÚAMethodicalTests.test_inputWithArguments.<locals>.Mechanism.outputè   s   € à”Ø‘u�r   r¸   N©rY   )r2   r3   r4   r5   r
   r?   r7   r9   r8   r:   r;   r   r   r   Ú	Mechanismr¯   Ý   so   † Ù!Ó#ˆAà�W‰W‹Yóó ðð �W‰W˜TˆWÐ"ñó #ðð �X‰X‹Zóó ðð �J‰J�u˜e f X×.r   r¼   é   é   N)r=   r>   r7   r¹   ©r   r¼   r?   s      r   Útest_inputWithArgumentsÚ'MethodicalTests.test_inputWithArgumentsØ   sE   € ô
	/œô 	/ñ$ ‹KˆØ×Ñ˜Ÿ™ › a SÔ)Ø×Ñ˜Ÿ™˜qÕ!r   c                 ó  •  " S S[         5      nU" 5       nU R                  UR                  S5      / SQ5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  SS9/ SQ5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S	S5      / S
Q5        U R                  UR                  S	5        U R                  UR                  S5        U R                  UR                  SSS9/ SQ5        U R                  UR                  S5        U R                  UR                  S5        g)z0
Inputs pass arguments that output will accept.
c                   ó,  • \ rS rSr\" 5       r\R                  5       SS j5       r\R                  SS9S 5       r\R                  5       S 5       r	\R                  5       S 5       r
\R                  5       S 5       r\R                  \\\	\
\/5        S	rg
)ÚCMethodicalTests.test_outputWithSubsetOfArguments.<locals>.Mechanisméø   c                 ó   • gr   r   r²   s      r   r7   ÚIMethodicalTests.test_outputWithSubsetOfArguments.<locals>.Mechanism.inputû   r   r   Tr&   c                 ó   • gr)   r   r   s    r   r9   ÚIMethodicalTests.test_outputWithSubsetOfArguments.<locals>.Mechanism.stateÿ   r   r   c                 ó   • Xl         U$ r�   r¸   )r   r’   s     r   ÚoutputXÚKMethodicalTests.test_outputWithSubsetOfArguments.<locals>.Mechanism.outputX  ó   € à”Ø�r   c                 ó   • Xl         U$ r�   )Ú_y)r   r³   s     r   ÚoutputYÚKMethodicalTests.test_outputWithSubsetOfArguments.<locals>.Mechanism.outputY  rÍ   r   c                 ó   • g r�   r   r   s    r   ÚoutputNoArgsÚPMethodicalTests.test_outputWithSubsetOfArguments.<locals>.Mechanism.outputNoArgs  ó   € àr   )r¹   rÏ   Nr»   )r2   r3   r4   r5   r
   r?   r7   r9   r8   rË   rÐ   rÓ   r:   r;   r   r   r   r¼   rÄ   ø   s¨   † Ù!Ó#ˆAà�W‰W‹Yóó ðð �W‰W˜TˆWÐ"ñó #ðð �X‰X‹Zñó ðð �X‰X‹Zñó ðð �X‰X‹Zñó ðð �J‰J�u˜e g¨w¸Ð%E×Fr   r¼   r½   )r½   rY   NrY   r¾   ©r’   )r¾   rY   Né   )r×   r½   Né   r	   )r³   )rØ   r	   NN)r=   r>   r7   r¹   rÏ   r¿   s      r   Ú test_outputWithSubsetOfArgumentsÚ0MethodicalTests.test_outputWithSubsetOfArgumentsó   s)  € ô
	Gœô 	Gñ6 ‹Kˆð 	×Ñ˜Ÿ™ ›¢\Ô2Ø×Ñ˜Ÿ™˜qÔ!Ø×Ñ˜Ÿ™˜qÔ!ð 	×Ñ˜Ÿ™ 1˜˜¢|Ô4Ø×Ñ˜Ÿ™˜qÔ!Ø×Ñ˜Ÿ™˜qÔ!ð 	×Ñ˜Ÿ™  A›ªÔ5Ø×Ñ˜Ÿ™˜qÔ!Ø×Ñ˜Ÿ™˜qÔ!ð 	×Ñ˜Ÿ™  a˜˜ª,Ô7Ø×Ñ˜Ÿ™˜qÔ!Ø×Ñ˜Ÿ™˜qÕ!r   c                 óæ  ^ • [         R                  " 5         [         R                  " 5          " U 4S jS[        5      n " S S[        5      nU" 5       R	                  5          " S S[        5      nU" 5       R	                  5          " S S[        5      nU" 5       R	                  5          " S	 S
[        5      nU" 5       R	                  5          " S S[        5      nU" 5       R	                  5         g)z5
The wrapped input function must have an empty body.
c                   óî   >• \ rS rSr\" 5       r Y R                  \5       r\R                  5       S 5       r	SSS5         Y R                  \" \R                  5      S5        Srg! , (       d  f       N4= f)ÚAMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.Mechanismi3  c                 ó   • [        5         gr   ©Úlistr   s    r   r7   ÚGMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.Mechanism.input7  s	   € ô •Fr   Nzfunction body must be emptyr   )r2   r3   r4   r5   r
   r?   rG   Ú
ValueErrorrN   r7   r>   rJ   rK   r;   r   s   €r   r¼   rÝ   3  s]   ø† Ù!Ó#ˆAÙ×"Ñ" :Ô.°"à—‘“ñó ð÷ /ñ ×Ñ™S §¡Ó.Ð0M×N÷ /Õ.ús   ¡A&Á&
A4r¼   c                   óš   • \ rS rSr\" 5       r\R                  5       S 5       r\R                  SS9S 5       r\R                  \\/ S9  Sr
g)	ÚNMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringiA  c                 ó   • gr   r   r   s    r   r7   ÚTMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstring.inputD  r   r   Tr&   c                 ó   • g©zstarting stateNr   r   s    r   ÚstartÚTMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstring.startH  r   r   r/   r   N©r2   r3   r4   r5   r
   r?   r7   r9   ré   r:   r;   r   r   r   ÚMechanismWithDocstringrä   A  sU   † Ù!Ó#ˆAà�W‰W‹Yñó ðð �W‰W˜TˆWÐ"ñ!ó #ð!ð �J‰J�u E°2ˆJÔ6r   rì   c                   óš   • \ rS rSr\" 5       r\R                  5       S 5       r\R                  SS9S 5       r\R                  \\/ S9  Sr
g)	ÚIMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithPassiP  c                 ó   • g r�   r   r   s    r   r7   ÚOMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithPass.inputS  s   € àr   Tr&   c                 ó   • grè   r   r   s    r   ré   ÚOMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithPass.startW  r   r   r/   r   Nrë   r   r   r   ÚMechanismWithPassrî   P  sU   † Ù!Ó#ˆAà�W‰W‹Yñó ðð �W‰W˜TˆWÐ"ñ!ó #ð!ð �J‰J�u E°2ˆJÔ6r   ró   c                   óš   • \ rS rSr\" 5       r\R                  5       S 5       r\R                  SS9S 5       r\R                  \\/ S9  Sr
g)	ÚUMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringAndPassi_  c                 ó   • gr   r   r   s    r   r7   Ú[MethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringAndPass.inputb  s   € ð r   Tr&   c                 ó   • grè   r   r   s    r   ré   Ú[MethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringAndPass.startg  r   r   r/   r   Nrë   r   r   r   ÚMechanismWithDocstringAndPassrõ   _  sU   † Ù!Ó#ˆAà�W‰W‹Yñó ðð �W‰W˜TˆWÐ"ñ!ó #ð!ð �J‰J�u E°2ˆJÔ6r   rú   c                   óš   • \ rS rSr\" 5       r\R                  5       S 5       r\R                  SS9S 5       r\R                  \\/ S9  Sr
g)	ÚLMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismReturnsNoneio  c                 ó   • g r�   r   r   s    r   r7   ÚRMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismReturnsNone.inputr  rÕ   r   Tr&   c                 ó   • grè   r   r   s    r   ré   ÚRMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismReturnsNone.startv  r   r   r/   r   Nrë   r   r   r   ÚMechanismReturnsNonerü   o  sU   † Ù!Ó#ˆAà�W‰W‹Yñó ðð �W‰W˜TˆWÐ"ñ!ó #ð!ð �J‰J�u E°2ˆJÔ6r   r  c                   óš   • \ rS rSr\" 5       r\R                  5       S 5       r\R                  SS9S 5       r\R                  \\/ S9  Sr
g)	Ú\MethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringAndReturnsNonei~  c                 ó   • gr   r   r   s    r   r7   ÚbMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringAndReturnsNone.input�  s   € ð r   Tr&   c                 ó   • grè   r   r   s    r   ré   ÚbMethodicalTests.test_inputFunctionsMustBeEmpty.<locals>.MechanismWithDocstringAndReturnsNone.start†  r   r   r/   r   Nrë   r   r   r   Ú$MechanismWithDocstringAndReturnsNoner  ~  sU   † Ù!Ó#ˆAà�W‰W‹Yñó ðð �W‰W˜TˆWÐ"ñ!ó #ð!ð �J‰J�u E°2ˆJÔ6r   r  N)r   Ú_emptyÚ
_docstringr=   r7   )r   r¼   rì   ró   rú   r  r  s   `      r   Útest_inputFunctionsMustBeEmptyÚ.MethodicalTests.test_inputFunctionsMustBeEmpty)  s¼   ø€ ô 	×ÒÔÜ×ÒÔ ÷		Oœô 		Oô	7¤Vô 	7ñ 	Ó ×&Ñ&Ô(ô	7¤ô 	7ñ 	Ó×!Ñ!Ô#ô	7¬Fô 	7ñ 	&Ó'×-Ñ-Ô/ô	7¤6ô 	7ñ 	Ó×$Ñ$Ô&ô	7´6ô 	7ñ 	-Ó.×4Ñ4Õ6r   c                 ó*   ^ •  " U 4S jS[         5      ng)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                   óâ  >• \ rS rSr\" 5       r\R                  5       S 5       r\R                  5       S 5       r	\R                  5       S 5       r
\R                  5       S 5       r Y R                  \5       r\R                  \\\	\
/5        SSS5         Y R!                  S\" \R$                  5      5         Y R!                  S\" \R$                  5      5        S	rg! , (       d  f       NW= f)
Ú;MethodicalTests.test_inputOutputMismatch.<locals>.Mechanismi”  c                 ó   • gr   r   ©r   r}   s     r   ÚnameOfInputÚGMethodicalTests.test_inputOutputMismatch.<locals>.Mechanism.nameOfInput—  r   r   c                 ó   • g)zan output that matchesNr   r  s     r   ÚoutputThatMatchesÚMMethodicalTests.test_inputOutputMismatch.<locals>.Mechanism.outputThatMatches›  r   r   c                 ó   • g)zan output that doesn't matchNr   )r   r~   s     r   ÚoutputThatDoesntMatchÚQMethodicalTests.test_inputOutputMismatch.<locals>.Mechanism.outputThatDoesntMatchŸ  r   r   c                 ó   • gr)   r   r   s    r   r9   ÚAMethodicalTests.test_inputOutputMismatch.<locals>.Mechanism.state£  r   r   Nr  r  r   )r2   r3   r4   r5   r
   r?   r7   r  r8   r  r  r9   rG   rª   rN   r:   rI   rJ   rK   r;   r   s   €r   r¼   r  ”  sÜ   ø† Ù!Ó#ˆAà�W‰W‹Yñó ðð �X‰X‹Zñ)ó ð)ð �X‰X‹Zñ/ó ð/ð �W‰W‹Yñó ðñ ×"Ñ" 9Ô-°Ø—
‘
Ø Ð):Ð<QÐ(Rô÷ .ñ �M‰M˜-©¨R¯\©\Ó):Ô;Ù�M‰MÐ1±3°r·|±|Ó3D×E÷ .Õ-ús   Á9C Ã 
C.r¼   N©r=   ©r   r¼   s   ` r   Útest_inputOutputMismatchÚ(MethodicalTests.test_inputOutputMismatchŽ  s   ø€ ÷	Fœõ 	Fr   c                 óx   •  " S S[         5      nU" 5       nUR                  5       u  nU R                  US5        g)z9
It is possible to write a self-loop by omitting "enter"
c                   ó  • \ rS rSr\" 5       r\R                  5       S 5       r\R                  5       S 5       r\R                  5       S 5       r	\R                  SS9S 5       rS r\R                  \/ S	9  \R                  \\	/S	9  S
rg)Ú1MethodicalTests.test_stateLoop.<locals>.Mechanismi³  c                 ó   • gr   r   r   s    r   r7   Ú7MethodicalTests.test_stateLoop.<locals>.Mechanism.input¶  r   r   c                 ó   • gr   r   r   s    r   Úsay_hiÚ8MethodicalTests.test_stateLoop.<locals>.Mechanism.say_hiº  r   r   c                 ó   • g)NÚhir   r   s    r   Ú_start_say_hiÚ?MethodicalTests.test_stateLoop.<locals>.Mechanism._start_say_hi¾  rÕ   r   Tr&   c                 ó   • gr)   r   r   s    r   ré   Ú7MethodicalTests.test_stateLoop.<locals>.Mechanism.startÂ  r   r   c                 ó   • g)za state with no inputsNr   r   s    r   Úsaid_hiÚ9MethodicalTests.test_stateLoop.<locals>.Mechanism.said_hiÆ  r   r   )r1   r   N)r2   r3   r4   r5   r
   r?   r7   r&  r8   r*  r9   ré   r/  r:   r;   r   r   r   r¼   r"  ³  sž   † Ù!Ó#ˆAà�W‰W‹Yñó ðð �W‰W‹Yñó ðð �X‰X‹Zñó ðð �W‰W˜TˆWÐ"ñó #ðò)ð �J‰J�u bˆJÑ)Ø�J‰J�v¨ ˆJÔ7r   r¼   r)  N)r=   r&  r>   )r   r¼   Úa_mechanismÚ
a_greetings       r   Útest_stateLoopÚMethodicalTests.test_stateLoop®  s7   € ô
	8œô 	8ñ2  “kˆØ"×)Ñ)Ó+‰ˆØ×Ñ˜ TÕ*r   c                 óL   •  " S S[         5      nU" 5       R                  5         g)z6
It is possible to write a transition with no outputs
c                   óÄ   • \ rS rSr\" 5       r\R                  5       S 5       r\R                  SS9S 5       r	\R                  5       S 5       r
\	R                  \\
S9  Srg	)
Ú6MethodicalTests.test_defaultOutputs.<locals>.MechanismiÕ  c                 ó   • g)zfinal transitionNr   r   s    r   ÚfinishÚ=MethodicalTests.test_defaultOutputs.<locals>.Mechanism.finishØ  r   r   Tr&   c                 ó   • g)za start stateNr   r   s    r   ré   Ú<MethodicalTests.test_defaultOutputs.<locals>.Mechanism.startÜ  r   r   c                 ó   • g)za final stateNr   r   s    r   ÚfinishedÚ?MethodicalTests.test_defaultOutputs.<locals>.Mechanism.finishedà  r   r   )r0   r   N)r2   r3   r4   r5   r
   r?   r7   r9  r9   ré   r>  r:   r;   r   r   r   r¼   r7  Õ  sm   † Ù!Ó#ˆAà�W‰W‹Yñ#ó ð#ð �W‰W˜TˆWÐ"ñ ó #ð ð �W‰W‹Yñ ó ð ð �J‰J�v XˆJÔ.r   r¼   N)r=   r9  r  s     r   Útest_defaultOutputsÚ#MethodicalTests.test_defaultOutputsÐ  s   € ô
	/œô 	/ñ" 	‹×ÑÕr   c                 ó”   • [        SSSSSSS[        4S[        44S9nU R                  [	        U5      SSS[        4S[        415        g)z3
Type annotations should be included in the set of
)r}   r~   Nr   r}   r~   )ÚargsÚvarargsÚvarkwÚdefaultsÚ
kwonlyargsÚkwonlydefaultsÚannotations)r   ÚintrJ   r>   r   )r   Úspecs     r   Útest_getArgNamesÚ MethodicalTests.test_getArgNamesè  s\   € ô ØØØØØØØœs˜ c¬3 ZÐ0ñ
ˆð 	×ÑÜ˜ÓØ�#˜œS�z C¬ :Ð.õ	
r   c                 óx   • [        S 5      n[        S 5      nSn[        U0 X5      u  pEU R                  X45        g)zT
filterArgs() should not filter the `args` parameter
if outputSpec accepts `*args`.
c                  ó   • g r�   r   ©rC  Úkwargss     r   r”   Ú1MethodicalTests.test_filterArgs.<locals>.<lambda>ÿ  s   € ¸r   c                  ó   • g r�   r   rP  s     r   r”   rR     s   € ¸r   r   N)r   r   rL   )r   Ú	inputSpecÚ
outputSpecÚargsInÚargsOutÚ_s         r   Útest_filterArgsÚMethodicalTests.test_filterArgsú  s;   € ô
  Ñ <Ó=ˆ	Ü Ñ!=Ó>ˆ
ØˆÜ  ¨¨YÓC‰
ˆØ�‰�fÕ&r   c                 ó*   ^ •  " U 4S jS[         5      ng)z9
A L{MethodicalMachine} can only have one initial state.
c                   óÔ   >• \ rS rSr\" 5       r\R                  SS9S 5       r Y R                  \	5         \R                  SS9S 5       r
SSS5        Srg! , (       d  f       Srg= f)ÚCMethodicalTests.test_multipleInitialStatesFailure.<locals>.WillFaili
  Tr&   c                 ó   • g)z&The first initial state -- this is OK.Nr   r   s    r   ÚfirstInitialStateÚUMethodicalTests.test_multipleInitialStatesFailure.<locals>.WillFail.firstInitialState  r   r   c                 ó   • g)z4The second initial state -- results in a ValueError.Nr   r   s    r   ÚsecondInitialStateÚVMethodicalTests.test_multipleInitialStatesFailure.<locals>.WillFail.secondInitialState  r   r   Nr   )r2   r3   r4   r5   r
   r?   r9   r_  rG   râ   rb  r;   r   s   €r   ÚWillFailr]  
  sf   ø† Ù!Ó#ˆAà�W‰W˜TˆWÐ"ñ9ó #ð9ñ ×"Ñ" :Õ.à—‘ �Ð&ñKó 'ðK÷ /×.×.Ò.ús   ¶AÁ
A'rd  Nr  ©r   rd  s   ` r   Ú!test_multipleInitialStatesFailureÚ1MethodicalTests.test_multipleInitialStatesFailure  s   ø€ ÷
	K”võ 	Kr   c                 ó*   ^ •  " U 4S jS[         5      ng)zK
A L{MethodicalMachine} can only have one transition per start/event
pair.
c                   óF  >• \ rS rSr\" 5       r\R                  SS9S 5       r\R                  5       S 5       r\R                  5       S 5       r
\R                  \
\/ S9   Y R                  \5         \R                  \
\/ S9  SSS5        S	rg! , (       d  f       S	rg= f)
ÚAMethodicalTests.test_multipleTransitionsFailure.<locals>.WillFaili  Tr&   c                 ó   • g)zWe start here.Nr   r   s    r   ré   ÚGMethodicalTests.test_multipleTransitionsFailure.<locals>.WillFail.start   r   r   c                 ó   • g)zRainbows end.Nr   r   s    r   ÚendÚEMethodicalTests.test_multipleTransitionsFailure.<locals>.WillFail.end$  r   r   c                 ó   • g)z	An event.Nr   r   s    r   ÚeventÚGMethodicalTests.test_multipleTransitionsFailure.<locals>.WillFail.event(  r   r   r/   Nr   )r2   r3   r4   r5   r
   r?   r9   ré   rn  r7   rq  r:   rG   râ   r;   r   s   €r   rd  rj    sŸ   ø† Ù!Ó#ˆAà�W‰W˜TˆWÐ"ñ!ó #ð!ð �W‰W‹Yñ ó ð ð �W‰W‹Yñó ðð �J‰J�u C°ˆJÑ4Ù×"Ñ" :Õ.Ø—
‘
˜5¨°R�
Ñ8÷ /×.×.Ò.ús   Á3BÂ
B rd  Nr  re  s   ` r   Útest_multipleTransitionsFailureÚ/MethodicalTests.test_multipleTransitionsFailure  s   ø€ ÷	9”võ 	9r   c                 ót  •  " S S[         5      nU" 5       nU R                  [        5       nUR                  5         SSS5        U R	                  S[        WR                  5      5        U R	                  S[        UR                  5      5        UR                  5         U R                  [        5       nUR                  5         SSS5        U R	                  S[        UR                  5      5        U R	                  S[        UR                  5      5        g! , (       d  f       Ná= f! , (       d  f       Nj= f)zy
Calling any input method that lacks a transition for the machine's
current state raises an informative L{NoTransition}.
c                   óö   • \ rS rSr\" 5       r\R                  SS9S 5       r\R                  5       S 5       r\R                  5       S 5       r
\R                  5       S 5       r\R                  \
\/ 5        Srg	)
ÚFMethodicalTests.test_badTransitionForCurrentState.<locals>.OnlyOnePathi6  Tr&   c                 ó   • g)zStart state.Nr   r   s    r   ré   ÚLMethodicalTests.test_badTransitionForCurrentState.<locals>.OnlyOnePath.start9  r   r   c                 ó   • g)z
End state.Nr   r   s    r   rn  ÚJMethodicalTests.test_badTransitionForCurrentState.<locals>.OnlyOnePath.end=  r   r   c                 ó   • g)zMove from start to end.Nr   r   s    r   ÚadvanceÚNMethodicalTests.test_badTransitionForCurrentState.<locals>.OnlyOnePath.advanceA  r   r   c                 ó   • g)z%A transition from nowhere to nowhere.Nr   r   s    r   ÚdeadEndÚNMethodicalTests.test_badTransitionForCurrentState.<locals>.OnlyOnePath.deadEndE  r   r   r   N)r2   r3   r4   r5   r
   r?   r9   ré   rn  r7   r}  r€  r:   r;   r   r   r   ÚOnlyOnePathrw  6  s‡   † Ù!Ó#ˆAà�W‰W˜TˆWÐ"ñó #ðð �W‰W‹Yñó ðð �W‰W‹Yñ*ó ð*ð �W‰W‹Yñ8ó ð8ð �J‰J�w  R×(r   r‚  Nr€  ré   rn  )r=   rG   r   r€  rI   rJ   rK   r}  )r   r‚  r6   rN   s       r   Ú!test_badTransitionForCurrentStateÚ1MethodicalTests.test_badTransitionForCurrentState0  sÍ   € ô	)œ&ô 	)ñ* “-ˆØ×Ñœ|Ô,°Ø�O‰OÔ÷ -à�‰�i¤ R§\¡\Ó!2Ô3Ø�‰�gœs 2§<¡<Ó0Ô1Ø�‰ÔØ×Ñœ|Ô,°Ø�O‰OÔ÷ -à�‰�i¤ R§\¡\Ó!2Ô3Ø�‰�eœS §¡Ó.Õ/÷ -Õ,ú÷
 -Õ,ús   ¬DÂ4D)Ä
D&Ä)
D7c                 ór   •  " S S[         5      nU R                  U" 5       R                  5       SSS.5        g)zØ
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                   óª   • \ rS rSr\" 5       rS r\R                  SSS9S 5       r\R                  SS9S	 5       r	\R                  5       S
 5       rSrg)Ú1MethodicalTests.test_saveState.<locals>.Mechanismi^  c                 ó   • SU l         g rX   ©Úvaluer   s    r   Ú__init__Ú:MethodicalTests.test_saveState.<locals>.Mechanism.__init__a  s	   € Ø�•
r   úfirst-stateT©Ú
serializedr'   c                 ó   • g©zFirst state.Nr   r   s    r   ÚfirstÚ7MethodicalTests.test_saveState.<locals>.Mechanism.firstd  r   r   úsecond-state©r�  c                 ó   • g©zSecond state.Nr   r   s    r   ÚsecondÚ8MethodicalTests.test_saveState.<locals>.Mechanism.secondh  r   r   c                 ó    • UU R                   S.$ ©N©úmachine-stateú
some-valuer‰  ©r   r9   s     r   ÚsaveÚ6MethodicalTests.test_saveState.<locals>.Mechanism.savel  ó   € ð &+Ø"&§*¡*ñð r   r‰  N)r2   r3   r4   r5   r
   r?   r‹  r9   r’  r˜  Ú
serializerr   r;   r   r   r   r¼   r‡  ^  si   † Ù!Ó#ˆAòð �W‰W °tˆWÐ<ñó =ðð �W‰W ˆWÐ/ñ ó 0ð ð �\‰\‹^ñó ór   r¼   r�  rY   rœ  N)r=   r>   r   r  s     r   Útest_saveStateÚMethodicalTests.test_saveStateV  s7   € ô	œô 	ð* 	×ÑÙ‹K×ÑÓà!.Øñõ	
r   c                 óP  •  " S S[         5      nU" 5       nUR                  5         UR                  5       nUR                  U5      nU R	                  UR
                  S5        U R	                  UR                  5       S5        U R	                  UR                  5       SSS.5        g)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                   óº  • \ rS rSr\" 5       rS r\R                  SSS9S 5       r\R                  SS9S	 5       r	\R                  5       S
 5       r
\R                  5       S 5       r\R                  5       S 5       r\R                  \
\	\/S S9  \	R                  \
\	\/S S9  \R                  5       S 5       r\R!                  5       S 5       r\S 5       rSrg)Ú4MethodicalTests.test_restoreState.<locals>.Mechanismiƒ  c                 ó    • SU l         SU l        g )NrY   F©rŠ  Ú	ranOutputr   s    r   r‹  Ú=MethodicalTests.test_restoreState.<locals>.Mechanism.__init__†  s   € Ø�”
Ø!&�•r   r�  TrŽ  c                 ó   • gr‘  r   r   s    r   r’  Ú:MethodicalTests.test_restoreState.<locals>.Mechanism.firstŠ  r   r   r”  r•  c                 ó   • gr—  r   r   s    r   r˜  Ú;MethodicalTests.test_restoreState.<locals>.Mechanism.secondŽ  r   r   c                 ó   • gr   r   r   s    r   r7   Ú:MethodicalTests.test_restoreState.<locals>.Mechanism.input’  r   r   c                 ó    • SU l         SU l        g)Nr	   TrY   rª  r   s    r   r8   Ú;MethodicalTests.test_restoreState.<locals>.Mechanism.output–  s   € à�”
Ø!%�”Ør   c                 ó   • g)Nr	   r   r   s    r   Úoutput2Ú<MethodicalTests.test_restoreState.<locals>.Mechanism.output2œ  s   € àr   c                 ó   • [        U 5      S   $ ©Nr   rß   rÖ   s    r   r”   Ú=MethodicalTests.test_restoreState.<locals>.Mechanism.<lambda>   s   € ÄDÈÃGÈAÂJr   r–   c                 ó   • [        U 5      S   $ r¹  rß   rÖ   s    r   r”   rº  ¡  s   € ÄdÈ1ÃgÈaÂjr   c                 ó    • UU R                   S.$ r›  r‰  rŸ  s     r   r   Ú9MethodicalTests.test_restoreState.<locals>.Mechanism.save£  r¢  r   c                 ó    • US   U l         US   $ )Nrž  r�  r‰  )r   Úblobs     r   Ú_restoreÚ=MethodicalTests.test_restoreState.<locals>.Mechanism._restoreª  s   € à! ,Ñ/�”
Ø˜OÑ,Ð,r   c                 ó6   • U " 5       nUR                  U5        U$ r�   )rÀ  )Úclsr¿  r   s      r   ÚfromBlobÚ=MethodicalTests.test_restoreState.<locals>.Mechanism.fromBlob¯  s   € á“u�Ø—‘˜dÔ#Ø�r   )r«  rŠ  N)r2   r3   r4   r5   r
   r?   r‹  r9   r’  r˜  r7   r8   r¶  r:   r£  r   ÚunserializerrÀ  ÚclassmethodrÄ  r;   r   r   r   r¼   r¨  ƒ  s  † Ù!Ó#ˆAò'ð �W‰W °tˆWÐ<ñó =ðð �W‰W ˆWÐ/ñ ó 0ð ð �W‰W‹Yñó ðð �X‰X‹Zñó ðð
 �X‰X‹Zñó ðð �J‰J�u˜f v hÑ:NˆJÑOØ�K‰K˜˜v¨ yÑ<PˆKÑQà�\‰\‹^ñó ðð �^‰^Óñ-ó ð-ð ñó ór   r¼   Fr	   r”  rœ  N)r=   r7   r   rÄ  r>   r«  )r   r¼   Úm1r¿  Úm2s        r   Útest_restoreStateÚ!MethodicalTests.test_restoreState{  sˆ   € ô0	œô 0	ñd ‹[ˆØ
�‰Œ
Ø�w‰w‹yˆØ×Ñ Ó%ˆØ×Ñ˜Ÿ™ uÔ-Ø×Ñ˜Ÿ™› QÔ'Ø×ÑØ�G‰G‹Ià!/Øñõ	
r   c                 ó`   •  " S S[         5      nU" 5       nUR                  S5      S/:X  d   eg)zO
L{MethodicalMachine} can operate with type annotations on inputs and outputs.
c                   óÜ   • \ rS rSr\" 5       r\R                  5       S\4S j5       r\R                  5       S\S\4S j5       r
\R                  SS9S 5       r\R                  \\\
/S	9  S
rg)ÚAMethodicalTests.test_allowBasicTypeAnnotations.<locals>.MechanismiÈ  Úargc                 ó   • g)zAn inputNr   ©r   rÏ  s     r   Úan_inputÚJMethodicalTests.test_allowBasicTypeAnnotations.<locals>.Mechanism.an_inputË  r   r   Úreturnc                 ó   • US-   $ rX   r   rÑ  s     r   Ú	an_outputÚKMethodicalTests.test_allowBasicTypeAnnotations.<locals>.Mechanism.an_outputÏ  s   € à˜Q‘w�r   Tr&   c                 ó   • g)zA stateNr   r   s    r   r9   ÚGMethodicalTests.test_allowBasicTypeAnnotations.<locals>.Mechanism.stateÓ  r   r   r/   r   N)r2   r3   r4   r5   r
   r?   r7   rJ  rÒ  r8   rÖ  r9   r:   r;   r   r   r   r¼   rÎ  È  s†   † Ù!Ó#ˆAà�W‰W‹Yð Có ó ðð �X‰X‹Zð Sð ¨Só ó ðð �W‰W˜TˆWÐ"ñó #ðð �J‰J�x u°y°kˆJÔBr   r¼   r	   r½   N)r=   rÒ  )r   r¼   Ú	mechanisms      r   Útest_allowBasicTypeAnnotationsÚ.MethodicalTests.test_allowBasicTypeAnnotationsÃ  s4   € ô
	Cœô 	Cñ" “Kˆ	Ø×!Ñ! !Ó$¨¨Ó+Ð+Ñ+r   r   N)r2   r3   r4   r5   Ú__doc__r@   rO   r`   r�   rš   r«   rÀ   rÙ   r  r  r3  r@  rL  rY  rf  rs  rƒ  r¤  rÊ  rÛ  r;   r   r   r   r   r      s{   † ñò&@òP<ò('
òR'-òR!*òF>ò*"ò64"òlc7òJFò@ +òDò0
ò$	'òKò$9ò2$0òL#
òJF
õP,r   r   N)rÝ  Ú	functoolsr   Úunittestr   Úautomat._methodicalr   r   r   r   Ú r
   r   r   r   r   r   r   Ú<module>râ     s,   ðñõ Ý ç OÓ Oß .Ý ôM,�hõ M,r   