§
    PŠtj@'  ã                   óÌ   — 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#dS )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           	      ól  — |j         d         }|                     |¦  «        }t          d||                     |¦  «        |                     |d¦  «        g¬¦  «        }t          d||                     |¦  «        |                     |d¦  «        g¬¦  «        }t          d||                     |¦  «        |                     |d¦  «        g¬¦  «        }||                     |d¦  «        z  ||z  z   ||z  z   }t          | |                     |d¦  «        |                     |¦  «        |g¦  «                             |¦  «        }|ržt          d„ |                     ¦   «         D ¦   «         ¦  «        ss|                      ¦   «         \  }	}
t          |	¦  «        } t          | |                     |d¦  «        |                     |¦  «        |g¦  «                             |¦  «        }|rL||         dk    r@t          ||         ||         z  ¦  «        }t          ||         ||         z  ¦  «        }||gS g S )Nr   Úa3é   )ÚexcludeÚb3Úc3c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S )N)Úis_polynomial)Ú.0Úvals     ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/solvers/ode/hypergeometric.pyú	<genexpr>z+match_2nd_hypergeometric.<locals>.<genexpr>1   s.   è è € Ð=Ð=¨3�3×$Ò$Ñ&Ô&Ð=Ð=Ð=Ð=Ð=Ð=ó    )
Ú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   '   sï  € ØŒ	�!Œ€AØ	�Š�1‰Œ€BÝ	ˆd˜T 4§9¢9¨Q¡<¤<°·²¸1¸a±´ÐAÐ	BÑ	BÔ	B€BÝ	ˆd˜T 4§9¢9¨Q¡<¤<°·²¸1¸a±´ÐAÐ	BÑ	BÔ	B€BÝ	ˆd˜T 4§9¢9¨Q¡<¤<°·²¸1¸a±´ÐAÐ	BÑ	BÔ	B€BØ
ˆd�iŠi˜˜1‰oŒoÑ
  B¡Ñ
&¨¨D©Ñ
0€CÝ�Ø	�Š�1�a‰Œ˜$Ÿ)š) A™,œ,¨Ð-ñ	/ô 	/ß/4ªu°S©z¬zð àð NÝÐ=Ð=°!·(²(±*´*Ð=Ñ=Ô=Ñ=Ô=ð 	NØ×$Ò$Ñ&Ô&‰DˆAˆqÝ˜‘”ˆBÝ˜˜TŸYšY q¨!™_œ_¨d¯iªi¸©l¬l¸DÐAÑBÔB×HÒHÈÑMÔMˆAàð ˆQˆrŒU�AŠXˆXÝ�1�R”5˜˜2œ‘;ÑÔˆÝ�1�R”5˜˜2œ‘;ÑÔˆØ�1ˆvˆàˆ	r"   c                 óÚ  ‡‡— |j         d         Št          t          |                      ‰¦  «        dz  | dz  dz  z   |z
  ¦  «        ¦  «        }t          t          ‰dz  |z  t	          d¦  «        dz  z   ¦  «        ¦  «        }|                     ¦   «         \  }}t          t          |¦  «        ¦  «        }t          t          |¦  «        ¦  «        }ˆˆfd„Š ‰|f¦  «        } ‰|f¦  «        }|                     |¦  «         |}	t          |	¦  «        }
t          t          t          ||
dz  z  t	          d¦  «        dz  z
  ‰|
z  dz  z  ¦  «        ¦  «        d¬¦  «        }t          t          t          |                     ‰‰t	          d¦  «        |
z  z  ¦  «        d¬¦  «        ¦  «        ¦  «        }|                     ‰¦  «        sd S |                     ¦   «         \  }}t           ‰|f¦  «        ¦  «        }|j         }g }g }|D �]1}|                     ‰¦  «        �rt          |t           ¦  «        rŽ|                     |                     ¦   «         d         ¦  «         |                     t'          t)          |                     ¦   «         d         ‰¦  «                             ¦   «         ¦  «        d         ¦  «         Œ¼|                     |                     ¦   «         d         ¦  «         |                     t'          t)          |‰¦  «                             ¦   «         ¦  «        d         ¦  «         �Œ3|                     ¦   «          t/          ||¦  «        dk    r||
|dd	œS d S )
Nr   r   é   é   c                 ó²  •— dh}| D ]Ï}|                      ‰¦  «        r¸t          |t          ¦  «        rL|                     ¦   «         d         ‰k    r.|                     |                     ¦   «         d         ¦  «         Œx|‰k    r.|                     |                     ¦   «         d         ¦  «         Œ¬|                      ‰|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Œzð ;Ý˜c¥3Ñ'Ô'ð ;¨C¯OªOÑ,=Ô,=¸aÔ,@ÀAÒ,EÐ,EØ—H’H˜SŸ_š_Ñ.Ô.¨qÔ1Ñ2Ô2Ð2Ð2Ø˜A’X�XØ—H’H˜SŸ_š_Ñ.Ô.¨qÔ1Ñ2Ô2Ð2Ð2à—K’K  °´Ñ 9Ô 9Ñ:Ô:Ð:øØˆr"   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)r1   r2   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”y ‘{ Q¨¡T¨!¡VÑ+¨aÑ/Ñ0Ô0Ñ	1Ô	1€Bõ 
•�q˜!‘t˜B‘w¥ 1¡¤ a¡Ñ'Ñ(Ô(Ñ	)Ô	)€BØ× Ò Ñ"Ô"�H€CˆÝ
•F˜3‘K”KÑ
 Ô
 €CÝ
