Phase 2 of the coding period is smoothly being traversed. I recently had a meeting with Sartaj on 11th of July, Thursday. Here were the minutes of the meeting, along with the deliverables completed over the week.

  • The FiniteFormalPowerSeries class PR needs some changes. Currently, it is taking in an ‘order’ term and returning a FiniteFormalPowerSeries class object, in which the coefficient sequence is a list of coefficients. Sartaj said that there is no point in keeping a class if we are describing it for only this functionality. Instead, he suggested that we should not take in an order term, and try to return only sequences,such that all the functionalities are working properly. I am currently working on the class PR. It should be ready and be in a mergeable position by the next week.

  • The aseries functionality is ready and has been pushed in PR #17167. Here is the functionality which has been implemented.


def aseries(expr, x=None, n=6, bound=0, hir=False):
    """Asymptotic Series expansion of expr.
    This is equivalent to ``expr.series(x, oo, n)``.
    
    Parameters
    ==========
    
    expr : Expression
           The expression whose series is to be expanded.
    x : Symbol
        It is the variable of the expression to be calculated.
    n : Value
        The number of terms upto which the series is to be expanded.
    hir : Boolean
          Set this parameter to be True to produce hierarchical series.
          It stops the recursion at an early level and may provide nicer
          and more useful results.
    bound : Value, Integer
            Use the ``bound`` parameter to give limit on rewriting
            coefficients in its normalised form.
      
    Examples
    ========
    
    >>> from sympy import sin, exp
    >>> from sympy.abc import x, y
    
    >>> e = sin(1/x + exp(-x)) - sin(1/x)
    >>> e.aseries(x)
    (1/(24*x**4) - 1/(2*x**2) + 1 + O(x**(-6), (x, oo)))*exp(-x)
    
    >>> e.aseries(x, n=3, hir=True)
    -exp(-2*x)*sin(1/x)/2 + exp(-x)*cos(1/x) + O(exp(-3*x), (x, oo))
    
    >>> e = exp(exp(x)/(1 - 1/x))
    >>> e.aseries(x, bound=3)
    exp(exp(x)/x**2)*exp(exp(x)/x)*exp(-exp(x) + exp(x)/(1 - 1/x) - exp(x)/x - exp(x)/x**2)*exp(exp(x))
    
    >>> e.aseries(x)
    exp(exp(x)/(1 - 1/x))
    
    Returns
    =======
    
    Expr
        Asymptotic series expansion of the expression.
        
    Notes
    =====
    
    This algorithm is directly induced from the limit computational algorithm provided by Gruntz.
    It majorly uses the mrv and rewrite sub-routines. The overall idea of this algorithm is first
    to look for the most rapidly varying subexpression w of a given expression f and then expands f
    in a series in w. Then same thing is recursively done on the leading coefficient
    till we get constant coefficients.
    
    If the most rapidly varying subexpression of a given expression f is f itself,
    the algorithm tries to find a normalised representation of the mrv set and rewrites f
    using this normalised representation.
    
    If the expansion contains an order term, it will be either ``O(x**(-n))`` or ``O(w**(-n))``
    where ``w`` belongs to the most rapidly varying expression of ``self``.