o
    *ήc[                      @   sD  d dl Z d dlmZ edZesdZe jdd dk rdZd dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ d d	lmZ d d
lmZ ed\ZZZZ Z!Z"Z#Z$Z%Z&Z'Z(Z)dd Z*dd Z+dd Z,dd Z-dd Z.dd Z/dd Z0dd Z1dd Z2dd Z3d d! Z4d"d# Z5d$d% Z6d&d' Z7d(d) Z8dS )*    N)import_modulematchpyT   )      )rubi_rule_parserget_default_valuesadd_wildcardsparse_freeqseperate_freeqget_free_symbolsdivide_constraintgenerate_sympy_from_parsedsetWCreplaceWithrubi_printerset_matchq_in_constraintcontains_diff_return_typeprocess_return_typeextract_set)Symbolsymbols)sympify)Notza b c d e j m n p q x Pq Pqqc                  C   sZ   d} d}t || \}}d}d}t| t| ksJ t| t| ks+J d S )NzT
from matchpy import Operation, CommutativeOperation
    rubi = ManyToOneReplacer()
zList[RuleDelayed[HoldPattern[Int[Power[Pattern[x,Blank[]],Optional[Pattern[m,Blank[]]]],Pattern[x,Blank[Symbol]]]],Condition[Times[Power[x,Plus[m,1]],Power[Plus[m,1],-1]],NonzeroQ[Plus[m,1]]]]]ao  
from matchpy import Operation, CommutativeOperation
    rubi = ManyToOneReplacer()
    from sympy.integrals.rubi.constraints import cons1

    pattern1 = Pattern(Integral(x_**WC('m', S(1)), x_), cons1)
    def replacement1(m, x):
        rubi.append(1)
        return x**(m + S(1))/(m + S(1))
    rule1 = ReplacementRule(pattern1, replacement1)
    return [rule1, ]
z
from matchpy import Operation, CommutativeOperation

    def cons_f1(m):
        return NonzeroQ(m + S(1))

    cons1 = CustomConstraint(cons_f1)
)r   lenstrip)headerfullformrules
constraintresult_ruleresult_constraint r"   W/tmp/pip-target-vg8gfxp4/lib/python/sympy/integrals/rubi/parsetools/tests/test_parse.pytest_rubi_rule_parser   s    r$   c               	   C   s   dddddddgggdddd	dgggdd
dggggdddgggdd
ddggg} t | i dddks3J dddd
dggddddggggdd
ddggg} t | i ddiksUJ d S )NIntPowerPlusOptionalPatternaBlankTimesbxmr   r      )r*   r-   )r   sr"   r"   r#   test_get_default_values6   s   N.r3   c                  C   s&   d} t | ddidg dfksJ d S )NzXIntegral(Pow(Pattern(x, Blank), Optional(Pattern(m, Blank))), Pattern(x, Blank(Symbol)))r/   r0   z$Integral(Pow(x_, WC('m', S(1))), x_))r/   r.   r.   )r	   r1   r"   r"   r#   test_add_wildcards<   s   "r4   c                  C   s*   dg ddg} t | ddgdfksJ d S )NFreeQListr*   r-   r.   r*   r-   )r   r1   r"   r"   r#   test_seperate_freeq@   s   r8   c                  C   s2   ddg} d}g d}t | |di g |dksJ d S )Nr*   r-   r.   )r.   r*   r-   r   )z, cons1, cons2z
    def cons_f1(a, x):
        return FreeQ(a, x)

    cons1 = CustomConstraint(cons_f1)

    def cons_f2(b, x):
        return FreeQ(b, x)

    cons2 = CustomConstraint(cons_f2)
r   )r
   )lr.   r   r"   r"   r#   test_parse_freeqD   s   r:   c                  C   s.   dg dg} ddg}t | |g dgksJ d S )NNonzeroQr'   r/   1r/   r.   )r   r2   r   r"   r"   r#   test_get_free_symbolsJ   s   r?   c                  C   s6   dg ddg dgg} t | ddgdi g dksJ d S )	NAnd)r5   r/   r.   r;   r<   r/   r.   r   )z, cons1z^
    def cons_f1(m):
        return NonzeroQ(m + S(1))

    cons1 = CustomConstraint(cons_f1)
r0   )r   r1   r"   r"   r#   test_divide_constraintO   s    rA   c                   C   s   t ddksJ d S )NzIntegral(x_**WC(m, S(1)), x_)zIntegral(x_**WC('m', S(1)), x_))r   r"   r"   r"   r#   
test_setWCS   s   rB   c                  C   s(   t d} g d}t| |ddksJ d S )N"  Module(List(Set(r, Numerator(Rt(a/b, n))), Set(s, Denominator(Rt(a/b, n))), k, u), CompoundExpression(Set(u, Integral((r - s*x*cos(Pi*(2*k - 1)/n))/(r**2 - 2*r*s*x*cos(Pi*(2*k - 1)/n) + s**2*x**2), x)), Dist(2*r/(a*n), _Sum(u, List(k, 1, n/2 - 1/2)), x) + r*Integral(1/(r + s*x), x)/(a*n))))r.   r*   nr-   r0   )a      def With1(x, a, n, b):
        r = Numerator(Rt(a/b, n))
        s = Denominator(Rt(a/b, n))
        k = Symbol('k')
        u = Symbol('u')
        u = Integral((r - s*x*cos(Pi*(S(2)*k + S(-1))/n))/(r**S(2) - S(2)*r*s*x*cos(Pi*(S(2)*k + S(-1))/n) + s**S(2)*x**S(2)), x)
        u = Integral((r - s*x*cos(Pi*(2*k - 1)/n))/(r**2 - 2*r*s*x*cos(Pi*(2*k - 1)/n) + s**2*x**2), x)
        rubi.append(1)
        return Dist(S(2)*r/(a*n), _Sum(u, List(k, S(1), n/S(2) + S(-1)/2)), x) + r*Integral(S(1)/(r + s*x), x)/(a*n) N)r   r   r>   r"   r"   r#   test_replaceWithV   s   rF   c                  C   s   ddddddggdddd	dgggddd