•F˜3‘K”KÑ
 Ô
 €Cð
ð 
ð 
ð 
ð 
ð 
ð ˆo˜s˜gÑ&Ô&€GØˆo˜s˜gÑ&Ô&€GØ‡N‚N�7ÑÔÐà€DÝˆD‰	Œ	€Aõ 
•8�F R¨¨1©¡Wµ°!±´°Q±Ñ$6¸!¸Q¹$À¹Ñ#CÑDÔDÑEÔEÈTÐ	RÑ	RÔ	R€BÝ	••y §¢¨¨Aµ°!±´°Q±©KÑ!8Ô!8ÀÐEÑEÔEÑFÔFÑ	GÔ	G€Bð ×"Ò" 1Ñ%Ô%ð Øˆtà× Ò Ñ"Ô"�H€Cˆå�o�o s gÑ.Ô.Ñ/Ô/€KØŒx€HØ€JØ€Gàð 	Añ 	AˆØ�7Š7�1‰:Œ:ñ 	AÝ˜#�sÑ#Ô#ð Aà—’˜sŸšÑ0Ô0°Ô3Ñ4Ô4Ð4Ø×!Ò!¥$¥u¨S¯_ª_Ñ->Ô->¸qÔ-AÀ1Ñ'EÔ'E×'JÒ'JÑ'LÔ'LÑ"MÔ"MÈaÔ"PÑQÔQÐQÐQð —’˜sŸšÑ0Ô0°Ô3Ñ4Ô4Ð4Ø×!Ò!¥$¥u¨S°!¡}¤}×'9Ò'9Ñ';Ô';Ñ"<Ô"<¸QÔ"?Ñ@Ô@Ð@ùà‡L‚L�N„N€Nõ �; Ñ(Ô(¨EÒ1Ð1Ø˜Q¨ZÀÐFÐFÐFàˆtr"   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k    �r¥g }| |z  | |z  ||z
  ||z
  z  g}t          d¦  «        D ]q}|t          |¦  «        k     r0|                     t          ||         ||         ¦  «        ¦  «         ŒE|                     t          d||         z  d¦  «        ¦  «         Œr| |d         z  }| |d         z  }|}t          |¦  «        dk    r ||d         |z  z   |d         |d         z
  z  }||z  |z   ||z  |z   z  }|                     ||¦  «        }|                     ||¦  «        }|                     ||¦  «        }t          |¦  «        }|||z  z
  ||z  |z
  z  }t          |                     ||¦  «                             ||¦  «                             ||¦  «        ¦  «        }n|}|}|                      ||¦  «        } | |                     |¦  «        dz  z  } t          | ¦  «        } |dz  d|dddi}| 
                    ¦   «         \  }}|dz  |	dz  dz
  |dd|
z
  z  |z  |
|	z   |
|	z
  z  z   d||dz
  z  i}|                     t          t          t          | |z  ¦  «        ¦  «        |dz  |gd¬¦  «        ¦  «         g }|dz  |dfD ]1}|                     t          ||         ||         ¦  «        ¦  «         Œ2dt          t          d|d         j        z   ¦  «        ¦  «        z
  }|                     t"          ¦  «        s0t%          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ŒM€EÝ�‰<Œ<€DÝ�‰MŒM€EÝ�‰MŒ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ð 	1ˆAØ•�Z‘”Ò Ð Ø—
