
    5Ai                       d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
mZ e	j                  j                  d e ee      j!                         j"                  j"                               ddlmZmZmZmZmZ ddZddZddZdd	Zdd
ZddZddZddZddZ ddZ!ddZ"e#dk(  r e	jH                   e"              yy)z
Smoke tests for analysis/price_action.py.

Verifies pattern extraction from tech dicts and direction-aware scoring.

Run:
    cd ~/apex_v16
    python -m tests.test_price_action
    )annotationsN)Path)	PASignalsPAScorePATTERN_WEIGHTSextract_pa_signalsscore_pac                     t        d|         y )Nz  ok  )print)labels    ./home/work/apex_v16/tests/test_price_action.py_okr      s    	F5'
    c                    t        i       } t        | t              }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |       rt        j                  |       nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d }| j                  | j                  | j                  | j                  | j                  | j                  | j                   | j"                  g}t%        |      }| }|sddt        j                         v st        j                  t$              rt        j                  t$              ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d x}x}}| j&                  }d	}||k(  }|st        j(                  d
|fd||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| j*                  }d}||u }|st        j(                  d|fd||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}t-        | d      }|j.                  }d}||k(  }|st        j(                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j0                  }d}||k(  }|st        j(                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j2                  }d}||k(  }|st        j(                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j4                  }d}||k(  }|st        j(                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j6                  }g }||k(  }|st        j(                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j8                  }g }||k(  }|st        j(                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}t;        d       y )Nz5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancesigsr   )py0py1py2py4z0assert not %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}any)r   r   r         ?==z7%(py2)s
{%(py2)s = %(py0)s.candle_strength
} == %(py5)sr   r   py5assert %(py7)spy7Fis)z3%(py2)s
{%(py2)s = %(py0)s.volume_weak
} is %(py5)sBUYr   z5%(py2)s
{%(py2)s = %(py0)s.bullish_score
} == %(py5)sscorez5%(py2)s
{%(py2)s = %(py0)s.bearish_score
} == %(py5)sNEUTRALz0%(py2)s
{%(py2)s = %(py0)s.dominant
} == %(py5)sz0%(py2)s
{%(py2)s = %(py0)s.strength
} == %(py5)sz7%(py2)s
{%(py2)s = %(py0)s.favor_direction
} == %(py5)sz9%(py2)s
{%(py2)s = %(py0)s.adverse_direction
} == %(py5)szempty tech -> neutral score)r   r   r   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanationhammerbull_engulfingmorning_starshooting_starbear_engulfingevening_star	doji_bull	doji_bearr   candle_strength_call_reprcomparevolume_weakr	   bullish_scorebearish_scoredominantstrengthfavor_directionadverse_directionr   )	r   @py_assert3@py_format5@py_assert1@py_assert5@py_format6@py_assert4@py_format8r$   s	            r   test_empty_techrJ   #   s   b!DdI&&&&&&&&:&&&:&&&&&&d&&&d&&&&&&I&&&I&&&&&&&&&&KK!4!4d6G6G&&(;(;T=N=NNNDNN4 5s 4 5 5 5 5 5 5 5.4f5 544  5 5+49  5 5+494 5 5+495 5 5 5!4!45 5 &3&3&&&&3&&&&&&4&&&4&&&&&&3&&&&&&&$u$u$$$$u$$$$$$4$$$4$$$$$$u$$$$$$$T5!E#!#!####!######5###5######!########!#!####!######5###5######!#######>>&Y&>Y&&&&>Y&&&&&&5&&&5&&&>&&&Y&&&&&&&>>Q>Q>Q55>Q  &B& B&&&& B&&&&&&5&&&5&&& &&&B&&&&&&&""(b("b(((("b((((((5(((5((("(((b(((((((%&r   c            	     <   dddd} t        |       }g }|j                  }|}|r|j                  }|}|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }|j                  |       |rlddt        j                         v st        j                  |      rt        j                  |      ndt        j                        dz  }|j                  |       t        j                  |d	      i z  }d
d|iz  }	t        t        j                  |	            d x}x}x}}|j                  }d}
||
k(  }|st        j                  d|fd||
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d x}x}}
t        |d      }t        d   t        d   z   }|j                   }||z
  }t#        |      }d}||k  }|sKt        j                  d|fd||f      dt        j                         v st        j                  t"              rt        j                  t"              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}}|j$                  }d	}
||
k(  }|st        j                  d|fd||
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d x}x}}
|j&                  }d}
||
k(  }|st        j                  d|fd||
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d x}x}}
|j(                  }d }t+        ||      }||k(  }|sKt        j                  d|fd!||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      d"t        j                         v st        j                  t*              rt        j                  t*              nd"dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d#z  }d
d|iz  }	t        t        j                  |	            d x}x}x}}d}|j,                  }
||
v }|st        j                  d$|fd%||
f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |
      d&z  }dd|iz  }t        t        j                  |            d x}x}}
