Symbolic representation of big-O notation.
I was looking for something like this but couldn't find it. So I wrote it, and it turned out to be much simpler than I expected.
Note that much of this functionality can now be achieved using sympy.series.order, if you're careful to specify that your limits go to infinity.
import sympy
from bigO import O, n
f_time = O(n)
g_time = O(n**2)
h_time = O(sympy.sqrt(n))
fastest_asymptotically = min(f_time, g_time, h_time)
# = h_time
total_time = f_time.inside(g_time).followed_by(h_time)
# = O(n**3)
# If you prefer a less verbose API:
total_time = f_time * g_time + h_time
# = O(n**3)