ó
    ‹*£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     Ú]/home/mande/repo/quber/.venv/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Ü	ˆd˜T§9¡9¨Q£<°·±¸1¸a³ÐAÑ	B€BÜ	ˆd˜T§9¡9¨Q£<°·±¸1¸a³ÐAÑ	B€BÜ	ˆd˜T§9¡9¨Q£<°·±¸1¸a³ÐAÑ	B€BØ
�i‰i˜˜1‹oÑ
 ¡Ñ
&¨©Ñ
0€CÜ�Ø	�‰�1�a‹˜$Ÿ)™) A›,¨Ð-ó	/ß/4©u°S«zð æÜÑ=°!·(±(´*Ó=×=Ñ=Ø×$Ñ$Ó&‰DˆAÜ˜“ˆBÜ˜ŸY™Y q¨!›_¨d¯i©i¸«l¸DÐAÓB×HÑHÈÓMˆAæˆQ‰U�A‹XÜ�1‘5˜™‘;ÓˆÜ�1‘5˜™‘;ÓˆØˆ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         [/        XÏ5      S:X  a  XºU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Ø�w‰w�q�z‹zÜ˜c¤3×'Ñ'¨C¯O©OÓ,=¸aÑ,@ÀAÓ,EØ—H‘H˜SŸ_™_Ó.¨qÑ1Ö2Ø˜A“XØ—H‘H˜SŸ_™_Ó.¨qÑ1Ö2à—K‘K¡°·±Ó 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ô 
”�q—v‘v˜a“y ‘{ Q¨¡T¨!¡VÑ+¨aÑ/Ó0Ó	1€Bô 
”�q˜!‘t˜B‘w¤ 1£ a¡Ñ'Ó(Ó	)€BØ× Ñ Ó"�H€CÜ
”F˜3“KÓ
 €CÜ
”F˜3“KÓ
 €Cö
ñ ˜s˜gÓ&€GÙ˜s˜gÓ&€GØ‡N�N�7Ôà€DÜˆD‹	€Aô 
”8œF R¨1©¡W´°!³°Q±Ñ$6¸!¸Q¹$À¹Ñ#CÓDÓEÈTÑ	R€BÜ	””y §¡¨¨A´°!³°Q±©KÓ!8ÀÑEÓFÓ	G€Bð ×"Ñ" 1×%Ñ%Øà× Ñ Ó"�H€Cä‘o s gÓ.Ó/€KØ�x‰x€HØ€JØ€GãˆØ�7‰7�1�:‹:Ü˜#œs×#Ñ#à—‘˜sŸ™Ó0°Ñ3Ô4Ø×!Ñ!¤$¤u¨S¯_©_Ó->¸qÑ-AÀ1Ó'E×'JÑ'JÓ'LÓ"MÈaÑ"PÖQð —‘˜sŸ™Ó0°Ñ3Ô4Ø×!Ñ!¤$¤u¨S°!£}×'9Ñ'9Ó';Ó"<¸QÑ"?Ö@ñ ð ‡L�L„Nô �;Ó(¨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XÎU-  -
  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Ü�‹M€EÜ�‹<€DÜ�‹M€EÜ�‹M€Eà‰3ˆq‰5�1‘3�q‘5‰/˜!˜Q™$Ñ
  Q q¡S¨¡U¨A¡I°°!±°A±Ñ$5Ñ!6°qÑ!8Ñ
8¸1À¹c¹7Ñ
BÀQÀqÈ!ÁtÁVÈQÈqÉSÐSTÉHÁ_Ñ	U€BØ�a˜�VÔàˆØ�E˜%‘K % ¨¡°±
¸U¹[Ñ/IÐJˆä�q–ˆAØ”�Z“Ó Ø—
‘
œ2˜h q™k¨:°a©=Ó9Ö:à—
‘
œ2˜a ¨¡™m¨QÓ/Ö0ñ	 ð ��z !‘}Ñ$ˆØ�˜
 1™Ñ%ˆØˆÜˆz‹?˜aÓØ˜j¨™m¨EÑ1Ñ1°J¸q±MÀJÈqÁMÑ4QÑRˆFØ‰w˜‰~ ¡¨%¡Ñ0ˆØ�h‰h�t˜UÓ#ˆØ�h‰h�u˜fÓ%ˆØ�h‰h�u˜fÓ%ˆÜ�S‹kˆØ˜!‘G‰^˜e™g¨™oÑ.ˆÜ�Q—V‘V˜D %Ó(×.Ñ.¨u°fÓ=×CÑCÀEÈ6ÓRÓS‰àˆØˆð 	
�‰ˆq‹€AØ	�6‰6�!‹9�q‰.Ñ€AÜˆq‹	€AØ�‰d�1�a˜˜1˜QÐ€FØ×&Ñ&Ó(�N€FˆFð �!‰t�A�q‘D˜1‘H˜a  A a¡C¡¨¡¨a©c°A±C©[Ñ!8¸1¸QÀ!Á¹WÐE€Gà
‡M�M”'œ&¤¨¨&©Ó!1Ó2°Q¸±T¸1°IÈÑNÔOØ
€Cð �1‘�a˜‹|ˆØ�
‰
”2�f˜S‘k 7¨3¡<Ó0Ö1ñ ð 
ŒV”D˜˜3˜q™6Ÿ:™:™Ó&Ó'Ñ	'€BØ�6‰6”&�>‰>Ü””e˜C ™F AÓ&Ó'Ó(ˆÜ	”�S˜‘V—Z‘Z !‘^Ó$Ó	%€BØ	Œf”T˜"˜a™% " a¡%™-¨#¨a©&¯*©*Ñ4°q¸±tÑ;Ó<Ó=Ñ	=€BØ
ˆr‰'�1‰€BØ
ˆr‰'�1‰€Bä�r‹l¤¨£´(¸2³,ÀAÐPSÐ\aÑ	b€BØ€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ÓØ˜˜1�všyÐ)Ó)Øð *ð ð 
˜Ó	Ø’y¢)¨a°¨V°a¸°VÐ<Ó<Øð =ð ð	 
˜Ó	Ø’y 1 a &ª)°a¸°V¸a¸SÀ1ÀaÀ&È1ÈaÈ&Ð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OàU
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Ý,Ü# B¨AÑ.�F€BØ�SÑ€AØ�SÑ€AØ�SÑ€AØ�SÑ€Aà
€Cà‡|�|�uÓØ”˜�v ˜s AÓ&Ñ&¨¬E°1±3°q±5¸!¹#¸a¹%°.À1ÀQÁ3À%ÈÓ,KÑ)KÈAÐPQÐRSÑPSÉHÑ)TÑT‰Ø	
ˆa‹Ü”cœ( a¡c¨!¡e H¨Q¡J°¡N°Q¸±T¸!±VÑ#<¸aÓ@ÓAÁ;ÌuÐVWÐU[Ð^_Ð]`ÐbcÓOdÓCeÐghÑChÑiÐklÓmÔnsÐuvÐtzÐ}~Ð|ð  BCó  oDñ  DˆØ”˜�v ˜s AÓ&Ñ&¨©Ñ.‰Ø
‰#ˆa‰%×	Ñ	˜uÓ	$Ø”˜�v  !¡ A¡ a¡˜y¨!¨A©#Ó.Ñ.°´E¸1¹3ÀÁ¸*ÀqÈÁsÈ1ÁuÈQÁwÀiÐQRÐSTÑQTÓ4UÑ1UÐWXÐYZÑWZÐ^_Ñ^aÐbcÑ^cÑVdÑ1dÑdˆç
à˜HÑ%ˆÜ˜˜4Ÿ9™9 Q›<Ñ(Ó)ˆØ‰u�q‰y˜!‰m˜aÑ×%Ñ% aÓ.¨tÑ3ˆÙ�B˜1˜a™4 ™7Ÿ.™.¨Ó1°D·I±I¸a³LÀÑ4EÑFÑFÓGˆÙ�Q˜‘T˜A‘X—O‘O AÓ,¨d°A©gÑ6Ó7ˆÜ”
œ8¤F¨2¨q°©t©9Ó$5°qÓ9ÀÑFÓGˆØ�h‰h�q xÑ0Ó1ˆØ�h‰h�q˜\¨#Ñ.Ñ.Ó/ˆØ�F‰F�1˜ cÑ*Ñ*Ó+ˆà�y�yÜ˜!˜A™#˜qÓ!ˆBÜ”Z ¨$Ñ/Ó0ˆBÜ˜!˜B™$ °3Ñ&7Ð%7¸Ñ%9¸1Ñ$<Ñ =Ñ=Ó>¸sÑBˆCÜ�T“-ˆCØˆJä�a˜¨CÑ0Ð0°Ñ2°AÑ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   