def _factorize(self, cluster, *args, **kwargs): """ Collect terms in each expr in exprs based on the following heuristic: * Collect all literals; * Collect all temporaries produced by CSE; * If the expression has an operation count higher than self.threshold, then this is applied recursively until no more factorization opportunities are available. """ processed = [] for expr in cluster.exprs: handle = collect_nested(expr) cost_handle = estimate_cost(handle) if cost_handle >= self.thresholds['min-cost-factorize']: handle_prev = handle cost_prev = estimate_cost(expr) while cost_handle < cost_prev: handle_prev, handle = handle, collect_nested(handle) cost_prev, cost_handle = cost_handle, estimate_cost(handle) cost_handle, handle = cost_prev, handle_prev processed.append(handle) return cluster.rebuild(processed)
def _factorize(self, cluster, *args, **kwargs): """ Factorize trascendental functions, symbolic powers, numeric coefficients. If the expression has an operation count greater than ``self.MIN_COST_FACTORIZE``, then the algorithm is applied recursively until no more factorization opportunities are detected. """ processed = [] for expr in cluster.exprs: handle = collect_nested(expr) cost_handle = estimate_cost(handle) if cost_handle >= self.MIN_COST_FACTORIZE: handle_prev = handle cost_prev = estimate_cost(expr) while cost_handle < cost_prev: handle_prev, handle = handle, collect_nested(handle) cost_prev, cost_handle = cost_handle, estimate_cost(handle) cost_handle, handle = cost_prev, handle_prev processed.append(handle) return cluster.rebuild(processed)
def _factorize(self, cluster, *args, **kwargs): """ Collect terms in each expr in exprs based on the following heuristic: * Collect all literals; * Collect all temporaries produced by CSE; * If the expression has an operation count higher than ``self.MIN_COST_FACTORIZE``, then this is applied recursively until no more factorization opportunities are available. """ processed = [] for expr in cluster.exprs: handle = collect_nested(expr) cost_handle = estimate_cost(handle) if cost_handle >= self.MIN_COST_FACTORIZE: handle_prev = handle cost_prev = estimate_cost(expr) while cost_handle < cost_prev: handle_prev, handle = handle, collect_nested(handle) cost_prev, cost_handle = cost_handle, estimate_cost(handle) cost_handle, handle = cost_prev, handle_prev processed.append(handle) return cluster.rebuild(processed)