def test_persistence():
    """ Checking if the data persists correctly when saving and loading back
    """
    if six.PY2:
        raise SkipTest("Pickling MultiContext instances is broken on Python 2.")
    d1 = DataContext(name = 'test_context1',
                     subcontext = {'a':1, 'b':2})
    d2 = DataContext(name = 'test_context2',
                     subcontext = {'foo':100, 'bar':200, 'baz':300})
    m = MultiContext(d1, d2, name='test_mc')

    f = BytesIO()
    m.save(f)
    f.seek(0, 0)
    new_m = MultiContext.load(f)

    assert m.name == new_m.name

    # Test keys of new_m
    assert set(new_m.keys()) == set(m.keys())

    # Check values
    assert new_m['a'] == m['a']
    assert new_m['b'] == m['b']
    assert new_m['foo'] == m['foo']
    assert new_m['bar'] == m['bar']

    # Check contexts
    assert new_m.subcontexts == m.subcontexts
def test_persistence():
    """ Checking if the data persists correctly when saving and loading back
    """
    d1 = DataContext(name="test_context1", subcontext={"a": 1, "b": 2})
    d2 = DataContext(name="test_context2", subcontext={"foo": 100, "bar": 200, "baz": 300})
    m = MultiContext(d1, d2, name="test_mc")

    f = StringIO()
    m.save(f)
    f.seek(0, 0)
    new_m = MultiContext.load(f)

    assert m.name == new_m.name

    # Test keys of new_m
    assert set(new_m.keys()) == set(m.keys())

    # Check values
    assert new_m["a"] == m["a"]
    assert new_m["b"] == m["b"]
    assert new_m["foo"] == m["foo"]
    assert new_m["bar"] == m["bar"]

    # Check contexts
    assert new_m.subcontexts == m.subcontexts
    def test_keys(self):
        """ Tests to ensure 2 contexts that contain overlapping sets of keys
            appear to have one set of keys where each key is unique (i.e. a 'set')
        """

        d1 = DataContext(name="d1", subcontext={"a": 1, "b": 2})
        d2 = DataContext(name="d2", subcontext={"a": 3, "c": 4})
        m = MultiContext(d1, d2, name="m")

        sorted_keys = sorted(m.keys())
        self.assertEqual(sorted_keys, ["a", "b", "c"])
    def test_keys(self):
        """ Tests to ensure 2 contexts that contain overlapping sets of keys
            appear to have one set of keys where each key is unique (i.e. a 'set')
        """

        d1 = DataContext(name='d1',subcontext={'a':1,'b':2})
        d2 = DataContext(name='d2',subcontext={'a':3,'c':4})
        m = MultiContext(d1, d2, name='m')

        sorted_keys = sorted(m.keys())
        self.assertEqual(sorted_keys, ['a', 'b', 'c'])
    def test_keys(self):
        """ Tests to ensure 2 contexts that contain overlapping sets of keys
            appear to have one set of keys where each key is unique (i.e. a 'set')
        """

        d1 = DataContext(name='d1', subcontext={'a': 1, 'b': 2})
        d2 = DataContext(name='d2', subcontext={'a': 3, 'c': 4})
        m = MultiContext(d1, d2, name='m')

        sorted_keys = sorted(m.keys())
        self.assertEqual(sorted_keys, ['a', 'b', 'c'])
def test_checkpoint():
    d1 = DataContext()
    d1['a'] = object()
    d2 = DataContext()
    d2['b'] = object()
    m = MultiContext(d1, d2)
    copy = m.checkpoint()
    assert copy is not m
    assert copy.subcontexts is not m.subcontexts
    assert len(copy.subcontexts) == len(m.subcontexts)
    for csc, msc in zip(copy.subcontexts, m.subcontexts):
        assert csc is not msc
        assert set(csc.keys()) == set(msc.keys())
        for key in msc.keys():
            assert csc[key] is msc[key]

    assert set(copy.keys()) == set(m.keys())
    assert copy['a'] is m['a']
    assert copy['b'] is m['b']
