コード例 #1
0
def test_overlaps():
    # Overlaps should reject non supported types
    with pytest.raises(TypeError):
        I.closed(0, 1).to_atomic().overlaps(1)
    with pytest.raises(TypeError):
        I.closed(0, 1).overlaps(1)
        
    assert I.closed(0, 1).overlaps(I.closed(0, 1))
    assert I.closed(0, 1).overlaps(I.open(0, 1))
    assert I.open(0, 1).overlaps(I.closed(0, 1))
    assert I.closed(0, 1).overlaps(I.openclosed(0, 1))
    assert I.closed(0, 1).overlaps(I.closedopen(0, 1))

    assert I.closed(1, 2).overlaps(I.closed(2, 3)) 
    assert I.closed(1, 2).overlaps(I.closedopen(2, 3))
    assert I.openclosed(1, 2).overlaps(I.closed(2, 3)) 
    assert I.openclosed(1, 2).overlaps(I.closedopen(2, 3))

    assert not I.closed(0, 1).overlaps(I.closed(3, 4))
    assert not I.closed(3, 4).overlaps(I.closed(0, 1))

    assert not I.closed(0, 1).overlaps(I.open(1, 2))
    assert not I.closed(0, 1).overlaps(I.openclosed(1, 2))
    assert not I.closedopen(0, 1).overlaps(I.closed(1, 2))
    assert not I.closedopen(0, 1).overlaps(I.closedopen(1, 2))
    assert not I.closedopen(0, 1).overlaps(I.openclosed(1, 2))
    assert not I.closedopen(0, 1).overlaps(I.open(1, 2))
    assert not I.open(0, 1).overlaps(I.open(1, 2))

    assert not I.empty().overlaps(I.open(-I.inf, I.inf))
    assert not I.open(-I.inf, I.inf).overlaps(I.empty())
コード例 #2
0
def test_replace():
    i = I.open(-I.inf, I.inf)
    assert i.replace(lower=lambda v: 1,
                     upper=lambda v: 1) == I.open(-I.inf, I.inf)
    assert i.replace(lower=lambda v: 1, upper=lambda v: 2,
                     ignore_inf=False) == I.open(1, 2)

    assert I.empty().replace(left=I.CLOSED, right=I.CLOSED) == I.empty()
    assert I.empty().replace(lower=1, upper=2) == I.open(1, 2)
    assert I.empty().replace(lower=lambda v: 1, upper=lambda v: 2) == I.empty()
    assert I.empty().replace(lower=lambda v: 1,
                             upper=lambda v: 2,
                             ignore_inf=False) == I.open(1, 2)

    i = I.closed(0, 1) | I.open(2, 3)
    assert i.replace() == i
    assert i.replace(I.OPEN, -1, 4,
                     I.OPEN) == I.openclosed(-1, 1) | I.open(2, 4)
    assert i.replace(lower=2) == I.closedopen(2, 3)
    assert i.replace(upper=1) == I.closedopen(0, 1)
    assert i.replace(lower=5) == I.empty()
    assert i.replace(upper=-5) == I.empty()
    assert i.replace(
        left=lambda v: not v,
        lower=lambda v: v - 1,
        upper=lambda v: v + 1,
        right=lambda v: not v) == I.openclosed(-1, 1) | I.openclosed(2, 4)

    assert I.empty().replace(lower=2, upper=4) == I.open(2, 4)
コード例 #3
0
def test_creation():
    assert I.closed(0, 1) == I.AtomicInterval(I.CLOSED, 0, 1, I.CLOSED)
    assert I.open(0, 1) == I.AtomicInterval(I.OPEN, 0, 1, I.OPEN)
    assert I.openclosed(0, 1) == I.AtomicInterval(I.OPEN, 0, 1, I.CLOSED)
    assert I.closedopen(0, 1) == I.AtomicInterval(I.CLOSED, 0, 1, I.OPEN)
    assert I.closed(-I.inf, I.inf) == I.open(-I.inf, I.inf)

    assert I.singleton(2) == I.closed(2, 2)
    assert I.Interval() == I.open(0, 0)
    assert I.empty() == I.Interval()
    assert I.closed(3, -3) == I.empty()
    assert I.openclosed(3, 3) == I.empty()

    # I.empty() is a singleton
    assert I.empty() is I.empty()

    assert I.Interval(I.closed(0, 1).to_atomic()) == I.closed(0, 1)
    assert I.Interval(I.closed(0, 1)) == I.closed(0, 1)
    assert I.Interval(I.closed(0, 1).to_atomic(),
                      I.closed(2, 3)) == I.closed(0, 1) | I.closed(2, 3)
    assert I.Interval(I.closed(0, 1)
                      | I.closed(2, 3)) == I.closed(0, 1) | I.closed(2, 3)

    with pytest.raises(TypeError):
        I.Interval(1)
