Ë
    7^(h@'  ã                   óÊ   — d Z ddl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mZmZ ddlmZ ddlmZmZ dd	lmZmZ dd
lmZmZmZ ddlmZ ddlmZ d„ Zd„ Z d„ Z!d„ Z"d„ Z#y)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           	      ó‚  — |j                   d   }|j                  |«      }t        d||j                  |«      |j                  |d«      g¬«      }t        d||j                  |«      |j                  |d«      g¬«      }t        d||j                  |«      |j                  |d«      g¬«      }||j                  |d«      z  ||z  z   ||z  z   }t        | |j                  |d«      |j                  |«      |g«      j	                  |«      }|r{t        d„ |j                  «       D «       «      s[| j                  «       \  }	}
t        |	«      } t        | |j                  |d«      |j                  |«      |g«      j	                  |«      }|r4||   dk7  r,t        ||   ||   z  «      }t        ||   ||   z  «      }||gS g S )Nr   Úa3é   )ÚexcludeÚb3Úc3c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­w)N)Úis_polynomial)Ú.0Úvals     ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/solvers/ode/hypergeometric.pyú	<genexpr>z+match_2nd_hypergeometric.<locals>.<genexpr>1   s   è ø€ Ò=¨3�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_hypergeometricr2   '   sŽ  € Ø�	‰	�!‰€AØ	�‰�1‹€BÜ	ˆd˜T 4§9¡9¨Q£<°·±¸1¸a³ÐAÔ	B€BÜ	ˆd˜T 4§9¡9¨Q£<°·±¸1¸a³ÐAÔ	B€BÜ	ˆd˜T 4§9¡9¨Q£<°·±¸1¸a³ÐAÔ	B€BØ
ˆd�i‰i˜˜1‹oÑ
  B¡Ñ
