def compute(self, context, expr): entity = context.entity baseperiod = entity.base_period period = context.period - 1 typemap = {bool: int, int: int, float: float} res_type = typemap[getdtype(expr, context)] res_size = len(entity.array) sum_values = np.zeros(res_size, dtype=res_type) id_to_rownum = context.id_to_rownum while period >= baseperiod: ids, values = self.value_for_period(expr, period, context, fill=None) # filter out lines which are present because there was a value for # that individual at that period but not for that column acceptable_rows = hasvalue(values) acceptable_ids = ids[acceptable_rows] if len(acceptable_ids): acceptable_values = values[acceptable_rows] value_rows = id_to_rownum[acceptable_ids] period_value = np.zeros(res_size, dtype=np.float) safe_put(period_value, value_rows, acceptable_values) sum_values += period_value period -= 1 return sum_values
def evaluate(self, context): entity = context['__entity__'] baseperiod = entity.base_period period = context['period'] - 1 expr = self.expr typemap = {bool: int, int: int, float: float} res_type = typemap[dtype(expr, context)] res_size = len(entity.array) sum_values = np.zeros(res_size, dtype=res_type) id_to_rownum = context.id_to_rownum while period >= baseperiod: ids, values = entity.value_for_period(expr, period, context, fill=None) # filter out lines which are present because there was a value for # that individual at that period but not for that column acceptable_rows = hasvalue(values) acceptable_ids = ids[acceptable_rows] if len(acceptable_ids): acceptable_values = values[acceptable_rows] value_rows = id_to_rownum[acceptable_ids] period_value = np.zeros(res_size, dtype=np.float) safe_put(period_value, value_rows, acceptable_values) sum_values += period_value period -= 1 return sum_values
def compute(self, context, expr): entity = context.entity baseperiod = entity.base_period period = context.period - 1 res_size = len(entity.array) num_values = np.zeros(res_size, dtype=np.int) # current period last_period_wh_value = np.full(res_size, context.period, dtype=np.int) sum_values = np.zeros(res_size, dtype=np.float) id_to_rownum = context.id_to_rownum while period >= baseperiod: ids, values = self.value_for_period(expr, period, context, fill=None) # filter out lines which are present because there was a value for # that individual at that period but not for that column acceptable_rows = hasvalue(values) acceptable_ids = ids[acceptable_rows] if len(acceptable_ids): acceptable_values = values[acceptable_rows] value_rows = id_to_rownum[acceptable_ids] has_value = np.zeros(res_size, dtype=bool) safe_put(has_value, value_rows, True) period_value = np.zeros(res_size, dtype=np.float) safe_put(period_value, value_rows, acceptable_values) num_values += has_value * (last_period_wh_value - period) sum_values += period_value last_period_wh_value[has_value] = period period -= 1 return sum_values / num_values
def evaluate(self, context): entity = context['__entity__'] baseperiod = entity.base_period period = context['period'] - 1 expr = self.expr res_size = len(entity.array) num_values = np.zeros(res_size, dtype=np.int) last_period_wh_value = np.empty(res_size, dtype=np.int) last_period_wh_value.fill(context['period']) # current period sum_values = np.zeros(res_size, dtype=np.float) id_to_rownum = context.id_to_rownum while period >= baseperiod: ids, values = entity.value_for_period(expr, period, context, fill=None) # filter out lines which are present because there was a value for # that individual at that period but not for that column acceptable_rows = hasvalue(values) acceptable_ids = ids[acceptable_rows] if len(acceptable_ids): acceptable_values = values[acceptable_rows] value_rows = id_to_rownum[acceptable_ids] has_value = np.zeros(res_size, dtype=bool) safe_put(has_value, value_rows, True) period_value = np.zeros(res_size, dtype=np.float) safe_put(period_value, value_rows, acceptable_values) num_values += has_value * (last_period_wh_value - period) sum_values += period_value last_period_wh_value[has_value] = period period -= 1 return sum_values / num_values