§
    OŠtjïf ã                   óô  — d Z ddlmZmZmZ ddlmZmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZmZ ddlmZ ddlmZmZmZ dd	lmZmZmZ dd
lm Z m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZF ddlGmHZH ddlImJZJ ddlKmLZL ddlMmNZN ddlOmPZP ddlQmRZR dd lSmTZTmUZUmVZV dd!lWmXZXmYZYmZZZm[Z[ d"„ Z\d#„ Z] G d$„ d%¦  «        Z^ G d&„ d'¦  «        Z_ G d(„ d)¦  «        Z`d=d+„Zadd*d,e=fd-„Zb ed.¦  «        Zcd/add/aedd0lfmgZg d>d1„Zhd?d2„Zid3„ Zjd4„ Zkd5„ Zld6„ Zmd7„ Znd@d8„Zodd/d/e=d,fd9„Zpd,e=fd:„Zqe=fd;„ZrdAd<„Zsd/S )BzL
This module implements Holonomic Functions and
various operations on them.
é    )ÚAddÚMulÚPow)ÚNaNÚInfinityÚNegativeInfinityÚFloatÚIÚpiÚequal_valuedÚ
int_valued)ÚS)Úordered)ÚDummyÚSymbol)Úsympify)ÚbinomialÚ	factorialÚrf)Ú	exp_polarÚexpÚlog)ÚcoshÚsinh)Úsqrt)ÚcosÚsinÚsinc)ÚCiÚShiÚSiÚerfÚerfcÚerfi)Úgamma)ÚhyperÚmeijerg)Ú	meijerint)ÚMatrix)ÚPolyElement)ÚFracElement)ÚQQÚRR)ÚDMF)Úroots)ÚPoly)ÚDomainMatrix)Ússtr)Úlimit)ÚOrder)Úhyperexpand)Ú	nsimplify)Úsolveé   )ÚHolonomicSequenceÚRecurrenceOperatorÚRecurrenceOperators)ÚNotPowerSeriesErrorÚNotHyperSeriesErrorÚSingularityErrorÚNotHolonomicErrorc                 óª   ‡ — ˆ fd„}‰                       |¦  «        \  }}|j        d         } |d|f¦  «        |z  }||z                        ¦   «         }|S )Nc                 ó8   •— t          j        | ‰j        ¦  «        S ©N)r1   ÚonesÚdomain)ÚshapeÚrs    €úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/holonomic/holonomic.pyú<lambda>z(_find_nonzero_solution.<locals>.<lambda>+   s   ø€ �Ô*¨5°!´(Ñ;Ô;€ ó    r   r8   )Ú_solverE   Ú	transpose)rF   ÚhomosysrC   Ú
particularÚ	nullspaceÚnullityÚnullpartÚsols   `       rG   Ú_find_nonzero_solutionrR   *   sf   ø€ Ø;Ð;Ð;Ð;€DØŸHšH WÑ-Ô-Ñ€J�	ØŒo˜aÔ €GØˆt�Q˜�LÑ!Ô! IÑ-€HØ˜Ñ ×
+Ò
+Ñ
-Ô
-€CØ€JrI   c                 ó4   — t          | |¦  «        }||j        fS )aµ  
    This function is used to create annihilators using ``Dx``.

    Explanation
    ===========

    Returns an Algebra of Differential Operators also called Weyl Algebra
    and the operator for differentiation i.e. the ``Dx`` operator.

    Parameters
    ==========

    base:
        Base polynomial ring for the algebra.
        The base polynomial ring is the ring of polynomials in :math:`x` that
        will appear as coefficients in the operators.
    generator:
        Generator of the algebra which can
        be either a noncommutative ``Symbol`` or a string. e.g. "Dx" or "D".

    Examples
    ========

    >>> from sympy import ZZ
    >>> from sympy.abc import x
    >>> from sympy.holonomic.holonomic import DifferentialOperators
    >>> R, Dx = DifferentialOperators(ZZ.old_poly_ring(x), 'Dx')
    >>> R
    Univariate Differential Operator Algebra in intermediate Dx over the base ring ZZ[x]
    >>> Dx*x
    (1) + (x)*Dx
    )ÚDifferentialOperatorAlgebraÚderivative_operator)ÚbaseÚ	generatorÚrings      rG   ÚDifferentialOperatorsrY   4   s"   € õD ' t¨YÑ7Ô7€DØ�$Ô*Ð+Ð+rI   c                   ó(   — e Zd ZdZd„ Zd„ ZeZd„ ZdS )rT   a¦  
    An Ore Algebra is a set of noncommutative polynomials in the
    intermediate ``Dx`` and coefficients in a base polynomial ring :math:`A`.
    It follows the commutation rule:

    .. math ::
       Dxa = \sigma(a)Dx + \delta(a)

    for :math:`a \subset A`.

    Where :math:`\sigma: A \Rightarrow A` is an endomorphism and :math:`\delta: A \rightarrow A`
    is a skew-derivation i.e. :math:`\delta(ab) = \delta(a) b + \sigma(a) \delta(b)`.

    If one takes the sigma as identity map and delta as the standard derivation
    then it becomes the algebra of Differential Operators also called
    a Weyl Algebra i.e. an algebra whose elements are Differential Operators.

    This class represents a Weyl Algebra and serves as the parent ring for
    Differential Operators.

    Examples
    ========

    >>> from sympy import ZZ
    >>> from sympy import symbols
    >>> from sympy.holonomic.holonomic import DifferentialOperators
    >>> x = symbols('x')
    >>> R, Dx = DifferentialOperators(ZZ.old_poly_ring(x), 'Dx')
    >>> R
    Univariate Differential Operator Algebra in intermediate Dx over the base ring
    ZZ[x]

    See Also
    ========

    DifferentialOperator
    c                 ó   — || _         t          |j        |j        g| ¦  «        | _        |€t          dd¬¦  «        | _        d S t          |t          ¦  «        rt          |d¬¦  «        | _        d S t          |t
          ¦  «        r	|| _        d S d S )NÚDxF)Úcommutative)	rV   ÚDifferentialOperatorÚzeroÚonerU   r   Ú
gen_symbolÚ
isinstanceÚstr)ÚselfrV   rW   s      rG   Ú__init__z$DifferentialOperatorAlgebra.__init__�   sš   € àˆŒ	å#7ØŒY˜œÐ! 4ñ$)ô $)ˆÔ ð ÐÝ$ T°uÐ=Ñ=Ô=ˆDŒOˆOˆOå˜)¥SÑ)Ô)ð ,Ý"(¨ÀÐ"FÑ"FÔ"F�”��Ý˜I¥vÑ.Ô.ð ,Ø"+�”��ð,ð ,rI   c                 ón   — dt          | j        ¦  «        z   dz   | j                             ¦   «         z   }|S )Nz9Univariate Differential Operator Algebra in intermediate z over the base ring )r2   ra   rV   Ú__str__)rd   Ústrings     rG   rg   z#DifferentialOperatorAlgebra.__str__�   s>   € ØLÝ�4”?Ñ#Ô#ñ$Ø&<ñ=àŒY×ÒÑ!Ô!ñ"ˆð ˆrI   c                 óB   — | j         |j         k    o| j        |j        k    S rB   )rV   ra   ©rd   Úothers     rG   Ú__eq__z"DifferentialOperatorAlgebra.__eq__™   s%   € ØŒy˜EœJÒ&ð 3ØŒ %Ô"2Ò2ð	3rI   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__re   rg   Ú__repr__rl   © rI   rG   rT   rT   Z   sS   € € € € € ð$ð $ðL,ð ,ð ,ðð ð ð €Hð3ð 3ð 3ð 3ð 3rI   rT   c                   óf   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ ZeZ	d„ Z
d„ Zd	„ Zd
„ Zd„ Zd„ ZeZd„ Zd„ ZdS )r^   aþ  
    Differential Operators are elements of Weyl Algebra. The Operators
    are defined by a list of polynomials in the base ring and the
    parent ring of the Operator i.e. the algebra it belongs to.

    Explanation
    ===========

    Takes a list of polynomials for each power of ``Dx`` and the
    parent ring which must be an instance of DifferentialOperatorAlgebra.

    A Differential Operator can be created easily using
    the operator ``Dx``. See examples below.

    Examples
    ========

    >>> from sympy.holonomic.holonomic import DifferentialOperator, DifferentialOperators
    >>> from sympy import ZZ
    >>> from sympy import symbols
    >>> x = symbols('x')
    >>> R, Dx = DifferentialOperators(ZZ.old_poly_ring(x),'Dx')

    >>> DifferentialOperator([0, 1, x**2], R)
    (1)*Dx + (x**2)*Dx**2

    >>> (x*Dx*x + 1 - Dx**2)**2
    (2*x**2 + 2*x + 1) + (4*x**3 + 2*x**2 - 4)*Dx + (x**4 - 6*x - 2)*Dx**2 + (-2*x**2)*Dx**3 + (1)*Dx**4

    See Also
    ========

    DifferentialOperatorAlgebra
    é   c                 óò  — || _         | j         j        }t          |j        d         t          ¦  «        r|j        d         n|j        d         d         | _        t          |¦  «        D ]k\  }}t          ||j        ¦  «        s&|                     t          |¦  «        ¦  «        ||<   Œ@|                     | 
                    |¦  «        ¦  «        ||<   Œl|| _        t          | j        ¦  «        dz
  | _        dS )zÍ
        Parameters
        ==========

        list_of_poly:
            List of polynomials belonging to the base ring of the algebra.
        parent:
            Parent algebra of the operator.
        r   r8   N)ÚparentrV   rb   Úgensr   ÚxÚ	enumerateÚdtypeÚ
from_sympyr   Úto_sympyÚ
listofpolyÚlenÚorder)rd   Úlist_of_polyrv   rV   ÚiÚjs         rG   re   zDifferentialOperator.__init__Ä   sÜ   € ð ˆŒØŒ{ÔˆÝ!+¨D¬I°a¬L½&Ñ!AÔ!AÐV�”˜1”�ÀtÄyÐQRÄ|ÐTUÄˆŒõ
 ˜lÑ+Ô+ð 	Dð 	D‰DˆAˆqÝ˜a ¤Ñ,Ô,ð DØ"&§/¢/µ'¸!±*´*Ñ"=Ô"=�˜Q‘�à"&§/¢/°$·-²-ÀÑ2BÔ2BÑ"CÔ"C�˜Q‘�à&ˆŒå˜œÑ)Ô)¨AÑ-ˆŒ
ˆ
ˆ
rI   c                 óà  ‡ — ‰ j         }t          |t          ¦  «        r|j         }nPt          |‰ j        j        j        ¦  «        r|g}n-‰ j        j                             t          |¦  «        ¦  «        g}d„ } ||d         |¦  «        }ˆ fd„}t          dt          |¦  «        ¦  «        D ]-} ||¦  «        }t          | |||         |¦  «        ¦  «        }Œ.t          |‰ j        ¦  «        S )z£
        Multiplies two DifferentialOperator and returns another
        DifferentialOperator instance using the commutation rule
        Dx*a = a*Dx + a'
        c                 óV   ‡ — t          |t          ¦  «        rˆ fd„|D ¦   «         S ‰ |z  gS )Nc                 ó   •— g | ]}|‰z  ‘ŒS rr   rr   )Ú.0r�   Úbs     €rG   ú
<listcomp>zIDifferentialOperator.__mul__.<locals>._mul_dmp_diffop.<locals>.<listcomp>ô   s   ø€ Ð3Ð3Ð3 !˜˜A™Ð3Ð3Ð3rI   )rb   Úlist)r‡   Úlistofothers   ` rG   Ú_mul_dmp_diffopz5DifferentialOperator.__mul__.<locals>._mul_dmp_diffopò   s<   ø€ Ý˜+¥tÑ,Ô,ð 4Ø3Ð3Ð3Ð3 {Ð3Ñ3Ô3Ð3Ø˜‘OÐ$Ð$rI   r   c                 óæ  •— ‰j         j        j        g}g }t          | t          ¦  «        rB| D ]>}|                     |¦  «         |                     |                     ¦   «         ¦  «         Œ?nv|                     ‰j         j                             | ¦  «        ¦  «         |                     ‰j         j                             | ¦  «                             ¦   «         ¦  «         t          ||¦  «        S rB   )	rv   rV   r_   rb   r‰   ÚappendÚdiffr{   Ú
_add_lists)r‡   Úsol1Úsol2r�   rd   s       €rG   Ú
_mul_Dxi_bz0DifferentialOperator.__mul__.<locals>._mul_Dxi_bú   sÓ   ø€ Ø”KÔ$Ô)Ð*ˆDØˆDå˜!�TÑ"Ô"ð CØð *ð *�AØ—K’K ‘N”N�NØ—K’K §¢¡¤Ñ)Ô)Ð)Ð)ð*ð —’˜DœKÔ,×7Ò7¸Ñ:Ô:Ñ;Ô;Ð;Ø—’˜DœKÔ,×7Ò7¸Ñ:Ô:×?Ò?ÑAÔAÑBÔBÐBå˜d DÑ)Ô)Ð)rI   r8   )r}   rb   r^   rv   rV   rz   r{   r   Úranger~   r�   )rd   rk   Ú
listofselfrŠ   r‹   rQ   r’   r�   s   `       rG   Ú__mul__zDifferentialOperator.__mul__â   s  ø€ ð ”_ˆ
Ý�eÕ1Ñ2Ô2ð 	HØÔ*ˆKˆKÝ˜˜tœ{Ô/Ô5Ñ6Ô6ð 	HØ ˜'ˆKˆKàœ;Ô+×6Ò6µw¸u±~´~ÑFÔFÐGˆKð	%ð 	%ð 	%ð
 ˆo˜j¨œm¨[Ñ9Ô9ˆð	*ð 	*ð 	*ð 	*ð 	*õ �q�#˜j™/œ/Ñ*Ô*ð 	Oð 	OˆAà$˜* [Ñ1Ô1ˆKå˜S / /°*¸Q´-ÀÑ"MÔ"MÑNÔNˆCˆCå# C¨¬Ñ5Ô5Ð5rI   c                 ó  ‡— t          ‰t          ¦  «        sst          ‰| j        j        j        ¦  «        s,| j        j                             t          ‰¦  «        ¦  «        Šˆfd„| j        D ¦   «         }t          || j        ¦  «        S d S )Nc                 ó   •— g | ]}‰|z  ‘ŒS rr   rr   )r†   r‚   rk   s     €rG   rˆ   z1DifferentialOperator.__rmul__.<locals>.<listcomp>  s   ø€ Ð6Ð6Ð6 �5˜1‘9Ð6Ð6Ð6rI   )rb   r^   rv   rV   rz   r{   r   r}   )rd   rk   rQ   s    ` rG   Ú__rmul__zDifferentialOperator.__rmul__  s†   ø€ Ý˜%Õ!5Ñ6Ô6ð 	:å˜e T¤[Ô%5Ô%;Ñ<Ô<ð FØœÔ)×5Ò5µg¸e±n´nÑEÔE�à6Ð6Ð6Ð6 d¤oÐ6Ñ6Ô6ˆCÝ'¨¨T¬[Ñ9Ô9Ð9ð	:ð 	:rI   c                 óœ  — t          |t          ¦  «        r/t          | j        |j        ¦  «        }t          || j        ¦  «        S | j        }t          || j        j        j        ¦  «        s.| j        j                             t          |¦  «        ¦  «        g}n|g}|d         |d         z   g|dd …         z   }t          || j        ¦  «        S )Nr   r8   )	rb   r^   r�   r}   rv   rV   rz   r{   r   )rd   rk   rQ   Ú	list_selfÚ
list_others        rG   Ú__add__zDifferentialOperator.__add__  sº   € Ý�eÕ1Ñ2Ô2ð 	:å˜Tœ_¨eÔ.>Ñ?Ô?ˆCÝ'¨¨T¬[Ñ9Ô9Ð9à”Oˆ	Ý˜% ¤Ô!1Ô!7Ñ8Ô8ð 	!Ø œKÔ-×9Ò9½'À%¹.¼.ÑIÔIÐJˆJˆJà˜ˆJØ˜Œ|˜j¨œmÑ+Ð,¨y¸¸¸¬}Ñ<ˆÝ# C¨¬Ñ5Ô5Ð5rI   c                 ó   — | d|z  z   S ©Néÿÿÿÿrr   rj   s     rG   Ú__sub__zDifferentialOperator.__sub__)  s   € Ø�r˜U‘lÑ"Ð"rI   c                 ó   — d| z  |z   S rž   rr   rj   s     rG   Ú__rsub__zDifferentialOperator.__rsub__,  s   € Ø�d‰{˜UÑ"Ð"rI   c                 ó   — d| z  S rž   rr   ©rd   s    rG   Ú__neg__zDifferentialOperator.__neg__/  ó   € Ø�D‰yÐrI   c                 ó&   — | t           j        |z  z  S rB   ©r   ÚOnerj   s     rG   Ú__truediv__z DifferentialOperator.__truediv__2  ó   € Ø•q”u˜u‘}Ñ%Ð%rI   c                 óT  — |dk    r| S t          | j        j        j        g| j        ¦  «        }|dk    r|S | j        | j        j        j        k    r=| j        j        j        g|z  | j        j        j        gz   }t          || j        ¦  «        S | }	 |dz  r||z  }|dz  }|sn||z  }Œ|S )Nr8   r   Té   )r^   rv   rV   r`   r}   rU   r_   )rd   ÚnÚresultrQ   rx   s        rG   Ú__pow__zDifferentialOperator.__pow__5  sÎ   € Ø�Š6ˆ6ØˆKÝ% t¤{Ô'7Ô';Ð&<¸d¼kÑJÔJˆØ�Š6ˆ6ØˆMàŒ?˜dœkÔ=ÔHÒHÐHØ”;Ô#Ô(Ð)¨!Ñ+¨t¬{Ô/?Ô/CÐ.DÑDˆCÝ'¨¨T¬[Ñ9Ô9Ð9Øˆð	Ø�1‰uð Ø˜!‘�Ø�!‰GˆAØð ØØ�‰FˆAð	ð ˆrI   c                 óÀ  — | j         }d}t          |¦  «        D ]Ä\  }}|| j        j        j        k    rŒ| j        j                             |¦  «        }|dk    r|dt          |¦  «        z   dz   z  }ŒY|r|dz  }|dk    r&|dt          |¦  «        z   d| j        j        z  z   z  }ŒŒ|dt          |¦  «        z   dz   d| j        j        z  z   t          |¦  «        z   z  }ŒÅ|S )	NÚ r   ú(ú)z + r8   z)*%sz*%s**)r}   ry   rv   rV   r_   r|   r2   ra   )rd   r}   Ú	print_strr�   r‚   s        rG   rg   zDifferentialOperator.__str__I  sþ   € Ø”_ˆ
Øˆ	å˜jÑ)Ô)ð 	[ð 	[‰DˆAˆqØ�D”KÔ$Ô)Ò)Ð)Øà”Ô ×)Ò)¨!Ñ,Ô,ˆAà�AŠvˆvØ˜S¥4¨¡7¤7™]¨SÑ0Ñ0�	Øàð #Ø˜UÑ"�	à�AŠvˆvØ˜S¥4¨¡7¤7™]¨V°d´kÔ6LÑ-MÑMÑM�	Øà˜�t A™wœw™¨Ñ,¨w¸¼Ô9OÑ/PÑPÕSWÐXYÑSZÔSZÑZÑZˆIˆIàÐrI   c                 óà   ‡ — t          |t          ¦  «        r ‰ j        |j        k    o‰ j        |j        k    S ‰ j        d         |k    o't	          ˆ fd„‰ j        dd …         D ¦   «         ¦  «        S )Nr   c              3   ó>   •K  — | ]}|‰j         j        j        u V — Œd S rB   ©rv   rV   r_   ©r†   r�   rd   s     €rG   ú	<genexpr>z.DifferentialOperator.__eq__.<locals>.<genexpr>i  s0   øè è € ÐHÐH¨q��T”[Ô%Ô*Ð*ÐHÐHÐHÐHÐHÐHrI   r8   )rb   r^   r}   rv   Úallrj   s   ` rG   rl   zDifferentialOperator.__eq__d  s   ø€ Ý�eÕ1Ñ2Ô2ð 	/Ø”? eÔ&6Ò6ð /Ø”; %¤,Ò.ð/àŒ˜qÔ! UÒ*ð IÝÐHÐHÐHÐH°D´OÀAÀBÀBÔ4GÐHÑHÔHÑHÔHð	IrI   c                 ó„   — | j         j        }|t          |                     | j        d         ¦  «        | j        ¦  «        v S )zH
        Checks if the differential equation is singular at x0.
        rŸ   )rv   rV   r/   r|   r}   rx   )rd   Úx0rV   s      rG   Úis_singularz DifferentialOperator.is_singulark  s8   € ð
 Œ{ÔˆØ•U˜4Ÿ=š=¨¬¸Ô)<Ñ=Ô=¸t¼vÑFÔFÐFÐFrI   N)rm   rn   ro   rp   Ú_op_priorityre   r•   r˜   rœ   Ú__radd__r    r¢   r¥   rª   r°   rg   rq   rl   r¾   rr   rI   rG   r^   r^   ž   sñ   € € € € € ð!ð !ðF €Lð.ð .ð .ð<,6ð ,6ð ,6ð\:ð :ð :ð6ð 6ð 6ð €Hð#ð #ð #ð#ð #ð #ðð ð ð&ð &ð &ðð ð ð(ð ð ð2 €HðIð Ið IðGð Gð Gð Gð GrI   r^   c                   óÜ   — e Zd ZdZdZd'd„Zd„ ZeZd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd(d„Zd„ Zd„ Zd„ ZeZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd)d„Zd)d„Zd*d„Zd„ Zd+d „Zd!„ Zd"„ Zd,d#„Z d$„ Z!d-d%„Z"d&„ Z#dS ).ÚHolonomicFunctiona’
  
    A Holonomic Function is a solution to a linear homogeneous ordinary
    differential equation with polynomial coefficients. This differential
    equation can also be represented by an annihilator i.e. a Differential
    Operator ``L`` such that :math:`L.f = 0`. For uniqueness of these functions,
    initial conditions can also be provided along with the annihilator.

    Explanation
    ===========

    Holonomic functions have closure properties and thus forms a ring.
    Given two Holonomic Functions f and g, their sum, product,
    integral and derivative is also a Holonomic Function.

    For ordinary points initial condition should be a vector of values of
    the derivatives i.e. :math:`[y(x_0), y'(x_0), y''(x_0) ... ]`.

    For regular singular points initial conditions can also be provided in this
    format:
    :math:`{s0: [C_0, C_1, ...], s1: [C^1_0, C^1_1, ...], ...}`
    where s0, s1, ... are the roots of indicial equation and vectors
    :math:`[C_0, C_1, ...], [C^0_0, C^0_1, ...], ...` are the corresponding initial
    terms of the associated power series. See Examples below.

    Examples
    ========

    >>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators
    >>> from sympy import QQ
    >>> from sympy import symbols, S
    >>> x = symbols('x')
    >>> R, Dx = DifferentialOperators(QQ.old_poly_ring(x),'Dx')

    >>> p = HolonomicFunction(Dx - 1, x, 0, [1])  # e^x
    >>> q = HolonomicFunction(Dx**2 + 1, x, 0, [0, 1])  # sin(x)

    >>> p + q  # annihilator of e^x + sin(x)
    HolonomicFunction((-1) + (1)*Dx + (-1)*Dx**2 + (1)*Dx**3, x, 0, [1, 2, 1])

    >>> p * q  # annihilator of e^x * sin(x)
    HolonomicFunction((2) + (-2)*Dx + (1)*Dx**2, x, 0, [0, 1])

    An example of initial conditions for regular singular points,
    the indicial equation has only one root `1/2`.

    >>> HolonomicFunction(-S(1)/2 + x*Dx, x, 0, {S(1)/2: [1]})
    HolonomicFunction((-1/2) + (x)*Dx, x, 0, {1/2: [1]})

    >>> HolonomicFunction(-S(1)/2 + x*Dx, x, 0, {S(1)/2: [1]}).to_expr()
    sqrt(x)

    To plot a Holonomic Function, one can use `.evalf()` for numerical
    computation. Here's an example on `sin(x)**2/x` using numpy and matplotlib.

    >>> import sympy.holonomic # doctest: +SKIP
    >>> from sympy import var, sin # doctest: +SKIP
    >>> import matplotlib.pyplot as plt # doctest: +SKIP
    >>> import numpy as np # doctest: +SKIP
    >>> var("x") # doctest: +SKIP
    >>> r = np.linspace(1, 5, 100) # doctest: +SKIP
    >>> y = sympy.holonomic.expr_to_holonomic(sin(x)**2/x, x0=1).evalf(r) # doctest: +SKIP
    >>> plt.plot(r, y, label="holonomic function") # doctest: +SKIP
    >>> plt.show() # doctest: +SKIP

    rt   r   Nc                 ó>   — || _         || _        || _        || _        dS )ap  

        Parameters
        ==========

        annihilator:
            Annihilator of the Holonomic Function, represented by a
            `DifferentialOperator` object.
        x:
            Variable of the function.
        x0:
            The point at which initial conditions are stored.
            Generally an integer.
        y0:
            The initial condition. The proper format for the initial condition
            is described in class docstring. To make the function unique,
            length of the vector `y0` should be equal to or greater than the
            order of differential equation.
        N)Úy0r½   Úannihilatorrx   )rd   rÅ   rx   r½   rÄ   s        rG   re   zHolonomicFunction.__init__¹  s%   € ð, ˆŒàˆŒà&ˆÔØˆŒˆˆrI   c           
      ó8  — |                       ¦   «         rXdt          | j        ¦  «        ›dt          | j        ¦  «        ›dt          | j        ¦  «        ›dt          | j        ¦  «        ›d�	}n-dt          | j        ¦  «        ›dt          | j        ¦  «        ›d�}|S )NzHolonomicFunction(z, r´   )Ú_have_init_condrc   rÅ   r2   rx   r½   rÄ   )rd   Ústr_sols     rG   rg   zHolonomicFunction.__str__Ö  s›   € Ø×ÒÑ!Ô!ð 	ð 	Ý=@ÀÔAQÑ=RÔ=RÐ=RÐ=RÝ�T”V‘”���d 4¤7™mœm˜m˜m­T°$´'©]¬]¨]¨]ð<ˆGˆGð	õ 69¸Ô9IÑ5JÔ5JÐ5JÐ5JÝ�T”V‘”��ðˆGð ˆrI   c                 ó^  ‡	‡