&¨¨D©Ñ
0€CÜ�Ø	�‰�1�a‹˜$Ÿ)™) A›,¨Ð-ó	/ß/4©u°S«zð áÜÑ=°!·(±(³*Ô=Ô=Ø×$Ñ$Ó&‰DˆAˆqÜ˜“ˆBÜ˜˜TŸY™Y q¨!›_¨d¯i©i¸«l¸DÐAÓB×HÑHÈÓMˆAáˆQˆr‰U�AŠXÜ�1�R‘5˜˜2™‘;ÓˆÜ�1�R‘5˜˜2™‘;ÓˆØ�1ˆvˆàˆ	ó    c                 ó`  ‡‡— |j                   d   Št        t        | j                  ‰«      dz  | dz  dz  z   |z
  «      «      }t        t        ‰dz  |z  t	        d«      dz  z   «      «      }|j                  «       \  }}t        t        |«      «      }t        t        |«      «      }ˆˆfd„Š ‰|f«      } ‰|f«      }|j                  |«       |}	t        |	«      }
t        t        t        ||
dz  z  t	        d«      dz  z
  ‰|
z  dz  z  «      «      d¬«      }t        t        t        |j                  ‰‰t	        d«      |
z  z  «      d¬«      «      «      }|j                  ‰«      sy |j                  «       \  }}t         ‰|f«      «      }|j                   }g }g }|D ]ä  }|j                  ‰«      sŒt        |t         «      ri|j#                  |j%                  «       d   «       |j#                  t'        t)        |j%                  «       d   ‰«      j+                  «       «      d   «       ŒŽ|j#                  |j%                  «       d   «       |j#                  t'        t)        |‰«      j+                  «       «      d   «       Œæ |j-                  «        t/        ||«      dk(  r||
|dd	œS y )
Nr   r   é   é   c                 ód  •— dh}| D ]¦  }|j                  ‰«      sŒt        |t        «      r9|j                  «       d   ‰k(  r#|j	                  |j                  «       d   «       Œ^|‰k(  r#|j	                  |j                  «       d   «       Œ†|j                   ‰|j                  «      «       Œ¨ |S )Nr   r6   )ÚhasÚ
isinstancer   Úas_base_expÚaddÚupdater"   )ÚnumÚ_powr   Ú_power_countingr*   s      €€r    r?   z3equivalence_hypergeometric.<locals>._power_countingN   s”   ø€ ØˆsˆØò 	;ˆCØ�w‰w�q�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Õ:ð	;ð ˆr3   T©ÚforceÚ2F1)ÚI0ÚkÚ
sing_pointÚtype)r"   r   r   r#   r   r'   r   r   r<   r   r   ÚsubsÚis_rational_functionÚmaxr8   r9   r   Úappendr:   Úlistr   ÚkeysÚsortÚequivalence)r0   r1   r)   ÚI1ÚJ1r=   ÚdemÚpow_numÚpow_demr>   rD   rC   Úmax_num_powÚdem_argsrE   Údem_powÚargr?   r*   s                    @@r    Úequivalence_hypergeometricrX   >   s_  ù€ ð 	�	‰	�!‰€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àò 	AˆØ�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Ñ"?Õ@ð	Að ‡L�L„Nô �; Ó(¨EÒ1Ø˜Q¨ZÀÑFÐFàr3   c           
      óô  — |j                   d   }t        d«      }t        d«      }t        d«      }t        d«      }t        d«      }	t        d«      }
t        d«      }t        d	«      }t        d
«      }t        d«      }||z
  dz   ||z
  dz
  z  |dz  z  dd|z
  |z
  |z  d|z  |z  z   z  |z  z   ||dz
  z  z   d|dz  z  |dz
  dz  z  z  }|ddgk7  �rQg }| |z  | |z  ||z
  ||z
  z  g}t        d«      D ]S  }|t        |«      k  r"|j	                  t        ||   ||   «      «       Œ3|j	                  t        d||   z  d«      «       ŒU | |d   z  }| |d   z  }|}t        |«      dk(  r||d   |z  z   |d   |d   z
  z  }||z  |z   ||z  |z   z  }|j                  ||«      }|j                  ||«      }|j                  ||«      }t        |«      }|||z  z
  ||z  |z
  z  }t        |j                  ||«      j                  ||«      j                  ||«      «      }n|}|}| j                  ||«      } | |j                  |«      dz  z  } t        | «      } |dz  d|dddi}|j                  «       \  }}|dz  |	dz  dz
  |dd|
z
  z  |z  |
|	z   |
|	z
  z  z   d||dz
  z  i}|j                  t        t        t        | |z  «      «      |dz  |gd¬«      «       g }|dz  |dfD ]#  }|j	                  t        ||   ||   «      «       Œ% dt        t        d|d   j                  z   «      «      z
  }|j!                  t"        «      s!t%        t'        t)        |d   |«      «      «      }t        t        |d   j                  dz   «      «      }|t        t        |dz  |dz  z   |d   j                  z   d|z  z
  «      «      z
  }||z   dz  }||z
  dz  } t+        |«      t+        | «      t+        |«      ||ddœ}!|!S )Nr   ÚaÚbÚcÚtÚsr-   ÚalphaÚbetaÚgammaÚdeltar6   r   r5   é   F)ÚevaluaterB   )rZ   r[   r\   rD   ÚmobiusrF   )r"   r   ÚrangeÚlenrJ   r   rG   r   r#   r   r'   r<   r   r   r
   Úlhsr8   r   ÚminrK   r   r   )"ÚIrD   rE   r)   r*   rZ   r[   r\   r]   r^   r-   r_   r`   ra   rb   rC   Ú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àˆQ‰3ˆq‰5�1�Q‘3�q‘5‰/˜!˜Q™$Ñ
  Q q¡S¨¡U¨A¡I°°!±°A±Ñ$5Ñ!6°qÑ!8Ñ
8¸1¸aÀ¹c¹7Ñ
BÀQÀqÈ!ÁtÁVÈQÈqÉSÐSTÉHÁ_Ñ	U€BØ�a˜�VÓàˆØ�E˜%‘K % ¨¡°°d±
¸UÀ5¹[Ñ/IÐJˆä�q“ò 	1ˆAØ”�Z“Ò Ø—
‘
œ2˜h q™k¨:°a©=Ó9Õ:à—
‘
œ2˜a ¨¡™m¨QÓ/Õ0ð		1ð ��z !‘}Ñ$ˆØ�˜
 1™Ñ%ˆØˆÜˆz‹?˜aÒØ˜j¨™m¨EÑ1Ñ1°J¸q±MÀJÈqÁMÑ4QÑRˆFØ�Q‰w˜‰~  a¡¨%¡Ñ0ˆØ�h‰h�t˜UÓ#ˆØ�h‰h�u˜fÓ%ˆØ�h‰h�u˜fÓ%ˆÜ�S‹kˆØ�E˜!‘G‰^˜e A™g¨™oÑ.ˆÜ�Q—V‘V˜D %Ó(×.Ñ.¨u°fÓ=×CÑCÀEÈ6ÓRÓS‰àˆØˆð 	
�‰ˆq�!‹€AØ	ˆ1�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°a±C©[Ñ!8¸1¸QÀÀ!Á¹WÐE€Gà
‡M�M”'œ&¤¨¨&©Ó!1Ó2°Q¸±T¸1°IÈÔNÔOØ
€Cð �1‘�a˜ˆ|ò 2ˆØ�
‰
”2�f˜S‘k 7¨3¡<Ó0Õ1ð2ð 
Œ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Ø€Ir3   c           	      ó�   — | dk(  r|ddgg d¢fv ryy | dk(  r|g d¢g d¢ddgddgfv ryy | dk(  r|g d¢ddgg d¢ddgdgddgddgfv ryy )Nr   )r   r   r   rB   r6   )r6   r   r   r   )r6   r6   r   © )rT   rV   s     r    rN   rN   Ò   s‰   € ð �aÒØ˜˜1�všyÐ)Ñ)Øð ð 
˜Ò	Ø’y¢)¨a°¨V°a¸°VÐ<Ñ<Øð
 ð	 