def test_checkpoint():
    d1 = DataContext()
    d1['a'] = object()
    d2 = DataContext()
    d2['b'] = object()
    m = MultiContext(d1, d2)
    copy = m.checkpoint()
    assert copy is not m
    assert copy.subcontexts is not m.subcontexts
    assert len(copy.subcontexts) == len(m.subcontexts)
    for csc, msc in zip(copy.subcontexts, m.subcontexts):
        assert csc is not msc
        assert set(csc.keys()) == set(msc.keys())
        for key in list(msc.keys()):
            assert csc[key] is msc[key]

    assert set(copy.keys()) == set(m.keys())
    assert copy['a'] is m['a']
    assert copy['b'] is m['b']
    def test_contexts_list_changes(self):
        """ Checking if change in items in contexts updates the multi-context
        """
        d1 = DataContext(name="test_context1", subcontext={"a": 1, "b": 2})
        d2 = DataContext(name="test_context2")

        m = MultiContext(*[d1, d2], **{"name": "test_mc"})
        self.assertTrue(len(m.keys()) == 2)

        # Add another context
        d3 = DataContext(name="test_context3", subcontext={"c": 3, "d": 4})
        m.subcontexts.append(d3)
        self.assertTrue(len(m.keys()) == 4)

        # Modify an existing context
        m.subcontexts[1].subcontext = {"cc": 5}
        self.assertTrue(len(m.keys()) == 5)

        # Remove a context
        m.subcontexts.pop(0)
        self.assertTrue(len(m.keys()) == 3)
Example #9
0
    def test_block_events(self):
        import numpy
        from codetools.blocks.api import Block

        context = DataContext(name="data")
        context.on_trait_change(self.event_listener, 'items_modified')
        context.defer_events = True
        context['a'] = 4
        context['b'] = numpy.array((1, 2, 3))
        context.defer_events = False

        self.assertEqual(self.event_count, 1)

        multi_context = MultiContext(context, name="multi")
        multi_context.on_trait_change(self.event_listener, 'items_modified')

        block = Block("c = a * b")
        block.execute(multi_context)

        # we expect one event from data context, one from multi context
        self.assertEqual(self.event_count, 3)
Example #10
0
    def test_block_events(self):
        import numpy
        from codetools.blocks.api import Block

        context = DataContext(name="data")
        context.on_trait_change(self.event_listener, 'items_modified')
        context.defer_events = True
        context['a'] = 4
        context['b'] = numpy.array((1,2,3))
        context.defer_events = False

        self.assertEqual(self.event_count, 1)

        multi_context = MultiContext(context, name="multi")
        multi_context.on_trait_change(self.event_listener, 'items_modified')

        block = Block("c = a * b")
        block.execute(multi_context)

        # we expect one event from data context, one from multi context
        self.assertEqual(self.event_count, 3)
def test_persistence():
    """ Checking if the data persists correctly when saving and loading back
    """
    d1 = DataContext(name='test_context1', subcontext={'a': 1, 'b': 2})
    d2 = DataContext(
        name='test_context2', subcontext={'foo': 100,
                                          'bar': 200,
                                          'baz': 300})
    m = MultiContext(d1, d2, name='test_mc')

    f = StringIO()
    m.save(f)
    f.seek(0, 0)
    new_m = MultiContext.load(f)

    assert m.name == new_m.name

    # Test keys of new_m
    assert set(new_m.keys()) == set(m.keys())

    # Check values
    assert new_m['a'] == m['a']
    assert new_m['b'] == m['b']
    assert new_m['foo'] == m['foo']
    assert new_m['bar'] == m['bar']

    # Check contexts
    assert new_m.subcontexts == m.subcontexts