— | j         j        j        Š	|j         j        j        Š
‰	j        }‰
j        }‰	‰
k    r| |fS |                     |¦  «                             | j        ¦  «        }t          |t          | j         j        j	        ¦  «        ¦  «        \  }}ˆ	fd„| j         j
        D ¦   «         }ˆ
fd„|j         j
        D ¦   «         }t          ||¦  «        }t          ||¦  «        }t          || j        | j        | j        ¦  «        }t          ||j        |j        |j        ¦  «        }||fS )z^
        Unifies the base polynomial ring of a given two Holonomic
        Functions.
        c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rr   ©r|   )r†   r�   ÚR1s     €rG   rˆ   z+HolonomicFunction.unify.<locals>.<listcomp>õ  s#   ø€ ÐDÐDÐD 1�—’˜A‘”ÐDÐDÐDrI   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rr   rË   )r†   r�   ÚR2s     €rG   rˆ   z+HolonomicFunction.unify.<locals>.<listcomp>ö  s#   ø€ ÐEÐEÐE 1�—’˜A‘”ÐEÐEÐErI   )rÅ   rv   rV   ÚdomÚunifyÚold_poly_ringrx   rY   rc   ra   r}   r^   rÂ   r½   rÄ   )rd   rk   Údom1Údom2ÚRÚ	newparentÚ_r�   r‘   rÌ   rÎ   s            @@rG   rÐ   zHolonomicFunction.unifyâ  s   øø€ ð ÔÔ$Ô)ˆØÔÔ%Ô*ˆàŒvˆØŒvˆà�Š8ˆ8Ø˜%�=Ð à�ZŠZ˜ÑÔ×,Ò,¨T¬VÑ4Ô4ˆå,¨Qµ°DÔ4DÔ4KÔ4VÑ0WÔ0WÑXÔX‰ˆ	�1àDÐDÐDÐD¨Ô(8Ô(CÐDÑDÔDˆØEÐEÐEÐE¨Ô(9Ô(DÐEÑEÔEˆå# D¨)Ñ4Ô4ˆÝ# D¨)Ñ4Ô4ˆå   t¤v¨t¬w¸¼Ñ@Ô@ˆÝ   u¤w°´¸%¼(ÑCÔCˆà�dˆ|ÐrI   c                 óv   — t          | j        t          ¦  «        rdS t          | j        t          ¦  «        rdS dS )zþ
        Returns True if the function have singular initial condition
        in the dictionary format.

        Returns False if the function have ordinary initial condition
        in the list format.

        Returns None for all other cases.
        TFN)rb   rÄ   Údictr‰   r¤   s    rG   Úis_singularicsz HolonomicFunction.is_singularics   s@   € õ �d”g�tÑ$Ô$ð 	Ø�4Ý˜œ¥Ñ&Ô&ð 	Ø�5ð	ð 	rI   c                 ó*   — t          | j        ¦  «        S )z@
        Checks if the function have initial condition.
        )ÚboolrÄ   r¤   s    rG   rÇ   z!HolonomicFunction._have_init_cond  s   € õ �D”G‰}Œ}ÐrI   c                 ó|  ‡— t          | j        ¦  «        d         Š| j        ‰         }t          | j        ¦  «        dk    rw‰t          ‰¦  «        k    rf‰dk    rbt          ‰¦  «        Št          j        g‰z  }|ˆfd„t          |¦  «        D ¦   «         z  }t          | j        | j	        | j
        |¦  «        S dS dS dS )zP
        Converts a singular initial condition to ordinary if possible.
        r   r8   c                 ó@   •— g | ]\  }}|t          ‰|z   ¦  «        z  ‘ŒS rr   ©r   )r†   r�   r‚   Úas      €rG   rˆ   z9HolonomicFunction._singularics_to_ord.<locals>.<listcomp>   s.   ø€ ÐAÐAÐA©D¨A¨q�1•y  Q¡Ñ'Ô'Ñ'ÐAÐAÐArI   N)r‰   rÄ   r~   Úintr   ÚZerory   rÂ   rÅ   rx   r½   )rd   r‡   rÄ   rß   s      @rG   Ú_singularics_to_ordz%HolonomicFunction._singularics_to_ord  s³   ø€ õ �”‰MŒM˜!ÔˆØŒG�AŒJˆåˆtŒw‰<Œ<˜1ÒÐ ¥c¨!¡f¤f¢ °°Q²°Ý�A‘”ˆAÝ”&�˜A‘ˆBØÐAÐAÐAÐAµI¸a±L´LÐAÑAÔAÑAˆBå$ TÔ%5°t´v¸t¼wÈÑKÔKÐKð Ð  °°rI   c                 óà  — | j         j        j        |j         j        j        k    r|                      |¦  «        \  }}||z   S | j         j        }|j         j        }t          ||¦  «        }| j         j        j        }|                     ¦   «         }| j         g}	|j         g}
| j         j        j        }t          ||z
  ¦  «        D ]"}||	d         z  }|	 	                    |¦  «         Œ#t          ||z
  ¦  «        D ]"}||
d         z  }|
 	                    |¦  «         Œ#|	|
z   }g }|D ]¦}g }t          |dz   ¦  «        D ]z}|t          |j        ¦  «        k    r| 	                    |j        ¦  «         Œ5| 	                    |                     |j        |                              ¦   «         ¦  «        ¦  «         Œ{| 	                    |¦  «         Œ§t          |t          |¦  «        |dz   f|¦  «                             ¦   «         }t          j        |dz   df|¦  «        }t%          ||¦  «        }|j        �r\|dz  }||	d         z  }|	 	                    |¦  «         ||
d         z  }|
 	                    |¦  «         |	|
z   }g }|D ]¦}g }t          |dz   ¦  «        D ]z}|t          |j        ¦  «        k    r| 	                    |j        ¦  «         Œ5| 	                    |                     |j        |                              ¦   «         ¦  «        ¦  «         Œ{| 	                    |¦  «         Œ§t          |t          |¦  «        |dz   f|¦  «                             ¦   «         }t          j        |dz   df|¦  «        }t%          ||¦  «        }|j        �°\|                     ¦   «         d |dz   |z
  …         }t+          || j         j        ¦  «        }|| j         z  }t+          |j        | j         j        d¬¦  «        }|                      ¦   «         r|                     ¦   «         st/          || j        ¦  «        S |                      ¦   «         dk    �r‡|                     ¦   «         dk    �rn| j        |j        k    r`t7          | |j        ¦  «        }t7          ||j        ¦  «        }d„ t9          ||¦  «        D ¦   «         }t/          || j        | j        |¦  «        S | j                              d¦  «        }|j                              d¦  «        }| j        dk    r|s|s| |                     d¦  «        z   S |j        dk    r|s|s|                      d¦  «        |z   S | j                              | j        ¦  «        }|j                              | j        ¦  «        }|s|s| |                     | j        ¦  «        z   S |                      |j        ¦  «        |z   S | j        |j        k    rt/          || j        ¦  «        S d }d }|                      ¦   «         dk    rL|                     ¦   «         dk    r4d„ t?          | j         ¦  «        D ¦   «         }tB          j"        |i}|j         }n¢|                      ¦   «         dk    rL|                     ¦   «         dk    r4d	„ t?          |j         ¦  «        D ¦   «         }| j         }tB          j"        |i}n>|                      ¦   «         dk    r&|                     ¦   «         dk    r| j         }|j         }i }|D ];}||v r*d
„ t9          ||         ||         ¦  «        D ¦   «         ||<   Œ0||         ||<   Œ<|D ]}||vr||         ||<   Œt/          || j        | j        |¦  «        S )NrŸ   r8   F©Únegativec                 ó   — g | ]
\  }}||z   ‘ŒS rr   rr   ©r†   rß   r‡   s      rG   rˆ   z-HolonomicFunction.__add__.<locals>.<listcomp>�  s    € Ð4Ð4Ð4¡  1�a˜!‘eÐ4Ð4Ð4rI   r   Tc                 ó8   — g | ]\  }}|t          |¦  «        z  ‘ŒS rr   rÞ   ©r†   r�   r‚   s      rG   rˆ   z-HolonomicFunction.__add__.<locals>.<listcomp>›  ó'   € ÐCÐCÐC©¨¨1�1•y ‘|”|Ñ#ÐCÐCÐCrI   c                 ó8   — g | ]\  }}|t          |¦  «        z  ‘ŒS rr   rÞ   ré   s      rG   rˆ   z-HolonomicFunction.__add__.<locals>.<listcomp>Ÿ  ó'   € ÐDÐDÐD©¨¨1�1•y ‘|”|Ñ#ÐDÐDÐDrI   c                 ó   — g | ]
\  }}||z   ‘ŒS rr   rr   rç   s      rG   rˆ   z-HolonomicFunction.__add__.<locals>.<listcomp>­  s    € Ð=Ð=Ð=¡4 1 a˜˜Q™Ð=Ð=Ð=rI   )#rÅ   rv   rV   rÐ   r   ÚmaxÚ	get_fieldrU   r“   r�   r~   r}   r_   ÚnewÚto_listr1   rK   ÚzerosrR   Úis_zero_matrixÚflatÚ
_normalizerÇ   rÂ   rx   rÙ   r½   Ú
_extend_y0Úzipr¾   Ú
change_icsry   rÄ   r   rá   )rd   rk   rß   r‡   Údeg1Údeg2ÚdimrÔ   ÚKÚrowsselfÚ	rowsotherÚgenr�   Údiff1Údiff2ÚrowrF   ÚexprÚprL   rQ   r�   Úy1Úy2rÄ   Úselfat0Úotherat0Úselfatx0Ú	otheratx0Ú_y0s                                 rG   rœ   zHolonomicFunction.__add__$  st  € àÔÔ"Ô'¨5Ô+<Ô+CÔ+HÒHÐHØ—:’:˜eÑ$Ô$‰DˆAˆqØ�q‘5ˆLàÔÔ%ˆØÔ Ô&ˆÝ�$˜‰oŒoˆØÔÔ#Ô(ˆØ�KŠK‰MŒMˆàÔ$Ð%ˆØÔ&Ð'ˆ	ØÔÔ%Ô9ˆõ �s˜T‘zÑ"Ô"ð 	#ð 	#ˆAØ˜8 Bœ<Ñ'ˆEØ�OŠO˜EÑ"Ô"Ð"Ð"å�s˜T‘zÑ"Ô"ð 	$ð 	$ˆAØ˜9 Rœ=Ñ(ˆEØ×Ò˜UÑ#Ô#Ð#Ð#à˜Ñ"ˆð ˆàð 	ð 	ˆDØˆAÝ˜3 ™7‘^”^ð Bð B�Ø�˜DœOÑ,Ô,Ò,Ð,Ø—H’H˜QœVÑ$Ô$Ð$Ð$à—H’H˜QŸUšU 4¤?°1Ô#5×#=Ò#=Ñ#?Ô#?Ñ@Ô@ÑAÔAÐAÐAØ�HŠH�Q‰KŒKˆKˆKõ ˜�S ™XœX s¨1¡uÐ-¨qÑ1Ô1×;Ò;Ñ=Ô=ˆÝÔ$ c¨!¡e¨Q Z°Ñ3Ô3ˆÝ$ Q¨Ñ0Ô0ˆð Ô ñ 	5Ø�1‰HˆCà˜8 Bœ<Ñ'ˆEØ�OŠO˜EÑ"Ô"Ð"à˜9 Rœ=Ñ(ˆEØ×Ò˜UÑ#Ô#Ð#à˜YÑ&ˆCØˆAàð ð �Ø�Ý˜s Q™w™œð Fð F�AØ�C ¤Ñ0Ô0Ò0Ð0ØŸš ¤Ñ(Ô(Ð(Ð(àŸš §¢ t¤°qÔ'9×'AÒ'AÑ'CÔ'CÑ!DÔ!DÑEÔEÐEÐEØ—’˜‘”��õ ˜Q¥ S¡¤¨3¨q©5Ð 1°1Ñ5Ô5×?Ò?ÑAÔAˆAÝ"Ô(¨#¨a©%°¨°QÑ7Ô7ˆGÝ(¨¨GÑ4Ô4ˆCð1 Ô ñ 	5ð: �hŠh‰jŒj˜˜# ™' D™.˜Ô)ˆÝ˜#˜tÔ/Ô6Ñ7Ô7ˆà�dÔ&Ñ'ˆÝ˜œ¨Ô)9Ô)@È5ÐQÑQÔQˆà×$Ò$Ñ&Ô&ð 	2¨5×+@Ò+@Ñ+BÔ+Bð 	2Ý$ S¨$¬&Ñ1Ô1Ð1ð ×ÒÑ Ô  EÒ)Ñ)¨e×.BÒ.BÑ.DÔ.DÈÒ.MÑ.Mð Œw˜%œ(Ò"Ð"õ    c¤iÑ0Ô0�Ý  s¤yÑ1Ô1�Ø4Ð4­¨B°©¬Ð4Ñ4Ô4�Ý(¨¨d¬f°d´g¸rÑBÔBÐBð Ô&×2Ò2°1Ñ5Ô5ˆGØÔ(×4Ò4°QÑ7Ô7ˆHØŒw˜!Š|ˆ| Gˆ|°Hˆ|Ø˜e×.Ò.¨qÑ1Ô1Ñ1Ð1ØŒx˜1Š}ˆ} Wˆ}°Xˆ}Ø—’ qÑ)Ô)¨EÑ1Ð1àÔ'×3Ò3°D´GÑ<Ô<ˆHØÔ)×5Ò5°d´gÑ>Ô>ˆIØð 8 Ið 8Ø˜e×.Ò.¨t¬wÑ7Ô7Ñ7Ð7Ø—?’? 5¤8Ñ,Ô,¨uÑ4Ð4àŒ7�e”hÒÐÝ$ S¨$¬&Ñ1Ô1Ð1ð ˆØˆà×ÒÑ Ô  EÒ)Ð)¨e×.BÒ.BÑ.DÔ.DÈÒ.LÐ.LàCÐCµ	¸$¼'Ñ0BÔ0BÐCÑCÔCˆCÝ”&˜#�ˆBØ”ˆBˆBØ× Ò Ñ"Ô" dÒ*Ð*¨u×/CÒ/CÑ/EÔ/EÈÒ/NÐ/NØDÐDµ	¸%¼(Ñ0CÔ0CÐDÑDÔDˆCØ”ˆBÝ”&˜#�ˆBˆBØ× Ò Ñ"Ô" dÒ*Ð*¨u×/CÒ/CÑ/EÔ/EÈÒ/MÐ/MØ”ˆBØ”ˆBð ˆØð 	ð 	ˆAð �BˆwˆwØ=Ð=­3¨r°!¬u°b¸´eÑ+<Ô+<Ð=Ñ=Ô=��1‘�à˜1œ��1‘�Øð 	ð 	ˆAØ˜ˆ{ˆ{Ø˜1œ��1‘øÝ   d¤f¨d¬g°rÑ:Ô:Ð:rI   Fc           	      ó@	  — | j         j        j        }|                      ¦   «         dk    �r|                      ¦   «         }|r|                     ||¬¦  «        S i }| j        D ]š}| j        |         }g }t          |¦  «        D ]q\  }	}
|
dk    r |                     t          j
        ¦  «         Œ+||	z   dz   dk    rt          d¦  «        ‚|                     |
t          ||	z   dz   ¦  «        z  ¦  «         Œr|||dz   <   Œ›t          |d¦  «        rt          d¦  «        ‚t          | j         |z  | j        | j        |¦  «        S |                      ¦   «         sN|r/t          | j         |z  | j        | j        t          j
        g¦  «        S t          | j         |z  | j        ¦  «        S t          |d¦  «        r>t#          |¦  «        dk    r*|d         | j        k    r| j        }|d         }|d	         }d}nd
}t          j
        g}|| j        z  }t          | j         |z  | j        | j        |¦  «        }|s|S ||k    �rF	 |                     ¦   «         }n# t&          t(          f$ r d}Y nw xY w|rL|                     | j        |¦  «        }t-          |t.          ¦  «        r|                     | j        |¦  «        }n|                     |¦  «        }|| j        k    r-|d         |z
  |d<   t          | j         |z  | j        ||¦  «        S t          |¦  «        j        rh|rL|                     | j        |¦  «        }t-          |t.          ¦  «        r|                     | j        |¦  «        }n|                     |¦  «        }||z
  S || j        k    rt          | j         |z  | j        ||¦  «        S t          |¦  «        j        rÈ	 t          | j         |z  | j        ||¦  «                             ¦   «         }|                     | j        |¦  «        }t-          |t.          ¦  «        s|S |                     | j        |¦  «        S # t&          t(          f$ r5 t          | j         |z  | j        ||¦  «                             |¦  «        cY S w xY wt          | j         |z  | j        ¦  «        S )az  
        Integrates the given holonomic function.

        Examples
        ========

        >>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators
        >>> from sympy import QQ
        >>> from sympy import symbols
        >>> x = symbols('x')
        >>> R, Dx = DifferentialOperators(QQ.old_poly_ring(x),'Dx')
        >>> HolonomicFunction(Dx - 1, x, 0, [1]).integrate((x, 0, x))  # e^x - 1
        HolonomicFunction((-1)*Dx + (1)*Dx**2, x, 0, [0, 1])
        >>> HolonomicFunction(Dx**2 + 1, x, 0, [1, 0]).integrate((x, 0, x))
        HolonomicFunction((1)*Dx + (1)*Dx**3, x, 0, [0, 1, 0])
        T)Úinitcondr   r8   z1logarithmic terms in the series are not supportedÚ__iter__z4Definite integration for singular initial conditionsé   r­   FN)rÅ   rv   rU   rÙ   râ   Ú	integraterÄ   ry   r�   r   rá   ÚNotImplementedErrorÚhasattrrÂ   rx   r½   rÇ   r~   Úto_exprr=   r<   Úsubsrb   r   r3   ÚevalfÚ	is_Number)rd   Úlimitsr  ÚDrF   rÄ   r�   ÚcÚc2r‚   Úcjr½   rß   r‡   ÚdefiniteÚindefinite_integralÚindefinite_exprÚlowerÚupperÚsÚ
indefinites                        rG   r  zHolonomicFunction.integrateµ  sÚ  € ð& ÔÔ#Ô7ˆð ×ÒÑ Ô  DÒ(Ñ(à×(Ò(Ñ*Ô*ˆAØð >Ø—{’{ 6°H�{Ñ=Ô=Ð=ð ˆBØ”Wð ð �Ø”G˜A”J�Ø�Ý& q™\œ\ð 	5ð 	5‘E�A�rØ˜Q’w�wØŸ	š	¥!¤&Ñ)Ô)Ð)Ð)ð ˜Q™ ™ aš˜Ý1Ð2eÑfÔfÐfàŸ	š	 "¥q¨¨Q©°©¡|¤|Ñ"3Ñ4Ô4Ð4Ð4Ø��1�q‘5‘	�	å�v˜zÑ*Ô*ð bÝ)Ð*`ÑaÔaÐaå$ TÔ%5¸Ñ%9¸4¼6À4Ä7ÈBÑOÔOÐOð ×#Ò#Ñ%Ô%ð 	CØð ZÝ(¨Ô)9¸AÑ)=¸t¼vÀtÄwÕQRÔQWÐPXÑYÔYÐYÝ$ TÔ%5¸Ñ%9¸4¼6ÑBÔBÐBõ
 �6˜:Ñ&Ô&ð 		å�6‰{Œ{˜aÒÐ F¨1¤I°´Ò$7Ð$7Ø”W�Ø˜1”I�Ø˜1”I�Ø�øð ˆHåŒfˆXˆØ
ˆdŒg‰ˆå/°Ô0@À1Ñ0DÀdÄfÈdÌgÐWYÑZÔZÐàð 	'Ø&Ð&ð �Š7‰7ð'Ø"5×"=Ò"=Ñ"?Ô"?��øÝ'Õ)<Ð=ð 'ð 'ð 'Ø"&���ð'øøøð ð 5Ø'×,Ò,¨T¬V°QÑ7Ô7�Ý˜e¥SÑ)Ô)ð =Ø+×1Ò1°$´&¸!Ñ<Ô<�Eøà+×1Ò1°!Ñ4Ô4�à�D”FŠ{ˆ{Ø˜1œ ™��1‘Ý(¨Ô)9¸AÑ)=¸t¼vÀrÈ2ÑNÔNÐNå�1‘””ð %Ø"ð 9Ø+×0Ò0°´¸Ñ;Ô;�EÝ! %­Ñ-Ô-ð AØ /× 5Ò 5°d´f¸aÑ @Ô @˜øà/×5Ò5°aÑ8Ô8�Eà˜u‘}Ð$ð �”Š;ˆ;Ý$ TÔ%5¸Ñ%9¸4¼6À1ÀbÑIÔIÐIõ ˆq‰TŒTŒ^ð 
	Wð	WÝ% dÔ&6¸Ñ&:¸D¼FÀAØñô ßš™	œ	ð àŸVšV D¤F¨AÑ.Ô.�
Ý! *­cÑ2Ô2ð .Ø%Ð%àŸ7š7 4¤6¨1Ñ-Ô-Ð-øÝ'Õ)<Ð=ð Wð Wð WÝ(¨Ô)9¸AÑ)=¸t¼vÀqÈ"ÑMÔM×SÒSÐTUÑVÔVÐVÐVÐVðWøøøõ ! Ô!1°AÑ!5°t´vÑ>Ô>Ð>s,   È8I ÉI#É"I#Î<A"P: ÐP: Ð:AR Ñ?R c                 ód  ‡	‡
— |                      dd¦  «         |rg|d         | j        k    rt          j        S t	          |¦  «        dk    r7| }t          |d         ¦  «        D ]}|                     |d         ¦  «        }Œ|S | j        }|j        d         |j	        j
        j        k    r|j        dk    rt          j        S |j        d         |j	        j
        j        k    r¡t          |j        dd…         |j	        ¦  «        }|                      ¦   «         rV|                      ¦   «         dk    r)t!          || j        | j        | j        dd…         ¦  «        S t!          || j        ¦  «        S t!          || j        ¦  «        S |j	        j
        }|                     ¦   «         Š	ˆ	fd„|j        D ¦   «         Š
