def gen_range_query2d_data(draw): global MAX_LEN max_key = 2147483647 #2**31 ixys = draw(st.lists( st.tuples( st.integers(min_value=1, max_value=MAX_LEN), st.integers(min_value=1, max_value=max_key), st.integers(min_value=1, max_value=max_key), ), min_size=2, max_size=MAX_LEN, unique_by=lambda ixy:ixy[0] )) nt_ixys = F.lmap(tup(Ixy), ixys) # min/max x max_x_ = max(map(prop('x'),nt_ixys)) max_xv = min(max_x_ + max_x_ // 2, max_key) min_x_ = min(map(prop('x'),nt_ixys)) min_xv = max(min_x_ - min_x_ // 2, 1) min_x, max_x = sorted([ draw(st.integers( min_value=min_xv, max_value=max_xv)), draw(st.integers( min_value=min_xv, max_value=max_xv)) ]) # min/max y max_y_ = max(map(prop('y'),nt_ixys)) max_yv = min(max_y_ + max_y_ // 2, max_key) min_y_ = min(map(prop('y'),nt_ixys)) min_yv = max(min_y_ - min_y_ // 2, 1) min_y, max_y = sorted([ draw(st.integers( min_value=min_yv, max_value=max_yv)), draw(st.integers( min_value=min_yv, max_value=max_yv)) ]) def included(ixy): return(min_x <= ixy.x <= max_x and min_y <= ixy.y <= max_y) #def excluded(ixy): return key(ixy) < min_key or max_key < key(ixy) includeds = go( filter(included,nt_ixys), F.partial(sorted, key=prop('x')), F.curry(F.lmap)(tuple)) #excludeds = [tuple(ixy) for ixy in filter(excluded,nt_ixys)] ixy_map = F.zipdict( map(F.first, ixys), map(tup(Ixy), ixys)) return dict( ixys=ixys, ixy_map=ixy_map, min_x=min_x, max_x=max_x, min_y=min_y, max_y=max_y, includeds=includeds )
def compile_template(func): spec = inspect.getargspec(func) assert len(spec.args) == len( spec.defaults or []), "All template args should have AST classes" compiler = TemplateCompiler(zipdict(spec.args, spec.defaults or [])) template = map(compiler.visit, get_body_ast(func)) # Strip Expr node wrapping single expression to let it match inside statement if len(template) == 1 and isinstance(template[0], ast.Expr): return template[0].value return template
def gen_ixys_mode_map(draw): ixys = draw(st.lists( st.tuples( st.integers(min_value=1, max_value=MAX_LEN), st.integers(min_value=1, max_value=2147483647),#2**31 st.integers(min_value=1, max_value=2147483647),#2**31 ), min_size=2, max_size=MAX_LEN, unique_by=lambda ixy:ixy[0] )) mode = random.choice('xy') ixy_map = F.zipdict( map(F.first, ixys), map(tup(Ixy), ixys)) return dict(ixys=ixys, mode=mode, ixy_map=ixy_map)
def gen_range_search_data(draw): global MAX_LEN max_key = 2147483647 #2**31 mode = random.choice('xy') key = prop(mode) ixys = draw(st.lists( st.tuples( st.integers(min_value=1, max_value=MAX_LEN), st.integers(min_value=1, max_value=max_key), st.integers(min_value=1, max_value=max_key), ), min_size=2, max_size=MAX_LEN, unique_by=lambda ixy:ixy[0] )) nt_ixys = F.lmap(tup(Ixy), ixys) max_val_ = key(max(nt_ixys, key=key)) max_val = min(max_val_ + max_val_ // 2, max_key) min_val_ = key(min(nt_ixys, key=key)) min_val = max(min_val_ - min_val_ // 2, 1) min_key, max_key = sorted([ draw(st.integers( min_value=min_val, max_value=max_val)), draw(st.integers( min_value=min_val, max_value=max_val)) ]) def included(ixy): return min_key <= key(ixy) <= max_key def excluded(ixy): return key(ixy) < min_key or max_key < key(ixy) includeds = [tuple(ixy) for ixy in sorted(filter(included,nt_ixys), key=key)] #key=lambda ixy:(key(ixy), ixy[0]))] excludeds = [tuple(ixy) for ixy in filter(excluded,nt_ixys)] ixy_map = F.zipdict( map(F.first, ixys), map(tup(Ixy), ixys)) return dict( ixys=ixys, mode=mode, ixy_map=ixy_map, min_key=min_key, max_key=max_key, includeds=includeds, excludeds=excludeds )
def ast_eval(node): """ Faster ast.literal_eval() with better error messages. Works only with nodes not strings. """ if isinstance(node, ast.Num): return node.n elif isinstance(node, ast.Str): return node.s elif isinstance(node, ast.Name) and node.id in NAMED_CONSTS: return NAMED_CONSTS[node.id] elif isinstance(node, ast.Tuple): return tuple(ast_eval(n) for n in node.elts) elif isinstance(node, ast.List): return [ast_eval(n) for n in node.elts] elif isinstance(node, ast.Dict): return zipdict(ast_eval(node.keys), ast_eval(node.values)) else: raise ValueError("Don't know how to eval %s" % node.__class__.__name__)
def gen_bst_delete_data(draw): ixys = draw(st.lists( st.tuples( st.integers(min_value=1, max_value=MAX_LEN), st.integers(min_value=1, max_value=2**31), st.integers(min_value=1, max_value=2**31), ), min_size=1, max_size=MAX_LEN, unique_by=lambda ixy:ixy[0] )) ixy_idxes = F.lmap(F.first, ixys) ixy_map = F.zipdict( ixy_idxes, map(tup(Ixy), ixys)) # if tuple, ixy. if int, delete index. # if +: ins, -: del cmd_idxes = ixy_idxes + [-i for i in ixy_idxes] random.shuffle(cmd_idxes) return dict(ixys=ixys, del_idxes=ixy_idxes, ixy_map=ixy_map, cmd_idxes=cmd_idxes)
def csvdictstream(filename, encoding="utf-8", fields=None, stripchars="\r\n"): """Stream every line in the given file interpreting each line as a dictionary of fields to items. :param filename: A ``str`` filename, A ``py._path.local.LocalPath`` instance or open ``file`` instnace. :type filename: ``str``, ``py._path.local.LocalPath`` or ``file``. :param encoding: A ``str`` indicating the charset/encoding to use. :type encoding: ``str`` :param stripchars: An iterable of characters to strip from the surrounding line. ``line.strip(...)`` is used. :type stripchars: ``list``, ``tuple`` or ``str`` This is a wrapper around ``csvstream`` where the stream is treated as dict of field(s) to item(s). """ stream = csvstream(filename, encoding=encoding, stripchars=stripchars) if fields is None: fields = map(strip, next(stream)) for values in stream: yield compact(zipdict(fields, values))
def get_defaults(func): func = unwrap(func) return zipdict(get_kwargnames(func), func.__defaults__ or ())
def accumulate(data): dates, counts = zip(*sorted(data.items())) return zipdict(dates, sums(counts))
def dashboard(request): keys = ('core.stats.tags', 'core.stats.serie_annotations', 'core.stats.sample_annotations', 'core.graph') return { 'stats': zipdict(keys, redis_client.mget(*keys)) }
def zip_to_series(a, b): assert len(a) == len(b) return pd.Series(funcy.zipdict(a, b))