
    \h@'                         S r SSKJrJr  SSKJr  SSKJr  SSKJ	r	J
r
  SSKJrJrJr  SSKJr  SSKJrJr  SS	KJrJr  SS
KJrJrJr  SSKJr  SSKJr  S rS r S r!S r"S r#g)aO  
This module contains the implementation of the 2nd_hypergeometric hint for
dsolve. This is an incomplete implementation of the algorithm described in [1].
The algorithm solves 2nd order linear ODEs of the form

.. math:: y'' + A(x) y' + B(x) y = 0\text{,}

where `A` and `B` are rational functions. The algorithm should find any
solution of the form

.. math:: y = P(x) _pF_q(..; ..;\frac{\alpha x^k + \beta}{\gamma x^k + \delta})\text{,}

where pFq is any of 2F1, 1F1 or 0F1 and `P` is an "arbitrary function".
Currently only the 2F1 case is implemented in SymPy but the other cases are
described in the paper and could be implemented in future (contributions
welcome!).

References
==========

.. [1] L. Chan, E.S. Cheb-Terrab, Non-Liouvillian solutions for second order
       linear ODEs, (2004).
       https://arxiv.org/abs/math-ph/0402063
    )SPow)expand)Eq)SymbolWild)expsqrthyper)Integral)rootsgcd)cancelfactor)collectsimplify