コード例 #4
0
def test_from_string_customized():
    i1, i2, i3, i4 = '<"0"-"1">', '<!"0"-"1">', '<"0"-"1"!>', '<!"0"-"1"!>'
    params = {
        'conv': lambda s: int(s[1:-1]),
        'disj': ' or ',
        'sep': '-',
        'left_open': '<!',
        'left_closed': '<',
        'right_open': '!>',
        'right_closed': '>',
        'pinf': r'\+oo',
        'ninf': '-oo',
    }

    assert I.from_string(i1, **params) == I.closed(0, 1)
    assert I.from_string(i2, **params) == I.openclosed(0, 1)
    assert I.from_string(i3, **params) == I.closedopen(0, 1)
    assert I.from_string(i4, **params) == I.open(0, 1)

    assert I.from_string('<!!>', **params) == I.empty()
    assert I.from_string('<"1">', **params) == I.singleton(1)

    assert I.from_string('<!-oo-"1">', **params) == I.openclosed(-I.inf, 1)
    assert I.from_string('<"1"-+oo!>', **params) == I.closedopen(1, I.inf)

    assert I.from_string('<"0"-"1"> or <"2"-"3">', **params) == I.closed(0, 1) | I.closed(2, 3)
コード例 #5
0
def test_overlaps_permissive():
    assert I.closed(0, 1).overlaps(I.closed(0, 1), permissive=True)
    assert I.closed(0, 1).overlaps(I.open(0, 1), permissive=True)
    assert I.open(0, 1).overlaps(I.closed(0, 1), permissive=True)
    assert I.closed(0, 1).overlaps(I.openclosed(0, 1), permissive=True)
    assert I.closed(0, 1).overlaps(I.closedopen(0, 1), permissive=True)

    assert I.closed(1, 2).overlaps(I.closed(2, 3), permissive=True) 
    assert I.closed(1, 2).overlaps(I.closedopen(2, 3), permissive=True)
    assert I.openclosed(1, 2).overlaps(I.closed(2, 3), permissive=True) 
    assert I.openclosed(1, 2).overlaps(I.closedopen(2, 3), permissive=True)

    assert not I.closed(0, 1).overlaps(I.closed(3, 4), permissive=True)
    assert not I.closed(3, 4).overlaps(I.closed(0, 1), permissive=True)

    assert I.closed(0, 1).overlaps(I.open(1, 2), permissive=True)
    assert I.closed(0, 1).overlaps(I.openclosed(1, 2), permissive=True)
    assert I.closedopen(0, 1).overlaps(I.closed(1, 2), permissive=True)
    assert I.closedopen(0, 1).overlaps(I.closedopen(1, 2), permissive=True)
    assert not I.closedopen(0, 1).overlaps(I.openclosed(1, 2), permissive=True)
    assert not I.closedopen(0, 1).overlaps(I.open(1, 2), permissive=True)
    assert not I.open(0, 1).overlaps(I.open(1, 2), permissive=True)

    assert not I.empty().overlaps(I.open(-I.inf, I.inf), permissive=True)
    assert not I.open(-I.inf, I.inf).overlaps(I.empty(), permissive=True)
コード例 #6
0
def test_to_string_customized():
    i1, i2, i3, i4 = I.closed(0, 1), I.openclosed(0, 1), I.closedopen(0, 1), I.open(0, 1)
    params = {
        'disj': ' or ',
        'sep': '-',
        'left_open': '<!',
        'left_closed': '<',
        'right_open': '!>',
        'right_closed': '>',
        'conv': lambda s: '"{}"'.format(s),
        'pinf': '+oo',
        'ninf': '-oo',
    }

    assert I.to_string(i1, **params) == '<"0"-"1">'
    assert I.to_string(i2, **params) == '<!"0"-"1">'
    assert I.to_string(i3, **params) == '<"0"-"1"!>'
    assert I.to_string(i4, **params) == '<!"0"-"1"!>'

    assert I.to_string(I.empty(), **params) == '<!!>'
    assert I.to_string(I.singleton(1), **params) == '<"1">'

    assert I.to_string(I.openclosed(-I.inf, 1), **params) == '<!-oo-"1">'
    assert I.to_string(I.closedopen(1, I.inf), **params) == '<"1"-+oo!>'

    assert I.to_string(I.closed(0, 1) | I.closed(2, 3), **params) == '<"0"-"1"> or <"2"-"3">'
コード例 #7
0
def test_difference():
    assert I.closed(1, 4) - I.closed(1, 3) == I.openclosed(3, 4)
    assert I.closed(1, 4) - I.closed(1, 3).to_atomic() == I.openclosed(3, 4)
    assert I.closed(1, 4).to_atomic() - I.closed(
        1, 3).to_atomic() == I.openclosed(3, 4)
    assert (I.closed(1, 4) - I.closed(1, 4)).is_empty()
    assert I.closed(0, 1) - I.closed(2, 3) == I.closed(0, 1)
    assert I.closed(0, 4) - I.closed(2, 3) == I.closedopen(
        0, 2) | I.openclosed(3, 4)