ˆ
fd	„‰
dd…         D ¦   «         }|                     d‰	j        ¦  «         t+          |‰	¦  «        }t-          |‰	j        ‰	j        g¦  «        }t1          |dd…         | j        j	        d¬
¦  «        }|                      ¦   «         r|                      ¦   «         dk    rt!          || j        ¦  «        S t3          | |j        dz   ¦  «        dd…         }t!          || j        | j        |¦  «        S )aK  
        Differentiation of the given Holonomic function.

        Examples
        ========

        >>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators
        >>> from sympy import ZZ
        >>> from sympy import symbols
        >>> x = symbols('x')
        >>> R, Dx = DifferentialOperators(ZZ.old_poly_ring(x),'Dx')
        >>> HolonomicFunction(Dx**2 + 1, x, 0, [0, 1]).diff().to_expr()
        cos(x)
        >>> HolonomicFunction(Dx - 2, x, 0, [1]).diff().to_expr()
        2*exp(2*x)

        See Also
        ========

        integrate
        ÚevaluateTr   r­   r8   NFc                 ó^   •— g | ])}‰                      |                     ¦   «         ¦  «        ‘Œ*S rr   ©rð   rñ   ©r†   r�   rü   s     €rG   rˆ   z*HolonomicFunction.diff.<locals>.<listcomp>m  s-   ø€ Ð>Ð>Ð>¨!�1—5’5˜Ÿš™œÑ%Ô%Ð>Ð>Ð>rI   c                 ó&   •— g | ]}|‰d          z  ‘ŒS ©r   rr   )r†   r�   Úseq_dmfs     €rG   rˆ   z*HolonomicFunction.diff.<locals>.<listcomp>p  s!   ø€ Ð3Ð3Ð3 !ˆq�7˜1”:‰~Ð3Ð3Ð3rI   rä   )Ú
setdefaultrx   r   rá   r~   r“   rŽ   rÅ   r}   rv   rV   r_   r   r^   rÇ   rÙ   rÂ   r½   rÄ   rï   ÚinsertÚ_derivate_diff_eqr�   r`   rõ   rö   )rd   ÚargsÚkwargsrQ   r�   ÚannrÔ   ÚrhsrÄ   rü   r*  s            @@rG   rŽ   zHolonomicFunction.diff4  s‹  øø€ ð, 	×Ò˜* dÑ+Ô+Ð+Øð 	Ø�AŒw˜$œ&Ò Ð Ý”v�Ý�T‘”˜a’�Ø�Ý˜t Aœw™œð ,ð ,�AØŸ(š( 4¨¤7Ñ+Ô+�C�CØ�
àÔˆð Œ>˜!Ô ¤
¤Ô 4Ò4Ð4¸¼Àaº¸Ý”6ˆMð Œ^˜AÔ #¤*¤/Ô"6Ò6Ð6å& s¤~°a°b°bÔ'9¸3¼:ÑFÔFˆCà×#Ò#Ñ%Ô%ð 6à×&Ò&Ñ(Ô(¨EÒ1Ð1Ý,¨S°$´&¸$¼'À4Ä7È1È2È2Ä;ÑOÔOÐOå(¨¨d¬fÑ5Ô5Ð5å(¨¨d¬fÑ5Ô5Ð5ð ŒJŒOˆØ�KŠK‰MŒMˆà>Ð>Ð>Ð>¨s¬~Ð>Ñ>Ô>ˆð 4Ð3Ð3Ð3 w¨q¨r¨r¤{Ð3Ñ3Ô3ˆØ�
Š
�1�a”fÑÔÐõ    QÑ'Ô'ˆõ ˜˜qœv q¤u˜oÑ.Ô.ˆå˜˜Q˜R˜Rœ $Ô"2Ô"9ÀEÐJÑJÔJˆà×#Ò#Ñ%Ô%ð 	2¨×)<Ò)<Ñ)>Ô)>À$Ò)FÐ)FÝ$ S¨$¬&Ñ1Ô1Ð1å˜˜cœi¨!™mÑ,Ô,¨Q¨R¨RÔ0ˆÝ   d¤f¨d¬g°rÑ:Ô:Ð:rI   c                 óÚ   — | j         |j         k    s| j        |j        k    rdS |                      ¦   «         r4|                     ¦   «         r | j        |j        k    o| j        |j        k    S dS )NFT)rÅ   rx   rÇ   r½   rÄ   rj   s     rG   rl   zHolonomicFunction.__eq__�  so   € ØÔ˜uÔ0Ò0Ð0°D´F¸e¼gÒ4EÐ4EØ�5Ø×ÒÑ!Ô!ð 	? e×&;Ò&;Ñ&=Ô&=ð 	?Ø”7˜eœhÒ&Ð>¨4¬7°e´hÒ+>Ð>ØˆtrI   c           	      óè  ‡ ‡‡‡‡‡‡‡‡‡‡‡ — ‰ j         }t          ‰t          ¦  «        sŽt          ‰¦  «        Š‰                     ‰ j        ¦  «        rt          d¦  «        ‚‰                      ¦   «         s‰ S t          ‰ |j	        ¦  «        }ˆˆ fd„|D ¦   «         Št          |‰ j        ‰ j
        ‰¦  «        S ‰ j         j        j        ‰j         j        j        k    r‰                      ‰¦  «        \  ŠŠ‰‰z  S ‰j         }|j	        Š|j	        Š|j        j        }|                     ¦   «         Šˆfd„|j        D ¦   «         Šˆfd„|j        D ¦   «         Šˆˆfd„t!          ‰¦  «        D ¦   «         }ˆˆfd„t!          ‰¦  «        D ¦   «         }ˆˆfd„t!          ‰dz   ¦  «        D ¦   «         Š‰j        ‰d	         d	<   ˆˆfd
„t!          ‰¦  «        D ¦   «         g}t%          |d‰‰z  f‰¦  «                             ¦   «         }	t%          j        ‰‰z  df‰¦  «        }
t+          |	|
¦  «        }|j        �rRt!          ‰dz
  dd¦  «        D ]ÙŠt!          ‰dz
  dd¦  «        D ]ÂŠ‰‰         ‰dz   xx         ‰‰         ‰         z  cc<   ‰‰dz            ‰xx         ‰‰         ‰         z  cc<   t          ‰‰         ‰         ‰j        ¦  «        r&t1          ‰‰         ‰         ‰¦  «        ‰‰         ‰<   Œ“‰‰         ‰                              ‰ j        ¦  «        ‰‰         ‰<   ŒÃŒÚt!          ‰dz   ¦  «        D ]cŠ‰‰         ‰         j        rŒt!          ‰¦  «        D ]-Š‰‰         ‰xx         |‰         ‰‰         ‰         z  z  cc<   Œ.‰j        ‰‰         ‰<   Œdt!          ‰¦  «        D ]bŠ‰‰         ‰         d	k    rŒt!          ‰¦  «        D ]-Š‰‰         ‰xx         |‰         ‰‰         ‰         z  z  cc<   Œ.‰j        ‰‰         ‰<   Œc|                     ˆˆfd„t!          ‰¦  «        D ¦   «         ¦  «         t%          |t;          |¦  «        ‰‰z  f‰¦  «                             ¦   «         }	t+          |	|
¦  «        }|j        �°Rt=          |                     ¦   «         ‰ j         j        d¬¦  «        }‰                      ¦   «         r‰                     ¦   «         st          |‰ j        ¦  «        S ‰                       ¦   «         dk    �r‰‰                      ¦   «         dk    �rp‰ j
        ‰j
        k    �rat          ‰ |j	        ¦  «        }t          ‰|j	        ¦  «        }|d	         |d	         z  g}t!          dtC          t;          |¦  «        t;          |¦  «        ¦  «        ¦  «        D ]ÐŠˆfd„t!          ‰dz   ¦  «        D ¦   «         }t!          ‰dz   ¦  «        D ]9Št!          ‰dz   ¦  «        D ]$}‰|z   ‰k    rtE          ‰‰¦  «        |‰         |<   Œ%Œ:d	}t!          ‰dz   ¦  «        D ]:Št!          ‰dz   ¦  «        D ]%}||‰         |         |‰         z  ||         z  z  }Œ&Œ;|                     |¦  «         ŒÑt          |‰ j        ‰ j
        |¦  «        S ‰ j          #                    d	¦  «        }‰j          #                    d	¦  «        }‰ j
        d	k    r|s|s‰ ‰ $                    d	¦  «        z  S ‰j
        d	k    r|s|s‰  $                    d	¦  «        ‰z  S ‰ j          #                    ‰ j
        ¦  «        }‰j          #                    ‰ j
        ¦  «        }|s|s‰ ‰ $                    ‰ j
        ¦  «        z  S ‰  $                    ‰j
        ¦  «        ‰z  S ‰ j
        ‰j
        k    rt          |‰ j        ¦  «        S d Šd Š ‰                       ¦   «         dk    rL‰                      ¦   «         dk    r4d„ tK          ‰ j&        ¦  «        D ¦   «         }tN          j(        |iŠ‰j&        Š n¢‰                       ¦   «         dk    rL‰                      ¦   «         dk    r4d„ tK          ‰j&        ¦  «        D ¦   «         }‰ j&        ŠtN          j(        |iŠ n>‰                       ¦   «         dk    r&‰                      ¦   «         dk    r‰ j&        Š‰j&        Š i }‰D ]”Š‰ D ]�ŠtC          t;          ‰‰         ¦  «        t;          ‰ ‰         ¦  «        ¦  «        }ˆˆˆˆ fd„t!          |¦  «        D ¦   «         }‰‰z   |vr	||‰‰z   <   Œfd„ tS          ||‰‰z            ¦  «        D ¦   «         |‰‰z   <   Œ�Œ•t          |‰ j        ‰ j
        |¦  «        S )Nz> Can't multiply a HolonomicFunction and expressions/functions.c                 óT   •— g | ]$}t          j        |‰j        ¦  «        ‰z  j        ‘Œ%S rr   )r0   rð   rx   Úrep)r†   r‚   rk   rd   s     €€rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>”  s/   ø€ Ð@Ð@Ð@¸•4”8˜A˜tœvÑ&Ô&¨Ñ.Ô3Ð@Ð@Ð@rI   c                 ó^   •— g | ])}‰                      |                     ¦   «         ¦  «        ‘Œ*S rr   r&  ©r†   r‚   rü   s     €rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>£  s-   ø€ ÐEÐEÐE¨A�Q—U’U˜1Ÿ9š9™;œ;Ñ'Ô'ÐEÐEÐErI   c                 ó^   •— g | ])}‰                      |                     ¦   «         ¦  «        ‘Œ*S rr   r&  r7  s     €rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>¤  s-   ø€ ÐGÐGÐG¨Q�a—e’e˜AŸIšI™KœKÑ(Ô(ÐGÐGÐGrI   c                 ó4   •— g | ]}‰|          ‰‰         z  ‘ŒS rr   rr   )r†   r�   rß   rš   s     €€rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>§  s(   ø€ ÐCÐCÐC°Q�Y˜q”\�M I¨a¤LÑ0ÐCÐCÐCrI   c                 ó4   •— g | ]}‰|          ‰‰         z  ‘ŒS rr   rr   )r†   r�   r‡   r›   s     €€rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>©  s(   ø€ ÐFÐFÐF¸�j ”m�^ j°¤mÑ3ÐFÐFÐFrI   c                 óL   •— g | ] }ˆfd „t          ‰dz   ¦  «        D ¦   «         ‘Œ!S )c                 ó   •— g | ]	}‰j         ‘Œ
S rr   )r_   r'  s     €rG   rˆ   z8HolonomicFunction.__mul__.<locals>.<listcomp>.<listcomp>¬  s   ø€ Ð3Ð3Ð3 �a”fÐ3Ð3Ð3rI   r8   ©r“   )r†   r‚   rü   r‡   s     €€rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>¬  s8   ø€ ÐJÐJÐJ¸Ð3Ð3Ð3Ð3¥e¨A°©E¡l¤lÐ3Ñ3Ô3ÐJÐJÐJrI   r8   r   c                 óP   •— g | ]"}t          ‰¦  «        D ]}‰|         |         ‘ŒŒ#S rr   r=  ©r†   r�   r‚   r‡   Ú	coeff_muls      €€rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>°  s4   ø€ ÐQÐQÐQ°ÍÈaÉÌÐQÐQÀ1˜Y qœ\¨!œ_ÐQÐQÐQÐQrI   rŸ   c                 óP   •— g | ]"}t          ‰¦  «        D ]}‰|         |         ‘ŒŒ#S rr   r=  r?  s      €€rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>Ô  s8   ø€ Ð$YÐ$YÐ$Y¸ÕPUÐVWÑPXÔPXÐ$YÐ$YÈ1 Y¨q¤\°!¤_Ð$YÐ$YÐ$YÐ$YrI   Frä   c                 óH   •— g | ]}d „ t          ‰dz   ¦  «        D ¦   «         ‘ŒS )c                 ó   — g | ]}d ‘ŒS r)  rr   ©r†   r�   s     rG   rˆ   z8HolonomicFunction.__mul__.<locals>.<listcomp>.<listcomp>ë  s   € Ð6Ð6Ð6 A˜aÐ6Ð6Ð6rI   r8   r=  )r†   r‚   r�   s     €rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>ë  s2   ø€ ÐMÐMÐM¸1Ð6Ð6­¨q°1©u©¬Ð6Ñ6Ô6ÐMÐMÐMrI   Tc                 ó8   — g | ]\  }}|t          |¦  «        z  ‘ŒS rr   rÞ   ré   s      rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>  rê   rI   c                 ó8   — g | ]\  }}|t          |¦  «        z  ‘ŒS rr   rÞ   ré   s      rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>  rì   rI   c           	      óˆ   •‡— g | ]=Št          ˆˆˆˆˆfd „t          ‰dz   ¦  «        D ¦   «         t          j        ¬¦  «        ‘Œ>S )c              3   óX   •K  — | ]$}‰‰         |         ‰‰         ‰|z
           z  V — Œ%d S rB   rr   )r†   r‡   rß   r�   r‚   r  r  s     €€€€€rG   rº   z7HolonomicFunction.__mul__.<locals>.<listcomp>.<genexpr>!  s<   øè è € ÐHÐH°a˜"˜Qœ% œ( R¨¤U¨1¨q©5¤\Ñ1ÐHÐHÐHÐHÐHÐHrI   r8   ©Ústart)Úsumr“   r   rá   )r†   rß   r�   r‚   r  r  s    @€€€€rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>!  sk   øø€ ð :ð :ð :Ø+,õ ÐHÐHÐHÐHÐHÐHÐHÐH½5ÀÀQÁ¹<¼<ÐHÑHÔHÝ œvð'ñ 'ô 'ð :ð :ð :rI   c                 ó   — g | ]
\  }}||z   ‘ŒS rr   rr   rç   s      rG   rˆ   z-HolonomicFunction.__mul__.<locals>.<listcomp>&  s    € Ð EÐ EÐ E©4¨1¨a  Q¡Ð EÐ EÐ ErI   )*rÅ   rb   rÂ   r   Úhasrx   r  rÇ   rö   r   r½   rv   rV   rÐ   rï   r}   r“   r`   r1   rK   rò   rR   ró   rz   ÚDMFdiffrŽ   Úis_zeror_   r�   r~   rõ   rô   rÙ   Úminr   r¾   rø   ry   rÄ   r   rá   r÷   )!rd   rk   Úann_selfrÄ   Ú	ann_otherrÔ   Úself_redÚ	other_redÚlin_sys_elementsÚlin_sysÚhomo_sysrQ   Úsol_annÚy0_selfÚy0_otherÚcoeffÚkr  r  r	  r
  r  r  rü   rß   r‡   r@  r�   r‚   r›   rš   r  r  s!   ``                     @@@@@@@@@@rG   r•   zHolonomicFunction.__mul__ˆ  s
  øøøøøøøøøøøø€ ØÔ#ˆå˜%Õ!2Ñ3Ô3ð 
	DÝ˜E‘N”NˆEà�yŠy˜œÑ Ô ð lÝ)Ð*jÑkÔkÐkà×'Ò'Ñ)Ô)ð Ø�Ý˜D (¤.Ñ1Ô1ˆBØ@Ð@Ð@Ð@Ð@¸RÐ@Ñ@Ô@ˆBÝ$ X¨t¬v°t´wÀÑCÔCÐCàÔÔ"Ô'¨5Ô+<Ô+CÔ+HÒHÐHØ—:’:˜eÑ$Ô$‰DˆAˆqØ�q‘5ˆLàÔ%ˆ	àŒNˆØŒOˆàŒOÔ ˆØ�KŠK‰MŒMˆàEÐEÐEÐE°Ô1DÐEÑEÔEˆ	ØGÐGÐGÐG°)Ô2FÐGÑGÔGˆ
ð DÐCÐCÐCÐC½%À¹(¼(ÐCÑCÔCˆàFÐFÐFÐFÐF½UÀ1¹X¼XÐFÑFÔFˆ	ð KÐJÐJÐJÐJ½UÀ1ÀqÁ5¹\¼\ÐJÑJÔJˆ	Øœ%ˆ	�!Œ�Q‰ð RÐQÐQÐQÐQµe¸A±h´hÐQÑQÔQÐRÐÝÐ/°!°Q°q±S°¸1Ñ=Ô=×GÒGÑIÔIˆåÔ% q¨¡s¨A h°Ñ2Ô2ˆå$ W¨hÑ7Ô7ˆð Ô ñ 	<õ ˜1˜q™5 " bÑ)Ô)ð Gð G�Ý˜q 1™u b¨"Ñ-Ô-ð Gð G�AØ˜a”L  Q¡Ð'Ð'Ô'¨9°Q¬<¸¬?Ñ:Ð'Ð'Ñ'Ø˜a !™eÔ$ QÐ'Ð'Ô'¨9°Q¬<¸¬?Ñ:Ð'Ð'Ñ'Ý! )¨A¤,¨q¤/°1´7Ñ;Ô;ð GÝ*1°)¸A´,¸q´/À1Ñ*EÔ*E˜	 !œ Q™˜à*3°A¬,°q¬/×*>Ò*>¸t¼vÑ*FÔ*F˜	 !œ Q™˜ðGõ ˜1˜q™5‘\”\ð )ð )�Ø˜Q”< ”?Ô*ð ØÝ˜q™œð Fð F�AØ˜a”L �O�O”O y°¤|°iÀ´lÀ1´oÑ'EÑE�O�O‘O�OØ"#¤&�	˜!”˜Q‘�õ ˜1‘X”Xð )ð )�Ø˜Q”< ”? aÒ'Ð'ØÝ˜q™œð Eð E�AØ˜a”L �O�O”O x°¤{°Y¸q´\À!´_Ñ'DÑD�O�O‘O�OØ"#¤&�	˜!”˜Q‘�à×#Ò#Ð$YÐ$YÐ$YÐ$YÐ$Y½eÀA¹h¼hÐ$YÑ$YÔ$YÑZÔZÐZÝ"Ð#3µcÐ:JÑ6KÔ6KÈQÈqÉSÐ5QÐSTÑUÔU×_Ò_ÑaÔaˆGå(¨°(Ñ;Ô;ˆCð? Ô ñ 	<õB ˜SŸXšX™ZœZ¨Ô)9Ô)@È5ÐQÑQÔQˆà×$Ò$Ñ&Ô&ð 	6¨5×+@Ò+@Ñ+BÔ+Bð 	6Ý$ W¨d¬fÑ5Ô5Ð5à×ÒÑ Ô  EÒ)Ñ)¨e×.BÒ.BÑ.DÔ.DÈÒ.MÑ.Mð Œw˜%œ(Ò"Ñ"õ % T¨7¬=Ñ9Ô9�Ý% e¨W¬]Ñ;Ô;�à˜a”j 8¨A¤;Ñ.Ð/�õ ˜q¥#¥c¨'¡l¤lµC¸±M´MÑ"BÔ"BÑCÔCð #ð #�AØMÐMÐMÐMÅÀaÈ!ÁeÁÄÐMÑMÔM�EÝ" 1 q¡5™\œ\ð =ð =˜Ý!& q¨1¡u¡¤ð =ð =˜AØ  1™u¨šz˜zÝ.6°q¸!©n¬n  a¤¨¡øð=ð �CÝ" 1 q¡5™\œ\ð Ið I˜Ý!& q¨1¡u¡¤ð Ið I˜AØ 5¨¤8¨A¤;°¸´
Ñ#:¸XÀa¼[Ñ#HÑH˜C˜CðIð —I’I˜c‘N”N�N�Nå(¨°$´&¸$¼'À2ÑFÔFÐFð Ô&×2Ò2°1Ñ5Ô5ˆGØÔ(×4Ò4°QÑ7Ô7ˆHàŒw˜!Š|ˆ| Gˆ|°Hˆ|Ø˜e×.Ò.¨qÑ1Ô1Ñ1Ð1ØŒx˜1Š}ˆ} Wˆ}°Xˆ}Ø—’ qÑ)Ô)¨EÑ1Ð1àÔ'×3Ò3°D´GÑ<Ô<ˆHØÔ)×5Ò5°d´gÑ>Ô>ˆIØð 8 Ið 8Ø˜e×.Ò.¨t¬wÑ7Ô7Ñ7Ð7Ø—?’? 5¤8Ñ,Ô,¨uÑ4Ð4àŒ7�e”hÒÐÝ$ W¨d¬fÑ5Ô5Ð5ð ˆØˆà×ÒÑ Ô  EÒ)Ð)¨e×.BÒ.BÑ.DÔ.DÈÒ.LÐ.LØCÐCµ	¸$¼'Ñ0BÔ0BÐCÑCÔCˆCÝ”&˜#�ˆBØ”ˆBˆBØ× Ò Ñ"Ô" dÒ*Ð*¨u×/CÒ/CÑ/EÔ/EÈÒ/NÐ/NØDÐDµ	¸%¼(Ñ0CÔ0CÐDÑDÔDˆCØ”ˆBÝ”&˜#�ˆBˆBØ× Ò Ñ"Ô" dÒ*Ð*¨u×/CÒ/CÑ/EÔ/EÈÒ/MÐ/MØ”ˆBØ”ˆBàˆàð 	Fð 	FˆAØð Fð F�Ý�˜B˜qœE™
œ
¥C¨¨1¬¡J¤JÑ/Ô/�ð:ð :ð :ð :ð :ð :ð :Ý05°a±´ð:ñ :ô :�à˜1‘u �{�{Ø !�B�q˜1‘u‘I�Ià EÐ Eµ3°q¸"¸QÀ¹U¼)Ñ3DÔ3DÐ EÑ EÔ E�B�q˜1‘u‘I�IðFõ ! ¨$¬&°$´'¸2Ñ>Ô>Ð>rI   c                 ó   — | |dz  z   S rž   rr   rj   s     rG   r    zHolonomicFunction.__sub__+  s   € Ø�e˜b‘jÑ Ð rI   c                 ó   — | dz  |z   S rž   rr   rj   s     rG   r¢   zHolonomicFunction.__rsub__.  s   € Ø�b‰y˜5Ñ Ð rI   c                 ó   — d| z  S rž   rr   r¤   s    rG   r¥   zHolonomicFunction.__neg__1  r¦   rI   c                 ó&   — | t           j        |z  z  S rB   r¨   rj   s     rG   rª   zHolonomicFunction.__truediv__4  r«   rI   c                 ón  ‡— | j         j        dk    r®| j         }|j        Š| j        €d }nt	          | j        ¦  «        d         |z  g}|j        d         }|j        d         }t          j        || j        ¦  «        |z  j	        }ˆfd„||fD ¦   «         }t          |‰¦  «        }t          || j        | j        |¦  «        S |dk     rt          d¦  «        ‚| j         j        j        }t          || j        t          j        t          j        g¦  «        }	|dk    r|	S | }
	 |dz  r|	|
z  }	|dz  }|sn|
|
z  }
Œ|	S )Nr8   r   c                 óD   •— g | ]}‰j                              |¦  «        ‘ŒS rr   )rV   r|   )r†   r�   rv   s     €rG   rˆ   z-HolonomicFunction.__pow__.<locals>.<listcomp>F  s)   ø€ Ð=Ð=Ð=¨q�6”;×'Ò'¨Ñ*Ô*Ð=Ð=Ð=rI   z&Negative Power on a Holonomic FunctionTr­   )rÅ   r   rv   rÄ   r‰   r}   r0   rð   rx   r5  r^   rÂ   r½   r?   rU   r   rá   r©   )rd   r®   r0  rÄ   Úp0Úp1rQ   Úddr\   r¯   rx   rv   s              @rG   r°   zHolonomicFunction.__pow__7  sY  ø€ ØÔÔ! QÒ&Ð&ØÔ"ˆCØ”ZˆFàŒwˆØ��å˜4œ7‘m”m AÔ&¨!Ñ+Ð,�à” Ô"ˆBØ” Ô"ˆBå”(˜2˜tœvÑ&Ô&¨Ñ*Ô/ˆBà=Ð=Ð=Ð=°R¸°HÐ=Ñ=Ô=ˆCÝ% c¨6Ñ2Ô2ˆBÝ$ R¨¬°´¸"Ñ=Ô=Ð=ØˆqŠ5ˆ5Ý#Ð$LÑMÔMÐMØÔÔ$Ô8ˆÝ" 2 t¤v­q¬v½¼°wÑ?Ô?ˆØ�Š6ˆ6ØˆMØˆð	Ø�1‰uð Ø˜!‘�Ø�!‰GˆAØð ØØ�‰FˆAð	ð ˆrI   c                 óH   — t          d„ | j        j        D ¦   «         ¦  «        S )zF
        Returns the highest power of `x` in the annihilator.
        c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rB   ©ÚdegreerD  s     rG   rº   z+HolonomicFunction.degree.<locals>.<genexpr>]  s*   è è € ÐCÐC !�1—8’8‘:”:ÐCÐCÐCÐCÐCÐCrI   )rî   rÅ   r}   r¤   s    rG   ri  zHolonomicFunction.degreeY  s'   € õ ÐCÐC tÔ'7Ô'BÐCÑCÔCÑCÔCÐCrI   c                 ó&  ‡ ‡‡‡— ‰ j         j        }‰ j         j        }‰                     ‰ j        ¦  «        }‰ j         j        Št          ‰¦  «        D ]P\  }}t          |‰ j         j        j        j	        ¦  «        r'‰ j         j        j         
                    |¦  «        ‰|<   ŒQ‰|                              ‰ j        ‰i¦  «        Šˆˆˆˆ fd„t          |¦  «        D ¦   «         }	d„ t          |¦  «        D ¦   «         }
