예제 #1
0
파일: choice.py 프로젝트: birdming22/bdec
def get_default_option_params(choice, child, expression_params, encode_expression_params):
    """Create a dictionary containing default values for output parameters
    that aren't used by this option.

    Returns a {param_name: value} dictionary."""
    result = {}
    outputs = _get_unpopulated_outputs(choice, child, encode_expression_params)
    for name, params in outputs.items():
        # Find the possible range of source values, and intersect it with
        # the constraints placed on it by other earlier children.
        possible = Ranges(p.type.range(expression_params) for p in params)
        for c in choice.children[:choice.children.index(child)]:
            for r in _get_ranges(c.entry, name, encode_expression_params):
                possible.remove(r)
        result[name] = possible.get_default()
    return result
예제 #2
0
파일: choice.py 프로젝트: pombredanne/bdec
def get_default_option_params(choice, child, expression_params):
    """Create a dictionary containing default values for output parameters
    that aren't used by this option.

    Returns a {param_name: value} dictionary."""
    result = {}
    outputs = _get_unpopulated_outputs(choice, child, expression_params)
    for name, params in outputs.items():
        # Find the possible range of source values, and intersect it with
        # the constraints placed on it by other earlier children.
        possible = Ranges(p.type.range(expression_params) for p in params)
        for c in choice.children[:choice.children.index(child)]:
            for r in _get_ranges(c.entry, name, expression_params):
                possible.remove(r)

        # Use the possible value closest to zero.
        positive = Range(0, None)
        negative = Range(None, 0)
        if possible.intersect(positive):
            value = possible.intersect(positive)[0].min
        elif possible.intersect(negative):
            value = possible.intersect(positive)[-1].max
        else:
            value = 0
            logging.warning('Unable to choose a good output for %s; using %s', name, value)
        result[name] = value
    return result
예제 #3
0
파일: testrange.py 프로젝트: asdf1011/bdec
 def test_remove_all(self):
     r = Ranges([Range(5, 10), Range(20, 25)])
     r.remove(Range(None, None))
     self.assertEqual([], r.get_ranges())
예제 #4
0
파일: testrange.py 프로젝트: asdf1011/bdec
 def test_remove_from_middle(self):
     r = Ranges([Range(10, 20)])
     r.remove(Range(15, 15))
     self.assertEqual([Range(10, 14), Range(16, 20)], r.get_ranges())
예제 #5
0
파일: testrange.py 프로젝트: asdf1011/bdec
 def test_remove_before_min(self):
     r = Ranges([Range(10, 20)])
     r.remove(Range(0, 8))
     self.assertEqual([Range(10, 20)], r.get_ranges())
예제 #6
0
파일: testrange.py 프로젝트: asdf1011/bdec
 def test_remove_past_max(self):
     r = Ranges([Range(10, 20)])
     r.remove(Range(25, 30))
     self.assertEqual([Range(10, 20)], r.get_ranges())
예제 #7
0
파일: testrange.py 프로젝트: asdf1011/bdec
 def test_remove_from_right(self):
     r = Ranges([Range(10, 20)])
     r.remove(Range(15, 25))
     self.assertEqual([Range(10, 14)], r.get_ranges())
예제 #8
0
파일: testrange.py 프로젝트: asdf1011/bdec
 def test_remove_from_left(self):
     r = Ranges([Range(10, 20)])
     r.remove(Range(5, 15))
     self.assertEqual([Range(16, 20)], r.get_ranges())
예제 #9
0
파일: testrange.py 프로젝트: asdf1011/bdec
 def test_add_infinite_left(self):
     r = Ranges([Range(0, 10), Range(15, 20)])
     r.add(Range(None, 16))
     self.assertEqual([Range(None, 20)], r.get_ranges())
예제 #10
0
파일: testrange.py 프로젝트: asdf1011/bdec
 def test_add_infinite_right(self):
     r = Ranges([Range(0, 10), Range(15, 20)])
     r.add(Range(5, None))
     self.assertEqual([Range(0, None)], r.get_ranges())
예제 #11
0
파일: testrange.py 프로젝트: asdf1011/bdec
 def test_add_middle_no_overlap(self):
     r = Ranges([Range(0, 10), Range(15, 20)])
     r.add(Range(12, 13))
     self.assertEqual([Range(0, 10), Range(12, 13), Range(15, 20)], r.get_ranges())
예제 #12
0
파일: testrange.py 프로젝트: asdf1011/bdec
 def test_add_overlapping_in_middle(self):
     r = Ranges([Range(0, 10), Range(15, 20)])
     r.add(Range(10, 15))
     self.assertEqual([Range(0, 20)], r.get_ranges())
예제 #13
0
파일: testrange.py 프로젝트: asdf1011/bdec
 def test_add_at_start(self):
     r = Ranges([Range(15, 20)])
     r.add(Range(5, 10))
     self.assertEqual([Range(5, 10), Range(15, 20)], r.get_ranges())
예제 #14
0
파일: testrange.py 프로젝트: asdf1011/bdec
 def test_initialise(self):
     r = Ranges([Range(0, 10), Range(5, 15)])
     self.assertEqual([Range(0, 15)], r.get_ranges())