˜Ò	Ø’y 1 a &ª)°a¸°V¸a¸SÀ1ÀaÀ&È1ÈaÈ&ÐQÑQØàr3   c                 ó2  — |j                   d   }ddlm} ddlm} t        | d¬«      \  }}|d   }|d   }	|d   }
|d	   }d }|
j                  d
k(  r@|t        ||	g|
g|«      z  |t        ||
z
  dz   |	|
z
  dz   gd|
z
  g|«      z  |d|
z
  z  z  z   }nè|
dk(  rzt        t        t        ||	z   dz    |z  |
z   |dz  |z
  z  |«      «       |t        ||	g|
g|«      «      dz  z  |«      t        ||	g|
g|«      z  }|t        ||	g|
g|«      z  ||z  z   }ni|
|z
  |	z
  j                  d
k(  rT|t        ||	gd|z   |	z   |
z
  gd|z
  «      z  |t        |
|z
  |
|	z
  gd|
z   |z
  |	z
  gd|z
  «      z  d|z
  |
|z
  |	z
  z  z  z   }|�r›|d   }t        d|j                  |«      z  «      }||	z   dz   |z  |
z
  j                  ||«      |z  } |||dz  |z
  j                  ||«      |j                  |«      |z  z  z   «      } ||dz  |z
  j                  ||«      |dz  z  «      }t        t        t        t        |d|z  z  «      |«      d¬«      «      }|j                  ||d   «      }|j                  |||d   z  «      }|j                  |||d   z  «      }|j                  sTt        |dz  |«      }t        t        |d¬«      «      }t        ||z  ||d    dz   dz  z  z  «      |z  }t!        ||«      }|S t        |||d    dz   dz  z  z  «      |z  }t!        ||«      }|S )Nr   )Úhyperexpand)r   r   )r=   rZ   r[   r\   r0   Fr6   re   Tr@   rD   )r"   Úsympy.simplify.hyperexpandr�   Úsympy.polys.polytoolsr   r   Ú
is_integerr   r   r	   r   r#   rG   r   r   Úis_zeror   )r(   r)   Úmatch_objectr*   r�   r   ÚC0ÚC1rZ   r[   r\   r0   ÚsolÚy2rG   ÚdtdxÚ_BÚ_AÚeÚe1s                       r    Úget_sol_2F1_hypergeometricr�   ç   s§  € Ø�	‰	�!‰€AÝ6Ý,Ü# B¨AÔ.�F€BˆØ�SÑ€AØ�SÑ€AØ�SÑ€AØ�SÑ€Aà
€Cà‡|�|�uÒØ”˜˜1�v ˜s AÓ&Ñ&¨¬E°1°Q±3°q±5¸!¸A¹#¸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ÐYZÐU[Ð^_Ð]`ÐbcÓOdÓCeÐghÑChÑiÐklÓmÔnsÐuvÐxyÐtzÐ}~Ð|ð  BCó  oDñ  DˆØ”˜˜1�v ˜s AÓ&Ñ&¨¨B©Ñ.‰Ø
ˆA‰#ˆa‰%×	Ñ	˜uÒ	$Ø”˜˜1�v  !¡ A¡ a¡˜y¨!¨A©#Ó.Ñ.°´E¸1¸Q¹3ÀÀ!Á¸*ÀqÈÁsÈ1ÁuÈQÁwÀiÐQRÐSTÑQTÓ4UÑ1UÐWXÐYZÑWZÐ^_Ð`aÑ^aÐbcÑ^cÑVdÑ1dÑdˆâ
à˜HÑ%ˆÜ˜˜4Ÿ9™9 Q›<Ñ(Ó)ˆØ�1‰u�q‰y˜!‰m˜aÑ×%Ñ% a¨Ó.¨tÑ3ˆÙ�B˜1˜a™4 ™7Ÿ.™.¨¨DÓ1°D·I±I¸a³LÀÑ4EÑFÑFÓGˆÙ�Q˜‘T˜A‘X—O‘O A tÓ,¨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�a˜ cÑ*Ñ*Ó+ˆà�yŠyÜ˜!˜A™#˜qÓ!ˆBÜ”Z ¨$Ô/Ó0ˆBÜ˜!˜B™$  l°3Ñ&7Ð%7¸Ñ%9¸1Ñ$<Ñ =Ñ=Ó>¸sÑBˆCÜ�T˜3“-ˆCØˆJä�a˜˜|¨CÑ0Ð0°Ñ2°AÑ5Ñ6Ñ6Ó7¸Ñ;ˆÜ��s‹mˆØ€Jr3   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   r2   rX   r}   rN   r�   r   r3   r    ú<module>rœ      sP   ðñ÷2 Ý &Ý $ß *ß ,Ñ ,Ý $ß "ß 0ß 8Ñ 8Ý ,Ý 8òò.FòRHòVó*)r3   