def test_checkpoint_nested():
    d1 = DataContext()
    d1["a"] = object()
    d2 = DataContext()
    d2["b"] = object()
    m1 = MultiContext(d1, d2)
    m = MultiContext(m1)
    copy = m.checkpoint()
    assert copy is not m
    assert copy.subcontexts is not m.subcontexts
    assert len(copy.subcontexts) == len(m.subcontexts)
    csc1 = copy.subcontexts[0]
    msc1 = m.subcontexts[0]
    for csc, msc in zip(csc1.subcontexts, msc1.subcontexts):
        assert csc is not msc
        assert set(csc.keys()) == set(msc.keys())
        for key in msc.keys():
            assert csc[key] is msc[key]

    assert set(copy.keys()) == set(m.keys())
    assert copy["a"] is m["a"]
    assert copy["b"] is m["b"]
    def test_contexts_list_changes(self):
        """ Checking if change in items in contexts updates the multi-context
        """
        d1 = DataContext(name = 'test_context1',
                         subcontext = {'a':1, 'b':2})
        d2 = DataContext(name = 'test_context2')

        m = MultiContext(*[d1,d2], **{'name': 'test_mc'})
        self.assertTrue(len(list(m.keys())) == 2)

        # Add another context
        d3 = DataContext(name = 'test_context3',
                         subcontext = {'c':3, 'd':4})
        m.subcontexts.append(d3)
        self.assertTrue(len(list(m.keys())) == 4)

        # Modify an existing context
        m.subcontexts[1].subcontext = {'cc': 5}
        self.assertTrue(len(list(m.keys())) == 5)

        # Remove a context
        m.subcontexts.pop(0)
        self.assertTrue(len(list(m.keys())) == 3)
    def test_set_rebind_between_contexts(self):
        """ Can we rebind variables between contained contexts?
        """

        class C(DataContext):
            f = Any

            def __init__(self, f):
                super(C, self).__init__(f=f)

            def allows(self, value, name):
                return self.f(value, name)

        # `allows' predicates
        all = lambda v, n: True
        none = lambda v, n: False
        positive = lambda v, n: v > 0
        negative = lambda v, n: v < 0

        # Make a multi-context where the top context only accepts positive
        # numbers and the next one accepts anything. For robustness, add some
        # noise below.
        multi = MultiContext(
            C(positive), C(all), C(all), C(none), C(negative))  # Noise
        [upper, lower] = multi.subcontexts[0:2]

        for a, b in [(3, 8), (3, -8), (-3, 8), (-3, -8)]:

            # Bind and rebind 'x'
            multi['x'] = a
            multi['x'] = b

            # 'x' should have the latter binding
            assert multi['x'] == b

            # 'x' should live in the upper context if it's positive, else in
            # the lower one
            if multi['x'] > 0:
                self.assertTrue('x' in upper)
            else:
                self.assertTrue('x' in lower)
    def test_contexts_list_changes(self):
        """ Checking if change in items in contexts updates the multi-context
        """
        d1 = DataContext(name='test_context1', subcontext={'a': 1, 'b': 2})
        d2 = DataContext(name='test_context2')

        m = MultiContext(* [d1, d2], **{'name': 'test_mc'})
        self.assertTrue(len(list(m.keys())) == 2)

        # Add another context
        d3 = DataContext(name='test_context3', subcontext={'c': 3, 'd': 4})
        m.subcontexts.append(d3)
        self.assertTrue(len(list(m.keys())) == 4)

        # Modify an existing context
        m.subcontexts[1].subcontext = {'cc': 5}
        self.assertTrue(len(list(m.keys())) == 5)

        # Remove a context
        m.subcontexts.pop(0)
        self.assertTrue(len(list(m.keys())) == 3)
 def context_factory(self, *args, **kw):
     """ Return the type of context we are testing.
     """
     return MultiContext(DataContext(*args, **kw))
Example #17
0
 class ContextWrapper(HasTraits):
     context = MultiContext({"a": 100, "b": 200, "c": 50})
     editor = ContextShellEditor()
     traits_view = View(
         Group(Item('context', editor=editor, width=400, height=400)))