コード例 #8
0
def test_to_data():
    assert I.to_data(I.closedopen(2, 3)) == [(I.CLOSED, 2, 3, I.OPEN)]
    assert I.to_data(I.openclosed(2, I.inf)) == [(I.OPEN, 2, float('inf'), I.OPEN)]
    assert I.to_data(I.closed(-I.inf, 2)) == [(I.OPEN, float('-inf'), 2, I.CLOSED)]

    assert I.to_data(I.empty()) == [(I.OPEN, float('inf'), float('-inf'), I.OPEN)]

    i = I.openclosed(-I.inf, 4) | I.closedopen(6, I.inf)
    assert I.to_data(i) == [(I.OPEN, float('-inf'), 4, I.CLOSED), (I.CLOSED, 6, float('inf'), I.OPEN)]
    assert I.to_data(i, conv=str, pinf='highest', ninf='lowest') == [(I.OPEN, 'lowest', '4', I.CLOSED), (I.CLOSED, '6', 'highest', I.OPEN)]
コード例 #9
0
def test_complement():
    assert ~I.closed(1, 2) == I.open(-I.inf, 1) | I.open(2, I.inf)
    assert ~I.open(1, 2) == I.openclosed(-I.inf, 1) | I.closedopen(2, I.inf)

    intervals = [I.closed(0, 1), I.open(0, 1), I.openclosed(0, 1), I.closedopen(0, 1)]
    for interval in intervals:
        assert ~(~interval) == interval
    assert ~I.open(1, 1) == I.open(-I.inf, I.inf)
    assert (~I.closed(-I.inf, I.inf)).is_empty()

    assert ~I.empty() == I.open(-I.inf, I.inf)
コード例 #10
0
def test_atomic_bounds():
    i = I.openclosed(1, 2).to_atomic()
    assert i.left == I.OPEN
    assert i.right == I.CLOSED
    assert i.lower == 1
    assert i.upper == 2

    i = I.openclosed(10, -10).to_atomic()
    assert i.left == I.OPEN
    assert i.right == I.OPEN
    assert i.lower == I.inf
    assert i.upper == -I.inf
コード例 #11
0
def test_from_data():
    assert I.from_data([(I.CLOSED, 2, 3, I.OPEN)]) == I.closedopen(2, 3)
    assert I.from_data([(I.OPEN, 2, float('inf'), I.OPEN)]) == I.openclosed(2, I.inf)
    assert I.from_data([(I.OPEN, float('-inf'), 2, I.CLOSED)]) == I.closed(-I.inf, 2)

    assert I.from_data([]) == I.empty()

    d = [(I.OPEN, float('-inf'), 4, I.CLOSED), (I.CLOSED, 6, float('inf'), I.OPEN)]
    assert I.from_data(d) == I.openclosed(-I.inf, 4) | I.closedopen(6, I.inf)

    d = [(I.OPEN, 'lowest', '4', I.CLOSED), (I.CLOSED, '6', 'highest', I.OPEN)]
    assert I.from_data(d, conv=int, pinf='highest', ninf='lowest') == I.openclosed(-I.inf, 4) | I.closedopen(6, I.inf)
コード例 #12
0
def test_iterate():
    # Default parameters
    assert list(I.iterate(I.closed(0, 2), incr=1)) == [0, 1, 2]
    assert list(I.iterate(I.closedopen(0, 2), incr=1)) == [0, 1]
    assert list(I.iterate(I.openclosed(0, 2), incr=1)) == [1, 2]
    assert list(I.iterate(I.open(0, 2), incr=1)) == [1]
    assert list(I.iterate(I.open(0, 2.5), incr=1)) == [1, 2]

    # Empty intervals or iterations
    assert list(I.iterate(I.empty(), incr=1)) == []
    assert list(I.iterate(I.open(0, 1), incr=1)) == []

    # Infinities
    with pytest.raises(ValueError):
        list(I.iterate(I.openclosed(-I.inf, 2), incr=1))
    gen = I.iterate(I.closedopen(0, I.inf), incr=1)
    assert next(gen) == 0
    assert next(gen) == 1
    assert next(gen) == 2  # and so on

    # Unions
    assert list(I.iterate(I.closed(0, 1) | I.closed(5, 6), incr=1)) == [0, 1, 5, 6]
    assert list(I.iterate(I.closed(0, 1) | I.closed(2.5, 4), incr=1)) == [0, 1, 2.5, 3.5]
    assert list(I.iterate(I.open(0, 1) | I.open(1, 2), incr=1)) == []
    assert list(I.iterate(I.open(0.5, 1) | I.open(1, 3), incr=1)) == [2]

    # Step
    assert list(I.iterate(I.closed(0, 6), incr=2)) == [0, 2, 4, 6]
    assert list(I.iterate(I.closed(0, 6), incr=4)) == [0, 4]
    assert list(I.iterate(I.closed(0, 6), incr=lambda x: x + 2)) == [0, 2, 4, 6]

    # Base
    assert list(I.iterate(I.closed(0.4, 2), incr=1, base=lambda x: round(x))) == [1, 2]
    assert list(I.iterate(I.closed(0.6, 2), incr=1, base=lambda x: round(x))) == [1, 2]

    # Reversed
    assert list(I.iterate(I.closed(0, 1), incr=1, reverse=True)) == [1, 0]
    assert list(I.iterate(I.open(0, 3), incr=1, reverse=True)) == [2, 1]
    assert list(I.iterate(I.closed(0, 1), incr=0.5, reverse=True)) == [1, 0.5, 0]
    assert list(I.iterate(I.closed(0, 2), incr=1, base=lambda x: x-1, reverse=True)) == [1, 0]

    assert list(I.iterate(I.closed(0, 2) | I.closed(4, 5), incr=1, reverse=True)) == [5, 4, 2, 1, 0]

    with pytest.raises(ValueError):
        list(I.iterate(I.closedopen(0, I.inf), incr=1, reverse=True))
    gen = I.iterate(I.openclosed(-I.inf, 2), incr=1, reverse=True)
    assert next(gen) == 2
    assert next(gen) == 1
    assert next(gen) == 0  # and so on
