def test__slice_object(): s = _slice(1, 10, 2) assert str(s) == '1:10:2' assert hash(s) assert _slice(1, 10, 2) == _slice(1, 10, 2)
def from_tree(expr, namespace=None): """ Convert core data structures to Blaze expression Core data structure representations created by ``to_tree`` are converted back into Blaze expressions. Parameters ---------- expr: dict Examples -------- >>> t = symbol('t', 'var * {x: int32, y: int32}') >>> tree = to_tree(t) >>> tree # doctest: +SKIP {'op': 'Symbol', 'args': ['t', 'var * { x : int32, y : int32 }', False]} >>> from_tree(tree) t >>> tree = to_tree(t.x.sum()) >>> tree # doctest: +SKIP {'op': 'sum', 'args': [ {'op': 'Field', 'args': [ { 'op': 'Symbol' 'args': ['t', 'var * { x : int32, y : int32 }', False] } 'x'] }] } >>> from_tree(tree) sum(t.x) Simplify expresion using explicit ``names`` dictionary. In the example below we replace the ``Symbol`` node with the string ``'t'``. >>> tree = to_tree(t.x, names={t: 't'}) >>> tree # doctest: +SKIP {'op': 'Field', 'args': ['t', 'x']} >>> from_tree(tree, namespace={'t': t}) t.x See Also -------- blaze.server.server.to_tree """ if isinstance(expr, dict): op, args = expr['op'], expr['args'] if 'slice' == op: return expr_utils._slice( *[from_tree(arg, namespace) for arg in args]) if hasattr(blaze.expr, op): cls = getattr(blaze.expr, op) else: cls = expression_from_name(op) if 'Symbol' in op: children = [from_tree(arg) for arg in args] else: children = [from_tree(arg, namespace) for arg in args] return cls(*children) elif isinstance(expr, list): return tuple(from_tree(arg, namespace) for arg in expr) if namespace and expr in namespace: return namespace[expr] else: return expr
def from_tree(expr, namespace=None): """ Convert core data structures to Blaze expression Core data structure representations created by ``to_tree`` are converted back into Blaze expressions. Parameters ---------- expr : dict Examples -------- >>> t = symbol('t', 'var * {x: int32, y: int32}') >>> tree = to_tree(t) >>> tree # doctest: +SKIP {'op': 'Symbol', 'args': ['t', 'var * { x : int32, y : int32 }', False]} >>> from_tree(tree) t >>> tree = to_tree(t.x.sum()) >>> tree # doctest: +SKIP {'op': 'sum', 'args': [ {'op': 'Field', 'args': [ { 'op': 'Symbol' 'args': ['t', 'var * { x : int32, y : int32 }', False] } 'x'] }] } >>> from_tree(tree) sum(t.x) Simplify expresion using explicit ``names`` dictionary. In the example below we replace the ``Symbol`` node with the string ``'t'``. >>> tree = to_tree(t.x, names={t: 't'}) >>> tree # doctest: +SKIP {'op': 'Field', 'args': ['t', 'x']} >>> from_tree(tree, namespace={'t': t}) t.x See Also -------- to_tree """ if isinstance(expr, dict): op, args = expr['op'], expr['args'] if 'slice' == op: return expr_utils._slice(*[from_tree(arg, namespace) for arg in args]) if hasattr(blaze.expr, op): cls = getattr(blaze.expr, op) else: cls = expression_from_name(op) if 'Symbol' in op: children = [from_tree(arg) for arg in args] else: children = [from_tree(arg, namespace) for arg in args] return cls(*children) elif isinstance(expr, list): return tuple(from_tree(arg, namespace) for arg in expr) if namespace and expr in namespace: return namespace[expr] else: return expr