t          j        |
d<   |
g}t          d„ t          |¦  «        D ¦   «         g¦  «                             ¦   «         }	 ˆ fd„|
D ¦   «         }t          |dz
  ¦  «        D ]}||dz   xx         |
|         |z  z  cc<   Œt          |¦  «        D ]$}||xx         |
d         |	|         z  |z  z  cc<   Œ%|}
|                     |
¦  «         t          |¦  «                             ¦   «                              |¦  «        \  }}|j        durnŒÌt)          |¦  «        d         }|                     |d¦  «        }t+          |dd	…         |d
¬¦  «        }|r#t-          |‰ j        |d         |d         ¦  «        S t-          |‰ j        ¦  «        S )a`  
        Returns function after composition of a holonomic
        function with an algebraic function. The method cannot compute
        initial conditions for the result by itself, so they can be also be
        provided.

        Examples
        ========

        >>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators
        >>> from sympy import QQ
        >>> from sympy import symbols
        >>> x = symbols('x')
        >>> R, Dx = DifferentialOperators(QQ.old_poly_ring(x),'Dx')
        >>> HolonomicFunction(Dx - 1, x).composition(x**2, 0, [1])  # e^(x**2)
        HolonomicFunction((-2*x) + (1)*Dx, x, 0, [1])
        >>> HolonomicFunction(Dx**2 + 1, x).composition(x**2 - 1, 1, [1, 0])
        HolonomicFunction((4*x**3) + (-1)*Dx + (x)*Dx**2, x, 1, [1, 0])

        See Also
        ========

        from_hyper
        c                 ó\   •— g | ](}‰|                               ‰j        ‰i¦  «         ‰z  ‘Œ)S rr   )r  rx   )r†   r�   r  r}   rF   rd   s     €€€€rG   rˆ   z1HolonomicFunction.composition.<locals>.<listcomp>ƒ  s9   ø€ ÐJÐJÐJ¸1�˜A”×#Ò# T¤V¨D MÑ2Ô2Ð2°QÑ6ÐJÐJÐJrI   c                 ó&   — g | ]}t           j        ‘ŒS rr   ©r   rá   rD  s     rG   rˆ   z1HolonomicFunction.composition.<locals>.<listcomp>„  s   € Ð+Ð+Ð+˜Q•!”&Ð+Ð+Ð+rI   r   c                 ó&   — g | ]}t           j        ‘ŒS rr   rm  rD  s     rG   rˆ   z1HolonomicFunction.composition.<locals>.<listcomp>‡  s   € Ð8Ð8Ð8¨!�qœvÐ8Ð8Ð8rI   Tc                 óD   •— g | ]}|                      ‰j        ¦  «        ‘ŒS rr   )rŽ   rx   )r†   r  rd   s     €rG   rˆ   z1HolonomicFunction.composition.<locals>.<listcomp>‰  s%   ø€ Ð:Ð:Ð:¨a˜1Ÿ6š6 $¤&™>œ>Ð:Ð:Ð:rI   r8   rŸ   NFrä   )rÅ   rv   r   rŽ   rx   r}   ry   rb   rV   rz   r|   r  r“   r   r©   r)   rK   r�   Úgauss_jordan_solveró   r‰   rõ   rÂ   )rd   r  r.  r/  rÔ   rß   rŽ   r�   r‚   r  ÚcoeffsÚsystemÚhomogeneousÚcoeffs_nextrQ   ÚtausÚtaur}   rF   s   ``               @@rG   ÚcompositionzHolonomicFunction.composition_  s²  øøøø€ ð4 ÔÔ#ˆØÔÔ"ˆØ�yŠy˜œÑ Ô ˆØÔ%Ô0ˆ
å˜jÑ)Ô)ð 	Ið 	I‰DˆAˆqÝ˜!˜TÔ-Ô4Ô9Ô?Ñ@Ô@ð IØ $Ô 0Ô 7Ô <× EÒ EÀaÑ HÔ H�
˜1‘øà�qŒM×Ò ¤ t˜}Ñ-Ô-ˆØJÐJÐJÐJÐJÐJÐJÅÀqÁ	Ä	ÐJÑJÔJˆØ+Ð+¥%¨¡(¤(Ð+Ñ+Ô+ˆÝ”Eˆˆq‰	Ø�ˆÝÐ8Ð8­u°Q©x¬xÐ8Ñ8Ô8Ð9Ñ:Ô:×DÒDÑFÔFˆð	Ø:Ð:Ð:Ð:°6Ð:Ñ:Ô:ˆKÝ˜1˜q™5‘\”\ð 9ð 9�Ø˜A ™EÐ"Ð"Ô" v¨a¤y°4Ñ'7Ñ8Ð"Ð"Ñ"Ð"Ý˜1‘X”Xð @ð @�Ø˜A��” 6¨"¤:°°Q´Ñ#7¸$Ñ#>Ñ?��‘�Ø ˆFà�MŠM˜&Ñ!Ô!Ð!Ý ™œ×1Ò1Ñ3Ô3ß$Ò$ [Ñ1Ô1ñ ˆC�àÔ!¨Ð-Ð-Øð	õ �4‰jŒj˜ŒmˆØ�hŠh�s˜AÑÔˆÝ˜˜Q˜R˜Rœ !¨eÐ4Ñ4Ô4ˆð ð 	DÝ$ S¨$¬&°$°q´'¸4À¼7ÑCÔCÐCÝ   d¤fÑ-Ô-Ð-rI   Tc           
      óØ  ‡‡‡— | j         dk    r,|                      | j         ¦  «                             ¦   «         S | j                             | j         ¦  «        r|                      |¬¦  «        S i }t          dd¬¦  «        Š| j        j        j        j	        }t          |                     ‰¦  «        d¦  «        \  }}t          | j        j        ¦  «        D ]Ï\  }Š‰                     ¦   «         }t          |¦  «        dz
  }t!          |dz   ¦  «        D ]‘}	|||	z
           }
|
dk    rŒ||	z
  |	f|v r@|||	z
  |	fxx         |                     |
¦  «        t%          ‰|	z
  dz   |¦  «        z  z  cc<   Œ]|                     |
¦  «        t%          ‰|	z
  dz   |¦  «        z  |||	z
  |	f<   Œ’ŒÐg }d„ |D ¦   «         }t'          |¦  «        Št)          |¦  «        }|                      ¦   «         }‰|z   }i }g }g }t!          ‰|dz   ¦  «        D ]vŠ‰|v rQt-          ˆˆˆfd	„|                     ¦   «         D ¦   «         t0          j        ¬
¦  «        }|                     |¦  «         ŒW|                     t0          j        ¦  «         Œwt7          ||¦  «        }|j        }t;          |j                             |j        d         ¦  «        ‰d¬¦  «        }|                     ¦   «         }|r"t)          |¦  «        dz   }t)          ||¦  «        }||z  }t?          | |¦  «        }d„ t          |¦  «        D ¦   «         }t          |¦  «        |k     �rƒt!          |¦  «        D �] }t0          j        }|D ]ùŠ|‰d         z   dk     rt0          j        ||‰d         z   <   n’|‰d         z   t          |¦  «        k     r||‰d         z            ||‰d         z   <   nX|‰d         z   |vrKt          d|‰d         z   z  ¦  «        ||‰d         z   <   |                     ||‰d         z            ¦  «         ‰d         |k    r1||‰                               ‰|¦  «        ||‰d         z            z  z  }Œú|                     |¦  «         �Œ"tC          |g|¢R Ž }tE          |tF          ¦  «        r¦t!          t          |¦  «        |¦  «        D ]b}||vrt          d|z  ¦  «        ||<   ||         |v r"|                     |||                  ¦  «         ŒG|                     ||         ¦  «         Œc|rtI          ||¦  «        |fgS tI          ||¦  «        gS t!          t          |¦  «        |¦  «        D ]l}||vrt          d|z  ¦  «        ||<   d}|D ]/Š||         ‰v r#|                     ‰||                  ¦  «         d}Œ0|s|                     ||         ¦  «         Œm|rtI          ||¦  «        |fgS tI          ||¦  «        gS )aG  
        Finds recurrence relation for the coefficients in the series expansion
        of the function about :math:`x_0`, where :math:`x_0` is the point at
        which the initial condition is stored.

        Explanation
        ===========

        If the point :math:`x_0` is ordinary, solution of the form :math:`[(R, n_0)]`
        is returned. Where :math:`R` is the recurrence relation and :math:`n_0` is the
        smallest ``n`` for which the recurrence holds true.

        If the point :math:`x_0` is regular singular, a list of solutions in
        the format :math:`(R, p, n_0)` is returned, i.e. `[(R, p, n_0), ... ]`.
        Each tuple in this vector represents a recurrence relation :math:`R`
        associated with a root of the indicial equation ``p``. Conditions of
        a different format can also be provided in this case, see the
        docstring of HolonomicFunction class.

        If it's not possible to numerically compute a initial condition,
        it is returned as a symbol :math:`C_j`, denoting the coefficient of
        :math:`(x - x_0)^j` in the power series about :math:`x_0`.

        Examples
        ========

        >>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators
        >>> from sympy import QQ
        >>> from sympy import symbols, S
        >>> x = symbols('x')
        >>> R, Dx = DifferentialOperators(QQ.old_poly_ring(x),'Dx')
        >>> HolonomicFunction(Dx - 1, x, 0, [1]).to_sequence()
        [(HolonomicSequence((-1) + (n + 1)Sn, n), u(0) = 1, 0)]
        >>> HolonomicFunction((1 + x)*Dx**2 + Dx, x, 0, [0, 1]).to_sequence()
        [(HolonomicSequence((n**2) + (n**2 + n)Sn, n), u(0) = 0, u(1) = 1, u(2) = -1/2, 2)]
        >>> HolonomicFunction(-S(1)/2 + x*Dx, x, 0, {S(1)/2: [1]}).to_sequence()
        [(HolonomicSequence((n), n), u(0) = 1, 1/2, 1)]

        See Also
        ========

        HolonomicFunction.series

        References
        ==========

        .. [1] https://hal.inria.fr/inria-00070025/document
        .. [2] https://www3.risc.jku.at/publications/download/risc_2244/DIPLFORM.pdf

        r   )Úlbr®   T©ÚintegerÚSnr8   c                 ó   — g | ]
}|d          ‘ŒS r)  rr   rD  s     rG   rˆ   z1HolonomicFunction.to_sequence.<locals>.<listcomp>õ  s   € Ð'Ð'Ð'˜A�1�Q”4Ð'Ð'Ð'rI   c              3   óh   •K  — | ],\  }}|d          ‰k    ¯|                      ‰‰‰z
  ¦  «        V — Œ-dS ©r   N©r  ©r†   r\  Úvr‚   r  r®   s      €€€rG   rº   z0HolonomicFunction.to_sequence.<locals>.<genexpr>  sR   øè è € ð Cð CÙ#˜q !¸¸!¼Àº	¸	ð ŸFšF 1 a¨%¡iÑ0Ô0Ø8A¸	¸	¸	ðCð CrI   rI  rŸ   ÚZ©Úfilterc                 ó8   — g | ]\  }}|t          |¦  «        z  ‘ŒS rr   rÞ   ré   s      rG   rˆ   z1HolonomicFunction.to_sequence.<locals>.<listcomp>  s'   € Ð9Ð9Ð9¡4 1 aˆa•)˜A‘,”,ÑÐ9Ð9Ð9rI   úC_%sF)%r½   Úshift_xÚto_sequencerÅ   r¾   Ú