コード例 #13
0
def test_to_string():
    i1, i2, i3, i4 = I.closed(0, 1), I.openclosed(0, 1), I.closedopen(0, 1), I.open(0, 1)

    assert I.to_string(i1) == '[0,1]'
    assert I.to_string(i2) == '(0,1]'
    assert I.to_string(i3) == '[0,1)'
    assert I.to_string(i4) == '(0,1)'

    assert I.to_string(I.empty()) == '()'
    assert I.to_string(I.singleton(1)) == '[1]'

    assert I.to_string(I.openclosed(-I.inf, 1)) == '(-inf,1]'
    assert I.to_string(I.closedopen(1, I.inf)) == '[1,+inf)'

    assert I.to_string(I.closed(0, 1) | I.closed(2, 3)) == '[0,1] | [2,3]'
コード例 #14
0
def test_emptiness():
    assert I.openclosed(1, 1).is_empty()
    assert I.closedopen(1, 1).is_empty()
    assert I.open(1, 1).is_empty()
    assert not I.closed(1, 1).is_empty()
    assert I.Interval().is_empty()
    assert I.empty().is_empty()
コード例 #15
0
def test_union():
    assert I.closed(1, 2).to_atomic() | I.closed(1, 2).to_atomic() == I.closed(1, 2).to_atomic()
    assert I.closed(1, 4).to_atomic() | I.closed(2, 3).to_atomic() == I.closed(1, 4).to_atomic()
    assert I.closed(1, 2).to_atomic() | I.closed(2, 3).to_atomic() == I.closed(2, 3).to_atomic() | I.closed(1, 2).to_atomic()
    assert I.closed(1, 2).to_atomic() | I.closed(3, 4).to_atomic() == I.closed(1, 2) | I.closed(3, 4)

    assert I.closed(1, 2) | I.closed(1, 2) == I.closed(1, 2)
    assert I.closed(1, 4) | I.closed(2, 3) == I.closed(2, 3) | I.closed(1, 4)
    assert I.closed(1, 4) | I.closed(2, 3) == I.closed(1, 4)
    assert I.closed(1, 4) | I.closed(2, 3).to_atomic() == I.closed(1, 4)
    assert I.closed(1, 4) | I.closed(2, 3).to_atomic() == I.closed(2, 3).to_atomic() | I.closed(1, 4)

    assert I.closed(1, 2) | I.open(2, 3) == I.closedopen(1, 3)
    assert I.closed(1, 3) | I.closed(2, 4) == I.closed(1, 4)

    assert I.closed(1, 2) | I.closed(2, 3) == I.closed(2, 3) | I.closed(1, 2)

    assert I.closedopen(1, 2) | I.closed(2, 3) == I.closed(1, 3)
    assert I.open(1, 2) | I.closed(2, 4) == I.openclosed(1, 4)

    assert I.closed(1, 2) | I.closed(3, 4) != I.closed(1, 4)
    assert (I.closed(1, 2) | I.closed(3, 4) | I.closed(2, 3)).is_atomic()
    assert I.closed(1, 2) | I.closed(3, 4) | I.closed(2, 3) == I.closed(1, 4)
    assert I.closed(1, 2) | I.closed(0, 4) == I.closed(0, 4)

    assert (I.closed(0, 1) | I.closed(2, 3) | I.closed(1, 2)).is_atomic()
    assert I.closed(0, 1) | I.closed(2, 3) | I.closed(1, 2) == I.closed(0, 3)

    assert I.closed(0, 1) | I.empty() == I.closed(0, 1)
