def test_expand_identities(self): root = {0:'x'} l1 = [{1:'a'}, {1:'b'}, {1:'c'}] l2 = [{2:'a'}, {2:'b'}, {2:'c'}] l1cp = copy.deepcopy(l1) d = {'root': root, 'l1':l1, 'l2':l2} try: next(namespaces.expand_fuzzyspec_partial(d, ('root', 'l1', 'l2'))) except StopIteration as e: specs = e.value else: raise RuntimeError() self.assertEqual(len(specs), 3*3) for i, spec in enumerate(specs): res = namespaces.resolve(d, spec) namespaces.push_nslevel(res, 'container', {'i':i}) for i, spec in enumerate(specs): res = namespaces.resolve(d, (*spec, 'container')) self.assertEqual(res['i'], i) self.assertEqual(res[1], l1cp[i//3][1]) self.assertEqual(res[2], l2[i%3][2]) self.assertEqual(res[0], 'x')
def _create_default_key(self, name, nsspec, put_index=None, defaults=None): """Push a namespace level for a node to store input values. Return the nsspec of that node.""" if defaults is None: defaults = {} if put_index is None: put_index = 0 defaults_label = "_" + name + "_defaults" nsspec = (*nsspec[: len(nsspec) - put_index], defaults_label) parent_ns = namespaces.resolve(self.rootns, nsspec[:-1]) namespaces.push_nslevel(parent_ns, defaults_label, defaults) return nsspec
def nsspec(x, beginning=()): ns = namespaces.resolve(self.rootns, beginning) default_label = '_default' + str(x) namespaces.push_nslevel(ns, default_label) return beginning + (default_label,)