def setValues(expression, constants): if not constants: return expression constants = constants.copy() # EXPAND ALL CONSTANTS TO PRIMITIVE VALUES (MVEL CAN ONLY ACCEPT PRIMITIVE VALUES) for c in constants: value = c.value n = c.name if len(split_field(n)) >= 3: continue # DO NOT GO TOO DEEP if isinstance(value, list): continue # DO NOT MESS WITH ARRAYS if isinstance(value, Mapping): for k, v in value.items(): constants.append({"name": n + "." + k, "value": v}) for c in reverse(constants):# REVERSE ORDER, SO LONGER NAMES ARE TESTED FIRST s = 0 while True: s = expression.find(c.name, s) if s == -1: break if re.match(r"\w", expression[s - 1]): break if re.match(r"\w", expression[s + len(c.name)]): break v = value2MVEL(c.value) expression = expression[:s:] + "" + v + expression[:s + len(c.name):] return expression
def groupby(self, io_select): """ SLICE THIS MATRIX INTO ONES WITH LESS DIMENSIONALITY io_select - 1 IF GROUPING BY THIS DIMENSION, 0 IF FLATTENING return - """ # offsets WILL SERVE TO MASK DIMS WE ARE NOT GROUPING BY, AND SERVE AS RELATIVE INDEX FOR EACH COORDINATE offsets = [] new_dim = [] acc = 1 for i, d in reverse(enumerate(self.dims)): if not io_select[i]: new_dim.insert(0, d) offsets.insert(0, acc * io_select[i]) acc *= d if not new_dim: # WHEN groupby ALL DIMENSIONS, ONLY THE VALUES REMAIN # RETURN AN ITERATOR OF PAIRS (c, v), WHERE # c - COORDINATES INTO THE CUBE # v - VALUE AT GIVEN COORDINATES return ((c, self[c]) for c in self._all_combos()) else: output = [[None, Matrix(dims=new_dim)] for i in range(acc)] _groupby(self.cube, 0, offsets, 0, output, tuple(), []) return output
def test_2(self): data = end_2.split("\n") for d in reverse(diffs_2): data = apply_diff(data, d.split("\n"), reverse=True) assert "\n".join(data) == start_2 for d in diffs_2: data = apply_diff(data, d.split("\n")) assert "\n".join(data) == end_2
def test_1(self): data = end_1.split("\n") for d in reverse(diffs_1): data = apply_diff(data, d.split("\n"), reverse=True) assert "\n".join(data) == start_1 for d in diffs_1: data = apply_diff(data, d.split("\n")) assert "\n".join(data) == end_1
def _get_nested_path(field, schema): if not INDEX_CACHE: _late_import() if is_keyword(field): field = join_field([schema.es.alias] + split_field(field)) for i, f in reverse(enumerate(split_field(field))): path = join_field(split_field(field)[0:i + 1:]) if path in INDEX_CACHE: return join_field(split_field(path)[1::]) return None
def setValues(expression, constants): if not constants: return expression constants = constants.copy() # EXPAND ALL CONSTANTS TO PRIMITIVE VALUES (MVEL CAN ONLY ACCEPT PRIMITIVE VALUES) for c in constants: value = c.value n = c.name if len(split_field(n)) >= 3: continue # DO NOT GO TOO DEEP if isinstance(value, list): continue # DO NOT MESS WITH ARRAYS if isinstance(value, Mapping): for k, v in value.items(): constants.append({"name": n + "." + k, "value": v}) for c in reverse( constants): # REVERSE ORDER, SO LONGER NAMES ARE TESTED FIRST s = 0 while True: s = expression.find(c.name, s) if s == -1: break if re.match(r"\w", expression[s - 1]): break if re.match(r"\w", expression[s + len(c.name)]): break v = value2MVEL(c.value) expression = expression[:s:] + "" + v + expression[:s + len(c.name):] return expression