コード例 #16
0
def test_intersection():
    assert I.closed(0, 1) & I.closed(0, 1) == I.closed(0, 1)
    assert I.closed(0, 1) & I.closed(0, 1).to_atomic() == I.closed(0, 1)
    assert I.closed(0, 1) & I.open(0, 1) == I.open(0, 1)
    assert I.openclosed(0, 1) & I.closedopen(0, 1) == I.open(0, 1)
    assert (I.closed(0, 1) & I.closed(2, 3)).is_empty()

    assert I.closed(0, 1) & I.empty() == I.empty()
コード例 #17
0
def test_from_string():
    i1, i2, i3, i4 = '[0,1]', '(0,1]', '[0,1)', '(0,1)'

    assert I.from_string(i1, int) == I.closed(0, 1)
    assert I.from_string(i2, int) == I.openclosed(0, 1)
    assert I.from_string(i3, int) == I.closedopen(0, 1)
    assert I.from_string(i4, int) == I.open(0, 1)

    assert I.from_string('()', int) == I.empty()
    assert I.from_string('[1]', int) == I.singleton(1)

    assert I.from_string('(-inf,1]', int) == I.openclosed(-I.inf, 1)
    assert I.from_string('[1,+inf)', int) == I.closedopen(1, I.inf)

    assert I.from_string('[0,1] | [2,3]', int) == I.closed(0, 1) | I.closed(2, 3)

    with pytest.raises(Exception):
        I.from_string('[1,2]', None)
コード例 #18
0
 def build_interval_draft4(self):
     if self.exclusiveMinimum and self.exclusiveMaximum:
         self.interval = I.open(self.minimum, self.maximum)
     elif self.exclusiveMinimum:
         self.interval = I.openclosed(self.minimum, self.maximum)
     elif self.exclusiveMaximum:
         self.interval = I.closedopen(self.minimum, self.maximum)
     else:
         self.interval = I.closed(self.minimum, self.maximum)
コード例 #19
0
def test_bounds():
    i = I.openclosed(1, 2)
    assert i.left == I.OPEN
    assert i.right == I.CLOSED
    assert i.lower == 1
    assert i.upper == 2

    i = I.openclosed(10, -10)
    assert i.left == I.OPEN
    assert i.right == I.OPEN
    assert i.lower == I.inf
    assert i.upper == -I.inf

    i = I.open(0, 1) | I.closed(3, 4)
    assert i.left == I.OPEN
    assert i.right == I.CLOSED
    assert i.lower == 0
    assert i.upper == 4
コード例 #20
0
def test_creation():
    assert I.closed(0, 1) == I.AtomicInterval(I.CLOSED, 0, 1, I.CLOSED)
    assert I.open(0, 1) == I.AtomicInterval(I.OPEN, 0, 1, I.OPEN)
    assert I.openclosed(0, 1) == I.AtomicInterval(I.OPEN, 0, 1, I.CLOSED)
    assert I.closedopen(0, 1) == I.AtomicInterval(I.CLOSED, 0, 1, I.OPEN)
    assert I.closed(-I.inf, I.inf) == I.open(-I.inf, I.inf)

    with pytest.raises(ValueError):
        I.closed(1, -1)

    assert I.singleton(2) == I.closed(2, 2)
    assert I.Interval() == I.open(0, 0)
    assert I.empty() == I.Interval()
コード例 #21
0
def test_replace_atomic():
    i = I.closed(0, 1).to_atomic()
    assert i.replace() == i
    assert i.replace(I.OPEN, 2, 3, I.OPEN) == I.open(2, 3)
    assert i.replace(upper=2, left=I.OPEN) == I.openclosed(0, 2)

    assert i.replace(lower=lambda v: 1 + v) == I.singleton(1)
    assert i.replace(left=lambda v: not v, right=lambda v: not v) == I.open(0, 1)

    assert I.empty().to_atomic().replace(left=I.CLOSED, right=I.CLOSED) == I.empty()
    assert I.empty().to_atomic().replace(lower=1, upper=2) == I.open(1, 2)
    assert I.empty().to_atomic().replace(lower=lambda v: 1, upper=lambda v: 2) == I.empty()
    assert I.empty().to_atomic().replace(lower=lambda v: 1, upper=lambda v: 2, ignore_inf=False) == I.open(1, 2)
コード例 #22
0
def test_interval_to_atomic():
    intervals = [I.closed(0, 1), I.open(0, 1), I.openclosed(0, 1), I.closedopen(0, 1)]
    for interval in intervals:
        assert interval == I.Interval(interval.to_atomic())
        assert interval == interval.to_atomic()

    assert I.closed(0, 1) | I.closed(2, 3) != I.closed(0, 3)
    assert (I.closed(0, 1) | I.closed(2, 3)).to_atomic() == I.closed(0, 3)

    assert I.closed(0, 1).to_atomic() == I.closed(0, 1).enclosure()
    assert (I.closed(0, 1) | I.closed(2, 3)).enclosure() == I.closed(0, 3)

    assert I.empty().to_atomic() == I.AtomicInterval(False, I.inf, -I.inf, False)