d}|j,                  }
||
v }|st        j                  d$|fd%||
f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |
      d&z  }dd|iz  }t        t        j                  |            d x}x}}
|j.                  }g }
||
k(  }|st        j                  d|fd'||
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d x}x}}
t1        d(       y ))NTgffffff?)r2   r3   r:   z#%(py4)s
{%(py4)s = %(py2)s.hammer
}r   )r   r   z+%(py8)s
{%(py8)s = %(py6)s.bull_engulfing
})py6py8r   assert %(py11)spy11r   r   r   r   r   r"   r2   r3   ư><)z_%(py7)s
{%(py7)s = %(py0)s((%(py3)s
{%(py3)s = %(py1)s.bullish_score
} - %(py4)s))
} < %(py10)sabsr$   expected_bullr   r   py3r   r   py10assert %(py12)spy12r%   BULLISHr'      )zW%(py2)s
{%(py2)s = %(py0)s.strength
} == %(py9)s
{%(py9)s = %(py4)s(%(py5)s, %(py7)s)
}round)r   r   r   r   r   py9in)z7%(py1)s in %(py5)s
{%(py5)s = %(py3)s.favor_direction
})r   rV   r   r*   zbullish patterns dominate)r   r2   r3   r+   r,   r-   r.   r/   append_format_boolopr0   r1   r:   r;   r	   r   r=   rS   r>   r?   r@   r\   rA   rB   r   )techr   rE   rC   @py_assert0@py_assert7rD   @py_format9@py_format10@py_format12rH   rG   rI   r$   rT   @py_assert2rF   @py_assert6@py_assert9@py_assert8@py_format11@py_format13s                         r   test_bullish_dominatesrn   :   s(   dsKDd#D.4;;.;.;4..........4...4...;....;.....4...4................&3&3&&&&3&&&&&&4&&&4&&&&&&3&&&&&&&T5!E#H-@P0QQM"":"]2:323:d:3d::::3d::::::3:::3::::::u:::u:::"::::::]:::]:::3:::d:::::::#!#!####!######5###5######!#######>>&Y&>Y&&&&>Y&&&&&&5&&&5&&&>&&&Y&&&&&&&>>4!4U=!44>44444>444444454445444>444444U444U444444=444=444!44444444444,u,,,8,,,,,8,,,,8,,,,,,u,,,u,,,,,,,,,,,4u444444444444444444u444u44444444444""(b("b(((("b((((((5(((5((("(((b(((((((#$r   c            	        dddd} t        |       }t        |d      }t        d dD              }|j                  }||z
  }t	        |      }d}||k  }|sKt        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndd	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}x}x}}|j                  }d}||k(  }|st        j                  d|fd||f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }g }||k(  }|st        j                  d|fd||f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }t!        |      }h d}||k(  }|s