logcombine)	powdenest)get_numbered_constantsc           	      t   UR                   S   nUR                  U5      n[        SXR                  U5      UR                  US5      /S9n[        SXR                  U5      UR                  US5      /S9n[        SXR                  U5      UR                  US5      /S9nXAR                  US5      -  XS-  -   Xa-  -   n[        U UR                  US5      UR                  U5      U/5      R	                  U5      nU(       a~  [        S UR                  5        5       5      (       dY  U R                  5       u  p[        U	5      n [        XR                  US5      UR                  U5      U/5      R	                  U5      nU(       a/  X   S:w  a'  [        X   X   -  5      n[        X   X   -  5      nX/$ / $ )Nr   a3   )excludeb3c3c              3   @   #    U  H  oR                  5       v   M     g 7f)N)is_polynomial).0vals     X/var/www/auris/envauris/lib/python3.13/site-packages/sympy/solvers/ode/hypergeometric.py	<genexpr>+match_2nd_hypergeometric.<locals>.<genexpr>1   s     =*3$$&&*s   )
argsdiffr   r   matchallvaluesas_numer_denomr   r   )eqfuncxdfr   r   r   deqrndABs                r    match_2nd_hypergeometricr3   '   su   		!A	1B	dT99Q<1aA	BB	dT99Q<1aA	BB	dT99Q<1aA	BB
ii1o

&
0C	1a$))A,-	//4uSz =!((*===$$&DABYYq!_diilDABHHMAQUAX15;15;v	    c                 t  ^^ UR                   S   m[        [        U R                  T5      S-  U S-  S-  -   U-
  5      5      n[        [        TS-  U-  [	        S5      S-  -   5      5      nUR                  5       u  pV[        [        U5      5      n[        [        U5      5      nUU4S jmT" U45      nT" U45      nUR                  U5        Un	[        U	5      n
[        [        [        XJS-  -  [	        S5      S-  -
  TU
-  S-  -  5      5      SS9n[        [        [        UR                  TT[	        S5      U
-  -  5      SS95      5      nUR                  T5      (       d  g UR                  5       u  pV[        T" U45      5      nUR                   n/ n/ nU H  nUR                  T5      (       d  M  [        U[         5      (       aj  UR#                  UR%                  5       S   5        UR#                  ['        [)        UR%                  5       S   T5      R+                  5       5      S   5        M  UR#                  UR%                  5       S   5        UR#                  ['        [)        UT5      R+                  5       5      S   5        M     UR-                  5         [/        X5      S:X  a  XUSS	.$ g )
Nr   r         c                   > S1nU  H  nUR                  T5      (       d  M  [        U[        5      (       a;  UR                  5       S   T:X  a$  UR	                  UR                  5       S   5        Mk  UT:X  a$  UR	                  UR                  5       S   5        M  UR                  T" UR                  5      5        M     U$ )Nr   r7   )has
isinstancer   as_base_expaddupdater#   )num_powr   _power_countingr+   s      r    r@   3equivalence_hypergeometric.<locals>._power_countingN   s    sCwwqzzc3''COO,=a,@A,EHHS__.q12AXHHS__.q12KK 9:  r4   Tforce2F1)I0k
sing_pointtype)r#   r   r   r$   r   r(   r   r   r=   r   r   subsis_rational_functionmaxr9   r:   r   appendr;   listr   keyssortequivalence)r1   r2   r*   I1J1r>   dempow_numpow_demr?   rF   rE   max_num_powdem_argsrG   dem_powargr@   r+   s                    @@r    equivalence_hypergeometricrZ   >   sV    			!A 
qvvay{QT!V+a/0	1B 
q!tBw1a'(	)B  "HC
F3K
 C
F3K
 C
 sg&Gsg&GNN7DD	A 
8FR1W!Q$6!Q$#CDET	RB	yA!QK!8EF	GB ""1%%  "HCosg./KxxHJG771::#s##s034!!$uS__->q-A1'E'J'J'L"Ma"PQ s034!!$uS!}'9'9';"<Q"?@  LLN ;(E1ZFFr4   c           
         UR                   S   n[        S5      n[        S5      n[        S5      n[        S5      n[        S5      n	[        S5      n
[        S5      n[        S	5      n[        S
5      n[        S5      nXV-
  S-   XV-
  S-
  -  US-  -  SSU-
  U-
  U-  SU-  U-  -   -  U-  -   XwS-
  -  -   SUS-  -  US-
  S-  -  -  nUSS/:w  GaP  / nU* U-  U* U-  X-
  X-
  -  /n[        S5       HV  nU[        U5      :  a#  UR	                  [        UU   UU   5      5        M5  UR	                  [        SUU   -  S5      5        MX     U* US   -  nU* US   -  nUn[        U5      S:X  a  UUS   U-  -   US   US   -
  -  nX-  U-   X-  U-   -  nUR                  UU5      nUR                  UU5      nUR                  UU5      n[        U5      nXU-  -
  X-  U-
  -  n[        UR                  UU5      R                  UU5      R                  UU5      5      nOUnUnU R                  XH5      n XR                  U5      S-  -  n [        U 5      n US-  SUSSS0nUR                  5       u  nnUS-  U	S-  S-
  USSU
-
  -  U-  X-   X-
  -  -   SXwS-
  -  0nUR                  [        [        [        U U-  5      5      US-  U/SS95        / nUS-  US4 H$  nUR	                  [        UU   UU   5      5        M&     S[        [        SUS   R                  -   5      5      -
  nUR!                  ["        5      (       d!  [%        ['        [)        US   U5      5      5      n[        [        US   R                  S-   5      5      nU[        [        US-  US-  -   US   R                  -   SU-  -
  5      5      -
  nUU-   S-  nUU-
  S-  n [+        U5      [+        U 5      [+        U5      UUSS.n!U!$ )Nr   abctsr.   alphabetagammadeltar7   r   r6      F)evaluaterD   )r\   r]   r^   rF   mobiusrH   )r#   r   rangelenrL   r   rI   r   r$   r   r(   r=   r   r   r
   lhsr9   r   minrM   r   r   )"IrF   rG   r*   r+   r\   r]   r^   r_   r`   r.   ra   rb   rc   rd   rE   eqssing_eqsi_beta_delta_gammamobdict_II0_numI0_demdict_I0key_c_s_r_a_brns"                                     r    match_2nd_2F1_hypergeometricr      s   		!AS	AS	AS	AS	AS	AS	AME<DMEME3q513q5/!Q$
QqSUAI!A$5!6q!8
81c7
BQq!tVQqSSTH_	UBaVE%K%
U[/IJqAZ 

2hqk:a=9:

2amQ/0	  z!}$
1%z?ajmE11JqMJqM4QRFw~%0hhtU#hhuf%hhuf%Sk!G^ego.QVVD%(..uf=CCE6RS 	
qA	66!9q.Aq	Ad1a1QF&&(NFF !tAqD1HaAaCacAC[!81Q!WEG
MM'&&!12QT1INO
C 1a|

2fSk73<01  
VD3q6::&'	'B66&>>eCFA&'(	SVZZ!^$	%B	fT"a%"a%-#a&**4qt;<=	=B
r'1B
r'1Brl(2,APS\a	bBIr4   c           	          U S:X  a  USS// SQ4;   a  g g U S:X  a  U/ SQ/ SQSS/SS/4;   a  g g U S:X  a  U/ SQSS// SQSS/S/SS/SS/4;   a  gg )Nr   )r   r   r   rD   r7   )r7   r   r   r   )r7   r7   r    )rV   rX   s     r    rP   rP      s     a1vy)) *  
	y)aVaV<< = 	 
	y1a&)aVaS1a&1a&QQr4   c                    UR                   S   nSSKJn  SSKJn  [        U SS9u  pgUS   nUS   n	US   n
US	   nS nU
R                  S
:X  a=  U[        X/U
/U5      -  U[        X-
  S-   X-
  S-   /SU
-
  /U5      -  USU
-
  -  -  -   nOU
S:X  au  [        [        [        X-   S-   * U-  U
-   US-  U-
  -  U5      5      U" [        X/U
/U5      5      S-  -  U5      [        X/U
/U5      -  nU[        X/U
/U5      -  X}-  -   nOeX-
  U	-
  R                  S
:X  aP  U[        X/SU-   U	-   U
-
  /SU-
  5      -  U[        X-
  X-
  /SU
-   U-
  U	-
  /SU-
  5      -  SU-
  X-
  U	-
  -  -  -   nU(       Ga  US   n[        SUR                  U5      -  5      nX-   S-   U-  U
-
  R                  X>5      U-  nU" UUS-  U-
  R                  X>5      UR                  U5      U-  -  -   5      nU" US-  U-
  R                  X>5      US-  -  5      n[        [        [        [        USU-  -  5      U5      SS95      nUR                  X2S   5      nUR                  X3US   -  5      nUR                  X3US   -  5      nUR                  (       dO  [        US-  U5      n[        [        USS95      n[        UU-  X2S   * S-   S-  -  -  5      U-  n[!        X5      nU$ [        UX2S   * S-   S-  -  -  5      U-  n[!        X5      nU$ )Nr   )hyperexpand)r   r   )r>   r\   r]   r^   r1   Fr7   rg   TrB   rF   )r#   sympy.simplify.hyperexpandr   sympy.polys.polytoolsr   r   
is_integerr   r   r	   r   r$   rI   r   r   is_zeror   )r)   r*   match_objectr+   r   r   C0C1r\   r]   r^   r1   soly2rI   dtdx_B_Aee1s                       r    get_sol_2F1_hypergeometricr      sr   		!A6,#BA.FBSASASASA
C||uvsA&&E13q5!#a%.1Q3%,K)KAPQRSPSH)TT	
ac(ac!eHQJNQT!V#<a@A;uVWU[^_]`bcOdCeghChiklmnsuvtz}~|  BC  oD  DvsA&&.
#a%		u	$v!Aay!A#..E13*qs1uQwiQRSTQT4U1UWXYZWZ^_^abc^cVd1dd
H%499Q<()uqy!ma%%a.t3B1a47..1DIIaL4EFFGQTAXOOA,dAg67
8F2qt9$5q9FGhhqx01hhq\#../FF1c**+yy!A#q!BZ$/0B!B$3&7%7%91$< ==>sBCT-CJaC002A5667;mJr4   N)$__doc__
sympy.corer   r   sympy.core.functionr   sympy.core.relationalr   sympy.core.symbolr   r   sympy.functionsr	   r
   r   sympy.integralsr   sympy.polysr   r   r   r   r   sympy.simplifyr   r   r   sympy.simplify.powsimpr   sympy.solvers.ode.oder   r3   rZ   r   rP   r   r   r4   r    <module>r      sP   2  & $ * , , $ " 0 8 8 , 8.FRHV*)r4   