<s> from __future__ import absolute_import , print_function , division <EOL> import logging <EOL> import sys <EOL> import petl as etl <EOL> from petl . test . helpers import ieq , eq_ <EOL> from petl . util . vis import lookall <EOL> from petl . errors import DuplicateKeyError <EOL> from petl . transform . intervals import intervallookup , intervallookupone , facetintervallookup , facetintervallookupone , intervaljoin , intervalleftjoin , intervaljoinvalues , intervalsubtract , collapsedintervals , _Interval , intervalantijoin <EOL> logger = logging . getLogger ( __name__ ) <EOL> debug = logger . debug <EOL> try : <EOL> import intervaltree <EOL> except ImportError as e : <EOL> print ( '<STR_LIT>' % e , file = sys . stderr ) <EOL> else : <EOL> def test_intervallookup ( ) : <EOL> table = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> lkp = intervallookup ( table , '<STR_LIT:start>' , '<STR_LIT>' ) <EOL> actual = lkp . search ( <NUM_LIT:0> , <NUM_LIT:1> ) <EOL> expect = [ ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:1> , <NUM_LIT:2> ) <EOL> expect = [ ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:2> , <NUM_LIT:4> ) <EOL> expect = [ ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:2> , <NUM_LIT:5> ) <EOL> expect = [ ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:9> , <NUM_LIT> ) <EOL> expect = [ ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT> , <NUM_LIT> ) <EOL> expect = [ ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:1> ) <EOL> expect = [ ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:2> ) <EOL> expect = [ ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:4> ) <EOL> expect = [ ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:5> ) <EOL> expect = [ ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ] <EOL> eq_ ( expect , actual ) <EOL> def test_intervallookup_include_stop ( ) : <EOL> table = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:9> , None ) ) <EOL> lkp = intervallookup ( table , '<STR_LIT:start>' , '<STR_LIT>' , value = '<STR_LIT:value>' , <EOL> include_stop = True ) <EOL> actual = lkp . search ( <NUM_LIT:0> , <NUM_LIT:1> ) <EOL> expect = [ '<STR_LIT:foo>' ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:1> , <NUM_LIT:2> ) <EOL> expect = [ '<STR_LIT:foo>' ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:2> , <NUM_LIT:4> ) <EOL> expect = [ '<STR_LIT:foo>' , '<STR_LIT:bar>' , None ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:2> , <NUM_LIT:5> ) <EOL> expect = [ '<STR_LIT:foo>' , '<STR_LIT:bar>' , None ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:9> , <NUM_LIT> ) <EOL> expect = [ None ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT> , <NUM_LIT> ) <EOL> expect = [ ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:1> ) <EOL> expect = [ '<STR_LIT:foo>' ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:2> ) <EOL> expect = [ '<STR_LIT:foo>' ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:4> ) <EOL> expect = [ '<STR_LIT:foo>' , '<STR_LIT:bar>' , None ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:5> ) <EOL> expect = [ '<STR_LIT:bar>' , None ] <EOL> eq_ ( expect , actual ) <EOL> def test_intervallookupone ( ) : <EOL> table = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> lkp = intervallookupone ( table , '<STR_LIT:start>' , '<STR_LIT>' , value = '<STR_LIT:value>' ) <EOL> actual = lkp . search ( <NUM_LIT:0> , <NUM_LIT:1> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:1> , <NUM_LIT:2> ) <EOL> expect = '<STR_LIT:foo>' <EOL> eq_ ( expect , actual ) <EOL> try : <EOL> lkp . search ( <NUM_LIT:2> , <NUM_LIT:4> ) <EOL> except DuplicateKeyError : <EOL> pass <EOL> else : <EOL> assert False , '<STR_LIT>' <EOL> try : <EOL> lkp . search ( <NUM_LIT:2> , <NUM_LIT:5> ) <EOL> except DuplicateKeyError : <EOL> pass <EOL> else : <EOL> assert False , '<STR_LIT>' <EOL> try : <EOL> lkp . search ( <NUM_LIT:4> , <NUM_LIT:5> ) <EOL> except DuplicateKeyError : <EOL> pass <EOL> else : <EOL> assert False , '<STR_LIT>' <EOL> try : <EOL> lkp . search ( <NUM_LIT:5> , <NUM_LIT:7> ) <EOL> except DuplicateKeyError : <EOL> pass <EOL> else : <EOL> assert False , '<STR_LIT>' <EOL> actual = lkp . search ( <NUM_LIT:8> , <NUM_LIT:9> ) <EOL> expect = '<STR_LIT>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:9> , <NUM_LIT> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT> , <NUM_LIT> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:0> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:1> ) <EOL> expect = '<STR_LIT:foo>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:2> ) <EOL> expect = '<STR_LIT:foo>' <EOL> eq_ ( expect , actual ) <EOL> try : <EOL> lkp . search ( <NUM_LIT:4> ) <EOL> except DuplicateKeyError : <EOL> pass <EOL> else : <EOL> assert False , '<STR_LIT>' <EOL> try : <EOL> lkp . search ( <NUM_LIT:5> ) <EOL> except DuplicateKeyError : <EOL> pass <EOL> else : <EOL> assert False , '<STR_LIT>' <EOL> actual = lkp . search ( <NUM_LIT:8> ) <EOL> expect = '<STR_LIT>' <EOL> eq_ ( expect , actual ) <EOL> def test_intervallookupone_not_strict ( ) : <EOL> table = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> lkp = intervallookupone ( table , '<STR_LIT:start>' , '<STR_LIT>' , value = '<STR_LIT:value>' , <EOL> strict = False ) <EOL> actual = lkp . search ( <NUM_LIT:0> , <NUM_LIT:1> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:1> , <NUM_LIT:2> ) <EOL> expect = '<STR_LIT:foo>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:2> , <NUM_LIT:4> ) <EOL> expect = '<STR_LIT:foo>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:2> , <NUM_LIT:5> ) <EOL> expect = '<STR_LIT:foo>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:4> , <NUM_LIT:5> ) <EOL> expect = '<STR_LIT:bar>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:5> , <NUM_LIT:7> ) <EOL> expect = '<STR_LIT:bar>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:8> , <NUM_LIT:9> ) <EOL> expect = '<STR_LIT>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:9> , <NUM_LIT> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT> , <NUM_LIT> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:0> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:1> ) <EOL> expect = '<STR_LIT:foo>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:2> ) <EOL> expect = '<STR_LIT:foo>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:4> ) <EOL> expect = '<STR_LIT:bar>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:5> ) <EOL> expect = '<STR_LIT:bar>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp . search ( <NUM_LIT:8> ) <EOL> expect = '<STR_LIT>' <EOL> eq_ ( expect , actual ) <EOL> def test_facetintervallookup ( ) : <EOL> table = ( ( '<STR_LIT:type>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> lkp = facetintervallookup ( table , key = '<STR_LIT:type>' , start = '<STR_LIT:start>' , stop = '<STR_LIT>' ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:0> , <NUM_LIT:1> ) <EOL> expect = [ ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:1> , <NUM_LIT:2> ) <EOL> expect = [ ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:2> , <NUM_LIT:4> ) <EOL> expect = [ ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:2> , <NUM_LIT:5> ) <EOL> expect = [ ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:2> , <NUM_LIT:5> ) <EOL> expect = [ ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:9> , <NUM_LIT> ) <EOL> expect = [ ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT> , <NUM_LIT> ) <EOL> expect = [ ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:0> ) <EOL> expect = [ ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:1> ) <EOL> expect = [ ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:2> ) <EOL> expect = [ ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:4> ) <EOL> expect = [ ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:5> ) <EOL> expect = [ ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:5> ) <EOL> expect = [ ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ] <EOL> eq_ ( expect , actual ) <EOL> def test_facetintervallookupone ( ) : <EOL> table = ( ( '<STR_LIT:type>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> lkp = facetintervallookupone ( table , key = '<STR_LIT:type>' , start = '<STR_LIT:start>' , <EOL> stop = '<STR_LIT>' , value = '<STR_LIT:value>' ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:0> , <NUM_LIT:1> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:1> , <NUM_LIT:2> ) <EOL> expect = '<STR_LIT:foo>' <EOL> eq_ ( expect , actual ) <EOL> try : <EOL> lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:2> , <NUM_LIT:4> ) <EOL> except DuplicateKeyError : <EOL> pass <EOL> else : <EOL> assert False , '<STR_LIT>' <EOL> try : <EOL> lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:2> , <NUM_LIT:5> ) <EOL> except DuplicateKeyError : <EOL> pass <EOL> else : <EOL> assert False , '<STR_LIT>' <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:4> , <NUM_LIT:5> ) <EOL> expect = '<STR_LIT:bar>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:4> , <NUM_LIT:5> ) <EOL> expect = '<STR_LIT>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:5> , <NUM_LIT:7> ) <EOL> expect = '<STR_LIT:bar>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:5> , <NUM_LIT:7> ) <EOL> expect = '<STR_LIT>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:8> , <NUM_LIT:9> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:8> , <NUM_LIT:9> ) <EOL> expect = '<STR_LIT>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:9> , <NUM_LIT> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT> , <NUM_LIT> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:0> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:1> ) <EOL> expect = '<STR_LIT:foo>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:2> ) <EOL> expect = '<STR_LIT:foo>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:4> ) <EOL> expect = '<STR_LIT:bar>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:5> ) <EOL> expect = '<STR_LIT:bar>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:5> ) <EOL> expect = '<STR_LIT>' <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:8> ) <EOL> expect = None <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' ] . search ( <NUM_LIT:8> ) <EOL> expect = '<STR_LIT>' <EOL> eq_ ( expect , actual ) <EOL> def test_facetintervallookup_compound ( ) : <EOL> table = ( ( '<STR_LIT:type>' , '<STR_LIT>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> lkp = facetintervallookup ( table , key = ( '<STR_LIT:type>' , '<STR_LIT>' ) , start = '<STR_LIT:start>' , <EOL> stop = '<STR_LIT>' ) <EOL> actual = lkp [ '<STR_LIT>' , '<STR_LIT>' ] . search ( <NUM_LIT:1> , <NUM_LIT:2> ) <EOL> expect = [ ( '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) ] <EOL> eq_ ( expect , actual ) <EOL> actual = lkp [ '<STR_LIT>' , '<STR_LIT>' ] . search ( <NUM_LIT:2> , <NUM_LIT:4> ) <EOL> expect = [ ( '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) ] <EOL> eq_ ( expect , actual ) <EOL> def test_intervaljoin ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:d>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:e>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:1> , '<STR_LIT:f>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:2> , '<STR_LIT:g>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' ) ) <EOL> right = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> actual = intervaljoin ( left , right , <EOL> lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> debug ( lookall ( actual ) ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_intervaljoin_include_stop ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:d>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:e>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:1> , '<STR_LIT:f>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:2> , '<STR_LIT:g>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' ) ) <EOL> right = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> actual = intervaljoin ( left , right , <EOL> lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' , <EOL> include_stop = True ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:d>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:e>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:1> , '<STR_LIT:f>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:2> , '<STR_LIT:g>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_intervaljoin_prefixes ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:d>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:e>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:1> , '<STR_LIT:f>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:2> , '<STR_LIT:g>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' ) ) <EOL> right = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> actual = intervaljoin ( left , right , <EOL> lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' , <EOL> lprefix = '<STR_LIT>' , rprefix = '<STR_LIT>' ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_intervalleftjoin ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:d>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:e>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:1> , '<STR_LIT:f>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:2> , '<STR_LIT:g>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' ) ) <EOL> right = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> actual = intervalleftjoin ( left , right , <EOL> lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:d>' , None , None , None ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:e>' , None , None , None ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:1> , '<STR_LIT:f>' , None , None , None ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:2> , '<STR_LIT:g>' , None , None , None ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' , None , None , None ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' , None , None , None ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_intervaljoin_faceted ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:4> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:9> , <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT> , <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:4> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> ) ) <EOL> right = ( ( '<STR_LIT:type>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:type>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> actual = intervaljoin ( left , right , lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' , lkey = '<STR_LIT>' , <EOL> rkey = '<STR_LIT:type>' ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_intervalleftjoin_faceted ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:4> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:9> , <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT> , <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:4> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> ) ) <EOL> right = ( ( '<STR_LIT:type>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:type>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:9> , <NUM_LIT> , None , None , None , None ) , <EOL> ( '<STR_LIT>' , <NUM_LIT> , <NUM_LIT> , None , None , None , None ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> , None , None , None , None ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:2> , None , None , None , None ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:4> , None , None , None , None ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> , None , None , None , None ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> , None , None , None , None ) ) <EOL> actual = intervalleftjoin ( left , right , lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' , lkey = '<STR_LIT>' , <EOL> rkey = '<STR_LIT:type>' ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_intervalleftjoin_faceted_rkeymissing ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> ) ) <EOL> right = ( ( '<STR_LIT:type>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:type>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> , None , None , None , None ) ) <EOL> actual = intervalleftjoin ( left , right , lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' , lkey = '<STR_LIT>' , <EOL> rkey = '<STR_LIT:type>' ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_intervaljoins_faceted_compound ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:4> ) ) <EOL> right = ( ( '<STR_LIT:type>' , '<STR_LIT>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:type>' , '<STR_LIT>' , '<STR_LIT:start>' , <EOL> '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT>' , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) ) <EOL> actual = intervaljoin ( left , right , lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' , <EOL> lkey = ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> rkey = ( '<STR_LIT:type>' , '<STR_LIT>' ) ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> actual = intervalleftjoin ( left , right , lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' , <EOL> lkey = ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> rkey = ( '<STR_LIT:type>' , '<STR_LIT>' ) ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_intervalleftjoin_prefixes ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:d>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:e>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:1> , '<STR_LIT:f>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:2> , '<STR_LIT:g>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' ) ) <EOL> right = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> actual = intervalleftjoin ( left , right , <EOL> lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' , <EOL> lprefix = '<STR_LIT>' , rprefix = '<STR_LIT>' ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:d>' , None , None , None ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:e>' , None , None , None ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:1> , '<STR_LIT:f>' , None , None , None ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:2> , '<STR_LIT:g>' , None , None , None ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' , None , None , None ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' , None , None , None ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_intervalantijoin ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:d>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:e>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:1> , '<STR_LIT:f>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:2> , '<STR_LIT:g>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' ) ) <EOL> right = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> actual = intervalantijoin ( left , right , <EOL> lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:d>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:e>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:1> , '<STR_LIT:f>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:2> , '<STR_LIT:g>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' ) ) <EOL> debug ( lookall ( actual ) ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_intervalantijoin_include_stop ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:d>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:e>' ) , <EOL> ( <NUM_LIT:10> , <NUM_LIT> , '<STR_LIT:e>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:1> , '<STR_LIT:f>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:2> , '<STR_LIT:g>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' ) ) <EOL> right = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> actual = intervalantijoin ( left , right , <EOL> lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' , <EOL> include_stop = True ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:10> , <NUM_LIT> , '<STR_LIT:e>' ) ) <EOL> debug ( lookall ( actual ) ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_intervalantijoin_faceted ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:4> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:9> , <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT> , <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:4> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> ) ) <EOL> right = ( ( '<STR_LIT:type>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:9> , <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT> , <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:4> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> ) ) <EOL> actual = intervalantijoin ( left , right , lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' , lkey = '<STR_LIT>' , <EOL> rkey = '<STR_LIT:type>' ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_intervaljoinvalues_faceted ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:4> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:9> , <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT> , <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:4> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> ) ) <EOL> right = ( ( '<STR_LIT:type>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:value>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> , [ '<STR_LIT:foo>' ] ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:4> , [ '<STR_LIT:foo>' , '<STR_LIT:bar>' ] ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> , [ '<STR_LIT:foo>' , '<STR_LIT:bar>' ] ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:5> , [ '<STR_LIT>' ] ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:9> , <NUM_LIT> , [ ] ) , <EOL> ( '<STR_LIT>' , <NUM_LIT> , <NUM_LIT> , [ ] ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> , [ ] ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:2> , [ ] ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:4> , [ ] ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> , [ ] ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> , [ ] ) ) <EOL> actual = intervaljoinvalues ( left , right , lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' , lkey = '<STR_LIT>' , <EOL> rkey = '<STR_LIT:type>' , value = '<STR_LIT:value>' ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_subtract_1 ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:label>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> right = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:4> , True ) ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:label>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:3> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> actual = intervalsubtract ( left , right , <EOL> lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_subtract_2 ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:label>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> right = ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:4> , True ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:6> , True ) ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:label>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:3> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:5> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:5> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:6> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> actual = intervalsubtract ( left , right , <EOL> lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_subtract_faceted ( ) : <EOL> left = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:label>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> right = ( ( '<STR_LIT>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:foo>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:4> , True ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:6> , True ) ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:label>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:5> , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> actual = intervalsubtract ( left , right , <EOL> lkey = '<STR_LIT>' , rkey = '<STR_LIT>' , <EOL> lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) <EOL> def test_collapse ( ) : <EOL> tbl = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:label>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:12> , <NUM_LIT> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT> , <NUM_LIT> , '<STR_LIT>' ) ) <EOL> expect = [ _Interval ( <NUM_LIT:1> , <NUM_LIT:9> ) , _Interval ( <NUM_LIT:12> , <NUM_LIT> ) ] <EOL> actual = collapsedintervals ( tbl , start = '<STR_LIT>' , stop = '<STR_LIT:end>' ) <EOL> ieq ( expect , actual ) <EOL> tbl = ( ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT:label>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:6> , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:12> , <NUM_LIT> , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , <NUM_LIT> , <NUM_LIT> , '<STR_LIT>' ) ) <EOL> expect = [ ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:9> ) , ( '<STR_LIT>' , <NUM_LIT:12> , <NUM_LIT> ) ] <EOL> actual = collapsedintervals ( tbl , start = '<STR_LIT>' , stop = '<STR_LIT:end>' , <EOL> key = '<STR_LIT>' ) <EOL> ieq ( expect , actual ) <EOL> def test_integration ( ) : <EOL> left = etl . wrap ( ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:d>' ) , <EOL> ( <NUM_LIT:9> , <NUM_LIT> , '<STR_LIT:e>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:1> , '<STR_LIT:f>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:2> , '<STR_LIT:g>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:4> , '<STR_LIT:h>' ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:5> , '<STR_LIT:i>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' ) ) ) <EOL> right = etl . wrap ( ( ( '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) ) <EOL> actual = left . intervaljoin ( right , <EOL> lstart = '<STR_LIT>' , lstop = '<STR_LIT:end>' , <EOL> rstart = '<STR_LIT:start>' , rstop = '<STR_LIT>' ) <EOL> expect = ( ( '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' , '<STR_LIT:start>' , '<STR_LIT>' , '<STR_LIT:value>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> , '<STR_LIT:a>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:4> , '<STR_LIT:b>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:5> , '<STR_LIT:c>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:4> , '<STR_LIT:foo>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:3> , <NUM_LIT:7> , '<STR_LIT:bar>' ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:8> , '<STR_LIT>' , <NUM_LIT:4> , <NUM_LIT:9> , '<STR_LIT>' ) ) <EOL> ieq ( expect , actual ) <EOL> ieq ( expect , actual ) </s>