_frobeniusr   rv   rV   rÏ   r;   rÑ   ry   r}   Ú
all_coeffsr~   r“   r|   r   rP  rî   ri  rK  Úitemsr   rá   r�   r:   r   r/   Úkeysrö   r  r7   rb   rØ   r9   )rd   ry  Údict1rÏ   rÔ   rÖ   r�   Ú	listofdmpri  r\  r[  rQ   Úkeylistr   Ú
smallest_nÚdummysÚeqsÚunknownsÚtempr   Ú	all_rootsÚmax_rootrÄ   Úu0ÚeqÚsoleqsr!  r‚   r  r®   s                              @@@rG   r‰  zHolonomicFunction.to_sequenceŸ  sk  øøø€ ðh Œ7�aŠ<ˆ<Ø—<’< ¤Ñ(Ô(×4Ò4Ñ6Ô6Ð6ð Ô×'Ò'¨¬Ñ0Ô0ð 	*Ø—?’? b�?Ñ)Ô)Ð)àˆÝ�3 Ð%Ñ%Ô%ˆØÔÔ%Ô*Ô.ˆÝ" 3×#4Ò#4°QÑ#7Ô#7¸Ñ>Ô>‰ˆˆ1õ ˜dÔ.Ô9Ñ:Ô:ð 	Qð 	Q‰DˆAˆqàŸš™œˆIÝ˜‘^”^ aÑ'ˆFå˜6 A™:Ñ&Ô&ð 	Qð 	Q�Ø! &¨1¡*Ô-�à˜A’:�:Øà˜‘E˜1�: Ð&Ð&Ø˜1˜q™5 !˜*Ð%Ð%Ô%¨#¯,ª,°uÑ*=Ô*=ÅÀ1ÀqÁ5È1Á9ÈaÑ@PÔ@PÑ*PÑQÐ%Ð%Ñ%Ð%à),¯ª°eÑ)<Ô)<½rÀ!ÀaÁ%È!Á)ÈQÑ?OÔ?OÑ)O�E˜1˜q™5 !˜*Ñ%Ð%ð	Qð ˆØ'Ð' Ð'Ñ'Ô'ˆÝ�G‘”ˆÝ�G‘”ˆØ—’‘”ˆð ˜V‘^ˆ
ØˆØˆØˆõ �u˜e a™iÑ(Ô(ð 	#ð 	#ˆAØ�Gˆ|ˆ|Ýð Cð Cð Cð Cð Cð CØ',§{¢{¡}¤}ðCñ Cô Cå!"¤ð)ñ )ô )�ð —
’
˜4Ñ Ô Ð Ð à—
’
�1œ6Ñ"Ô"Ð"Ð"õ !  aÑ(Ô(ˆð ”	ˆÝ˜!œ&Ÿ/š/¨#¬.¸Ô*<Ñ=Ô=¸qÈÐMÑMÔMˆ	Ø—N’NÑ$Ô$ˆ	àð 	3Ý˜9‘~”~¨Ñ)ˆHÝ˜X zÑ2Ô2ˆJØ�Ñˆå˜˜eÑ$Ô$ˆà9Ð9­9°R©=¬=Ð9Ñ9Ô9ˆõ ˆr‰7Œ7�UŠ?‰?å˜6‘]”]ð ñ �Ý”V�àð Eð E�Aà˜1˜Qœ4‘x !’|�|Ý+,¬6˜˜q 1 Q¤4™xÑ(Ð(à˜Q˜qœT™¥C¨¡G¤GÒ+Ð+Ø+-¨a°!°A´$©h¬<˜˜q 1 Q¤4™xÑ(Ð(à  1¤™X¨Ð/Ð/Ý+1°&¸1¸qÀ¼t¹8Ñ2DÑ+EÔ+E˜˜q 1 Q¤4™xÑ(Ø Ÿš¨¨q°1°Q´4©xÔ(8Ñ9Ô9Ð9à˜”t˜q’y�yØ˜e AœhŸmšm¨A¨qÑ1Ô1°F¸1¸qÀ¼t¹8Ô4DÑDÑD˜øà—
’
˜2‘”�‘õ ˜3Ð* Ð*Ð*Ð*ˆFå˜&¥$Ñ'Ô'ð 4å�s 2™wœw¨Ñ.Ô.ð 	-ð 	-�Aà ��Ý$*¨6°1©9Ñ$5Ô$5˜˜q™	à˜a”y FÐ*Ð*ØŸ	š	 &¨°¬Ô"3Ñ4Ô4Ð4Ð4ð Ÿ	š	 &¨¤)Ñ,Ô,Ð,Ð,àð FÝ.¨s°BÑ7Ô7¸ÐDÐEÐEÝ)¨#¨rÑ2Ô2Ð3Ð3å�3˜r™7œ7 EÑ*Ô*ð )ð )�à˜F�?�?Ý & v¨q¡yÑ 1Ô 1�F˜1‘Ià�Øð !ð !�AØ˜a”y A�~�~ØŸ	š	 ! F¨1¤I¤,Ñ/Ô/Ð/Ø ˜øØð )Ø—I’I˜f QœiÑ(Ô(Ð(øàð 	>Ý& s¨BÑ/Ô/°Ð<Ð=Ð=å! # rÑ*Ô*Ð+Ð+rI   c                 óÒ  ‡*‡+‡,‡-— |                       ¦   «         }g }g }t          |                     ¦   «         ¦  «        D ]b}|j        r |                     |g||         z  ¦  «         Œ)|                     ¦   «         \  }}|                     |||fg||         z  ¦  «         Œc|                     d„ ¬¦  «         |                     d„ ¬¦  «         |                     ¦   «          g }|D ]v}t          |¦  «        dk    r|                     |g¦  «         Œ,|D ]1Š*t          ‰*d         |z
  ¦  «        r‰*                     |¦  «          nŒ2|                     |g¦  «         Œwt          d„ |D ¦   «         ¦  «        }	t          d„ |D ¦   «         ¦  «        }
t          d„ |D ¦   «         ¦  «        }|                      ¦   «         dk    rug }t          | j                             ¦   «         ¦  «        D ]K}t          |                     ¦   «         ¦  «        D ]'Š*t          ‰*|¦  «        r|                     |¦  «         Œ(ŒLn¦|
r|rt          |¦  «        g}n‘|	rd	„ |D ¦   «         d
„ |D ¦   «         z   }nu|sd„ |D ¦   «         }nf|
sd|                      ¦   «         r#t!          | j        d         ¦  «        j        dk    rt          |¦  «        g}nd„ |D ¦   «         }t          |¦  «        g}t%          dd¬¦  «        Š,| j        j        j        j        }t/          |                     ‰,¦  «        d¦  «        \  }}g }t3          d¦  «        }|D �]©}i }t5          | j        j        ¦  «        D ]Þ\  }Š*‰*                     ¦   «         }t          |¦  «        dz
  }t;          |dz   ¦  «        D ] }|||z
           }|dk    rŒ||z
  ||z
  f|v rF|||z
  ||z
  fxx         |                     |¦  «        t?          ‰,|z
  dz   |z   |¦  «        z  z  cc<   Œf|                     |¦  «        t?          ‰,|z
  dz   |z   |¦  «        z  |||z
  ||z
  f<   Œ¡Œßg }d„ |D ¦   «         }t          |¦  «        Š+tA          |¦  «        }tA          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }‰+|z   }i }g }g } t;          ‰+|dz   ¦  «        D ]vŠ*‰*|v rQtC          ˆ*ˆ+ˆ,fd„| "                    ¦   «         D ¦   «         t           j#        ¬¦  «        }!|                     |!¦  «         ŒW|                     t           j#        ¦  «         ŒwtI          ||¦  «        }|j%        }"tM          |j                             |j        d         ¦  «        ‰,d¬¦  «        }#|#                     ¦   «         }#|#r"tA          |#¦  «        dz   }$tA          |$|¦  «        }|"|z  }"g }%|                      ¦   «         dk    r| j        |         }%nº|                      ¦   «         dk    r¢|dk    rœtO          |¦  «        |k    r‰t          |¦  «        dk    rvtQ          | |"tO          |¦  «        z   ¦  «        Š-t          ‰-¦  «        tO          |¦  «        k    r6ˆ-fd„t;          tO          |¦  «        t          ‰-¦  «        ¦  «        D ¦   «         }%t          |%¦  «        |"k     �rçt;          ||¦  «        D �]4}t           j#        }&|D �]Š*|‰*d         z   dk     rt           j#        ||‰*d         z   <   n¤|‰*d         z   t          |%¦  «        k     r|%|‰*d         z            ||‰*d         z   <   nj|‰*d         z   |vr]tS          |¦  «        d|‰*d         z   z  z   }'t%          |'¦  «        ||‰*d         z   <   |                      ||‰*d         z            ¦  «         ‰*d         |k    r1|&|‰*          *                    ‰,|¦  «        ||‰*d         z            z  z  }&�Œ|                     |&¦  «         �Œ6tW          |g| ¢R Ž }(tY          |(tZ          ¦  «        rãt;          t          |%¦  «        |"¦  «        D ]t}||vr'tS          |¦  «        d|z  z   }'t%          |'¦  «        ||<   ||         |(v r"|%                     |(||                  ¦  «         ŒY|%                     ||         ¦  «         Œu|r(|                     t]          ||%¦  «        ||f¦  «         �Œ“|                     t]          ||%¦  «        |f¦  «         �Œºt;          t          |%¦  «        |"¦  «        D ]~}||vr'tS          |¦  «        d|z  z   }'t%          |'¦  «        ||<   d})|(D ]/Š*||         ‰*v r#|%                     ‰*||                  ¦  «         d})Œ0|)s|%                     ||         ¦  «         Œ|r'|                     t]          ||%¦  «        ||f¦  «         n%|                     t]          ||%¦  «        |f¦  «         |dz  }�Œ«|S )Nc                 ó   — | d         S )Nr8   rr   ©rx   s    rG   rH   z.HolonomicFunction._frobenius.<locals>.<lambda>j  ó
   €  ! A¤$€ rI   )Úkeyc                 ó   — | d         S ©Nr­   rr   r�  s    rG   rH   z.HolonomicFunction._frobenius.<locals>.<lambda>k  rž  rI   r   c              3   ó<   K  — | ]}t          |¦  «        d k    V — ŒdS ©r8   N)r~   rD  s     rG   rº   z/HolonomicFunction._frobenius.<locals>.<genexpr>~  s,   è è € Ð3Ð3¨!�#˜a™&œ& Aš+Ð3Ð3Ð3Ð3Ð3Ð3rI   c              3   ó"   K  — | ]
}|d k    V — ŒdS r  rr   rD  s     rG   rº   z/HolonomicFunction._frobenius.<locals>.<genexpr>€  s&   è è € Ð+Ð+ �Q˜!’VÐ+Ð+Ð+Ð+Ð+Ð+rI   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S rB   )r   rD  s     rG   rº   z/HolonomicFunction._frobenius.<locals>.<genexpr>�  s(   è è € Ð2Ð2 q•Z ‘]”]Ð2Ð2Ð2Ð2Ð2Ð2rI   Tc                 ó   — g | ]
}|d          ‘ŒS r)  rr   rD  s     rG   rˆ   z0HolonomicFunction._frobenius.<locals>.<listcomp>�  s   € Ð1Ð1Ð1¨˜q œtÐ1Ð1Ð1rI   c                 ó   — g | ]
}|d          ‘ŒS r)  rr   ©r†   r‚   s     rG   rˆ   z0HolonomicFunction._frobenius.<locals>.<listcomp>�  s   € Ð4IÐ4IÐ4I¸a°Q°q´TÐ4IÐ4IÐ4IrI   c                 ó8   — g | ]}t          |¦  «        |k    °|‘ŒS rr   ©rà   rD  s     rG   rˆ   z0HolonomicFunction._frobenius.<locals>.<listcomp>“  s#   € ÐCÐCÐC Qµs¸1±v´vÀ²{°{˜q°{°{°{rI   Fc                 ó   — g | ]
}|d k    ¯|‘ŒS r)  rr   rD  s     rG   rˆ   z0HolonomicFunction._frobenius.<locals>.<listcomp>›  s   € Ð7Ð7Ð7 !°°Q²°˜A°°°rI   r®   rz  r|  ÚCr8   c                 ó   — g | ]
}|d          ‘ŒS r)  rr   rD  s     rG   rˆ   z0HolonomicFunction._frobenius.<locals>.<listcomp>¹  s   € Ð+Ð+Ð+ �q˜”tÐ+Ð+Ð+rI   c              3   ó&   K  — | ]}|d          V — ŒdS r£  rr   rD  s     rG   rº   z/HolonomicFunction._frobenius.<locals>.<genexpr>¼  s&   è è € Ð-Ð- !˜˜1œÐ-Ð-Ð-Ð-Ð-Ð-rI   c              3   ó&   K  — | ]}|d          V — ŒdS r£  rr   rD  s     rG   rº   z/HolonomicFunction._frobenius.<locals>.<genexpr>½  s&   è è € Ð.Ð. 1˜!˜Aœ$Ð.Ð.Ð.Ð.Ð.Ð.rI   c              3   óh   •K  — | ],\  }}|d          ‰k    ¯|                      ‰‰‰z
  ¦  «        V — Œ-dS r  r€  r�  s      €€€rG   rº   z/HolonomicFunction._frobenius.<locals>.<genexpr>Æ  sR   øè è € ð  Gð  GÙ#' 1 a¸A¸a¼DÀAºI¸Ið !"§¢ q¨!¨e©)Ñ 4Ô 4Ø<E¸I¸I¸Ið Gð  GrI   rI  rŸ   rƒ  r„  c                 ó@   •— g | ]}‰|         t          |¦  «        z  ‘ŒS rr   rÞ   )r†   r�   rÄ   s     €rG   rˆ   z0HolonomicFunction._frobenius.<locals>.<listcomp>ã  s(   ø€ ÐOÐOÐO°1˜"˜Qœ%¥)¨A¡,¤,Ñ.ÐOÐOÐOrI   z_%s)/Ú	_indicialr   r�  Úis_realÚextendÚas_real_imagÚsortr~   r�   r   r»   rÙ   rÄ   r   rP  rÇ   r   Ú	is_finiter   rÅ   rv   rV   rÏ   r;   rÑ   Úordry   r}   r‹  r“   r|   r   rî   rK  rŒ  rá   r:   r   r/   rà   rö   Úchrr  r7   rb   rØ   r9   ).rd   ry  ÚindicialrootsÚrealsÚcomplr�   rß   r‡   ÚgrpÚindependentÚallposÚallintÚrootstoconsiderÚposrootsrÏ   rÔ   rÖ   ÚfinalsolÚcharr  rŽ  r�  ri  r\  r[  rQ   r�  r   Údegree2r‘  r’  r“  r”  r•  r   r–  r—  r˜  r™  Úletterrš  r!  r‚   r  r®   rÄ   s.                                             @@@@rG   rŠ  zHolonomicFunction._frobenius\  s±
  øøøø€ àŸšÑ(Ô(ˆàˆØˆÝ˜×+Ò+Ñ-Ô-Ñ.Ô.ð 	=ð 	=ˆAØŒyð =Ø—’˜a˜S =°Ô#3Ñ3Ñ4Ô4Ð4Ð4à—~’~Ñ'Ô'‘��1Ø—’˜q ! Q˜i˜[¨=¸Ô+;Ñ;Ñ<Ô<Ð<Ð<ð 	�
Š
��ˆ
Ñ'Ô'Ð'Ø�
Š
��ˆ
Ñ'Ô'Ð'Ø�
Š
‰Œˆð ˆàð 		 ð 		 ˆAÝ�3‰xŒx˜1Š}ˆ}Ø—
’
˜A˜3‘”�ØØð  ð  �Ý˜a œd Q™hÑ'Ô'ð Ø—H’H˜Q‘K”K�KØ�Eðð —
’
˜A˜3‘”�øõ Ð3Ð3¨sÐ3Ñ3Ô3Ñ3Ô3ˆåÐ+Ð+ UÐ+Ñ+Ô+Ñ+Ô+ˆÝÐ2Ð2¨EÐ2Ñ2Ô2Ñ2Ô2ˆð ×ÒÑ Ô  DÒ(Ð(Ø ˆOÝ˜TœWŸ\š\™^œ^Ñ,Ô,ð 2ð 2�Ý  ×!3Ò!3Ñ!5Ô!5Ñ6Ô6ð 2ð 2�AÝ# A qÑ)Ô)ð 2Ø'×.Ò.¨qÑ1Ô1Ð1øð2ð2ð
 ð 	2˜ð 	2Ý" 5™zœz˜lˆOˆOàð 	2Ø1Ð1¨SÐ1Ñ1Ô1Ð4IÐ4IÀ5Ð4IÑ4IÔ4IÑIˆOˆOàð 
	2ØCÐC¨%ÐCÑCÔCˆOˆOàð 	2à×'Ò'Ñ)Ô)ð 2­Q¨t¬w°q¬z©]¬]Ô-DÈÒ-NÐ-NÝ#& u¡:¤: ,��ð 8Ð7 uÐ7Ñ7Ô7�Ý#& x¡=¤= /�å�3 Ð%Ñ%Ô%ˆØÔÔ%Ô*Ô.ˆÝ" 3×#4Ò#4°QÑ#7Ô#7¸Ñ>Ô>‰ˆˆ1àˆÝ�3‰xŒxˆà ð @	ñ @	ˆAØˆEå! $Ô"2Ô"=Ñ>Ô>ð ]ð ]‘��1àŸLšL™NœN�	Ý˜Y™œ¨!Ñ+�å˜v¨™zÑ*Ô*ð 	]ð 	]�AØ% f¨q¡jÔ1�Eà ’z�zØ à˜A™˜q 1™u�~¨Ð.Ð.Ø˜q 1™u a¨!¡e˜nÐ-Ð-Ô-°#·,²,¸uÑ2EÔ2EÍÈ1ÈqÉ5ÐSTÉ9ÐWXÉ=ÐZ[ÑH\ÔH\Ñ2\Ñ]Ð-Ð-Ñ-Ð-à14·²¸eÑ1DÔ1DÅrÈ!ÈaÉ%ÐRSÉ)ÐVWÉ-ÐYZÑG[ÔG[Ñ1[˜˜q 1™u a¨!¡e˜nÑ-Ð-ð	]ð ˆCØ+Ð+ UÐ+Ñ+Ô+ˆGÝ˜‘L”LˆEÝ˜‘L”LˆEÝÐ-Ð- uÐ-Ñ-Ô-Ñ-Ô-ˆFÝÐ.Ð.¨Ð.Ñ.Ô.Ñ.Ô.ˆGà ™ˆJØˆFØˆCØˆHå˜5 %¨!¡)Ñ,Ô,ð 'ð '�Ø˜�<�<Ýð  Gð  Gð  Gð  Gð  Gð  GØ+0¯;ª;©=¬=ð Gñ  Gô  Gå%&¤Vð-ñ -ô -�Dð —J’J˜tÑ$Ô$Ð$Ð$à—J’J�qœvÑ&Ô&Ð&Ð&õ % S¨!Ñ,Ô,ˆCð ”IˆEÝ˜aœfŸošo¨c¬n¸RÔ.@ÑAÔAÀ1ÈSÐQÑQÔQˆIØ!ŸšÑ(Ô(ˆIàð 7Ý˜y™>œ>¨AÑ-�Ý  ¨:Ñ6Ô6�
Ø�ZÑˆEàˆBà×"Ò"Ñ$Ô$¨Ò,Ð,Ø”W˜Q”Z��à×$Ò$Ñ&Ô&¨%Ò/Ð/°A¸²F°F½sÀ1¹v¼vÈº{¸{ÍsÐSbÑOcÔOcÐghÒOhÐOhÝ  e­c°!©f¬f¡nÑ5Ô5�å�r‘7”7�S ™VœVÒ#Ð#ØOÐOÐOÐO½½cÀ!¹f¼fÅcÈ"ÁgÄgÑ8NÔ8NÐOÑOÔO�Bå�2‰wŒw˜Š‰å˜w¨Ñ/Ô/ð #ñ #�AÝœ�Bà"ð Iñ I˜Ø˜q œt™8 aš<˜<Ý/0¬v˜F 1 q¨¤t¡8Ñ,Ð,à  1¤™X­¨B©¬Ò/Ð/Ø/1°!°a¸´d±(¬|˜F 1 q¨¤t¡8Ñ,Ð,à!" Q q¤T¡¨VÐ!3Ð!3Ý%(¨¡Y¤Y°¸¸Q¸q¼T¹Ñ1BÑ%B˜FÝ/5°f©~¬~˜F 1 q¨¤t¡8Ñ,Ø$ŸOšO¨F°1°q¸´t±8Ô,<Ñ=Ô=Ð=à˜Qœ4 1š9˜9Ø %¨¤(§-¢-°°1Ñ"5Ô"5¸¸qÀ1ÀQÄ4¹xÔ8HÑ"HÑH˜Bùà—J’J˜r‘N”N�N‘Nõ ˜sÐ. XÐ.Ð.Ð.�å˜f¥dÑ+Ô+ð !å"¥3 r¡7¤7¨EÑ2Ô2ð 
1ð 
1˜à F˜?˜?Ý%(¨¡Y¤Y°¸±Ñ%9˜FÝ(.¨v©¬˜F 1™Ià! !œ9¨Ð.Ð.ØŸIšI f¨V°A¬YÔ&7Ñ8Ô8Ð8Ð8ð ŸIšI f¨Q¤iÑ0Ô0Ð0Ð0àð !Ø ŸšÕ):¸3ÀÑ)CÔ)CÀQÈ
Ð(SÑTÔTÐTÙ à ŸšÕ):¸3ÀÑ)CÔ)CÀQÐ(GÑHÔHÐHÙ å�s 2™wœw¨Ñ.Ô.ð -ð -�Aà ��Ý!$ T¡¤¨U°A©XÑ!5˜Ý$*¨6¡N¤N˜˜q™	à�AØ#ð %ð %˜Ø! !œ9¨˜>˜>ØŸIšI a¨¨q¬	¤lÑ3Ô3Ð3Ø $˜AøØð -ØŸ	š	 &¨¤)Ñ,Ô,Ð,øØð AØ—’Õ!2°3¸Ñ!;Ô!;¸QÀ
Ð KÑLÔLÐLÐLð —’Õ!2°3¸Ñ!;Ô!;¸QÐ ?Ñ@Ô@Ð@Ø�A‰IˆD‰DØˆrI   é   c                 óŽ  ‡ ‡‡‡‡‡‡‡‡— |€‰                       ¦   «         }n|}t          |t          ¦  «        rt          |¦  «        dk    r|d         }dŠnÍt          |t          ¦  «        r$t          |¦  «        dk    r|d         Š|d         }n”t          |¦  «        dk    r*t          |d         ¦  «        dk    r|d         d         }dŠnWt          |¦  «        dk    r6t          |d         ¦  «        dk    r|d         d         Š|d         d         }nˆ fd„|D ¦   «         S |t	          ‰¦  «        z
  }t          |j        ¦  «        dz
  }|j        j        Š‰ j        Š‰ j	        }|j        j
        }|j        j        j        }	|	                     ¦   «         Šˆfd„|D ¦   «         Šˆˆfd„t          ‰¦  «        D ¦   «         Št          |j        ¦  «        Š|dz   |k     rgt          |dz   ‰z
  |‰z
  ¦  «        D ]MŠt!          ˆˆˆfd	„t          ‰¦  «        D ¦   «         t"          j        ¬
¦  «        }
‰                     |
¦  «         ŒN|r‰S t!          ˆˆfd„t)          ‰¦  «        D ¦   «         t"          j        ¬
¦  «        }|r&|t+          ‰|t	          ‰¦  «        z   z  ‰¦  «        z  }|dk    r|                     ‰‰|z
  ¦  «        S |S )a€  
        Finds the power series expansion of given holonomic function about :math:`x_0`.

        Explanation
        ===========

        A list of series might be returned if :math:`x_0` is a regular point with
        multiple roots of the indicial equation.

        Examples
        ========

        >>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators
        >>> from sympy import QQ
        >>> from sympy import symbols
        >>> x = symbols('x')
        >>> R, Dx = DifferentialOperators(QQ.old_poly_ring(x),'Dx')
        >>> HolonomicFunction(Dx - 1, x, 0, [1]).series()  # e^x
        1 + x + x**2/2 + x**3/6 + x**4/24 + x**5/120 + O(x**6)
        >>> HolonomicFunction(Dx**2 + 1, x, 0, [0, 1]).series(n=8)  # sin(x)
        x - x**3/6 + x**5/120 - x**7/5040 + O(x**8)

        See Also
        ========

        HolonomicFunction.to_sequence
        Nr­   r   r  r8   c                 ó<   •— g | ]}‰                      |¬ ¦  «        ‘ŒS ))Ú_recur)Úseriesr¹   s     €rG   rˆ   z,HolonomicFunction.series.<locals>.<listcomp>X  s'   ø€ Ð>Ð>Ð>¨a�D—K’K q�KÑ)Ô)Ð>Ð>Ð>rI   c                 ó^   •— g | ])}‰                      |                     ¦   «         ¦  «        ‘Œ*S rr   r&  r7  s     €rG   rˆ   z,HolonomicFunction.series.<locals>.<listcomp>b  s-   ø€ Ð3Ð3Ð3 aˆq�uŠu�Q—Y’Y‘[”[Ñ!Ô!Ð3Ð3Ð3rI   c                 ó4   •— g | ]}‰|          ‰‰         z  ‘ŒS rr   rr   )r†   r�   r\  Úseqs     €€rG   rˆ   z,HolonomicFunction.series.<locals>.<listcomp>c  s(   ø€ Ð2Ð2Ð2 A��A”ˆw˜˜QœÑÐ2Ð2Ð2rI   c              3   ón   •K  — | ]/}‰|z   d k    ¯t          ‰|         ‰¦  «        ‰‰|z            z  V — Œ0dS r  )ÚDMFsubs)r†   r‚   r�   rQ   Úsubs     €€€rG   rº   z+HolonomicFunction.series.<locals>.<genexpr>i  sS   øè è € ð =ð =Ø !°°Q±¸!²°õ % S¨¤V¨QÑ/Ô/°#°a¸!±e´*Ñ<Ø1;°°°ð=ð =rI   rI  c              3   ó4   •K  — | ]\  }}‰|‰z   z  |z  V — Œd S rB   rr   )r†   r�   r‚   Úconstantpowerrx   s      €€rG   rº   z+HolonomicFunction.series.<locals>.<genexpr>p  s6   øè è € ÐIÐI±$°!°Q�1�q˜=Ñ(Ñ)¨AÑ-ÐIÐIÐIÐIÐIÐIrI   )r‰  rb   Útupler~   rà   r˜  Ú
recurrencer   rx   r½   r}   rv   rV   rï   r“   r‰   rK  r   rá   r�   ry   r4   r  )rd   r®   Úcoefficientr   rÊ  rÕ  Úlr½   Úseq_dmprÔ   r[  Úserrü   rÓ  r�   r\  rÎ  rQ   rÑ  rx   s   `           @@@@@@@@rG   rË  zHolonomicFunction.series(  s  øøøøøøøøø€ ð: ˆ>Ø×)Ò)Ñ+Ô+ˆJˆJàˆJå�j¥%Ñ(Ô(ð 	?­S°©_¬_ÀÒ-AÐ-AØ# AœˆJØˆMˆMÝ˜
¥EÑ*Ô*ð 	?­s°:©¬À!Ò/CÐ/CØ& qœMˆMØ# AœˆJˆJå�‰_Œ_ Ò!Ð!¥c¨*°Q¬-Ñ&8Ô&8¸AÒ&=Ð&=Ø# Aœ qÔ)ˆJØˆMˆMÝ�‰_Œ_ Ò!Ð!¥c¨*°Q¬-Ñ&8Ô&8¸AÒ&=Ð&=Ø& qœM¨!Ô,ˆMØ# Aœ qÔ)ˆJˆJà>Ð>Ð>Ð>°:Ð>Ñ>Ô>Ð>à•�MÑ"Ô"Ñ"ˆÝ�
”ÑÔ Ñ"ˆØÔ!Ô'ˆØŒFˆØŒWˆØÔ'Ô2ˆØÔ!Ô(Ô-ˆØ�KŠK‰MŒMˆØ3Ð3Ð3Ð3¨7Ð3Ñ3Ô3ˆØ2Ð2Ð2Ð2Ð2­¨q©¬Ð2Ñ2Ô2ˆÝ�:”=Ñ!Ô!ˆàˆq‰5�1Š9ˆ9å˜1˜q™5 1™9 a¨!¡eÑ,Ô,ð "ð "�Ýð =ð =ð =ð =ð =ð =Ý%*¨1¡X¤Xð=ñ =ô =ÝDEÄFðLñ Lô L�à—
’
˜5Ñ!Ô!Ð!Ð!àð 	ØˆJåÐIÐIÐIÐIÐI½)ÀC¹.¼.ÐIÑIÔIÝœð ñ  ô  ˆàð 	9Ø•5˜˜Q¥ ]Ñ!3Ô!3Ñ3Ñ4°aÑ8Ô8Ñ8ˆCØ�Š7ˆ7Ø—8’8˜A˜q 2™vÑ&Ô&Ð&Øˆ
rI   c                 ó  ‡	‡
‡‡‡— | j         dk    r,|                      | j         ¦  «                             ¦   «         S | j        j        }| j        j        j        Š	| j        Š‰	j        }‰	j	        }ˆ	ˆfd„Š
t          d„ |D ¦   «         ¦  «        }dt          d|¦  «        t          d| j        j        ¦  «        z   z  Šˆ
ˆfd„Št          ˆfd„t          |¦  «        D ¦   «         ¦  «        }t          |¦  «        D ]m\  }}|                     ¦   «         }t          |¦  «        dz
  }d||z   cxk    r|k    rn n||||z
  |z
           |z  z   }|‰	                     ‰|z
  ¦  «        z  }Œnt#          ‰	                     |¦  «        ‰¦  «        S )z:
        Computes roots of the Indicial equation.
        r   c                 óŽ   •— t          ‰                     | ¦  «        ‰d¬¦  «        }d|                     ¦   «         v r|d         S dS )Nrƒ  r„  r   )r/   r|   r�  )ÚpolyÚroot_allrÔ   rx   s     €€rG   Ú_pole_degreez1HolonomicFunction._indicial.<locals>._pole_degree†  sE   ø€ Ý˜QŸZšZ¨Ñ-Ô-¨q¸Ð=Ñ=Ô=ˆHØ�H—M’M‘O”OÐ#Ð#Ø ”{Ð"à�qrI   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rB   rh  r¨  s     rG   rº   z.HolonomicFunction._indicial.<locals>.<genexpr>�  s*   è è € Ð4Ð4 A�Q—X’X‘Z”ZÐ4Ð4Ð4Ð4Ð4Ð4rI   é
   r8   c                 ó,   •— | j         r‰n
 ‰| ¦  «        S rB   )rO  )ÚqrÞ  Úinfs    €€rG   rH   z-HolonomicFunction._indicial.<locals>.<lambda>�  s   ø€ ˜qœyÐ=˜˜¨l¨l¸1©o¬o€ rI   c              3   ó:   •K  — | ]\  }} ‰|¦  «        |z
  V — Œd S rB   rr   )r†   r‚   râ  Údegs      €rG   rº   z.HolonomicFunction._indicial.<locals>.<genexpr>‘  s3   øè è € Ð=Ð=™t˜q !���A‘”˜‘
Ð=Ð=Ð=Ð=Ð=Ð=rI   )r½   rˆ  r²  rÅ   r}   rv   rV   rx   r_   r`   rî   r   rP  ry   r‹  r~   r{   r/   r|   )rd   Ú
list_coeffr!  Úyri  r‡   r�   r‚   r�  rÔ   rÞ  rå  rã  rx   s            @@@@@rG   r²  zHolonomicFunction._indicialx  s°  øøøøø€ ð
 Œ7�aŠ<ˆ<Ø—<’< ¤Ñ(Ô(×2Ò2Ñ4Ô4Ð4àÔ%Ô0ˆ
ØÔÔ#Ô(ˆØŒFˆØŒFˆØŒEˆð	ð 	ð 	ð 	ð 	ð 	õ Ð4Ð4¨Ð4Ñ4Ô4Ñ4Ô4ˆØ•C˜˜6‘N”N¥S¨¨DÔ,<Ô,BÑ%CÔ%CÑCÑDˆà=Ð=Ð=Ð=Ð=ˆÝÐ=Ð=Ð=Ð=¥y°Ñ'<Ô'<Ð=Ñ=Ô=Ñ=Ô=ˆå˜jÑ)Ô)ð 	%ð 	%‰DˆAˆqØŸš™œˆIÝ˜‘^”^ aÑ'ˆFØ�A˜‘EÐ#Ð#Ò#Ð#˜VÒ#Ð#Ð#Ð#Ð#Ø˜	 &¨1¡*¨q¡.Ô1°AÑ5Ñ5�Ø�—’˜a !™eÑ$Ô$Ñ$ˆAˆAå�Q—Z’Z ‘]”] AÑ&Ô&Ð&rI   ÚRK4çš™™™™™©?c                 óŒ  — ddl m} d}t          |d¦  «        sžd}t          |¦  «        }| j        |k    r || |g||¬¦  «        d         S |j        st          ‚| j        }||k    r| }t          ||z
  |z  ¦  «        }	||z   g}t          |	dz
  ¦  «        D ] }