t        j                  d|fd||f      dt        j                         v st        j                  t               rt        j                  t               ndd	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}x}}t#        d       y )NT)r5   r6   r7   r"   c              3  .   K   | ]  }t         |     y w)N)r   ).0ks     r   	<genexpr>z.test_bearish_adverse_to_buy.<locals>.<genexpr>V   s      Mq* Ms   rP   rQ   )z_%(py7)s
{%(py7)s = %(py0)s((%(py3)s
{%(py3)s = %(py1)s.bearish_score
} - %(py4)s))
} < %(py10)srS   r$   expected_bearrU   rX   rY   BEARISHr   r'   r   r   r   r)   >   r7   r5   r6   )zW%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.adverse_direction
})
} == %(py8)ssetr   r   rV   r   rM   assert %(py10)srW   zbearish patterns adverse to BUY)r   r	   sumr>   rS   r-   r;   r+   r,   r.   r/   r0   r1   r?   rA   rB   rv   r   )rb   r   r$   rt   rh   rF   ri   rj   rk   rl   rm   rE   rH   rC   rG   rI   rd   re   s                     r   test_bearish_adverse_to_buyrz   Q   s   !T4PDd#DT5!E MKM MM"":"]2:323:d:3d::::3d::::::3:::3::::::u:::u:::"::::::]:::]:::3:::d:::::::>>&Y&>Y&&&&>Y&&&&&&5&&&5&&&>&&&Y&&&&&&&  &B& B&&&& B&&&&&&5&&&5&&& &&&B&&&&&&&&& =3&' = ,= =' ,= = = =+<+<=' ,= = =6<f= =$<$<  = =3<9  = =6<f= =$<$<  = =3<9  = =3<9 ' = =3<9 ( = =3<9,= = = = =)<)<= = = )*r   c                    ddd} t        |       }t        |d      }t        |d      }|j                  }|j                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|j                  }|j                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|j                  }|j                  }	||	k(  }d}
|	|
k(  }|r|st        j                  d||fd||	|
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}	}
|j                  }t        |      }|j                  }t        |      }||k(  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}	x}}|j                  }t        |      }|j                  }t        |      }||k(  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}	x}}t!        d       y )NT)r5   r6   r"   SELLr   )zX%(py2)s
{%(py2)s = %(py0)s.bullish_score
} == %(py6)s
{%(py6)s = %(py4)s.bullish_score
}	buy_score
sell_scorer   r   r   rL   zassert %(py8)srM   )zX%(py2)s
{%(py2)s = %(py0)s.bearish_score
} == %(py6)s
{%(py6)s = %(py4)s.bearish_score
}ru   )r   r   )zN%(py2)s
{%(py2)s = %(py0)s.dominant
} == %(py7)s
{%(py7)s = %(py5)s.dominant
}z0%(py7)s
{%(py7)s = %(py5)s.dominant
} == %(py9)s)r   r   r   r   r]   rN   rO   )z%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.adverse_direction
})
} == %(py12)s
{%(py12)s = %(py7)s(%(py10)s
{%(py10)s = %(py8)s.favor_direction
})
}rv   )r   r   rV   r   r   rM   rW   rY   zassert %(py14)spy14z$favor/adverse swap on direction flip)r   r	   r=   r-   r;   r+   r,   r.   r/   r0   r1   r>   r?   rB   rv   rA   r   )rb   r   r}   r~   rE   rF   rC   @py_format7re   ri   rk   rH   rf   rg   rh   rj   @py_assert11rm   @py_format15s                      r   $test_direction_inverts_favor_adverser   f   s3   !T:Dd#Du%I$'J "">j&>&>>"&>>>>>"&>>>>>>>9>>>9>>>">>>>>>j>>>j>>>&>>>>>>>>"">j&>&>>"&>>>>>"&>>>>>>>9>>>9>>>">>>>>>j>>>j>>>&>>>>>>>>A!4!4A!4AA	A!4	AAAAA!4	AAAAAA9AAA9AAAAAAAAAAAAAAA!4AAA	AAAAAAA**N3*+N:3M3MNs3M/NN+/NNNNN+/NNNNNNN3NNN3NNNNNNyNNNyNNN*NNN+NNNNNNsNNNsNNNNNN:NNN:NNN3MNNN/NNNNNNNN++N3+,NI4M4MN4M0NN,0NNNNN,0NNNNNNN3NNN3NNNNNNzNNNzNNN+NNN,NNNNNNNNNNNNNNNINNNINNN4MNNN0NNNNNNNN./r   c                    ddd} ddd}ddi}ddd}t        |       }|j                  }d}||u }|s
t        j                  d|fd||f      d	t	        j
                         v st        j                  t               rt        j                  t               nd	d
t	        j
                         v st        j                  |       rt        j                  |       nd
t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}x}}t        |       }|j                  }d}||u }|s
t        j                  d|fd||f      d	t	        j
                         v st        j                  t               rt        j                  t               nd	d
t	        j
                         v st        j                  |       rt        j                  |       nd
t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}x}}t        |      }|j                  }d}||u }|s
t        j                  d|fd||f      d	t	        j
                         v st        j                  t               rt        j                  t               nd	dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}x}}t        |      }|j                  }d}||u }|s
t        j                  d|fd||f      d	t	        j
                         v st        j                  t               rt        j                  t               nd	dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}x}}t        |      }|j                  }d}||u }|s
t        j                  d|fd||f      d	t	        j
                         v st        j                  t               rt        j                  t               nd	dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}x}}t        |      }|j                  }d}||u }|s
t        j                  d|fd||f      d	t	        j
                         v st        j                  t               rt        j                  t               nd	dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}x}}t        |      }|j                  }d}||u }|s