コード例 #23
0
def test_hard_atomic_constraints():
    i = I.closed(Version('1.0.0'), Version('1.0.1')).to_atomic()
    assert not allows_major(i, soft=False) and not allows_minor(i, soft=False) and allows_patch(i, soft=False)
    
    i = I.open(Version('1.0.0'), Version('1.0.1')).to_atomic()
    assert not allows_major(i, soft=False) and not allows_minor(i, soft=False) and not allows_patch(i, soft=False)
    
    i = I.closed(Version('1.0.0'), Version('1.1.0')).to_atomic()
    assert not allows_major(i, soft=False) and allows_minor(i, soft=False) and allows_patch(i, soft=False)

    i = I.open(Version('1.0.0'), Version('1.1.0')).to_atomic()
    assert not allows_major(i, soft=False) and not allows_minor(i, soft=False) and allows_patch(i, soft=False)
    
    i = I.closed(Version('1.0.0'), Version('1.0.0')).to_atomic()
    assert not allows_major(i, soft=False) and not allows_minor(i, soft=False) and not allows_patch(i, soft=False)
    
    i = I.closed(Version('1.0.0'), Version('2.0.0')).to_atomic()
    assert allows_major(i, soft=False) and allows_minor(i, soft=False) and allows_patch(i, soft=False)
    
    i = I.open(Version('1.0.0'), Version('2.0.0')).to_atomic()
    assert not allows_major(i, soft=False) and allows_minor(i, soft=False) and allows_patch(i, soft=False)
    
    i = I.openclosed(Version('1.0.0'), Version('1.0.1')).to_atomic()
    assert not allows_major(i, soft=False) and not allows_minor(i, soft=False) and not allows_patch(i, soft=False)
    
    i = I.closedopen(Version('1.0.0'), Version('1.0.1')).to_atomic()
    assert not allows_major(i, soft=False) and not allows_minor(i, soft=False) and not allows_patch(i, soft=False)
    
    i = I.open(Version('1.0.0'), I.inf).to_atomic()
    assert allows_major(i, soft=False) and allows_minor(i, soft=False) and allows_patch(i, soft=False)
    
    i = I.closed(Version.FIRST, Version('1.0.0')).to_atomic()
    assert allows_major(i, soft=False) and allows_minor(i, soft=False) and allows_patch(i, soft=False)
    
    i = I.open(Version.FIRST, Version('1.0.0')).to_atomic()
    assert not allows_major(i, soft=False) and allows_minor(i, soft=False) and allows_patch(i, soft=False)
    
    i = I.closed(Version.FIRST, Version.FIRST).to_atomic()
    assert not allows_major(i, soft=False) and not allows_minor(i, soft=False) and not allows_patch(i, soft=False)
    
    i = I.closed(Version.FIRST, Version('0.0.2')).to_atomic()
    assert not allows_major(i, soft=False) and not allows_minor(i, soft=False) and allows_patch(i, soft=False)
    
    i = I.open(Version.FIRST, Version('0.0.2')).to_atomic()
    assert not allows_major(i, soft=False) and not allows_minor(i, soft=False) and not allows_patch(i, soft=False)
    
    i = I.closed(Version.FIRST, Version('0.1.0')).to_atomic()
    assert not allows_major(i, soft=False) and allows_minor(i, soft=False) and allows_patch(i, soft=False)
    
    i = I.open(Version.FIRST, Version('0.1.0')).to_atomic()
    assert not allows_major(i, soft=False) and not allows_minor(i, soft=False) and allows_patch(i, soft=False)
コード例 #24
0
def closest2bed(lines):
    clsExonDict = defaultdict(list)
    for li in lines:
        cell = li.split('\t')

        qry_id = cell[3]
        pro_id = cell[9]
        strand_q = cell[5]
        strand = cell[11]
        dist = int(cell[12])
        if dist == 0:
            start_lnc, end_lnc = int(cell[1]), int(cell[2])
            start_pro, end_pro = int(cell[7]), int(cell[8])
            region_1 = intervals.openclosed(start_lnc, end_lnc)
            region_2 = intervals.openclosed(start_pro, end_pro)
            if not region_1 & region_2:
                dist = 1
        if qry_id in clsExonDict:
            if dist < clsExonDict[qry_id][1]:
                clsExonDict[qry_id] = [pro_id, dist, strand_q, strand]
        else:
            clsExonDict[qry_id] = [pro_id, dist, strand_q, strand]
    return clsExonDict
コード例 #25
0
def comparator_interval(op, version):
    if op == '=':
        return I.singleton(version)
    if op == '<':
        return I.closedopen(Version.FIRST, version)
    if op == '<=':
        return I.closed(Version.FIRST, version)
    if op == '>':
        return I.open(version, I.inf)
    if op == '>=':
        return I.closedopen(version, I.inf)
    if op == '!=':
        return I.closedopen(Version.FIRST, version) | I.openclosed(
            version, I.inf)