| 	                    |d         |z   ¦  «         Œ!t          | j        j        j                             | j        j        d         ¦  «        | j        ¦  «        D ]!}
|
| j        k    s|
|v rt#          | |
¦  «        ‚Œ"|r || |||¬¦  «        d         S  || |||¬¦  «        S )	a±  
        Finds numerical value of a holonomic function using numerical methods.
        (RK4 by default). A set of points (real or complex) must be provided
        which will be the path for the numerical integration.

        Explanation
        ===========

        The path should be given as a list :math:`[x_1, x_2, \dots x_n]`. The numerical
        values will be computed at each point in this order
        :math:`x_1 \rightarrow x_2 \rightarrow x_3 \dots \rightarrow x_n`.

        Returns values of the function at :math:`x_1, x_2, \dots x_n` in a list.

        Examples
        ========

        >>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators
        >>> from sympy import QQ
        >>> from sympy import symbols
        >>> x = symbols('x')
        >>> R, Dx = DifferentialOperators(QQ.old_poly_ring(x),'Dx')

        A straight line on the real axis from (0 to 1)

        >>> r = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]

        Runge-Kutta 4th order on e^x from 0.1 to 1.
        Exact solution at 1 is 2.71828182845905

        >>> HolonomicFunction(Dx - 1, x, 0, [1]).evalf(r)
        [1.10517083333333, 1.22140257085069, 1.34985849706254, 1.49182424008069,
        1.64872063859684, 1.82211796209193, 2.01375162659678, 2.22553956329232,
        2.45960141378007, 2.71827974413517]

        Euler's method for the same

        >>> HolonomicFunction(Dx - 1, x, 0, [1]).evalf(r, method='Euler')
        [1.1, 1.21, 1.331, 1.4641, 1.61051, 1.771561, 1.9487171, 2.14358881,
        2.357947691, 2.5937424601]

        One can also observe that the value obtained using Runge-Kutta 4th order
        is much more accurate than Euler's method.
        r   )Ú_evalfFr  T)ÚmethodÚderivativesrŸ   r8   )Úsympy.holonomic.numericalrë  r  r   r½   r  r  rà   r“   r�   r/   rÅ   rv   rV   r|   r}   rx   r>   )rd   Úpointsrì  Úhrí  rë  Úlpr‡   rß   r®   r�   s              rG   r  zHolonomicFunction.evalfœ  s”  € ð\ 	5Ð4Ð4Ð4Ð4Ð4Øˆõ �v˜zÑ*Ô*ð 	.ØˆBÝ�&‘	”	ˆAØŒw˜!Š|ˆ|Ø�v˜d Q C°ÀKÐPÑPÔPÐQSÔTÐTà”;ð *Ý)Ð)à”ˆAØ�1ŠuˆuØ�B�Ý�Q˜‘U˜a‘KÑ Ô ˆAØ˜!‘e�WˆFÝ˜1˜q™5‘\”\ð .ð .�Ø—’˜f Rœj¨1™nÑ-Ô-Ð-Ð-å�tÔ'Ô.Ô3×<Ò<¸TÔ=MÔ=XÐY[Ô=\Ñ]Ô]Ð_cÔ_eÑfÔfð 	0ð 	0ˆAØ�D”GŠ|ˆ|˜q F˜{˜{Ý& t¨QÑ/Ô/Ð/ð  +ð ð 	TØ�6˜$ ¨vÀ;ÐOÑOÔOÐPRÔSÐSØˆv�d˜F¨6¸{ÐKÑKÔKÐKrI   c                 ó  ‡— | j         j        j        j        }|                     |¦  «        Št          ‰d¦  «        \  }}ˆfd„| j         j        D ¦   «         }t          ||¦  «        }t          ||| j	        | j
        ¦  «        S )z•
        Changes only the variable of Holonomic Function, for internal
        purposes. For composition use HolonomicFunction.composition()
        r\   c                 óJ   •— g | ]} ‰|                      ¦   «         ¦  «        ‘Œ S rr   )rñ   )r†   r‚   rÔ   s     €rG   rˆ   z.HolonomicFunction.change_x.<locals>.<listcomp>ð  s)   ø€ ÐCÐCÐC !ˆqˆq�—’‘”‰~Œ~ÐCÐCÐCrI   )rÅ   rv   rV   rÏ   rÑ   rY   r}   r^   rÂ   r½   rÄ   )rd   ÚzrÏ   rv   rÖ   rQ   rÔ   s         @rG   Úchange_xzHolonomicFunction.change_xç  s‚   ø€ ð ÔÔ%Ô*Ô.ˆØ×Ò˜aÑ Ô ˆÝ)¨!¨TÑ2Ô2‰	ˆ�ØCÐCÐCÐC tÔ'7Ô'BÐCÑCÔCˆÝ# C¨Ñ0Ô0ˆÝ   a¨¬°$´'Ñ:Ô:Ð:rI   c                 ó.  ‡‡‡— | j         Š| j        j        }| j        j        j        Šˆˆˆfd„|D ¦   «         }t          || j        j        ¦  «        }| j        ‰z
  }|                      ¦   «         st          |‰¦  «        S t          |‰|| j	        ¦  «        S )z-
        Substitute `x + a` for `x`.
        c           	      óŽ   •— g | ]A}‰                      ‰                     |¦  «                             ‰‰‰z   ¦  «        ¦  «        ‘ŒBS rr   )r{   r|   r  )r†   r�   rß   rV   rx   s     €€€rG   rˆ   z-HolonomicFunction.shift_x.<locals>.<listcomp>ý  sE   ø€ ÐXÐXÐXÀAˆt�Š˜tŸ}š}¨QÑ/Ô/×4Ò4°Q¸¸A¹Ñ>Ô>Ñ?Ô?ÐXÐXÐXrI   )
rx   rÅ   r}   rv   rV   r^   r½   rÇ   rÂ   rÄ   )rd   rß   ÚlistaftershiftrQ   r½   rV   rx   s    `   @@rG   rˆ  zHolonomicFunction.shift_xô  s    øøø€ ð
 ŒFˆØÔ)Ô4ˆØÔÔ&Ô+ˆàXÐXÐXÐXÐXÐXÈÐXÑXÔXˆÝ" 3¨Ô(8Ô(?Ñ@Ô@ˆØŒW�q‰[ˆØ×#Ò#Ñ%Ô%ð 	-Ý$ S¨!Ñ,Ô,Ð,Ý   a¨¨T¬WÑ5Ô5Ð5rI   c                 óh  ‡— |€|                       ¦   «         }n|}t          |t          ¦  «        r't          |¦  «        dk    r|d         }|d         }d}�n)t          |t          ¦  «        r,t          |¦  «        dk    r|d         }|d         }|d         }nèt          |¦  «        dk    r8t          |d         ¦  «        dk    r|d         d         }|d         d         }d}n�t          |¦  «        dk    rDt          |d         ¦  «        dk    r+|d         d         }|d         d         }|d         d         }nF|                      ||d         ¬¦  «        }|dd…         D ]}||                      ||¬¦  «        z  }Œ|S |j        }|j        Š| j        }	| j        }
‰j	        }|dk    �r‹t          ‰j        j                             ‰j        d         ¦  «        |j        d¬¦  «        }t           j        }t%          |¦  «        D ]©\  }}|dk     st'          |¦  «        sŒt)          |¦  «        }|t          |¦  «        k     rQt          ||         t*          t,          f¦  «        r||                              ¦   «         ||<   |||         |	|z  z  z  }ŒŽ|t1          d	|z  ¦  «        |	|z  z  z  }Œªt          |t*          t,          f¦  «        r|                     ¦   «         |	|z  z  }n||	|z  z  }|r%|
dk    r|                     |	|	|
z
  ¦  «        fgS |fgS |
dk    r|                     |	|	|
z
  ¦  «        S |S ||z   t          |¦  «        k    rt5          d
¦  «        ‚t7          ˆfd„‰j        dd…         D ¦   «         ¦  «        rt9          | | j        ¦  «        ‚‰j        d         }‰j        d         }t          |                     ¦   «         t*          t,          f¦  «        r™t!          |                     ¦   «                              ¦   «         ¦  «        ||                     ¦   «         z  z   t!          |                     ¦   «                              ¦   «         ¦  «        ||                     ¦   «         z  z  z  }ntt!          |                     ¦   «         ¦  «        ||                     ¦   «         z  z   t!          |                     ¦   «         ¦  «        ||                     ¦   «         z  z  z  }d}t          ‰j        j                             |¦  «        |j        ¦  «        }t          ‰j        j                             |¦  «        |j        ¦  «        }|rg }t?          ||z   ¦  «        D �]}||k     rk|rJ|                      t!          ||         ¦  «        |	||z   z  z                       |	|	|
z
  ¦  «        f¦  «         n|t!          ||         ¦  «        |	|z  z  z  }Œtt!          ||         ¦  «        dk    rŒŽg }g }tC          | "                    ¦   «         ¦  «        D ]4}| #                    tI          ||z
  |z  ¦  «        g||         z  ¦  «         Œ5tC          | "                    ¦   «         ¦  «        D ]4}| #                    tI          ||z
  |z  ¦  «        g||         z  ¦  «         Œ5d|v r| %                    d¦  «         n|                      d¦  «         |rx|                      t!          ||         ¦  «        |	||z   z  z                       |	|	|
z
  ¦  «        tM          ||||	|z  z  ¦  «                             |	|	|
z
  ¦  «        f¦  «         �Œç|t!          ||         ¦  «        tM          ||||	|z  z  ¦  «        z  |	|z  z  z  }�Œ|r|S ||	|z  z  }|
dk    r|                     |	|	|
z
  ¦  «        S |S )añ  
        Returns a hypergeometric function (or linear combination of them)
        representing the given holonomic function.

        Explanation
        ===========

        Returns an answer of the form:
        `a_1 \cdot x^{b_1} \cdot{hyper()} + a_2 \cdot x^{b_2} \cdot{hyper()} \dots`

        This is very useful as one can now use ``hyperexpand`` to find the
        symbolic expressions/functions.

        Examples
        ========

        >>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators
        >>> from sympy import ZZ
        >>> from sympy import symbols
        >>> x = symbols('x')
        >>> R, Dx = DifferentialOperators(ZZ.old_poly_ring(x),'Dx')
        >>> # sin(x)
        >>> HolonomicFunction(Dx**2 + 1, x, 0, [0, 1]).to_hyper()
        x*hyper((), (3/2,), -x**2/4)
        >>> # exp(x)
        >>> HolonomicFunction(Dx - 1, x, 0, [1]).to_hyper()
        hyper((), (), x)

        See Also
        ========

        from_hyper, from_meijerg
        Nr­   r8   r   r  )Úas_listrÊ  rÔ   r„  r‡  z+Can't compute sufficient Initial Conditionsc              3   óB   •K  — | ]}|‰j         j        j        k    V — Œd S rB   r¸   ©r†   r�   rF   s     €rG   rº   z-HolonomicFunction.to_hyper.<locals>.<genexpr>m  s/   øè è € ÐCÐC¨1ˆq�A”H”MÔ&Ò&ÐCÐCÐCÐCÐCÐCrI   rŸ   )'r‰  rb   rÔ  r~   Úto_hyperr˜  rÕ  rx   r½   r   r/   rv   rV   r|   r}   r®   r   rá   ry   r   rà   r*   r+   Úas_exprr   r  r  Úanyr=   ÚLCri  r“   r�   r   r�  r´  r6   Úremover&   )rd   rú  rÊ  rÕ  r‘  rÓ  rQ   r�   r˜  rx   r½   ÚmÚnonzerotermsr‚   rß   r‡   r  Úarg1Úarg2Ú	listofsolÚapÚbqr\  rF   s                          @rG   rý  zHolonomicFunction.to_hyper  s�  ø€ ðF ˆ>Ø×)Ò)Ñ+Ô+ˆJˆJàˆJå�j¥%Ñ(Ô(ð 	­S°©_¬_ÀÒ-AÐ-AØ# AœˆJØ# AœˆJØˆM‰MÝ˜
¥EÑ*Ô*ð 	­s°:©¬À!Ò/CÐ/CØ# AœˆJØ& qœMˆMØ# AœˆJˆJÝ�‰_Œ_ Ò!Ð!¥c¨*°Q¬-Ñ&8Ô&8¸AÒ&=Ð&=Ø# Aœ qÔ)ˆJØ# Aœ qÔ)ˆJØˆMˆMÝ�‰_Œ_ Ò!Ð!¥c¨*°Q¬-Ñ&8Ô&8¸AÒ&=Ð&=Ø# Aœ qÔ)ˆJØ& qœM¨!Ô,ˆMØ# Aœ qÔ)ˆJˆJà—-’-¨¸
À1¼�-ÑFÔFˆCØ   ”^ð @ð @�Ø�t—}’}¨W¸Q�}Ñ?Ô?Ñ?��ØˆJàŒ]ˆØÔ!ˆØŒFˆØŒWˆð ŒGˆð �Š6‰6Ý  ¤¤×!7Ò!7¸¼ÀQ¼Ñ!HÔ!HÈ*Ì,Ð_bÐcÑcÔcˆLå”&ˆCÝ! ,Ñ/Ô/ð 4ð 4‘��1à�q’5�5¥
¨1¡¤�5Øå˜‘F”F�Ø•s˜2‘w”w’;�;Ý! " Q¤%­+µ{Ð)CÑDÔDð 0Ø " 1¤§¢¡¤˜˜1™Ø˜2˜aœ5 1 a¡4™<Ñ'�C�Cð �6 &¨!¡)Ñ,Ô,¨q°!©tÑ3Ñ3�C�Cå˜#¥­[Ð9Ñ:Ô:ð -Ø—k’k‘m”m a¨Ñ&6Ñ6��à˜A˜}Ñ,Ñ,�Øð !Ø˜’7�7Ø ŸXšX a¨¨R©Ñ0Ô0Ð3Ð4Ð4Ø˜�yÐ Ø�QŠwˆwØ—x’x  1 r¡6Ñ*Ô*Ð*ØˆJà˜‰>�C ™GœGÒ#Ð#Ý%Ð&SÑTÔTÐTõ ÐCÐCÐCÐC°´¸Q¸r¸TÔ0BÐCÑCÔCÑCÔCð 	5Ý% d¨D¬GÑ4Ô4Ð4àŒL˜ŒOˆØŒL˜Ôˆõ �a—d’d‘f”f�{­KÐ8Ñ9Ô9ð 	PÝ�Q—T’T‘V”V—^’^Ñ%Ô%Ñ&Ô&¨¨Q¯XªX©Z¬Z©Ñ8Ð9½Q¸q¿tºt¹v¼v¿~º~Ñ?OÔ?OÑ=PÔ=PÐSTÐWX×W_ÒW_ÑWaÔWaÑSbÑ=bÑcˆAˆAå�Q—T’T‘V”V‘9”9˜q 1§8¢8¡:¤:™Ñ.Ð/µ1°Q·T²T±V´V±9´9¸qÀ1Ç8Â8Á:Ä:¹Ñ3NÑOˆAàˆå�Q”X”]×+Ò+¨AÑ.Ô.°
´Ñ=Ô=ˆÝ�Q”X”]×+Ò+¨AÑ.Ô.°
´Ñ=Ô=ˆð ð 	ØˆIÝ�z A‘~Ñ&Ô&ð %	Añ %	AˆAð �:Š~ˆ~Øð +Ø×$Ò$¥q¨¨A¬¡x¤x°!°a¸±oÑ2FÑ'F×&LÒ&LÈQÐPQÐRTÑPTÑ&UÔ&UÐ%XÑYÔYÐYÐYà�1˜R œU™8œ8 a¨¡d™?Ñ*�CØõ
 ��A”‰xŒx˜1Š}ˆ}ØàˆBØˆBõ ˜TŸYšY™[œ[Ñ)Ô)ð >ð >�Ø—	’	�9 a¨!¡e¨q¡[Ñ1Ô1Ð2°T¸!´WÑ<Ñ=Ô=Ð=Ð=å˜TŸYšY™[œ[Ñ)Ô)ð >ð >�Ø—	’	�9 a¨!¡e¨q¡[Ñ1Ô1Ð2°T¸!´WÑ<Ñ=Ô=Ð=Ð=ð �BˆwˆwØ—	’	˜!‘”��à—	’	˜!‘”�Øð AØ× Ò ¥1 R¨¤U¡8¤8¨A°°-±Ñ,@Ñ#@×"FÒ"FÀqÈ!ÈBÉ$Ñ"OÔ"OÕRWÐXZÐ\^Ð`aÐbcÐefÑbfÑ`fÑRgÔRg×QmÒQmÐnoÐqrÐsuÑquÑQvÔQvÐ!wÑxÔxÐxÑxà•q˜˜Aœ‘x”x¥%¨¨B°°A°q±D±Ñ"9Ô"9Ñ9¸A¸q¹DÑ@Ñ@�‘Øð 	ØÐØ�A�}Ñ$Ñ$ˆØ�Š7ˆ7Ø—8’8˜A˜q 2™vÑ&Ô&Ð&àˆ
rI   c                 óh   — t          |                      ¦   «         ¦  «                             ¦   «         S )a_  
        Converts a Holonomic Function back to elementary functions.

        Examples
        ========

        >>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators
        >>> from sympy import ZZ
        >>> from sympy import symbols, S
        >>> x = symbols('x')
        >>> R, Dx = DifferentialOperators(ZZ.old_poly_ring(x),'Dx')
        >>> HolonomicFunction(x**2*Dx**2 + x*Dx + (x**2 - 1), x, 0, [0, S(1)/2]).to_expr()
        besselj(1, x)
        >>> HolonomicFunction((1 + x)*Dx**3 + Dx**2, x, 0, [1, 1, 1]).to_expr()
        x*log(x + 1) + log(x + 1) + 1

        )r5   rý  Úsimplifyr¤   s    rG   r  zHolonomicFunction.to_expr´  s&   € õ& ˜4Ÿ=š=™?œ?Ñ+Ô+×4Ò4Ñ6Ô6Ð6rI   c                 ó²  — d}|€6t          | j        ¦  «        | j        j        k    rt          | j        ¦  «        }| j        j        j        j        }	 t          |                      ¦   «         | j	        |||¬¦  «        }n# t          t          f$ r d}Y nw xY w|r|j        |k    r|S |                      |d¬¦  «        }t          | j        | j	        ||¦  «        S )aÚ  
        Changes the point `x0` to ``b`` for initial conditions.

        Examples
        ========

        >>> from sympy.holonomic import expr_to_holonomic
        >>> from sympy import symbols, sin, exp
        >>> x = symbols('x')

        >>> expr_to_holonomic(sin(x)).change_ics(1)
        HolonomicFunction((1) + (1)*Dx**2, x, 1, [sin(1), cos(1)])

        >>> expr_to_holonomic(exp(x)).change_ics(2)
        HolonomicFunction((-1) + (1)*Dx, x, 2, [exp(2)])
        TN)rx   r½   ÚlenicsrD   F)rí  )r~   rÄ   rÅ   r   rv   rV   rD   Úexpr_to_holonomicr  rx   r<   r=   r½   r  rÂ   )rd   r‡   r  ÚsymbolicrÏ   rQ   rÄ   s          rG   rø   zHolonomicFunction.change_icsÉ  sß   € ð$ ˆàˆ>�c $¤'™lœl¨TÔ-=Ô-CÒCÐCÝ˜œ‘\”\ˆFØÔÔ%Ô*Ô1ˆð	Ý# D§L¢L¡N¤N°d´fÀÈ6ÐZ]Ð^Ñ^Ô^ˆCˆCøÝ#Õ%8Ð9ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð 	˜œ !š˜ØˆJà�ZŠZ˜ tˆZÑ,Ô,ˆÝ  Ô!1°4´6¸1¸bÑAÔAÐAs   Á+A> Á>BÂBc                 óú   — |                       d¬¦  «        }t          j        }|D ]U}t          |¦  «        dk    r||d         z  }Œ!t          |¦  «        dk    r!||d         t	          |d         ¦  «        z  z  }ŒV|S )aò  
        Returns a linear combination of Meijer G-functions.

        Examples
        ========

        >>> from sympy.holonomic import expr_to_holonomic
        >>> from sympy import sin, cos, hyperexpand, log, symbols
        >>> x = symbols('x')
        >>> hyperexpand(expr_to_holonomic(cos(x) + sin(x)).to_meijerg())
        sin(x) + cos(x)
        >>> hyperexpand(expr_to_holonomic(log(x)).to_meijerg()).simplify()
        log(x)

        See Also
        ========

        to_hyper
        T)rú  r8   r   r­   )rý  r   rá   r~   Ú_hyper_to_meijerg)rd   r5  rQ   r�   s       rG   Ú
to_meijergzHolonomicFunction.to_meijergì  s€   € ð, �mŠm DˆmÑ)Ô)ˆÝŒfˆàð 	6ð 	6ˆAÝ�1‰vŒv˜Š{ˆ{Ø�q˜”t‘��å�Q‘”˜1’�Ø�q˜”tÕ/°°!´Ñ5Ô5Ñ5Ñ5�øàˆ
rI   r  ©F©T)rÇ  FTN)rè  ré  F)FNrB   )$rm   rn   ro   rp   r¿   re   rg   rq   rÐ   rÙ   rÇ   râ   rœ   r  rŽ   rl   r•   r˜   r    r¢   r¥   rª   r°   ri  rw  r‰  rŠ  rË  r²  r  rõ  rˆ  rý  r  rø   r  rr   rI   rG   rÂ   rÂ   t  sM  € € € € € ð@ð @ðD €Lðð ð ð ð:ð ð ð €Hðð ð ð<ð ð ð ð ð ðLð Lð LðO;ð O;ð O;ðb}?ð }?ð }?ð }?ð~K;ð K;ð K;ðZð ð ð_?ð _?ð _?ðB €Hð!ð !ð !ð!ð !ð !ðð ð ð&ð &ð &ð ð  ð  ðDDð Dð Dð>.ð >.ð >.ð@{,ð {,ð {,ð {,ðzJð Jð Jð JðXNð Nð Nð Nð`"'ð "'ð "'ðHILð ILð ILð ILðV;ð ;ð ;ð6ð 6ð 6ð nð nð nð nð`7ð 7ð 7ð*!Bð !Bð !Bð !BðF ð  ð  ð  ð  rI   rÂ   Fc                 óÚ  — | j         }| j        }| j        d         }|                     t          ¦  «                             ¦   «         }t          t          j        |¦  «        d¦  «        \  }}||z  }	d}
|D ]
}|
|	|z   z  }
Œ|	dz
  }|}|D ]
}|||z   z  }Œ|
|z
  }t          | ¦  «        }|t          t          fv r#t          ||¦  «                             |¦  «        S t          |t          ¦  «        s`t!          ||||j        d¬¦  «        }|s |dz  }t!          ||||j        d¬¦  «        }|¯ t          ||¦  «                             |||¦  «        S t          |t          ¦  «        rdd}t!          ||||j        |d¬¦  «        }|s!|dz  }t!          ||||j        |d¬¦  «        }|¯!t          ||¦  «                             |||¦  «        S t          ||¦  «                             |¦  «        S )aÌ  
    Converts a hypergeometric function to holonomic.
    ``func`` is the Hypergeometric Function and ``x0`` is the point at
    which initial conditions are required.

    Examples
    ========

    >>> from sympy.holonomic.holonomic import from_hyper
    >>> from sympy import symbols, hyper, S
    >>> x = symbols('x')
    >>> from_hyper(hyper([], [S(3)/2], x**2/4))
    HolonomicFunction((-x) + (2)*Dx + (x)*Dx**2, x, 1, [sinh(1), -sinh(1) + cosh(1)])
    r­   r\   r8   F©Ú	use_limit)r  r  r.  Úatomsr   ÚpoprY   r,   rÑ   r5   r   r   rÂ   rw  rb   r&   Ú_find_conditionsr   )Úfuncr½   r  rß   r‡   rô  rx   rÔ   r\   ÚxDxÚr1ÚaiÚxDx_1Úr2ÚbirQ   ÚsimprÄ   s                     rG   Ú