t        j                  d|fd||f      d	t	        j
                         v st        j                  t               rt        j                  t               nd	dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}x}}t        d       y )NTbull)doji	doji_typebearr   Fr    )zO%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}.doji_bull
} is %(py8)sr   	tech_bullrw   rx   rW   )zO%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}.doji_bear
} is %(py8)s	tech_bear	tech_nonetech_offzdoji split by doji_type)r   r8   r-   r;   r+   r,   r.   r/   r0   r1   r9   r   )
r   r   r   r   rh   rH   rd   ri   re   rl   s
             r   test_doji_split_by_typer   {   s   F3IF3IIV4Hi(:(22:d:2d::::2d:::::::::::::::i:::i:::(:::2:::d:::::::i(;(22;e;2e;;;;2e;;;;;;;;;;;;;;;i;;;i;;;(;;;2;;;e;;;;;;;i(:(22:d:2d::::2d:::::::::::::::i:::i:::(:::2:::d:::::::i(;(22;e;2e;;;;2e;;;;;;;;;;;;;;;i;;;i;;;(;;;2;;;e;;;;;;;i(;(22;e;2e;;;;2e;;;;;;;;;;;;;;;i;;;i;;;(;;;2;;;e;;;;;;;i(;(22;e;2e;;;;2e;;;;;;;;;;;;;;;i;;;i;;;(;;;2;;;e;;;;;;;h':'11:U:1U::::1U:::::::::::::::h:::h:::':::1:::U:::::::!"r   c                 	   ddd} t        |       }t        |d      }|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}|j                  }dg}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}|j                  }dg}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}t!        d       y )NT)r2   r5   r"   r   r   r#   r$   r   r   r   r%   r&   r'   r   r(   r2   r)   r5   r*   z!tied scores -> NEUTRAL strength 0)r   r	   r=   r-   r;   r+   r,   r.   r/   r0   r1   r>   r?   r@   rA   rB   r   )rb   r   r$   rE   rH   rC   rG   rI   s           r   test_tied_scores_neutralr      s   T2Dd#DT5!E%#%#%%%%#%%%%%%5%%%5%%%%%%#%%%%%%%%#%#%%%%#%%%%%%5%%%5%%%%%%#%%%%%%%>>&Y&>Y&&&&>Y&&&&&&5&&&5&&&>&&&Y&&&&&&&>>Q>Q>Q55>Q  .XJ. J.... J......5...5... ...J.......""7&77"&77777"&777777757775777"777&77777777+,r   c                    t        dd      } | j                         }d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}d
}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}t        d       y )NT)r3   r2   u   bull_engulfing=⭐(1.5)r^   z%(py1)s in %(py3)soutr   rV   assert %(py5)sr   u   hammer=⭐(1.0)u.   render_explicit: active marked with ⭐+weightr   render_explicitr-   r;   r/   r+   r,   r.   r0   r1   r   sigr   rc   rh   @py_format4rG   s         r   "test_render_explicit_active_markedr      s    
4
5C



C$+$++++$+++$++++++++++++++++########################89r   c                 ,   t               } | j                         }d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}d	}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}t        d
       y )Nu   bull_engulfing=·(1.5)r^   r   r   r   r   r   u   shooting_star=·(1.0)u   doji_bull=·(0.6)u.   render_explicit: inactive shown with ·+weightr   r   s         r   #test_render_explicit_inactive_shownr      s4   
+C



C#*#s****#s***#******s***s*******")"c))))"c)))"))))))c)))c)))))))%#%%%%#%%%%%%%%%#%%%#%%%%%%%89r   c                    t               j                         } | j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}}| j                  }d	} ||      }|sd
dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d x}x}}d}	|	| v }
|
st        j                  d|
fd|	| f      t        j                  |	      dt        j                         v st        j                  |       rt        j                  |       nddz  }dd|iz  }t        t        j                  |            d x}	}
t        d       y )N
   r   )zK%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.count
}(%(py4)s)
} == %(py9)sr   )r   r   r   rL   r]   rN   rO   zBullish:zLassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.startswith
}(%(py4)s)
}r   z	
Bearish:r^   r   r   r   r   z(render_explicit: 2 lines Bullish/Bearish)r   r   countr-   r;   r+   r,   r.   r/   r0   r1   
startswithr   )r   rE   rC   rF   rk   rd   rf   rg   r   rc   rh   r   rG   s                r   test_render_explicit_two_linesr      sq   
+
%
%
'C99T9T?a?a?a339T?a>>%*%>*%%%%%%%%3%%%3%%%>%%%*%%%%%%%%%%<3<3<3323r   c                     t        d       t                t                t                t	                t                t                t                t                t                t        d       y)Nztest_price_action.pyzALL 9 TESTS PASSEDr   )
r   rJ   rn   rz   r   r   r   r   r   r    r   r   mainr      sM    	
 !!(*&(')"$	
r   __main__)r   strreturnNone)r   r   )r   int)%__doc__
__future__r   builtinsr+   _pytest.assertion.rewrite	assertionrewriter-   syspathlibr   pathinsertr   __file__resolveparentanalysis.price_actionr   r   r   r   r	   r   rJ   rn   rz   r   r   r   r   r   r   r   __name__exitr   r   r   <module>r      s    #   
  3tH~--/66==> ? '.%.+*0*#(-&::4 zCHHTV r   