コード例 #26
0
def test_overlaps():
    # Overlaps should reject non supported types
    with pytest.raises(TypeError):
        I.closed(0, 1).to_atomic().overlaps(1)
    with pytest.raises(TypeError):
        I.closed(0, 1).overlaps(1)

    assert I.closed(0, 1).overlaps(I.closed(0, 1))
    assert I.closed(0, 1).overlaps(I.open(0, 1))
    assert I.open(0, 1).overlaps(I.closed(0, 1))
    assert I.closed(0, 1).overlaps(I.openclosed(0, 1))
    assert I.closed(0, 1).overlaps(I.closedopen(0, 1))

    assert I.closed(1, 2).overlaps(I.closed(2, 3))
    assert I.closed(1, 2).overlaps(I.closedopen(2, 3))
    assert I.openclosed(1, 2).overlaps(I.closed(2, 3))
    assert I.openclosed(1, 2).overlaps(I.closedopen(2, 3))

    assert not I.closed(0, 1).overlaps(I.closed(3, 4))
    assert not I.closed(3, 4).overlaps(I.closed(0, 1))

    assert not I.closed(0, 1).overlaps(I.open(1, 2))
    assert not I.closed(0, 1).overlaps(I.openclosed(1, 2))
    assert not I.closedopen(0, 1).overlaps(I.closed(1, 2))
    assert not I.closedopen(0, 1).overlaps(I.closedopen(1, 2))
    assert not I.closedopen(0, 1).overlaps(I.openclosed(1, 2))
    assert not I.closedopen(0, 1).overlaps(I.open(1, 2))
    assert not I.open(0, 1).overlaps(I.open(1, 2))

    assert not I.empty().overlaps(I.open(-I.inf, I.inf))
    assert not I.open(-I.inf, I.inf).overlaps(I.empty())

    # https://github.com/AlexandreDecan/python-intervals/issues/13
    assert not I.closed(0, 1).overlaps(I.openclosed(1, 2))
    assert not I.closedopen(0, 1).overlaps(I.closed(1, 2))
    assert not I.closed(1, 1).overlaps(I.openclosed(1, 2))
    assert not I.closedopen(1, 1).overlaps(I.closed(1, 2))
    assert not I.openclosed(1, 2).overlaps(I.closed(0, 1))
    assert not I.openclosed(1, 2).overlaps(I.closed(1, 1))

    assert I.open(0, 2).overlaps(I.open(0, 1))
    assert I.open(0, 1).overlaps(I.open(0, 2))
コード例 #27
0
def test_soft_atomic_constraints():
    i = I.closed(Version('1.0.0'), Version('2.0.0')).to_atomic()
    assert not allows_major(i) and allows_minor(i) and allows_patch(i)
    
    i = I.closedopen(Version('1.0.0'), Version('2.0.0')).to_atomic()
    assert not allows_major(i) and allows_minor(i) and allows_patch(i)
    
    i = I.openclosed(Version('1.0.0'), Version('2.0.0')).to_atomic()
    assert not allows_major(i) and allows_minor(i) and allows_patch(i)
    
    i = I.open(Version('1.0.0'), Version('2.0.0')).to_atomic()
    assert not allows_major(i) and allows_minor(i) and allows_patch(i)
    
    i = I.closed(Version('1.0.0'), Version('1.1.0')).to_atomic()
    assert not allows_major(i) and not allows_minor(i) and allows_patch(i)
    
    i = I.closedopen(Version('1.0.0'), Version('1.1.0')).to_atomic()
    assert not allows_major(i) and not allows_minor(i) and allows_patch(i)
    
    i = I.openclosed(Version('1.0.0'), Version('1.1.0')).to_atomic()
    assert not allows_major(i) and not allows_minor(i) and allows_patch(i)
    
    i = I.open(Version('1.0.0'), Version('1.1.0')).to_atomic()
    assert not allows_major(i) and not allows_minor(i) and allows_patch(i)
    
    i = I.closed(Version('1.0.0'), Version('1.0.1')).to_atomic()
    assert not allows_major(i) and not allows_minor(i) and not allows_patch(i)

    i = I.closedopen(Version('1.0.0'), Version('1.0.1')).to_atomic()
    assert not allows_major(i) and not allows_minor(i) and not allows_patch(i)
    
    i = I.openclosed(Version('1.0.0'), Version('1.0.1')).to_atomic()
    assert not allows_major(i) and not allows_minor(i) and not allows_patch(i)
    
    i = I.open(Version('1.0.0'), Version('1.0.1')).to_atomic()
    assert not allows_major(i) and not allows_minor(i) and not allows_patch(i)