from_hyperr"    s1  € ð  	Œ€AØŒ€AØŒ	�!Œ€AØ	�Š•‰Œ×ÒÑÔ€AÝ!¥"Ô"2°1Ñ"5Ô"5°tÑ<Ô<�E€A€rð ˆB‰$€CØ	
€BØð ð ˆØ
ˆc�B‰h‰ˆˆØ�!‰G€Eà	€BØð ð ˆØ
ˆe�b‰jÑˆˆØ
ˆr‰'€Cå�tÑÔ€Dà•Õ*Ð+Ð+Ð+Ý   aÑ(Ô(×4Ò4°QÑ7Ô7Ð7õ �d�EÑ"Ô"ð 	@Ý˜d A r¨3¬9ÀÐFÑFÔFˆØð 	Kð �!‰GˆBÝ! $¨¨2¨s¬yÀEÐJÑJÔJˆBð ð 	Kõ !  aÑ(Ô(×4Ò4°Q¸¸BÑ?Ô?Ð?å�$�ÑÔð @Øˆå˜d A r¨3¬9°eÀuÐMÑMÔMˆØð 	RØ�!‰GˆBÝ! $¨¨2¨s¬y¸%È5ÐQÑQÔQˆBð ð 	Rõ !  aÑ(Ô(×4Ò4°Q¸¸BÑ?Ô?Ð?å˜S !Ñ$Ô$×0Ò0°Ñ3Ô3Ð3rI   Tc                 ó¬  — | j         }| j        }t          | j        ¦  «        }t          | j        ¦  «        }t          |¦  «        }	| j        d         }
|
                     t          ¦  «                             ¦   «         }t          | 
                    |¦  «        d¦  «        \  }}||z  }|dz   }|d||z   |	z
  z  z  }|D ]
}|||z
  z  }Œd}|D ]
}|||z
  z  }Œ||z
  }|s#t          ||¦  «                             |
¦  «        S t          | ¦  «        }|t          t          fv r#t          ||¦  «                             |
¦  «        S t!          |t"          ¦  «        s`t%          ||||j        d¬¦  «        }|s |dz  }t%          ||||j        d¬¦  «        }|¯ t          ||¦  «                             |
||¦  «        S t!          |t"          ¦  «        rdd}t%          ||||j        |d¬¦  «        }|s!|dz  }t%          ||||j        |d¬¦  «        }|¯!t          ||¦  «                             |
||¦  «        S t          ||¦  «                             |
¦  «        S )a¶  
    Converts a Meijer G-function to Holonomic.
    ``func`` is the G-Function and ``x0`` is the point at
    which initial conditions are required.

    Examples
    ========

    >>> from sympy.holonomic.holonomic import from_meijerg
    >>> from sympy import symbols, meijerg, S
    >>> x = symbols('x')
    >>> from_meijerg(meijerg(([], []), ([S(1)/2], [0]), x**2/4))
    HolonomicFunction((1) + (1)*Dx**2, x, 0, [0, 1/sqrt(pi)])
    r­   r\   r8   rŸ   Fr  )r  r  r~   ÚanÚbmr.  r  r   r  rY   rÑ   rÂ   rw  r5   r   r   rb   r'   r  r   )r  r½   r  r  rD   rß   r‡   r®   r  r  rô  rx   rÔ   r\   r  ÚxDx1r  r  r  r   rQ   r!  rÄ   s                          rG   Úfrom_meijergr'  N  sŽ  € ð  	Œ€AØŒ€AÝˆDŒG‰Œ€AÝˆDŒG‰Œ€AÝˆA‰Œ€AØŒ	�!Œ€AØ	�Š•‰Œ×ÒÑÔ€AÝ! &×"6Ò"6°qÑ"9Ô"9¸4Ñ@Ô@�E€A€rð ˆB‰$€CØ�‰7€DØ	
ˆB�!�a‘%˜!‘)ÑÑ	€BØð ð ˆØ
ˆd�R‰i‰ˆˆà	
€BØð ð ˆØ
ˆc�B‰h‰ˆˆØ
ˆr‰'€Càð 8Ý   aÑ(Ô(×4Ò4°QÑ7Ô7Ð7å�tÑÔ€Dà•Õ*Ð+Ð+Ð+Ý   aÑ(Ô(×4Ò4°QÑ7Ô7Ð7õ �d�GÑ$Ô$ð @Ý˜d A r¨3¬9ÀÐFÑFÔFˆØð 	KØ�!‰GˆBÝ! $¨¨2¨s¬yÀEÐJÑJÔJˆBð ð 	Kõ !  aÑ(Ô(×4Ò4°Q¸¸BÑ?Ô?Ð?å�$�Ñ Ô ð @ØˆÝ˜d A r¨3¬9°eÀuÐMÑMÔMˆØð 	RØ�!‰GˆBÝ! $¨¨2¨s¬y¸%È5ÐQÑQÔQˆBð ð 	Rõ !  aÑ(Ô(×4Ò4°Q¸¸BÑ?Ô?Ð?å˜S !Ñ$Ô$×0Ò0°Ñ3Ô3Ð3rI   Úx_1N)Ú_mytypec           	      ó|	  — t          | ¦  «        } | j        }|s7t          |¦  «        dk    r|                     ¦   «         }n(t	          d¦  «        ‚||v r|                     |¦  «         t          |¦  «        }|€V|                      t          ¦  «        rt          }nt          }t          |¦  «        dk    r||                              ¦   «         }t          | ||||||¬¦  «        }	|	r|	S t          s|ai at          t          |¬¦  «         n%|t          k    r|ai at          t          |¬¦  «         | j        �r|                      |t$          ¦  «        }
t'          |
t$          ¦  «        }|t          v r/t          |         }|d         d                              |¦  «        }n„t+          | |d|¬¦  «        }|st,          ‚|r||_        |s|s	||_        |S |s|j        j        }t7          | |||¦  «        }|s|dz  }t7          | |||¦  «        }|¯t9          |j        |||¦  «        S |s|s2|                     | j        d         ¦  «        }|r||_        ||_        |S |s|j        j        }t7          | |||¦  «        }|s|dz  }t7          | |||¦  «        }|¯|                     | j        d         ||¦  «        S | j        }| j        }
tA          |d         |d|¬	¦  «        }|
tB          u r=tE          dt          |¦  «        ¦  «        D ]}|tA          ||         |d|¬	¦  «        z  }ŒnZ|
tF          u r=tE          dt          |¦  «        ¦  «        D ]}|tA          ||         |d|¬	¦  «        z  }Œn|
tH          u r||d         z  }||_        |st,          ‚|r||_        |s|s|S |j        r|S |s|j        j        }|j         %                    |¦  «        r«| &                    ¦   «         }t          |¦  «        }t          |¦  «        dk    ru||d                  tN          j(        k    rY|d         }| ||z
  |z  z  }t7          ||||¦  «        }d
„ tS          |¦  «        D ¦   «         }||i}t9          |j        |||¦  «        S t7          | |||¦  «        }|s|dz  }t7          | |||¦  «        }|¯t9          |j        |||¦  «        S )a�  
    Converts a function or an expression to a holonomic function.

    Parameters
    ==========

    func:
        The expression to be converted.
    x:
        variable for the function.
    x0:
        point at which initial condition must be computed.
    y0:
        One can optionally provide initial condition if the method
        is not able to do it automatically.
    lenics:
        Number of terms in the initial condition. By default it is
        equal to the order of the annihilator.
    domain:
        Ground domain for the polynomials in ``x`` appearing as coefficients
        in the annihilator.
    initcond:
        Set it false if you do not want the initial conditions to be computed.

    Examples
    ========

    >>> from sympy.holonomic.holonomic import expr_to_holonomic
    >>> from sympy import sin, exp, symbols
    >>> x = symbols('x')
    >>> expr_to_holonomic(sin(x))
    HolonomicFunction((1) + (1)*Dx**2, x, 0, [0, 1])
    >>> expr_to_holonomic(exp(x))
    HolonomicFunction((-1) + (1)*Dx, x, 0, [1])

    See Also
    ========

    sympy.integrals.meijerint._rewrite1, _convert_poly_rat_alg, _create_table
    r8   z%Specify the variable for the functionNr   )r½   rÄ   r  rD   r  )rD   F©r  rD   )rx   r  rD   c                 ó8   — g | ]\  }}|t          |¦  «        z  ‘ŒS rr   rÞ   ré   s      rG   rˆ   z%expr_to_holonomic.<locals>.<listcomp>-	  ó'   € ÐQÐQÐQ±°°A˜A¥	¨!¡¤Ñ,ÐQÐQÐQrI   )*r   Úfree_symbolsr~   r  Ú
ValueErrorr  r‰   rM  r	   r-   r,   rï   Ú_convert_poly_rat_algÚ_lookup_tableÚdomain_for_tableÚ_create_tableÚis_Functionr  r(  r)  rõ  Ú_convert_meijerintr  rÄ   r½   rÅ   r   r  rÂ   rw  r.  r  r  r   r“   r   r   r¾   r²  r   r©   ry   )r  rx   r½   rÄ   r  rD   r  ÚsymsÚ
extra_symsÚsolpolyÚfÚtr×  rQ   r  r.  r�   rF   ÚgÚsingular_icss                       rG   r  r  —  s]  € õR �4‰=Œ=€DØÔ€Dàð Ýˆt‰9Œ9˜Š>ˆ>Ø�xŠx‰zŒzˆAˆAåÐDÑEÔEÐEØ	
ˆdˆˆØ�Š�A‰Œˆå�d‘”€Jà€~Ø�8Š8•E‰?Œ?ð 	ÝˆFˆFåˆFÝˆz‰?Œ?˜aÒÐØ˜JÔ'×1Ò1Ñ3Ô3ˆFõ $ D¨!°°rÀ&ÐQWÐbjÐkÑkÔk€GØð Øˆõ ð 4Ø!ÐØˆÝ•m¨FÐ3Ñ3Ô3Ð3Ð3Ø	Õ#Ò	#Ð	#Ø!ÐØˆÝ•m¨FÐ3Ñ3Ô3Ð3ð Ôñ $6Ø�IŠI�a�ÑÔˆÝ�A•s‰OŒOˆØ•ÐÐÝ˜aÔ ˆAØ�A”$�q”'×"Ò" 1Ñ%Ô%ˆCˆCå$ T¨1°uÀVÐLÑLÔLˆCØð *Ý)Ð)Øð Ø�”Øð ˜ð Ø�”Ø�
Øð /ØœÔ.�Ý" 4¨¨B°Ñ7Ô7ˆCØð <Ø�a‘�Ý& t¨Q°°FÑ;Ô;�ð ð <õ % S¤_°a¸¸SÑAÔAÐAàð 	�Xð 	Ø—/’/ $¤)¨A¤,Ñ/Ô/ˆCØð Ø�”ØˆCŒFØˆJØð 	+Ø”_Ô*ˆFå˜t Q¨¨FÑ3Ô3ˆØð 	8Ø�!‰GˆBÝ" 4¨¨B°Ñ7Ô7ˆCð ð 	8ð �Š˜tœy¨œ|¨R°Ñ5Ô5Ð5ð Œ9€DØŒ	€AÝ
˜D œG q°5ÀÐ
HÑ
HÔ
H€Cà�C€x€xÝ�q�#˜d™)œ)Ñ$Ô$ð 	Rð 	RˆAØÕ$ T¨!¤W°¸EÈ&ÐQÑQÔQÑQˆCˆCð	Rð 
�cˆˆÝ�q�#˜d™)œ)Ñ$Ô$ð 	Rð 	RˆAØÕ$ T¨!¤W°¸EÈ&ÐQÑQÔQÑQˆCˆCð	Rð 
�cˆˆØ�4˜”7‰lˆØ€C„FØð "Ý!Ð!Ø	ð ØˆŒØ	ð �ð Øˆ
Ø
„vð Øˆ
Øð 'Ø”Ô&ˆØ
„×"Ò" 2Ñ&Ô&ð 	AØ�MŠM‰OŒOˆÝ�‰GŒGˆÝˆq‰6Œ6�QŠ;ˆ;˜1˜Q˜qœTœ7¥a¤eÒ+Ð+Ø�!”ˆAØ˜˜B™ ‘{Ñ"ˆAÝ+¨A¨q°"°fÑ=Ô=ˆLØQÐQ½À<Ñ9PÔ9PÐQÑQÔQˆLØ�LÐ!ˆBÝ$ S¤_°a¸¸RÑ@Ô@Ð@å
˜4  B¨Ñ
/Ô
/€CØð 4Ø
ˆa‰ˆÝ˜t Q¨¨FÑ3Ô3ˆð ð 4õ ˜Sœ_¨a°°SÑ9Ô9Ð9rI   c                 óŽ  — g }g }|j         }|                     ¦   «         }|                     t          j        ¦  «        }g }t          | ¦  «        D �]\  }	}
t          |
|j        ¦  «        r;|                     | 	                    |
 
                    ¦   «         ¦  «        ¦  «         n`t          |
|j        ¦  «        s6|                     |                     t          |
¦  «        ¦  «        ¦  «         n|                     |
¦  «         |                     ||	                              ¦   «         ¦  «         |                     ||	                              ¦   «         ¦  «         �Œ|D ]}	|	                     |¦  «        }Œ|r| }| 	                    | 
                    ¦   «         ¦  «        }t          |¦  «        D ]\  }	}
|
|z  ||	<   Œ ||d                              ¦   «         |d                              ¦   «         z   
                    ¦   «         ¦  «        }|D ]}	|	                     |¦  «        }Œ| 	                    | 
                    ¦   «         ¦  «        }t          |¦  «        D ]Q\  }	}
|
|z  } ||                     ¦   «         |                     ¦   «         z   
                    ¦   «         ¦  «        ||	<   ŒRt!          ||¦  «        S )z'
    Normalize a given annihilator
    rŸ   )rV   rï   r{   r   r©   ry   rb   rz   r�   rð   rñ   r   ÚnumerÚdenomÚlcmÚgcdr^   )Úlist_ofrv   rå   Únumr?  rV   rü   Ú	lcm_denomÚlist_of_coeffr�   r‚   Ú	gcd_numerÚfrac_anss                rG   rõ   rõ   ;	  s«  € ð
 €CØ€EØŒ;€DØ�ŠÑÔ€AØ—’¥¤Ñ&Ô&€IØ€Mõ ˜'Ñ"Ô"ð /ñ /‰ˆˆ1Ý�a˜œÑ$Ô$ð 	$Ø× Ò  §¢ q§y¢y¡{¤{Ñ!3Ô!3Ñ4Ô4Ð4Ð4Ý˜A˜qœwÑ'Ô'ð 	$Ø× Ò  §¢­g°a©j¬jÑ!9Ô!9Ñ:Ô:Ð:Ð:à× Ò  Ñ#Ô#Ð#ð 	�
Š
�= Ô#×)Ò)Ñ+Ô+Ñ,Ô,Ð,ð 	�Š�] 1Ô%×+Ò+Ñ-Ô-Ñ.Ô.Ð.Ñ.ð ð %ð %ˆØ—E’E˜)Ñ$Ô$ˆ	ˆ	àð Ø�Jˆ	à—’�i×'Ò'Ñ)Ô)Ñ*Ô*€Iõ ˜-Ñ(Ô(ð )ð )‰ˆˆ1Ø˜y™=ˆ�aÑÐà��m BÔ'×-Ò-Ñ/Ô/°-ÀÔ2C×2IÒ2IÑ2KÔ2KÑK×TÒTÑVÔVÑWÔW€Ið ð %ð %ˆØ—E’E˜)Ñ$Ô$ˆ	ˆ	à—’�i×'Ò'Ñ)Ô)Ñ*Ô*€Iõ ˜-Ñ(Ô(ð Qð Q‰ˆˆ1Ø�y‘=ˆØ˜4 §¢Ñ!1Ô!1°H·N²NÑ4DÔ4DÑ!D× MÒ MÑ OÔ OÑPÔPˆ�aÑÐå ¨vÑ6Ô6Ð6rI   c                 óH  — g }t          | ¦  «        dz
  }|                     t          | d         |¦  «        ¦  «         t          | dd…         ¦  «        D ]1\  }}|                     t          ||¦  «        | |         z   ¦  «         Œ2|                     | |         ¦  «         |S )a*  
    Let a differential equation a0(x)y(x) + a1(x)y'(x) + ... = 0
    where a0, a1,... are polynomials or rational functions. The function
    returns b0, b1, b2... such that the differential equation
    b0(x)y(x) + b1(x)y'(x) +... = 0 is formed after differentiating the
    former equation.
    r8   r   N)r~   r�   rN  ry   )r}   rü   rQ   rß   r�   r‚   s         rG   r-  r-  t	  s�   € ð €CÝˆJ‰Œ˜!Ñ€AØ‡J‚J�w�z !”} aÑ(Ô(Ñ)Ô)Ð)å˜* Q R Rœ.Ñ)Ô)ð 2ð 2‰ˆˆ1Ø�
Š
•7˜1˜a‘=”= :¨a¤=Ñ0Ñ1Ô1Ð1Ð1à‡J‚Jˆz˜!Œ}ÑÔÐØ€JrI   c                 óx  — | j         }| j        }t          d„ |D ¦   «         ¦  «        rt          | ¦  «        S | j        d         }d„ |D ¦   «         }d}t
          j        f}d„ |D ¦   «         }t
          j        }|D ]}	|t          |	¦  «        z  }Œ|D ]}	|t          |	¦  «        z  }Œ|t          ||||| ¦  «        z  S )z(
    Converts a `hyper` to meijerg.
    c              3   óH   K  — | ]}|d k    ot          |¦  «        |k    V — ŒdS r  rª  rD  s     rG   rº   z$_hyper_to_meijerg.<locals>.<genexpr>�	  s5   è è € Ð
.Ð
. aˆ1�Š6Ð!•c˜!‘f”f ’kÐ
.Ð
.Ð
.Ð
.Ð
.Ð
.rI   r­   c              3   ó    K  — | ]	}d |z
  V — Œ
dS r£  rr   rD  s     rG   rº   z$_hyper_to_meijerg.<locals>.<genexpr>•	  s&   è è € Ð	Ð	�Aˆ!ˆa‰%Ð	Ð	Ð	Ð	Ð	Ð	rI   rr   c              3   ó    K  — | ]	}d |z
  V — Œ
dS r£  rr   rD  s     rG   rº   z$_hyper_to_meijerg.<locals>.<genexpr>˜	  s&   è è € Ð
Ð
�Qˆ1ˆq‰5Ð
Ð
Ð
Ð
Ð
Ð
rI   )
r  r  rÿ  r5   r.  r   rá   r©   r%   r'   )
r  r  r  rô  r$  Úanpr%  Úbmqr\  r�   s
             rG   r  r  ˆ	  sä   € ð 
Œ€BØ	Œ€Bå
Ð
.Ð
.¨2Ð
.Ñ
.Ô
.Ñ.Ô.ð !Ý˜4Ñ Ô Ð àŒ	�!Œ€Að 
Ð	˜Ð	Ñ	Ô	€BØ
€CÝ
Œ&ˆ€BØ
Ð
˜"Ð
Ñ
Ô
€Cå	Œ€Aàð ð ˆØ•�a‘”‰Lˆˆàð ð ˆØ•�a‘”‰Lˆˆà�w�r˜3  C¨!¨Ñ,Ô,Ñ,Ð,rI   c                 ó  — t          | ¦  «        t          |¦  «        k    r3d„ t          | |¦  «        D ¦   «         |t          | ¦  «        d…         z   }n2d„ t          | |¦  «        D ¦   «         | t          |¦  «        d…         z   }|S )zvTakes polynomial sequences of two annihilators a and b and returns
    the list of polynomials of sum of a and b.
    c                 ó   — g | ]
\  }}||z   ‘ŒS rr   rr   rç   s      rG   rˆ   z_add_lists.<locals>.<listcomp>ª	  ó    € Ð3Ð3Ð3™˜˜Aˆq�1‰uÐ3Ð3Ð3rI   Nc                 ó   — g | ]
\  }}||z   ‘ŒS rr   rr   rç   s      rG   rˆ   z_add_lists.<locals>.<listcomp>¬	  rQ  rI   )r~   r÷   )Úlist1Úlist2rQ   s      rG   r�   r�   ¥	  s„   € õ ˆ5�z„z•S˜‘Z”ZÒÐØ3Ð3¥ U¨EÑ!2Ô!2Ð3Ñ3Ô3°e½CÀ¹J¼J¸K¸KÔ6HÑHˆˆà3Ð3¥ U¨EÑ!2Ô!2Ð3Ñ3Ô3°e½CÀ¹J¼J¸K¸KÔ6HÑHˆØ€JrI   c                 ó(  ‡‡— | j                              | j        ¦  «        s|                      ¦   «         dk    r| j        S | j         }|j        Šg Š| j        }|j        j        }|                     ¦   «         }|j	        D ][}t          ||j        j        j        ¦  «        r:‰                     |                     |                     ¦   «         ¦  «        ¦  «         Œ\t          |¦  «        ‰k     s|t          |¦  «        k    r|S ˆˆfd„t!          ‰¦  «        D ¦   «         }|dt#          t          |¦  «        ‰¦  «        …         }t!          |‰z
  ¦  «        D ]£}	d}
t%          ||¦  «        D ]i\  Š}t'          || j        ¦  «        }t)          |dd¦  «        s|c c S t          |t*          t,          f¦  «        r|                     ¦   «         }|
‰|z  z  }
Œj|                     |
¦  «         t1          ||¦  «        }Œ¤||t          |¦  «        d…         z   S )zy
    Tries to find more initial conditions by substituting the initial
    value point in the differential equation.
    Tc                 ó4   •— g | ]}‰|          ‰‰         z  ‘ŒS rr   rr   )r†   r�   rß   r}   s     €€rG   rˆ   z_extend_y0.<locals>.<listcomp>È	  s8   ø€ ð #ð #ð #Øð ˜A”� ¨A¤Ñ.ð #ð #ð #rI   Nr   r·  )rÅ   r¾   r½   rÙ   rÄ   r   rv   rV   rï   r}   rb   rz   r�   rð   rñ   r~   r“   rP  r÷   rÐ  Úgetattrr*   r+   rþ  r-  )Ú	Holonomicr®   rÅ   rÄ   rÔ   rü   r‚   Úlist_redr  rÖ   rQ   r‡   rF   rß   r}   s                @@rG   rö   rö   °	  s  øø€ ð Ô×(Ò(¨¬Ñ6Ô6ð ¸)×:RÒ:RÑ:TÔ:TÐX\Ò:\Ð:\ØŒ|ÐàÔ'€KØÔ€Aà€Jà	Œ€BØÔÔ€AØ	�Š‰Œ€AàÔ#ð 2ð 2ˆÝ�a˜Ô+Ô0Ô6Ñ7Ô7ð 	2Ø×Ò˜aŸeše A§I¢I¡K¤KÑ0Ô0Ñ1Ô1Ð1øå
ˆ2�w„w�‚{€{�a�3˜r™7œ7’l�lØˆ	ð#ð #ð #ð #ð #Ý˜q™œð#ñ #ô #€Hà	Ð�S•�R‘”˜!‰_Œ_ÐÔ	€BÝ�1�q‘5‰\Œ\ð 
2ð 
2ˆØˆÝ˜˜HÑ%Ô%ð 	ð 	‰DˆAˆqÝ˜˜9œ<Ñ(Ô(ˆAÝ˜1˜k¨4Ñ0Ô0ð Ø�	�	�	�	�	Ý˜!�k­;Ð7Ñ8Ô8ð  Ø—I’I‘K”K�Ø�1�q‘5‰LˆCˆCØ
�	Š	�#‰ŒˆÝ$ X¨qÑ1Ô1ˆˆØ�•3�r‘7”7�8�8”ÑÐrI   c                 ót  — t          | t          ¦  «        s|                      ¦   «         S |                     | ¦  «        }|                     | ¦  «        }| |                     ¦   «         z  ||                     ¦   «         z  z   }|dz  } ||                     ¦   «         |                     ¦   «         f¦  «        S r¡  )rb   r.   rŽ   r>  r?  rñ   )Úfracrü   r  râ  Úsol_numÚ	sol_denoms         rG   rN  rN  Ù	  s˜   € å�d�CÑ Ô ð Ø�yŠy‰{Œ{Ðà	�Š�‰Œ€AØ	�Š�‰Œ€AØˆc�A—F’F‘H”H‰n˜q 1§6¢6¡8¤8™|Ñ+€GØ�1‘€IØˆ1ˆg�oŠoÑÔ ×!2Ò!2Ñ!4Ô!4Ð5Ñ6Ô6Ð6rI   c                 ó®  — t          | t          ¦  «        s| S | j        }| j        }t          j        }t          j        }|rddlm} t          t          |¦  «        ¦  «        D ]9\  }}	|r't          |	¦  «                             |j        ¦  «        }	||	||z  z  z  }Œ:t          t          |¦  «        ¦  «        D ]9\  }}	|r't          |	¦  «                             |j        ¦  «        }	||	||z  z  z  }Œ:t          |t          t          f¦  «        r|                     ¦   «         }t          |t          t          f¦  «        r|                     ¦   «         }||z  S )Nr   )Úmp)rb   r.   rC  Údenr   rá   Úmpmathr_  ry   Úreversedr   Ú
_to_mpmathÚprecr*   r+   rþ  )
r[  r½   Úmpmr  râ  Úsol_pÚsol_qr_  r�   r‚   s
             rG   rÐ  rÐ  å	  sQ  € å�d�CÑ Ô ð ØˆàŒ€AØŒ€AÝŒF€EÝŒF€Eà
ð ØÐÐÐÐÐå�( 1™+œ+Ñ&Ô&ð ð ‰ˆˆ1Øð 	/Ý˜‘
”
×%Ò% b¤gÑ.Ô.ˆAØ��R˜‘U‘Ñˆˆå�( 1™+œ+Ñ&Ô&ð ð ‰ˆˆ1Øð 	/Ý˜‘
”
×%Ò% b¤gÑ.Ô.ˆAØ��R˜‘U‘Ñˆˆå�%�+¥{Ð3Ñ4Ô4ð  Ø—’‘”ˆÝ�%�+¥{Ð3Ñ4Ô4ð  Ø—’‘”ˆà�5‰=ÐrI   c                 óþ	  — |                       ¦   «         }|s|                      ¦   «         }nd}|sl|sj|                      ¦   «         \  }	}
|	                      ¦   «         r<|
j        r5t	          |
t
          ¦  «        rt          |
¦  «        }
|
j        |
j        }}d}nd}nd}|s|s|sdS | 	                    |¦  «        }t          |d¦  «        \  }}|                      |¦  «        st          ||d| g¦  «        S |�r'| |z  |                      |¦  «        z
  }t          |j        |j        d¬¦  «        }|                     |¦  «        }|€×|dk    rÑ|rÏ|                     | ¦  «                             ¦   «         }t)          t+          |¦  «        ¦  «        D ]2\  }}|dk    rŒt-          t+          |¦  «        ¦  «        |d…         }|} t)          |¦  «        D ]8\  }}t	          |t.          t0          f¦  «        r|                     ¦   «         ||<   Œ9|t5          |¦  «        i}�n·|ro|                      ¦   «         \  }}||z  |z  ||                     |¦  «        z  z   ||                     |¦  «        z  z
  }t          |j        |j        d¬¦  «        }�nF|�rC|||z  z  |z  dz
  }t          ||¦  «                             |	¦  «        j        }|                     |¦  «        }|€ö|dk    rð|rî|�|dk    ræ|                     |	¦  «                             ¦   «         }t)          t+          |¦  «        ¦  «        D ]`\  }}|dk    rŒt	          |t.          t0          f¦  «        r|                     ¦   «         }t5          |¦  «        |
