<s> """<STR_LIT>""" <EOL> import common <EOL> from pyalgotrade . technical import cross <EOL> from pyalgotrade . technical import ma <EOL> from pyalgotrade import dataseries <EOL> class HelpersTestCase ( common . TestCase ) : <EOL> def test_get_stripped_left ( self ) : <EOL> v1 , v2 = cross . _get_stripped ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , [ <NUM_LIT:1> ] , True ) <EOL> self . assertEqual ( v1 , [ <NUM_LIT:1> ] ) <EOL> self . assertEqual ( v2 , [ <NUM_LIT:1> ] ) <EOL> v1 , v2 = cross . _get_stripped ( [ <NUM_LIT:1> ] , [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , True ) <EOL> self . assertEqual ( v1 , [ <NUM_LIT:1> ] ) <EOL> self . assertEqual ( v2 , [ <NUM_LIT:1> ] ) <EOL> v1 , v2 = cross . _get_stripped ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , [ <NUM_LIT:1> , <NUM_LIT:2> ] , True ) <EOL> self . assertEqual ( v1 , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) <EOL> self . assertEqual ( v2 , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) <EOL> v1 , v2 = cross . _get_stripped ( [ <NUM_LIT:1> , <NUM_LIT:2> ] , [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , True ) <EOL> self . assertEqual ( v1 , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) <EOL> self . assertEqual ( v2 , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) <EOL> def test_get_stripped_right ( self ) : <EOL> v1 , v2 = cross . _get_stripped ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , [ <NUM_LIT:1> ] , False ) <EOL> self . assertEqual ( v1 , [ <NUM_LIT:3> ] ) <EOL> self . assertEqual ( v2 , [ <NUM_LIT:1> ] ) <EOL> v1 , v2 = cross . _get_stripped ( [ <NUM_LIT:1> ] , [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , False ) <EOL> self . assertEqual ( v1 , [ <NUM_LIT:1> ] ) <EOL> self . assertEqual ( v2 , [ <NUM_LIT:3> ] ) <EOL> v1 , v2 = cross . _get_stripped ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , [ <NUM_LIT:1> , <NUM_LIT:2> ] , False ) <EOL> self . assertEqual ( v1 , [ <NUM_LIT:2> , <NUM_LIT:3> ] ) <EOL> self . assertEqual ( v2 , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) <EOL> v1 , v2 = cross . _get_stripped ( [ <NUM_LIT:1> , <NUM_LIT:2> ] , [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , False ) <EOL> self . assertEqual ( v1 , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) <EOL> self . assertEqual ( v2 , [ <NUM_LIT:2> , <NUM_LIT:3> ] ) <EOL> def test_compute_diff ( self ) : <EOL> self . assertEqual ( cross . compute_diff ( [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ] , [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:2> ] ) , [ <NUM_LIT:1> , <NUM_LIT:0> , - <NUM_LIT:1> ] ) <EOL> self . assertEqual ( cross . compute_diff ( [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:2> ] , [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ] ) , [ - <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ] ) <EOL> class TestCase ( common . TestCase ) : <EOL> def __buildSeqDS ( self , values ) : <EOL> ret = dataseries . SequenceDataSeries ( ) <EOL> for value in values : <EOL> ret . append ( value ) <EOL> return ret <EOL> def testCrossAboveOnce ( self ) : <EOL> values1 = self . __buildSeqDS ( [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:10> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ] ) <EOL> values2 = self . __buildSeqDS ( [ <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:2> ] ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:0> , <NUM_LIT:2> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:1> , <NUM_LIT:3> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:2> , <NUM_LIT:4> ) , <NUM_LIT:1> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:3> , <NUM_LIT:5> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:4> , <NUM_LIT:6> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:5> , <NUM_LIT:7> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:0> , <NUM_LIT:3> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:1> , <NUM_LIT:4> ) , <NUM_LIT:1> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:2> , <NUM_LIT:5> ) , <NUM_LIT:1> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:3> , <NUM_LIT:6> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:4> , <NUM_LIT:7> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:0> , <NUM_LIT:7> ) , <NUM_LIT:1> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:0> , - <NUM_LIT:1> ) , <NUM_LIT:1> ) <EOL> def testCrossAboveMany ( self ) : <EOL> count = <NUM_LIT:100> <EOL> values1 = [ - <NUM_LIT:1> if i % <NUM_LIT:2> == <NUM_LIT:0> else <NUM_LIT:1> for i in range ( count ) ] <EOL> values2 = [ <NUM_LIT:0> for i in range ( count ) ] <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:0> , <NUM_LIT:0> ) , <NUM_LIT:0> ) <EOL> period = <NUM_LIT:2> <EOL> for i in range ( <NUM_LIT:1> , count ) : <EOL> if i % <NUM_LIT:2> == <NUM_LIT:0> : <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , i - period + <NUM_LIT:1> , i + <NUM_LIT:1> ) , <NUM_LIT:0> ) <EOL> else : <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , i - period + <NUM_LIT:1> , i + <NUM_LIT:1> ) , <NUM_LIT:1> ) <EOL> period = <NUM_LIT:4> <EOL> for i in range ( <NUM_LIT:3> , count ) : <EOL> if i % <NUM_LIT:2> == <NUM_LIT:0> : <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , i - period + <NUM_LIT:1> , i + <NUM_LIT:1> ) , <NUM_LIT:1> ) <EOL> else : <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , i - period + <NUM_LIT:1> , i + <NUM_LIT:1> ) , <NUM_LIT:2> ) <EOL> self . assertEqual ( cross . cross_above ( values1 , values2 , <NUM_LIT:0> , count ) , count / <NUM_LIT:2> ) <EOL> def testCrossBelowOnce ( self ) : <EOL> values1 = self . __buildSeqDS ( [ <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:2> ] ) <EOL> values2 = self . __buildSeqDS ( [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:10> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ] ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:0> , <NUM_LIT:2> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:1> , <NUM_LIT:3> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:2> , <NUM_LIT:4> ) , <NUM_LIT:1> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:3> , <NUM_LIT:5> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:4> , <NUM_LIT:6> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:5> , <NUM_LIT:7> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:0> , <NUM_LIT:3> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:1> , <NUM_LIT:4> ) , <NUM_LIT:1> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:2> , <NUM_LIT:5> ) , <NUM_LIT:1> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:3> , <NUM_LIT:6> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:4> , <NUM_LIT:7> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:0> , <NUM_LIT:7> ) , <NUM_LIT:1> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:0> , - <NUM_LIT:1> ) , <NUM_LIT:1> ) <EOL> def testCrossBelowMany ( self ) : <EOL> count = <NUM_LIT:100> <EOL> values1 = [ <NUM_LIT:0> for i in range ( count ) ] <EOL> values2 = [ - <NUM_LIT:1> if i % <NUM_LIT:2> == <NUM_LIT:0> else <NUM_LIT:1> for i in range ( count ) ] <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:0> , <NUM_LIT:0> ) , <NUM_LIT:0> ) <EOL> period = <NUM_LIT:2> <EOL> for i in range ( <NUM_LIT:1> , count ) : <EOL> if i % <NUM_LIT:2> == <NUM_LIT:0> : <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , i - period + <NUM_LIT:1> , i + <NUM_LIT:1> ) , <NUM_LIT:0> ) <EOL> else : <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , i - period + <NUM_LIT:1> , i + <NUM_LIT:1> ) , <NUM_LIT:1> ) <EOL> period = <NUM_LIT:4> <EOL> for i in range ( <NUM_LIT:3> , count ) : <EOL> if i % <NUM_LIT:2> == <NUM_LIT:0> : <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , i - period + <NUM_LIT:1> , i + <NUM_LIT:1> ) , <NUM_LIT:1> ) <EOL> else : <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , i - period + <NUM_LIT:1> , i + <NUM_LIT:1> ) , <NUM_LIT:2> ) <EOL> self . assertEqual ( cross . cross_below ( values1 , values2 , <NUM_LIT:0> , count ) , count / <NUM_LIT:2> ) <EOL> def testCrossAboveWithSMA ( self ) : <EOL> ds1 = dataseries . SequenceDataSeries ( ) <EOL> ds2 = dataseries . SequenceDataSeries ( ) <EOL> sma1 = ma . SMA ( ds1 , <NUM_LIT:15> ) <EOL> sma2 = ma . SMA ( ds2 , <NUM_LIT> ) <EOL> for i in range ( <NUM_LIT:100> ) : <EOL> ds1 . append ( i ) <EOL> ds2 . append ( <NUM_LIT:50> ) <EOL> if i == <NUM_LIT> : <EOL> self . assertEqual ( cross . cross_above ( sma1 [ : ] , sma2 [ : ] , - <NUM_LIT:2> , None ) , <NUM_LIT:1> ) <EOL> else : <EOL> self . assertEqual ( cross . cross_above ( sma1 [ : ] , sma2 [ : ] , - <NUM_LIT:2> , None ) , <NUM_LIT:0> ) <EOL> def testWithLists ( self ) : <EOL> self . assertEqual ( cross . cross_above ( [ <NUM_LIT:1> , <NUM_LIT:2> ] , [ <NUM_LIT:1> , <NUM_LIT:1> ] , - <NUM_LIT:2> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_above ( [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:2> ] , [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ] , - <NUM_LIT:3> ) , <NUM_LIT:1> ) <EOL> self . assertEqual ( cross . cross_above ( [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:2> ] , [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ] , - <NUM_LIT:3> ) , <NUM_LIT:1> ) <EOL> self . assertEqual ( cross . cross_above ( [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:2> ] , [ <NUM_LIT:1> , <NUM_LIT:1> ] , - <NUM_LIT:3> ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( cross . cross_above ( [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:2> ] , [ <NUM_LIT:1> , <NUM_LIT:1> ] , - <NUM_LIT:3> ) , <NUM_LIT:1> ) </s>
