def actual_inv_in_index_range(dim): index_dom = indices_dom.domains[dim - 1] inv_included = util_ops.inv_included(index_dom) prod_get = product_ops.getter(dim - 1) prod_inv_get = product_ops.inv_getter(indices_dom, dim - 1) def do(res, index_constr, array_constr): rng_constr = array_index_range(array_constr) index_constr, rng_dim_constr = inv_included( res, index_constr, prod_get(rng_constr)) or (index_dom.bottom, index_dom.bottom) array_constr = array_inv_index_range( prod_inv_get(rng_dim_constr, rng_constr) or indices_dom.bottom, array_constr) if (index_dom.is_empty(index_constr) or array_dom.is_empty(array_constr)): return None return index_constr, array_constr return do
def case_get_update(sig): if (isinstance(sig.name, ops.GetName) and sig.name.index < len(getter_sig) and sig == getter_sig[sig.name.index](sig.name)): return (product_ops.getter(sig.name.index), product_ops.inv_getter(prod_dom, sig.name.index)) elif (isinstance(sig.name, ops.UpdatedName) and sig.name.index < len(updated_sig) and sig == updated_sig[sig.name.index](sig.name)): return (product_ops.updater(sig.name.index), product_ops.inv_updater(prod_dom, sig.name.index))
def model_provider(sig): if sig.name == ops.GET_MODEL and sig.input_domains[0] == dom: return product_ops.getter(1), product_ops.inv_getter(dom, 1)