’
�2˜h qœk¨:°a¬=Ñ9Ô9Ñ:Ô:Ð:Ð:à—
’
�2˜a ¨¤™m¨QÑ/Ô/Ñ0Ô0Ð0Ð0à��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ŒkˆØ�E˜!‘G‰^˜e A™g¨™oÑ.ˆÝ�Q—V’V˜D %Ñ(Ô(×.Ò.¨u°fÑ=Ô=×CÒCÀEÈ6ÑRÔRÑSÔSˆˆàˆØˆð 	
�Šˆq�!‰Œ€AØ	ˆ1�6Š6�!‰9Œ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Ô!1Ñ2Ô2°Q¸±T¸1°IÈÐNÑNÔNÑOÔOÐOØ
€Cð �1‘�a˜ˆ|ð 2ð 2ˆØ�
Š
•2�f˜S”k 7¨3¤<Ñ0Ô0Ñ1Ô1Ð1Ð1ð 
�V•D˜˜3˜qœ6œ:™Ñ&Ô&Ñ'Ô'Ñ	'€BØ�6Š6•&‰>Œ>ð )Ý••e˜C œF AÑ&Ô&Ñ'Ô'Ñ(Ô(ˆÝ	•�S˜”V”Z !‘^Ñ$Ô$Ñ	%Ô	%€BØ	�f•T˜"˜a™% " a¡%™-¨#¨a¬&¬*Ñ4°q¸±tÑ;Ñ<Ô<Ñ=Ô=Ñ	=€BØ
ˆr‰'�1‰€BØ
ˆr‰'�1‰€Bå�r‰lŒl¥¨¡¤µ(¸2±,´,ÀAÐPSÐ\aÐ	bÐ	b€BØ€Ir"   c           	      óž   — | dk    r|ddgg d¢fv rdS n9| dk    r|g d¢g d¢ddgddgfv rdS n | dk    r|g d¢ddgg d¢ddgdgddgddgfv rdS d S )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˜yÐ)Ð)Ð)Ø�5ð *à	˜Ò	Ð	Ø�y�y�y ) ) )¨a°¨V°a¸°VÐ<Ð<Ð<Ø�5ð =à	˜Ò	Ð	Ø�y�y�y 1 a &¨)¨)¨)°a¸°V¸a¸SÀ1ÀaÀ&È1ÈaÈ&ÐQÐQÐQØ�5àˆ4r"   c                 ó^  — |j         d         }ddlm} ddlm} t          | d¬¦  «        \  }}|d         }|d         }	|d         }
|d	         }d }|
j        d
k    rI|t          ||	g|
g|¦  «        z  |t          ||
z
  dz   |	|
z
  dz   gd|
z
  g|¦  «        z  |d|
z
  z  z  z   }�n|
dk    r•t          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   }nm|
|z
  |	z
  j        d
k    r\|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|                     |¦  «        z  ¦  «        }||	z   dz   |z  |
z
                       ||¦  «        |z  } |||dz  |z
                       ||¦  «        |                     |¦  «        |z  z  z   ¦  «        } ||dz  |z
                       ||¦  «        |dz  z  ¦  «        }t          t          t          t          |d|z  z  ¦  «        |¦  «        d¬¦  «        ¦  «        }|                     ||d         ¦  «        }|                     |||d         z  ¦  «        }|                     |||d         z  ¦  «        }|j        skt          |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\   r1   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\   r1   ÚsolÚy2rG   ÚdtdxÚ_BÚ_AÚeÚe1s                       r    Úget_sol_2F1_hypergeometricr�   ç   sG  € ØŒ	�!Œ€AØ6Ð6Ð6Ð6Ð6Ð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Ñ)KÈAÐPQÐRSÑPSÉHÑ)TÑTˆ‰Ø	
ˆaŠˆÝ•c�( a¨¡c¨!¡e H¨Q¡J°¡N°Q¸±T¸!±VÑ#<¸aÑ@Ô@ÑAÔAÀ;À;ÍuÐVWÐYZÐU[Ð^_Ð]`ÐbcÑOdÔOdÑCeÔCeÐghÑChÑiÐklÑmÔmÕnsÐuvÐxyÐtzÐ}~Ð|ð  BCñ  oDô  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Ô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ˆØˆV�B˜1˜a™4 ™7Ÿ.š.¨¨DÑ1Ô1°D·I²I¸a±L´LÀÑ4EÑFÑFÑGÔGˆØˆV�Q˜‘T˜A‘X—O’O A tÑ,Ô,¨d°A©gÑ6Ñ7Ô7ˆÝ•
�8¥F¨2¨q°©t©9Ñ$5Ô$5°qÑ9Ô9ÀÐFÑFÔFÑGÔGˆØ�hŠh�q˜, xÔ0Ñ1Ô1ˆØ�hŠh�q˜!˜\¨#Ô.Ñ.Ñ/Ô/ˆØ�FŠF�1�a˜ cÔ*Ñ*Ñ+Ô+ˆàŒyð 	Ý˜!˜A™#˜qÑ!Ô!ˆBÝ•Z ¨$Ð/Ñ/Ô/Ñ0Ô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Ô7¸Ñ;ˆÝ��s‰mŒmˆØ€Jr"   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   rX   r}   rN   r�   r   r"   r    ú<module>rœ      sd  ððð ð2 Ð Ð Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø $Ð $Ð $Ð $Ð $Ð $Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø $Ð $Ð $Ð $Ð $Ð $Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8ðð ð ð.Fð Fð FðRHð Hð HðVð ð ð*)ð )ð )ð )ð )r"   