예제 #1
0
        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
예제 #2
0
 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))
예제 #3
0
 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)