dggdddgggggdgdd
ddggg} t | dddks2J t | dddks<J ddg dd
gddg dg dggdddg dggg} t | dks_J d S )Nr%   r&   r'   r)   r*   r+   r,   r(   r-   r.   rD   -1r   T)wildzInt(Pow(Add(Pattern(a, Blank), Mul(Optional(Pattern(b, Blank)), Pow(Pattern(x, Blank), Pattern(n, Blank)))), S(-1)), Pattern(x, Blank(Symbol))))replace_IntzIntegral(Pow(Add(Pattern(a, Blank), Mul(Optional(Pattern(b, Blank)), Pow(Pattern(x, Blank), Pattern(n, Blank)))), S(-1)), Pattern(x, Blank(Symbol)))r@   r5   r6   PositiveIntegerQ)r'   rD   z-3)r&   2rG   PosQ)r&   r-   rG   znAnd(FreeQ(List(a, b), x), PositiveIntegerQ(Mul(Add(n, S(-3)), Pow(S(2), S(-1)))), PosQ(Mul(a, Pow(b, S(-1))))))r   r1   r"   r"   r#   test_generate_sympy_from_parsed[   s
   P6rM   c                  C   s    t d} tt| dksJ d S )Nr*   zNot(a))r   r   r   )r*   r"   r"   r#   test_rubi_printerc   s   rN   c                   C   s$   t dg dddg dggsJ d S )Nr'   )BinomialDegreeur.   r,   rG   )rO   zr.   )r   r"   r"   r"   r#   test_contains_diff_return_typeh   s   $rR   c               
   C   sh   d} d}t ddddddd	d
dgggdgdd	ddggggdg ddgggd}||ks0|| ks2J d S d S )N)result_matchqa          def _cons_f_1229(g, m):
            return FreeQ(List(g, m), x)
        _cons_1229 = CustomConstraint(_cons_f_1229)
        pat = Pattern(UtilityOperator((x*WC('g', S(1)))**WC('m', S(1)), x), _cons_1229)
        result_matchq = is_match(UtilityOperator(v, x), pat))rS   a          def _cons_f_1229(m, g):
            return FreeQ(List(g, m), x)
        _cons_1229 = CustomConstraint(_cons_f_1229)
        pat = Pattern(UtilityOperator((x*WC('g', S(1)))**WC('m', S(1)), x), _cons_1229)
        result_matchq = is_match(UtilityOperator(v, x), pat)MatchQv	Conditionr&   r,   r(   r)   gr+   r.   r/   r5   )r7   rW   r/   i  )r   )expected	expected1resultr"   r"   r#   test_set_matchq_in_constraintk   s   
r[   c                  C   s&  ddl m}  | d}| d}d}t|g }dtttt d   tt tt t d   t	tt
  ttt   td   tttt  t d   |tt t t	tt
  ttt   t  |ttt	 tt t   tt t d  tttt  t d    ttt   t t df}||ksJ d S )	Nr   )Functionr%   ExpandToSum)z7
        q = Expon(Pq, x)
        Pqq = Coeff(Pq, x, q)a  With(List(Set(Pqq, Coeff(Pq, x, q))), Pqq*c**(n - q + S(-1))*(c*x)**(m - n + q + S(1))*(a*x**j + b*x**n)**(p + S(1))/(b*(m + n*p + q + S(1))) + Int((c*x)**m*(a*x**j + b*x**n)**p*ExpandToSum(Pq - Pqq*a*x**(-n + q)*(m - n + q + S(1))/(b*(m + n*p + q + S(1))) - Pqq*x**q, x), x))z
        Pqq = Coeff(Pq, x, q)r0   T)sympy.core.functionr\   r   PqqcrD   qr.   r/   r*   jr-   pPq)r\   r%   r]   r2   rZ   rX   r"   r"   r#   test_process_return_typer   s   
re   c                  C   s*   t d} tt d}t| g |ksJ d S )NrC   zSet(r, Numerator(Rt(a/b, n))), Set(s, Denominator(Rt(a/b, n))), Set(u, Integral((r - s*x*cos(Pi*(2*k - 1)/n))/(r**2 - 2*r*s*x*cos(Pi*(2*k - 1)/n) + s**2*x**2), x)))r   listr   )r2   rX   r"   r"   r#   test_extract_set}   s   rg   )9syssympy.externalr   r   disabledversion_info%sympy.integrals.rubi.parsetools.parser   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   sympy.core.symbolr   r   sympy.core.sympifyr   sympy.logic.boolalgr   r*   r-   r`   derb   r/   rD   rc   ra   r.   rd   r_   r$   r3   r4   r8   r:   r?   rA   rB   rF   rM   rN   rR   r[   re   rg   r"   r"   r"   r#   <module>   s6    D"