コード例 #28
0
def test_intervaldict_combine():
    add = lambda x, y: x + y

    assert I.IntervalDict().combine(I.IntervalDict(), add) == I.IntervalDict()

    d = I.IntervalDict([(I.closed(0, 3), 0)])
    assert I.IntervalDict().combine(d, add) == d
    assert d.combine(I.IntervalDict(), add) == d

    d1 = I.IntervalDict([(I.closed(1, 3) | I.closed(5, 7), 1)])
    d2 = I.IntervalDict([(I.closed(2, 4) | I.closed(6, 8), 2)])
    assert d1.combine(d2, add) == d2.combine(d1, add)
    assert d1.combine(d2, add) == I.IntervalDict([
        (I.closedopen(1, 2) | I.closedopen(5, 6), 1),
        (I.closed(2, 3) | I.closed(6, 7), 3),
        (I.openclosed(3, 4) | I.openclosed(7, 8), 2),
    ])

    d1 = I.IntervalDict({
        I.closed(0, 1): 2,
        I.closed(3, 4): 2
    })
    d2 = I.IntervalDict({
        I.closed(1, 3): 3,
        I.closed(4, 5): 1
    })
    assert d1.combine(d2, add) == d2.combine(d1, add)
    assert d1.combine(d2, add) == I.IntervalDict({
        I.closedopen(0, 1): 2,
        I.singleton(1): 5,
        I.open(1, 3): 3,
        I.singleton(3): 5,
        I.open(3, 4): 2,
        I.singleton(4): 3,
        I.openclosed(4, 5): 1,
    })
コード例 #29
0
def test_to_interval_to_atomic():
    intervals = [
        I.closed(0, 1),
        I.open(0, 1),
        I.openclosed(0, 1),
        I.closedopen(0, 1)
    ]
    for interval in intervals:
        assert interval == I.Interval(interval.to_atomic())
        assert interval == interval.to_atomic()

    assert I.closed(0, 1) | I.closed(2, 3) != I.closed(0, 3)
    assert (I.closed(0, 1) | I.closed(2, 3)).to_atomic() == I.closed(0, 3)

    assert I.closed(0, 1).to_atomic() == I.closed(0, 1).enclosure()
    assert (I.closed(0, 1) | I.closed(2, 3)).enclosure() == I.closed(0, 3)
コード例 #30
0
def test_overlaps_adjacent():
    # Check warnings for "permissive"
    with pytest.warns(DeprecationWarning, match='permissive'):
        I.closed(0, 1).to_atomic().overlaps(I.open(3, 4).to_atomic(), permissive=True)
    with pytest.warns(DeprecationWarning, match='permissive'):
        I.closed(0, 1).overlaps(I.open(3, 4), permissive=True)

    assert I.closed(0, 1).overlaps(I.closed(0, 1), adjacent=True)
    assert I.closed(0, 1).overlaps(I.open(0, 1), adjacent=True)
    assert I.open(0, 1).overlaps(I.closed(0, 1), adjacent=True)
    assert I.closed(0, 1).overlaps(I.openclosed(0, 1), adjacent=True)
    assert I.closed(0, 1).overlaps(I.closedopen(0, 1), adjacent=True)

    assert I.closed(1, 2).overlaps(I.closed(2, 3), adjacent=True)
    assert I.closed(1, 2).overlaps(I.closedopen(2, 3), adjacent=True)
    assert I.openclosed(1, 2).overlaps(I.closed(2, 3), adjacent=True)
    assert I.openclosed(1, 2).overlaps(I.closedopen(2, 3), adjacent=True)

    assert not I.closed(0, 1).overlaps(I.closed(3, 4), adjacent=True)
    assert not I.closed(3, 4).overlaps(I.closed(0, 1), adjacent=True)

    assert I.closed(0, 1).overlaps(I.open(1, 2), adjacent=True)
    assert I.closed(0, 1).overlaps(I.openclosed(1, 2), adjacent=True)
    assert I.closedopen(0, 1).overlaps(I.closed(1, 2), adjacent=True)
    assert I.closedopen(0, 1).overlaps(I.closedopen(1, 2), adjacent=True)
    assert not I.closedopen(0, 1).overlaps(I.openclosed(1, 2), adjacent=True)
    assert not I.closedopen(0, 1).overlaps(I.open(1, 2), adjacent=True)
    assert not I.open(0, 1).overlaps(I.open(1, 2), adjacent=True)

    assert not I.empty().overlaps(I.open(-I.inf, I.inf), adjacent=True)
    assert not I.open(-I.inf, I.inf).overlaps(I.empty(), adjacent=True)

    # https://github.com/AlexandreDecan/python-intervals/issues/13
    assert I.closed(0, 1).overlaps(I.openclosed(1, 2), adjacent=True)
    assert I.closedopen(0, 1).overlaps(I.closed(1, 2), adjacent=True)
    assert I.closed(1, 1).overlaps(I.openclosed(1, 2), adjacent=True)
    assert I.openclosed(1, 2).overlaps(I.closed(0, 1), adjacent=True)
    assert I.openclosed(1, 2).overlaps(I.closed(1, 1), adjacent=True)