z  }t5          |¦  «        |
z  } t	          |t.          t0          f¦  «        r|                     ¦   «         }|t5          |g¦  «        i}|s|st          ||||¦  «        S |s|j        }|                     |¦  «        rµt          |||¦  «                             ¦   «         }t-          |¦  «        }tA          |¦  «        dk    rp||d                  t4          j!        k    rT|d         }| ||z
  |z  z  }tE          ||||¦  «        }d„ t)          |¦  «        D ¦   «         }||i}t          ||||¦  «        S tE          | |||¦  «        }|s|dz  }tE          | |||¦  «        }|¯t          ||||¦  «        S )	zO
    Converts polynomials, rationals and algebraic functions to holonomic.
    TFNr\   r   rä   r8   c                 ó8   — g | ]\  }}|t          |¦  «        z  ‘ŒS rr   rÞ   ré   s      rG   rˆ   z)_convert_poly_rat_alg.<locals>.<listcomp>b
  r-  rI   )#Úis_polynomialÚis_rational_functionÚas_base_expr  rb   r	   r6   r  râ  rÑ   rY   rM  rÂ   rŽ   rõ   r}   rv   r¾   r{   rñ   ry   rb  r‰   r*   r+   rþ  r   Úas_numer_denomrw  rÅ   r   r²  r~   r©   r  )r  rx   r½   rÄ   r  rD   r  ÚispolyÚisratÚbasepolyÚratexpr  r®   Úis_algrÔ   rÖ   r\   rQ   r¾   r5  r�   r‚   r[  Úindicialr  râ  rF   r×  r;  r<  s                                 rG   r0  r0  
  s/  € ð
 ×ÒÑ!Ô!€FØð Ø×)Ò)Ñ+Ô+ˆˆàˆàð 
�eð 
Ø×+Ò+Ñ-Ô-Ñˆ�&Ø×!Ò!Ñ#Ô#ð 	¨Ô(8ð 	Ý˜&¥%Ñ(Ô(ð +Ý" 6Ñ*Ô*�Ø”8˜VœXˆqˆAØˆFˆFàˆFˆFàˆàð �eð ˜vð Øˆtà×Ò˜QÑÔ€AÝ! ! TÑ*Ô*�E€A€rð �8Š8�A‰;Œ;ð 3Ý   Q¨¨D¨6Ñ2Ô2Ð2àñ .(à�R‰i˜$Ÿ)š) A™,œ,Ñ&ˆÝ˜œ¨¬¸eÐDÑDÔDˆØ—o’o bÑ)Ô)ˆð ˆ:˜" š'˜' k˜'Ø—,’,˜tÑ$Ô$×,Ò,Ñ.Ô.ˆCÝ!¥(¨3¡-¤-Ñ0Ô0ð ð ‘��1Ø˜’6�6ØÝ�X c™]œ]Ñ+Ô+¨A¨B¨BÔ/�Ø�ØÝ! %Ñ(Ô(ð +ð +‘��1Ý˜a¥+­{Ð!;Ñ<Ô<ð +Ø Ÿyšy™{œ{�E˜!‘HøØ�A˜e™HœHÐ%ˆBùà	ð (Ø×"Ò"Ñ$Ô$‰ˆˆ1à�!‰e�b‰j˜1˜qŸvšv a™yœy™=Ñ(¨1¨q¯vªv°a©y¬y©=Ñ8ˆÝ˜œ¨¬¸eÐDÑDÔDˆ‰à	ñ (Ø�1�q‘5‰k˜BÑ Ñ"ˆÝ  QÑ'Ô'×3Ò3°HÑ=Ô=ÔIˆØ—o’o bÑ)Ô)ˆð ˆ:˜" š'˜' k˜'Øˆ^˜v¨š{˜{Ø—,’,˜xÑ(Ô(×0Ò0Ñ2Ô2ˆCÝ!¥(¨3¡-¤-Ñ0Ô0ð ð ‘��1Ø˜’6�6ØÝ˜a¥+­{Ð!;Ñ<Ô<ð $ØŸ	š	™œ�Aå˜!™œ˜f™�Ý˜Q™4œ4 &™=�ØÝ˜%¥+­{Ð!;Ñ<Ô<ð (ØŸš™œ�Ø�A˜u˜g™JœJÐ'ˆBà	ð 1�ð 1Ý   a¨¨RÑ0Ô0Ð0àð Ø”ˆà
‡‚�rÑÔð 	5Ý˜c 1 bÑ)Ô)×3Ò3Ñ5Ô5ˆÝ�‰GŒGˆÝˆq‰6Œ6�QŠ;ˆ;˜1˜Q˜qœTœ7¥a¤eÒ+Ð+Ø�!”ˆAØ˜˜B™ ‘{Ñ"ˆAÝ+¨A¨q°"°fÑ=Ô=ˆLØQÐQ½À<Ñ9PÔ9PÐQÑQÔQˆLØ�LÐ!ˆBÝ$ S¨!¨R°Ñ4Ô4Ð4å	˜$  2 vÑ	.Ô	.€BØð 3Ø
ˆa‰ˆÝ˜d A r¨6Ñ2Ô2ˆð ð 3õ ˜S ! R¨Ñ,Ô,Ð,rI   c                 ó:  ‡‡‡— t          j        | ‰¦  «        }|r|\  Š}}}nd S ˆfd„|D ¦   «         }|                     ¦   «         }	|	d         ‰k    r|	d         nt          j        Šˆfd„|D ¦   «         }
d„ |D ¦   «         }ˆfd„} ||d         |
d         ¦  «        \  }}|d         |z  t          |||¬¦  «        z  }t          dt          |¦  «        ¦  «        D ]>} |||         |
|         ¦  «        \  }}|||         |z  t          |||¬¦  «        z  z  }Œ?|S )Nc                 ó&   •— g | ]}‰|d          z  ‘ŒS r)  rr   )r†   r�   Úfacs     €rG   rˆ   z&_convert_meijerint.<locals>.<listcomp>w
  s!   ø€ Ð&Ð&Ð&˜q��a˜”d‘
Ð&Ð&Ð&rI   r   r8   c                 ó&   •— g | ]}‰|d          z   ‘ŒS )r8   rr   )r†   r�   r!  s     €rG   rˆ   z&_convert_meijerint.<locals>.<listcomp>z
  s!   ø€ Ð#Ð#Ð#˜Aˆq�1�Q”4‰xÐ#Ð#Ð#rI   c                 ó   — g | ]
}|d          ‘ŒS )r­   rr   rD  s     rG   rˆ   z&_convert_meijerint.<locals>.<listcomp>{
  s   € ÐÐÐ�qˆa�ŒdÐÐÐrI   c                 óœ  •‡— | j         d         }|                     t          ¦  «        r |                     t          t
          ¦  «        }|                     ‰d¬¦  «        }t          |¦  «        d         }||         }|                     ¦   «         }|d         ‰k    r|d         nt          j
        }||z  Šˆfd„| j         d         d         D ¦   «         }ˆfd„| j         d         d         D ¦   «         }ˆfd„| j         d         d         D ¦   «         }	ˆfd	„| j         d         d         D ¦   «         }
|‰ z  t          ||f|	|
f|¦  «        fS )
NrŸ   F)r$  r   r8   c              3   ó"   •K  — | ]	}|‰z   V — Œ
d S rB   rr   rü  s     €rG   rº   z5_convert_meijerint.<locals>._shift.<locals>.<genexpr>Š
  ó'   øè è € Ð-Ð-˜ˆa�!‰eÐ-Ð-Ð-Ð-Ð-Ð-rI   c              3   ó"   •K  — | ]	}|‰z   V — Œ
d S rB   rr   rü  s     €rG   rº   z5_convert_meijerint.<locals>._shift.<locals>.<genexpr>‹
  r{  rI   c              3   ó"   •K  — | ]	}|‰z   V — Œ
d S rB   rr   rü  s     €rG   rº   z5_convert_meijerint.<locals>._shift.<locals>.<genexpr>Œ
  r{  rI   c              3   ó"   •K  — | ]	}|‰z   V — Œ
d S rB   rr   rü  s     €rG   rº   z5_convert_meijerint.<locals>._shift.<locals>.<genexpr>�
  r{  rI   )r.  rM  r
   r  r   r   Úcollectr‰   rl  r   rá   r'   )r  r!  rô  Údr‡   rß   r:  r$  r  r%  r  rF   rx   s              @€rG   Ú_shiftz"_convert_meijerint.<locals>._shift~
  sC  øø€ ØŒI�bŒMˆØ�5Š5•‰8Œ8ð 	'Ø—’•y¥#Ñ&Ô&ˆAà�IŠI�a %ˆIÑ(Ô(ˆÝ�‰GŒG�AŒJˆØˆaŒDˆà�MŠM‰OŒOˆØ�a”D˜A’I�IˆAˆaŒDˆD¥1¤6ˆØ�‰EˆØ-Ð-Ð-Ð-˜TœY qœ\¨!œ_Ð-Ñ-Ô-ˆØ-Ð-Ð-Ð-˜TœY qœ\¨!œ_Ð-Ñ-Ô-ˆØ-Ð-Ð-Ð-˜TœY qœ\¨!œ_Ð-Ñ-Ô-ˆØ-Ð-Ð-Ð-˜TœY qœ\¨!œ_Ð-Ñ-Ô-ˆà�1�"‰u•g˜r 2˜h¨¨R¨°!Ñ4Ô4Ð4Ð4rI   r+  )r(   Ú	_rewrite1rl  r   rá   r'  r“   r~   )r  rx   r  rD   r.  Úpor;  rÖ   Úfac_listr:  Úpo_listÚG_listr�  r[  r  rQ   r�   rv  r!  s    `               @@rG   r5  r5  n
  sl  øøø€ ÝÔ˜t QÑ'Ô'€Dàð Ø‰ˆˆR��A�Aàˆtð 'Ð&Ð&Ð& AÐ&Ñ&Ô&€HØ
�ŠÑÔ€AØ�!”˜’	�	ˆˆ!Œˆ�qœv€AØ#Ð#Ð#Ð# Ð#Ñ#Ô#€GØÐ˜AÐÑÔ€Fð5ð 5ð 5ð 5ð 5ð& ˆv�f˜Q”i ¨¤Ñ,Ô,�H€Eˆ1Ø
�1Œ+˜Ñ
¥¨Q¸È&Ð QÑ QÔ QÑ
Q€Cõ �1•c˜&‘k”kÑ"Ô"ð Wð WˆØ�6˜& œ) W¨Q¤ZÑ0Ô0‰ˆˆqØˆx˜Œ{˜UÑ"¥\°!¸hÈvÐ%VÑ%VÔ%VÑVÑVˆˆà€JrI   c                 ó~  ‡ — d
ˆ fd„	}|                      t          ¦  «        }t          |d¦  «        \  }} |t          t          ¦  «        |dz  dz   t          dddg¦  «          |t	          t          ¦  «        |dz  dz   t          dddg¦  «          |t          t          ¦  «        |dz
  t          dd¦  «          |t          t          ¦  «        |t          |dz  z  z   t          dddg¦  «          |t          t          ¦  «        dt          z  |z  |dz  z   t          dddt          t          ¦  «        z  g¦  «          |t          t          ¦  «        dt          z  |z  |dz  z   t          dddt          t          ¦  «        z  g¦  «          |t          t          ¦  «        dt          z  |z  |dz  z   t          dddt          t          ¦  «        z  g¦  «          |t          t          ¦  «        |dz  dz
  t          dddg¦  «          |t          t          ¦  «        |dz  dz
  t          dddg¦  «          |t          t          ¦  «        t          d|z  z   t          |dz  z  z   t          ¦  «          |t          t          ¦  «        t          |z  d|dz  z  z   t          |dz  z  z   t          ¦  «          |t!          t          ¦  «        t          |z  d|dz  z  z   t          |dz  z  z   t          ¦  «          |t#          t          ¦  «        t           |z  d|dz  z  z   t          |dz  z  z   t          ¦  «         d	S )zi
    Creates the look-up table. For a similar implementation
    see meijerint._create_lookup_table.
    r   rr   c           	      ó¤   •— ‰                      t          | t          ¦  «        g ¦  «                             | t	          ||||¦  «        f¦  «         dS )z2
        Adds a formula in the dictionary
        N)r+  r)  r(  r�   rÂ   )ÚformularÅ   Úargr½   rÄ   Útables        €rG   Úaddz_create_table.<locals>.add¢
  sY   ø€ ð 	×Ò� ­#Ñ.Ô.°Ñ3Ô3×:Ò:¸GÝ˜k¨3°°BÑ7Ô7ð<9ñ 	:ô 	:ð 	:ð 	:ð 	:rI   r\   r­   r8   éþÿÿÿr  N)r   rr   )rÑ   r(  rY   r   r   r   r   r"   r   r   r#   r$   r   r   r   r!   r   r    )r‹  rD   rŒ  rÔ   rÖ   r\   s   `     rG   r3  r3  œ
  sÚ  ø€ ð:ð :ð :ð :ð :ð :ð 	×Ò�SÑ!Ô!€AÝ! ! TÑ*Ô*�E€A€rð €C��C‰Œ�"�a‘%˜!‘)�S ! a¨ VÑ,Ô,Ð,Ø€C��C‰Œ�"�a‘%˜!‘)�S ! a¨ VÑ,Ô,Ð,Ø€C��C‰Œ�"�q‘&�#˜q !Ñ$Ô$Ð$Ø€C��C‰Œ�"•s˜2˜q™5‘y‘.¥# q¨1¨a¨&Ñ1Ô1Ð1à€C��C‰Œ�!•C‘%˜‘(˜R ™UÑ"¥C¨¨Q°µ$µr±(´(±
¨OÑ<Ô<Ð<Ø€C��S‰	Œ	�1•S‘5˜‘8˜b !™eÑ#¥S¨!¨a°µD½±H´H±Ð-=Ñ>Ô>Ð>Ø€C��S‰	Œ	�2•c‘6˜"‘9˜r 1™uÑ$¥c¨1¨q°!µD½±H´H±*¨oÑ>Ô>Ð>à€C��S‰	Œ	�2�q‘5˜1‘9�c 1 q¨! fÑ-Ô-Ð-Ø€C��S‰	Œ	�2�q‘5˜1‘9�c 1 q¨! fÑ-Ô-Ð-à€C��S‰	Œ	•3˜˜2™‘:¥ B¨¡E¡	Ñ)­3Ñ/Ô/Ð/à€C��3‰Œ•�R‘˜!˜B ™E™'Ñ!¥C¨¨A©¡IÑ-­sÑ3Ô3Ð3Ø€C��3‰Œ•�R‘˜!˜B ™E™'Ñ!¥C¨¨A©¡IÑ-­sÑ3Ô3Ð3à€C��C‰Œ•3�$�r‘'˜A˜b !™e™GÑ#¥c¨"¨a©%¡iÑ/µÑ5Ô5Ð5Ð5Ð5rI   c                 ól  — g }t          |¦  «        D ]¡}|                      ||¦  «        }|r|                     ¦   «         }|r&t          |t          ¦  «        rt          | ||¦  «        }|j        du st          |t          ¦  «        r d S |                     |¦  «         |                      |¦  «        } Œ¢|S )NF)	r“   r  r  rb   r   r3   r·  r�   rŽ   )	r  rx   r½   r   r  r  rÄ   rÖ   Úvals	            rG   r  r  Á
  s¶   € Ø	€BÝ�5‰\Œ\ð 	ð 	ˆØ�iŠi˜˜2ÑÔˆØð 	Ø—)’)‘+”+ˆCØð 	%� C­Ñ-Ô-ð 	%Ý˜˜a Ñ$Ô$ˆCØŒ=˜EÐ!Ð!¥Z°µSÑ%9Ô%9Ð!Ø�4�4Ø
�	Š	�#‰ŒˆØ�yŠy˜‰|Œ|ˆˆØ€IrI   )r   F)Nr   NNNTr  r  )FT)trp   Ú
sympy.corer   r   r   Úsympy.core.numbersr   r   r   r	   r
   r   r   r   Úsympy.core.singletonr   Úsympy.core.sortingr   Úsympy.core.symbolr   r   Úsympy.core.sympifyr   Ú(sympy.functions.combinatorial.factorialsr   r   r   Ú&sympy.functions.elementary.exponentialr   r   r   Ú%sympy.functions.elementary.hyperbolicr   r   Ú(sympy.functions.elementary.miscellaneousr   Ú(sympy.functions.elementary.trigonometricr   r   r   Ú'sympy.functions.special.error_functionsr   r    r!   r"   r#   r$   Ú'sympy.functions.special.gamma_functionsr%   Úsympy.functions.special.hyperr&   r'   Úsympy.integralsr(   Úsympy.matricesr)   Úsympy.polys.ringsr*   Úsympy.polys.fieldsr+   Úsympy.polys.domainsr,   r-   Úsympy.polys.polyclassesr.   Úsympy.polys.polyrootsr/   Úsympy.polys.polytoolsr0   Úsympy.polys.matricesr1   Úsympy.printingr2   Úsympy.series.limitsr3   Úsympy.series.orderr4   Úsympy.simplify.hyperexpandr5   Úsympy.simplify.simplifyr6   Úsympy.solvers.solversr7   rÕ  r9   r:   r;   Úholonomicerrorsr<   r=   r>   r?   rR   rY   rT   r^   rÂ   r"  r'  r(  r1  r2  Úsympy.integrals.meijerintr)  r  rõ   r-  r  r�   rö   rN  rÐ  r0  r5  r3  r  rr   rI   rG   ú<module>r¯     sU  ððð ð
 %Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ð"ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "à "Ð "Ð "Ð "Ð "Ð "Ø &Ð &Ð &Ð &Ð &Ð &Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø &Ð &Ð &Ð &Ð &Ð &Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø %Ð %Ð %Ð %Ð %Ð %Ø !Ð !Ð !Ð !Ð !Ð !Ø )Ð )Ð )Ð )Ð )Ð )Ø *Ð *Ð *Ð *Ð *Ð *Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø &Ð &Ð &Ð &Ð &Ð &Ø -Ð -Ð -Ð -Ð -Ð -Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø $Ð $Ð $Ð $Ð $Ð $Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø -Ð -Ð -Ð -Ð -Ð -Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'à RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rð)ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ðð ð ð#,ð #,ð #,ðLA3ð A3ð A3ð A3ð A3ñ A3ô A3ð A3ðHSGð SGð SGð SGð SGñ SGô SGð SGðlXð Xð Xð Xð Xñ Xô Xð Xðv4<4ð <4ð <4ð <4ð~  5°4Àð @4ð @4ð @4ð @4ðF €eˆE�l„l€Ø€ØÐ Ø -Ð -Ð -Ð -Ð -Ð -ð_:ð _:ð _:ð _:ðH67ð 67ð 67ð 67ðrð ð ð(-ð -ð -ð:ð ð ð&ð &ð &ðR	7ð 	7ð 	7ðð ð ð ð> '(¨D¸ÀbÐSWð g-ð g-ð g-ð g-ðT *.°bð +ð +ð +ð +ð\ !#ð "6ð "6ð "6ð "6ðJð ð ð ð ð rI   