Source code for pyccel.complexity.arithmetic

# coding: utf-8


from sympy import count_ops as sympy_count_ops
from sympy import Tuple
from sympy.core.expr import Expr
from sympy.utilities.iterables import iterable

from pyccel.ast import (For, Assign, While,NewLine,
                        FunctionDef, Import, Print,
                        Comment, AnnotatedComment,
                        If, Zeros, Ones, Array, 
                        Len, Dot, IndexedElement)

from pyccel.complexity.basic import Complexity

__all__ = ["count_ops", "OpComplexity"]

[docs]class OpComplexity(Complexity): """class for Operation complexity computation."""
[docs] def cost(self): """ Computes the complexity of the given code. verbose: bool talk more """ return count_ops(self.ast, visual=True)
[docs]def count_ops(expr, visual=None): if isinstance(expr, Assign): return sympy_count_ops(expr.rhs, visual) elif isinstance(expr, For): a = expr.iterable.size ops = sum(count_ops(i, visual) for i in expr.body) return a*ops elif isinstance(expr, Tuple): return sum(count_ops(i, visual) for i in expr) elif isinstance(expr, (Zeros, Ones,NewLine)): return 0 else: raise NotImplementedError('TODO count_ops for {}'.format(type(expr)))
############################################## if __name__ == "__main__": code = ''' n = 10 for i in range(0,n): for j in range(0,n): x = pow(i,2) + pow(i,3) + 3*i y = x / 3 + 2* x ''' complexity = OpComplexity(code) print((complexity.cost()))