ó
    Š*£hÄI ã                   óF  • S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJr  SS	KJ r   SS
K!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrB  SSKCJDrDJErE  SSKFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrS  SSKTJUrUJVrVJWrW  SSKXJYrYJZrZJ[r[  SSK\J]r]  SSK^J_r_  SSK`Jara  S rbS rcS rdS reS rf " S S\5      rg " S S\5      rh\" S5      ri " S S5      rj " S S5      rk " S  S!5      rl " S" S#5      rm " S$ S%5      rn " S& S'\n5      ro " S( S)\n5      rp " S* S+\n5      rq " S, S-\n5      rr " S. S/\n5      rs " S0 S1\n5      rt " S2 S3\n5      ru " S4 S5\n5      rv " S6 S7\n5      rw " S8 S9\n5      rx " S: S;\n5      ry " S< S=\n5      rz " S> S?\n5      r{ " S@ SA\n5      r|SB r}SC r~SD rSE r€SF r�SG r‚SH rƒSI r„SJ r…SK r†SL r‡SMqˆ/ \" SN5      SOSSP4SQ jr‰SR rŠSMq‹  SUSS jrŒSUST jr�gM)Va@  
Expand Hypergeometric (and Meijer G) functions into named
special functions.

The algorithm for doing this uses a collection of lookup tables of
hypergeometric functions, and various of their properties, to expand
many hypergeometric functions in terms of special functions.

It is based on the following paper:
      Kelly B. Roach.  Meijer G Function Representations.
      In: Proceedings of the 1997 International Symposium on Symbolic and
      Algebraic Computation, pages 205-211, New York, 1997. ACM.

It is described in great(er) detail in the Sphinx documentation.
é    )Údefaultdict)Úproduct)Úreduce)Úprod)ÚSYMPY_DEBUG)ÚSÚDummyÚsymbolsÚsympifyÚTupleÚexpandÚIÚpiÚMulÚ
EulerGammaÚooÚzooÚexpand_funcÚAddÚnanÚExprÚRational)ÚMod©Údefault_sort_key)!ÚexpÚsqrtÚrootÚlogÚ
lowergammaÚcosÚbesseliÚgammaÚ
uppergammaÚexpintÚerfÚsinÚbesseljÚEiÚCiÚSiÚShiÚsinhÚcoshÚChiÚfresnelsÚfresnelcÚ
polar_liftÚ	exp_polarÚfloorÚceilingÚrfÚ	factorialÚlerchphiÚ	PiecewiseÚreÚ
elliptic_kÚ
elliptic_e)ÚpolarifyÚ
unpolarify)ÚhyperÚHyperRep_atanhÚHyperRep_power1ÚHyperRep_power2ÚHyperRep_log1ÚHyperRep_asin1ÚHyperRep_asin2ÚHyperRep_sqrts1ÚHyperRep_sqrts2ÚHyperRep_log2ÚHyperRep_cosasinÚHyperRep_sinasinÚmeijerg)ÚMatrixÚeyeÚzeros)ÚapartÚpolyÚPoly)Úresidue)Ú	powdenest)Úsiftc                 ó~   • U R                   (       a  [        U S5      $ U R                  5       u  p[        US5      U -   $ ©Né   )Ú	is_Numberr   Úas_coeff_Add)ÚxÚcs     ÚW/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/simplify/hyperexpand.pyÚ_mod1r]   U   s5   € ð 	‡{‡{Ü�1�a‹yÐØ�>‰>Ó�D€AÜˆq�!‹9�q‰=Ðó    c                 ó:4  ^ ^^^^	^
• [        S[        S9u  mmmm
UUUU U
4S jnUUUU U
4S jnU" SS[        T
5      5        U" T4S[        T* T
5      5        U" TT[        R
                  -
  4ST-  4[        [        TT
5      [        T[        R
                  -   T
5      S-  /5      [        SS//5      [        T[        R
                  -
  T
-  ST
-
  -  [        R
                  T-
  T
-  ST
-
  -  /TST
-
  -  TT
S-
  -  ST
-
  -  //5      5        U" S	S
[        [        T
5      S/5      [        ST
-  S//5      [        ST
T
S-
  -  /SS//5      5        U" [        R
                  S4[	        S5      4[        [        T
5      S/5      [        SS//5      [        [        SS5      SST
-
  -  S-  /SS//5      5        U" [        R
                  [        R
                  4[	        S5      4[        [        T
5      [        [        SS5      T
5      /5      [        SS//5      [        [        SS5      [        R
                  /ST
ST
-
  -  S-  //5      5        U" T[        R
                  T-   4[        R
                  4[        [        T* T
5      [        T* [        R
                  -
  T
5      * /5      [        SS//5      [        ST* /T
ST-  S-
  -  S-  ST
-
  -  [        R
                  T
ST-  S-
  -  ST
-
  -  -
  //5      5        U" TT* /[        R
                  /[        [        TT
5      [        TT
5      /5      [        SS//5      [        ST* /TT
-  ST
-
  -  SST
-
  -  S-  //5      5        U" SS/S[        R
                  -  /[        [!        T
5      S/5      [        SS//5      [        T
[        R
                  -
  ST
-
  -  SST
-
  -  S-  /SS//5      5        U" [        R
                  [        R
                  /[        R"                  /[        [%        T
5      ['        T
5      /5      [        S[(        -  S//5      [        [        SS5      SST
-  S-
  -  /[        SS5      [        R
                  //5      5        U" [        SS5      [        R
                  /[        R"                  /[        [%        T
5      ['        T
5      /5      [        SS[(        -  //5      [        [        SS5      SST
-  S-
  -  /[        SS5      [        R
                  //5      5        U" [        SS5      SS/[        R
                  S/[        T
[        T
5      -  [        T
5      S/5      [        [        SS5      [        R"                  * ST
-  -  [        SS5      //5      [        [        R
                  ST
ST
-
  -  S-  /SST
T
S-
  -  // SQ/5      5        U" [        SS5      SS/SS/[        [        [        R
                  T
5      [+        T
5      S/5      [        [        SS5      SST
-  -  -
  SST
-  -  SST
-  -  //5      [        T
S-  T
S-
  -  SS/SST
S-
  -  -  S[        R
                  // SQ/5      5        U" S/T/[        T
ST-
  -  [        T
5      -  [-        TS-
  T
5      -  S/5      [        TS-
  S//5      [        ST-
  T
-   S/SS//5      5        U" T/ST-  /[        T
[        R
                  T-
  -  [        T
S-  5      -  [/        T[        R
                  -
  T
S-  5      -  [1        T[        R
                  -   5      -  S[        R
                  T-
  -  -  T
[        R
                  T-
  -  [        T
S-  5      -  [/        T[        R
                  -   T
S-  5      -  [1        T[        R
                  -   5      -  S[        R
                  T-
  -  -  /5      [        SS//5      [        T
S-  T
S-  /T
S-  T
S-  ST-  -
  //5      5        [3        S5      T
-  nU" T/TS-   /[        UT* -  T-  [-        TU5      -  T[        T
5      -  /5      [        SS//5      [        T* S/ST
//5      5        U" [        SS5      /[        R
                  /[        T
5      [5        [(        T
-  5      [6        * -  [9        [6        [5        T
5      -  5      -  -
  5        U" S/[        SS5      [        SS5      /[        [5        [(        5      [6        [;        S[5        T
5      -  5      -  [=        S[?        T
S5      -  [        [6        [(        -  S-  5      -  [5        [(        5      -  5      -  [A        S[5        T
5      -  5      [C        S[?        T
S5      -  [        [6        [(        -  S-  5      -  [5        [(        5      -  5      -  -   -  [        [6        * [(        -  S-  5      -  S[?        T
S5      -  -  [5        [(        5      [?        T
S5      -  [;        S[5        T
5      -  5      [C        S[?        T
S5      -  [        [6        [(        -  S-  5      -  [5        [(        5      -  5      -  [6        [A        S[5        T
5      -  5      -  [=        S[?        T
S5      -  [        [6        [(        -  S-  5      -  [5        [(        5      -  5      -  -   -  [        [6        * [(        -  S-  5      -  S-  S/5      [        / SQ/5      [        [        SS5      S[        SS5      /T
[        SS5      S// SQ/5      5        U" [        R
                  T/[        SS5      TS-   /[        TST-  S-
  -  [6        * -  [5        [(        T
-  5      -  [9        [6        [5        T
5      -  5      -  TST-  S-
  -  [3        S5      T
-  T* -  -  [-        T[3        S5      T
-  5      -  TST-  S-
  -  [        T
5      -  /5      [        / SQ/5      [        [        SS5      SS/ST* S/SST
//5      5        U" SS/SS/[        [E        T
5      [G        T
5      -
  [        T
5      S[H        /5      [        ST
-  SSST
-  //5      [        / SQST
SS// SQ/ SQ/5      5        U" S[        R
                  4[A        S[5        T
5      -  5      5        U" / T/[        [1        T5      T
ST-
  S-  -  -  [/        TS-
  S[5        T
5      -  5      -  [1        T5      T
STS-  -
  -  -  [/        TS[5        T
5      -  5      -  /5      [        SS//5      [        SS/T
ST-
  //5      5        ST
[        SS5      -  -  m	U	4S jnU	4S jnU" / [        R
                  TT[        R
                  -   /[        U" ST-  S-
  T
5      U" ST-  T
5      T
[        SS5      -  -  U" ST-  S-
  T
5      [5        T
5      -  U" ST-  T
5      T
[        SS5      -  -  /5      SST-  -  -  [1        ST-  5      -  T
SST-  -
  S-  -  -  [        / SQ/5      [        / SQS[        R
                  T-
  SS/SS[        R
                  S/T
SSST-
  //5      5        SST
-  [        SS5      -  -  [K        [6        [(        -  S-  5      -  m	U" / TT[        R
                  -   ST-  /S[5        [3        S5      T
-  5      -  SST-  -
  -  [1        ST-  5      S-  -  [        [M        ST-  S-
  T	5      [/        ST-  S-
  T	5      -  T	[/        ST-  T	5      [M        ST-  S-
  T	5      -  [/        ST-  S-
  T	5      [M        ST-  T	5      -  -
  -  T	S-  [/        ST-  T	5      -  [M        ST-  T	5      -  T	S-  [/        ST-  T	5      [M        ST-  S-
  T	5      -  [/        ST-  S-
  T	5      [M        ST-  T	5      -  -   -  /5      -  [        / SQ/5      [        S[        SS5      SS/SSST-  -
  S-  [        SS5      S/SSSST-  -
  [        SS5      /ST
-  SSST-
  //5      5        U" T/T[        R
                  -
  ST-  /[        T
[        R
                  T-
  -  [/        T[        R
                  -
  [5        T
5      5      S-  -  T
ST-
  -  [/        T[        R
                  -
  [5        T
5      5      -  [/        T[        SS5      -
  [5        T
5      5      -  T
[        SS5      T-
  -  [/        T[        SS5      -
  [5        T
5      5      S-  -  /5      [        [1        T[        R
                  -   5      S-  * S[        R
                  T-
  -  -  S[1        T[        R
                  -
  5      -  [1        T[        R
                  -   5      -  SST-
  -  -  S//5      [        SST-  -
  SS/T
S-  [        R
                  T-
  [        R
                  /ST
S//5      5        U" [        R
                  /TST-
  /[(        ST-
  -  [O        [(        T-  5      -  [        [/        ST-
  [5        T
5      5      [/        TS-
  [5        T
5      5      -  [5        T
5      [/        T* [5        T
5      5      [/        TS-
  [5        T
5      5      -  [/        ST-
  [5        T
5      5      [/        T[5        T
5      5      -  -   -  [/        T* [5        T
5      5      [/        T[5        T
5      5      -  /5      -  [        / SQ/5      [        TS-
  [        R
                  S/T
ST
/S[        R
                  T* //5      5        U" [        R
                  /[        SS5      [        SS5      /[        [Q        S[5        T
5      -  5      S-  [5        T
5      -  [;        S[5        T
5      -  5      S-  [5        T
5      -  [A        S[5        T
5      -  5      /5      [        / SQ/5      [        [        SS5      [        R
                  S/S[        SS5      [        R
                  /SST
-  S//5      5        U" [        SS5      /[        SS5      [        SS5      /[        [=        [        [(        [6        -  S-  5      [?        T
S5      -  S-  [5        [(        5      -  5      [(        [        [(        [6        -  S-  5      [?        T
S5      -  S-  [5        [(        5      -  S-  -  -  [;        S[5        T
5      -  5      [5        T
5      -  [A        S[5        T
5      -  5      /5      [        / SQ/5      [        [        SS5      [        SS5      S/S[        SS5      S/ST
S//5      5        U" [        SS5      /[        R
                  [        SS5      /[        [5        [(        5      [        [6        * [(        -  S-  5      -  [C        S[?        T
S5      -  [        [6        [(        -  S-  5      -  [5        [(        5      -  5      -  S[?        T
S5      -  -  [A        S[5        T
5      -  5      [;        S[5        T
5      -  5      [5        T
5      -  /5      [        / SQ/5      [        [        SS5      [        SS5      S// S QST
[        R
                  //5      5        U" TT[        R
                  -   /ST-  TST-  T-
  S-   /[1        T5      [1        ST-  T-
  S-   5      -  [5        T
5      S-  SST-  -
  -  -  [        [/        TS-
  [5        T
5      5      [/        ST-  T-
  [5        T
5      5      -  [5        T
5      [/        T[5        T
5      5      -  [/        ST-  T-
  [5        T
5      5      -  [5        T
5      [/        TS-
  [5        T
5      5      -  [/        ST-  T-
  S-   [5        T
5      5      -  [/        T[5        T
5      5      [/        ST-  T-
  S-   [5        T
5      5      -  /5      -  [        / SQ/5      [        S[        R
                  [        R
                  S/T
S-  ST-
  ST
S-  /T
S-  STST-  -
  T
S-  /S[        R
                  [        R
                  ST-  //5      5        U" SS/SS[        SS5      /[        [S        S[5        T
5      -  5      [G        S[5        T
5      -  5      -
  [A        S[5        T
5      -  5      [5        T
5      [;        S[5        T
5      -  5      -  S[H        /5      [        ST
-  SSSST
-  //5      [        S[        R
                  S[        SS5      S// S!QST
[        R
                  SS// S"Q/ S"Q/5      5        U" SST/SSTS-   /[        T[G        T
* 5      [U        ST
* 5      -   [H        -   -  T
TS-  ST-  -
  S-   -  -  TT
* T* -  -  [1        T5      [W        TT
* 5      -
  -  TS-
  S-  -  T[        T
5      -  TS-  ST-  -
  S-   -  TT
TS-  ST-  -
  S-   -  -  /5      [        ST-
  SST
-  S//5      [        SSST
-  S/ST* SS/SST
S// S#Q/5      5        g$)%zCreate our knowledge base. za b c, z)Úclsc           
      ó\   >• [        X5      nTR                  [        UTUTTT45      5        g ©N©ÚHyper_FunctionÚappendÚFormula)	ÚapÚbqÚresÚfuncÚaÚbr[   ÚformulaeÚzs	       €€€€€r\   ÚaddÚadd_formulae.<locals>.addh   s*   ø€ Ü˜bÓ%ˆØ�‰œ  a¨¨q°!°Q¨iÓ8Õ9r^   c                 ó`   >• [        X5      nT	R                  [        UT
S TTT4X#U5      5        g rb   rc   )rg   rh   ÚBÚCÚMrj   rk   rl   r[   rm   rn   s         €€€€€r\   ÚaddbÚadd_formulae.<locals>.addbl   s.   ø€ Ü˜bÓ%ˆØ�‰œ  a¨°°1°a¨y¸!ÀÓBÕCr^   © é   rW   r   )rW   rW   )rx   éÿÿÿÿz3/2éþÿÿÿé   )r   r   r   é   é	   é   é   )rW   r   r   )rW   ry   r   )r   rW   ry   r   )r   r   r   r   c                 ó6   >• [        U T5      [        U T5      -   $ rb   ©r"   r(   ©rk   rn   rZ   s     €r\   ÚfpÚadd_formulae.<locals>.fp÷   ó   ø€ Ü�q˜!‹}œw q¨!›}Ñ,Ð,r^   c                 ó6   >• [        U T5      [        U T5      -
  $ rb   r�   r‚   s     €r\   ÚfmÚadd_formulae.<locals>.fmú   r…   r^   )rW   r   r   r   )r   rW   r   r   iàÿÿÿé   )é   r   r   éýÿÿÿ)r   r   rW   )r   r   rW   r   r   )r   r   r   r   r   )r   r   r   ry   N),r
   r	   r   rA   r   ÚHalfrL   rB   rC   r@   r   rD   rF   rG   rI   rJ   rE   ÚOner;   r<   r   rH   r    r"   r#   r2   r   r   r&   r-   r0   r   r.   r1   r)   r   r   r3   r(   r'   r,   r/   r%   r$   )rm   ro   ru   Úmzrƒ   r‡   rk   rl   r[   rZ   rn   s   `     @@@@@r\   Úadd_formulaer�   d   só  ý€ ä˜¬Ñ/�J€A€qˆ!ˆQ÷:ñ :÷Dñ Dñ ˆˆB”�A“Ôñ ˆˆˆr”? A 2 qÓ)Ô*ñ 	ˆ!ˆQ”—‘‰Zˆ˜1˜Q™3˜'Ü	”  AÓ&Ü  ¤Q§V¡V¡¨QÓ/°Ñ1ð3ó 
4ä	�!�Q��Ó	Ü	�1”q—v‘v‘:˜q‘. ! a¡%Ñ(¬1¯6©6°A©:°q©.¸!¸a¹%Ñ*@ÐAØ�Q˜‘U‘)˜Q  A¡™Y¨¨A©Ñ.Ð/ð1ó 
2ô	3ñ 	ˆ�Ü	”˜qÓ! 1Ð%Ó	&¬°°A±°q°	¨{Ó(;Ü	�!�Q˜˜A™‘Y� ! Q Ð(Ó	)ô+ñ 	Œ!�&‰&�!ˆ”q˜“x�lÜ	” Ó" AÐ&Ó	'Ü	�!�Q��Ó	Ü	”(˜2˜q“/ 1 a¨!¡e¡9¨Q¡;Ð/°!°Q°Ð8Ó	9ô;ñ 	Œ!�&‰&”!—&‘&Ð	œA˜e›H˜<Ü	” Ó"¤O´H¸RÀ³OÀQÓ$GÐHÓ	IÜ	�!�Q��Ó	Ü	”(˜2˜q“/¤1§6¡6Ð*¨Q°°1°q±5±	¸!±Ð,<Ð=Ó	>ô@ñ 	ˆ!ŒQ�V‰V�a‰Zˆœ1Ÿ6™6˜*Ü	” !  QÓ'¬/¸1¸"¼q¿v¹v¹+ÀqÓ*IÐ)IÐJÓ	KÜ	�!�Q��Ó	Ü	�!�a�R�Ø�R˜‘T˜A‘X‘,˜q‘. ! a¡%Ñ(¬!¯&©&°1°b¸±d¸Q±h±<ÀÀQÁÑ3GÑ*GÐHðJó 
KôLñ 	ˆ!ˆaˆRˆ”1—6‘6�(Ü	Ô! ! QÓ'Ô)9¸!¸QÓ)?Ð@Ó	AÜ	�!�Q��Ó	Ü	�!�a�R�˜1˜Q™3  A¡™;¨¨1¨q©5©	°!©Ð4Ð5Ó	6ô8ñ 	ˆ!ˆQˆ�!”A—F‘F‘(�Ü	” Ó" AÐ&Ó	'¬°!°Q°°Ó)9Ü	�1”q—v‘v‘:  A¡Ñ&¨¨1¨q©5©	°!©Ð4°q¸!°fÐ=Ó	>ô@ñ
 	Œ!�&‰&”!—&‘&Ð	œAŸE™E˜7Ü	”˜A“¤
¨1£Ð.Ó	/Ü	�!”B‘$˜��Ó	Ü	”(˜2˜q“/ 2 q¨¡s¨1¡u¡:Ð.Ü˜2˜q“/¤1§6¡6Ð*ð,ó 
-ô.ñ
 	Œ(�2�q‹/œ1Ÿ6™6Ð	"¤Q§U¡U GÜ	”˜A“¤
¨1£Ð.Ó	/Ü	�!�Q”r‘T��Ó	Ü	”(˜2˜q“/ 2 q¨¡s¨1¡u¡:Ð.Ü˜2˜q“/¤1§6¡6Ð*ð,ó 
-ô.ñ 	Œ(�2�q‹/˜1˜aÐ	 ¤1§6¡6¨1 +Ü	�”> !Ó$Ñ$¤m°AÓ&6¸Ð:Ó	;Ü	”(˜2˜q“/¤A§E¡E 6¨1¨Q©3¡<´¸!¸Q³Ð@ÐAÓ	BÜ	”!—&‘&˜!˜Q  A¡™Y q™[Ð)Ø�Q˜˜1˜q™5™	Ð"Úðó 
ôñ 	Œ(�2�q‹/˜1˜aÐ	  1 a &Ü	”¤§¡¨Ó+¬]¸1Ó-=¸qÐAÓ	BÜ	”(˜1˜a“. 2 q¨¡s¡8Ñ+¨Q°°!±©W°b¸!¸A¹#±hÐ?Ð@Ó	AÜ	�!�A‘#�q˜1‘u‘+˜q !Ð$ q¨!¨Q°©U©)¡}°a¼¿¹Ð&@Â)ÐLÓ	MôOñ 	ˆ!ˆˆqˆc”6˜1˜q 1™u™:¬¨A«Ñ.´¸AÀ¹EÀ1Ó1EÑEÀqÐIÓJÜ	�!�a‘%˜��Ó	œv¨¨A©°©	°1 ~¸¸1°vÐ&>Ó?ôAáˆ!ˆˆq�‰sˆeÜ	�”Q—V‘V˜a‘Z‘¤ Q q¡S£Ñ)¬'°!´a·f±f±*¸aÀ¹cÓ*BÑBÜ˜œQŸV™V™Ó$ñ%Ø%&¬¯©°!©¡_ñ5à”Q—V‘V˜a‘Z‘¤ Q q¡S£Ñ)¬'°!´a·f±f±*¸aÀ¹cÓ*BÑBÜ˜œQŸV™V™Ó$ñ%Ø%&¬¯©°!©¡_ñ5ð6ó 
7ô 
�!�Q��Ó	Ü	�!�A‘#�q˜‘s�˜a ™c A a¡C¨!¨A©#¡IÐ/Ð0Ó	1ô3ô 
�B‹˜Ñ	€BÙˆ!ˆˆq�1‰uˆgÜ	��q�b‘˜!‘œJ q¨"Ó-Ñ-¨q´°Q³©xÐ8Ó	9Ü	�!�Q��Ó	Ü	�1�"�a�˜1˜a˜&Ð!Ó	"ô$ñ
 Œ�"�a‹ÐœAŸF™F˜8¤S¨£V¬d´2°a±4«j¼1¸"©o¼cÄ!ÄDÈÃGÁ)»nÑ.LÑ%LÔMñ 	ˆ!ˆŒx˜˜1‹~œx¨¨1›~Ð.Ü	”$”r“(œAœd 1¤T¨!£W¡9›oÑ-¬h°q¼¸aÀ»±|ÄCÌÌ"ÉÈQÉÃKÑ7OÔPTÔUWÓPXÑ7XÓ.YÑYÜ" 1¤T¨!£W¡9›o¬h°q¼¸aÀ»±|ÄCÌÌ"ÉÈQÉÃKÑ7OÔPTÔUWÓPXÑ7XÓ.YÑYñZñ [äœ˜œ2™˜a™“Lñ!à"#¤D¨¨A£J¡,ñ0ô ”r“(œ4  1›:Ñ%¤t¨A¬d°1«g©I£´xÀÄ$ÀqÈ!Ã*ÁÌSÔQRÔSUÑQUÐVWÑQWË[Ñ@XÔY]Ô^`ÓYaÑ@aÓ7bÑ'bÜ()¬$¨q´°a³©y«/Ñ(9¼(À1ÄTÈ!ÈQÃZÁ<ÔPSÔTUÔVXÑTXÐYZÑTZÓP[ÑC[Ô\`ÔacÓ\dÑCdÓ:eÑ(eñ(fñ gäœ�rœ"‘u˜Q‘w“<ñ à !ñ"ð ðó 
ô 
’�Ó	Ü	”(˜2˜q“/°´8¸A¸q³>ÐBØ !¤8¨A¨q£>ÀÐBÚBðDó 
EôFñ 	Œ!�&‰&�!ˆ”x  1“~ q¨1¡uÐ-Ü	��A�a‘C˜!‘G‘œq˜bÑ!¤$¤r¨!¡t£*Ñ,¬S´´4¸³7±«^Ñ;Ø�A�a‘C˜!‘G‘œj¨›n¨QÑ.°1°"Ñ5Ñ5Ü˜Aœz¨"›~¨aÑ/Ó0ñ1à�A�a‘C˜!‘G‘œS ›VÑ#ð%ó 
&ô 
’�Ó	Ü	”(˜2˜q“/ 1 aÐ(¨1¨q¨b°!¨*°q¸!¸Q°iÐ@Ó	AôCñ 	ˆ!ˆQˆ�!�Q�Ü	”�A“œ˜Q›‘¤ Q£¨¬JÐ7Ó	8Ü	�!�A‘#�q˜!˜R ™TÐ"Ð#Ó	$Ü	’  A q¨! ªlºLÐIÓ	JôLñ ˆŒQ�V‰VˆJœ˜Qœt A›w™Y›Ô(ÙˆˆaˆSÜ	”�q“˜!˜q 1™u a™i™.Ñ(¬°°Q±¸¼$¸q»'¹	Ó)BÑBÜ�q“˜!˜a ! A¡#™g™,Ñ&¤w¨q°!´D¸³G±)Ó'<Ñ<ð>ó 
?ä	�!�Q��Ó	œ6 A q 6¨A°°A±¨<Ð"8Ó9ô;ð 	
ˆ!ŒX�a˜‹^Ñ
Ñ€Aõ-õ-ñ 	ˆŒa�f‰f�a˜œQŸV™V™Ð$Ü	‘�A�a‘C˜!‘G˜Q“¡ A a¡C¨£¨A¬x¸¸1«~Ñ,=Ñ!=Ù�A�a‘C˜!‘G˜Q“¤ Q£Ñ'©¨A¨a©C°«°A´xÀÀ1³~Ñ4EÑ)EðGó 
Hàˆr�!‰t‰9ñ
ä˜1˜Q™3“Zñ
 à ! Q¨¨1©¡W¨a¡KÑ 0ñ
1ô 
’�Ó	Ü	’Ø”Q—V‘V˜a‘Z  AÐ&Ø�QœŸ™ Ð"Ø�Q˜˜1˜q™5Ð!ð#ó 
$ô%ð 	
ˆ1ˆQ‰3”˜!˜Q“Ñ
Ñ¤	¬!¬B©$¨q©&Ó 1Ñ1€AÙˆˆa�”Q—V‘V‘˜Q˜q™SÐ!Ø
ŒD”˜B“ Ñ!Ó"Ñ
" a¨!¨A©#¡gÑ	.¬u°Q°q±S«z¸1©}Ñ	<Ü	”˜˜1™˜q™ !Ó$¤W¨Q¨q©S°1©W°aÓ%8Ñ8Ø”G˜A˜a™C “O¤G¨A¨a©C°!©G°QÓ$7Ñ7Ü˜a ™c A™g qÓ)¬'°!°A±#°q«/Ñ9ñ:ñ ;à�A‘”g˜a ™c 1“oÑ%¤g¨a°©c°1£oÑ5Ø�A‘”w˜q ™s A“¤w¨q°©s°Q©w¸Ó':Ñ:Ü   1¡ q¡¨!Ó,¬W°Q°q±S¸!«_Ñ<ñ=ñ >ð	?ó 
@ñ
@ô 
’�Ó	Ü	�!”X˜a “^ Q¨Ð*Ø�a˜!˜A™#‘g˜q‘[¤(¨2¨q£/°1Ð5Ø�Q˜˜A˜a™C™¤¨!¨Q£Ð0Ø�a‘%˜˜A˜q 1™uÐ%ð'ó 
(ô)ñ 	ˆ!ˆˆq”1—6‘6‰z˜1˜Q™3ÐÜ	�”Q—V‘V˜a‘Z‘¤¨¬Q¯V©V©´T¸!³WÓ!=¸qÑ!@Ñ@Ø�Q˜‘U‘œG A¬¯©¡J´°Q³Ó8Ñ8Ü˜!œh q¨!›nÑ,¬d°1«gÓ6ñ7à”X˜a “^ aÑ'Ñ(¬°´X¸aÀ³^Ñ1CÄTÈ!ÃWÓ)MÈqÑ)PÑPðRó 
Sô 
”5˜œQŸV™V™Ó$ aÑ'Ð'¨¬A¯F©F°Q©J©Ñ7Ø”5˜œQŸV™V™Ó$Ñ$¤U¨1¬q¯v©v©:Ó%6Ñ6°q¸1¸q¹5±zÑAØðð ó 
ô 
�!�a˜‘c‘'˜1˜a� 1 Q¡3¬¯©°©
´A·F±FÐ";¸aÀÀA¸YÐGÓ	HôJñ 	Œ!�&‰&ˆ�A�q˜1‘u�:Ü	ˆQ�‰U‰”Cœ˜1™“IÑ	Ü	”˜˜Q™¤ Q£Ó(¬°°Q±¼¸Q»Ó)@Ñ@Ü�a“œ' 1 "¤d¨1£gÓ.¬w°q¸1±u¼dÀ1»gÓ/FÑFÜ# A¨¡E¬4°«7Ó3´G¸A¼tÀA»wÓ4GÑGñHñ Iä˜!˜œT !›WÓ%¤g¨a´°a³Ó&9Ñ9ð;ó 
<ñ
<ô
 
’�Ó	Ü	�!�a‘%œŸ™ Ð#Ø�Q˜�Ø”Q—V‘V˜a˜R�ð"ó 
#ô	$ñ 	Œ!�&‰&ˆ”H˜Q “N¤H¨Q°£NÐ3Ü	”�Q”t˜A“w‘Y“ Ñ!¤$ q£'Ñ)¬4°´$°q³'±	«?¸1Ñ+<¼TÀ!»WÑ+DÜ�aœ˜Q›‘i“ð"ó 
#ä	’�Ó	Ü	”(˜2˜q“/¤1§6¡6¨1Ð-°´8¸BÀ³?ÄAÇFÁFÐ/KÈaÐQRÐSTÑQTÐVWÈ[ÐYÓ	Zô	\ñ 	Œ(�1�a‹.Ð	œH Q¨›N¬H°Q¸«NÐ;Ü	ÜÜÜœ‘T˜!‘VóÜ!Ø˜Aóñà ñ!ä!%Üó"!ñ!ó#ô
 "$¤s¬2¬a©4°©6£{´4¸¸1³:Ñ'=¸aÑ'?ÄÄRÃÑ'HÈ1Ñ&LÑ!LñOô �A”d˜1“g‘I‹œt A›wÑ&Ü�A”d˜1“g‘I‹ð!ó
"ô 
’�Ó	Ü	”(˜2˜q“/¤H¨Q°£O°QÐ7Øœ8 B¨›?¨QÐ/Ø˜A QÐ'ð)ó 
*ô+ñ& 	Œ(�1�a‹.Ð	œAŸF™F¤H¨Q°£NÐ3Ü	ÜÜóÜÜ�Rœ‘U˜1‘Wóñä&Øœ4  1›:™¤c¬!¬B©$¨q©&£kÑ1´$´r³(Ñ:ó<ñ<ð >?¼tÀAÀq»z¹\ñKô �A”d˜1“g‘I‹Ü�A”d˜1“g‘I‹œt A›wÑ&ð)ó
*ô 
’�Ó	Ü	”(˜2˜q“/¤H¨Q°£N°AÐ;Ú+Ø˜A¤A§F¡FÐ+ð-ó 
.ô/ñ" 	ˆ!ˆQ”—‘‰Zˆ˜1˜Q™3  1 Q¡3¨¡7¨Q¡;Ð/Ü	ˆq‹”%˜˜!™˜a™ !™Ó$Ñ	$¬¨Q«°©	°Q¸¸1¹±WÑ'=Ñ	=Ü	”˜˜Q™¤ Q£Ó(¬°°1±°q±¼$¸q»'Ó)BÑBÜ�a“œ ¤D¨£GÓ,Ñ,¬W°Q°q±S¸1±W¼dÀ1»gÓ-FÑFÜ�a“œ  Q¡¬¨Q«Ó0Ñ0´¸¸1¹¸q¹À1¹ÄdÈ1ÃgÓ1NÑNÜ˜œD ›GÓ$¤W¨Q¨q©S°1©W°q©[¼$¸q»'Ó%BÑBðDó 
Eñ
Eô
 
’�Ó	Ü	�!”Q—V‘VœQŸV™V QÐ'Ø�A‘#�q˜1‘u˜a  1¡Ð%Ø�A‘#�q˜!˜a ™c™' 1 Q¡3Ð'Ø”Q—V‘VœQŸV™V R¨¡TÐ*ð,ó 
-ô
.ñ 	ˆ!ˆQˆ�!�Qœ  A›Ð'Ü	”�Q”t˜A“w‘Y“¤# a¬¨Q«¡i£.Ñ0Ü�aœ˜Q›‘i“¤$ q£'¬$¨q´°a³©y«/Ñ"9¸1¼jðJó 
Kä	�!�A‘#�q˜!˜Q  1¡Ð%Ð&Ó	'Ü	�!”Q—V‘V˜Q¤¨¨Q£°Ð3Ú Ø�QœŸ™  1Ð%Ú Ú ð	"ó 
#ô	$ñ( 	ˆ!ˆQ�ˆ�Q˜˜1˜Q™3�KÜ	�”C˜˜“Gœf Q¨¨›mÑ+¬jÑ8Ñ9¸1¸aÀ¹dÀQÀqÁS¹jÈ1¹nÑ;MÑNØ�Q�B˜1˜"‘:‘œu Q›x¬*°Q¸¸Ó*;Ñ;Ñ<¸aÀ!¹eÀa¹ZÑGØ”3�q“6‘˜1˜a™4 ! A¡#™:¨™>Ñ*Ø�A�q˜!‘t˜a ™c‘z A‘~Ñ&Ñ'ð)ó 
*ô 
�!�A‘#�q˜"˜Q™$ Ð"Ð#Ó	$Ü	�"�Q�r˜!‘t˜A�Ø�Q�B�q˜�Ø�A�a˜�Úðó 
õ	r^   c                 ó  ^ ^^	^
^^• [        [        [        S5      5      u  mm	m
m[        S5      mUU	U
U UU4S jnUU4S jnU" TT-   // TTT-   // [        [	        ST-
  5      TT-  -  [        T5      -  [        TT5      -  [	        ST-
  5      TTT-   -  -  /5      [        SS//5      [        TT-   S/STT-   //5      U5        U4S jn[        S	[        T5      -  5      n[        S	[        T5      -  5      n[        S	[        T5      -  5      [        S	-  -
  n[        S	[        T5      -  5      nU" T// TTT[        R                  -
  // [        [        [        5      TT[        R                  -
  -  -  XV-  XG-  -
  -  [        [        5      TT-  -  XF-  XW-  -   -  [        [        5      TT-  -  /5      [        / S
Q/5      [        T[        R                  -
  SS/TT[        R                  /SST//5      U5        g )NÚabczÚrhoc                 óL   >• TR                  [        XX#TTT	T
T/XEXg5
      5        g rb   )re   ÚMeijerFormula)Úanrg   Úbmrh   rr   rs   rt   Úmatcherrk   rl   r[   rm   r’   rn   s           €€€€€€r\   ro   Ú!add_meijerg_formulae.<locals>.addˆ  s+   ø€ Ø�‰œ b¨b°a¸!¸QÀÀ3¸Ø&'¨Aó8õ 	9r^   c                 ó$  >• U R                   S   nU R                  u  p#Sn[        X-
  R                  5       5      (       d  SnX2p2[        X-
  R                  5       5      (       d  X-
  S:”  a  g X!/nU(       a  X/nTUTX-
  0[	        U// U/ 5      4$ )Nr   FT)r•   r–   r]   ÚsimplifyÚ
G_Function)rj   rZ   Úyrn   ÚswappedÚlrk   r’   s         €€r\   Údetect_uppergammaÚ/add_meijerg_formulae.<locals>.detect_uppergammaŒ  s•   ø€ Ø�G‰G�A‰JˆØ�w‰w‰ˆØˆÜ�a‘e×%Ñ%Ó'×(Ñ(ØˆGØ�Ü�!‘%×!Ñ!Ó#×$Ñ$¨©°«	ØØˆFˆÞØ�ˆAØ�Q˜˜1™5Ð!¤:¨q¨c°2°q¸"Ó#=Ð=Ð=r^   rW   r   ry   c           
      ó¢  >• U R                   S   nU R                  u  p#n[        X#-
  R                  5       5      S:X  aT  [        X4-
  R                  5       5      S:X  a  g[        R
                  [        R
                  [        R                  4nX#Up‡nO†[        X-
  R                  5       5      S:X  a4  [        R
                  [        R                  [        R
                  4nX#UpxnO3[        R                  [        R
                  [        R
                  4nX#Upvn[        X-
  R                  5       5      S:w  d\  [        X-
  R                  5       5      S:w  d=  [        X-
  R                  5       5      [        R
                  :w  d  X-
  S:”  d  X-
  S:”  a  gT
U0[        U// U V	s/ s H  o‘[        R
                  -
  U	-   PM     sn	/ 5      4$ s  sn	f )z.https://functions.wolfram.com/07.34.03.0984.01r   N)r•   r–   r]   rš   r   rŒ   ÚZeror›   )rj   rZ   ÚuÚvÚwÚsigÚx1Úx2rœ   Útrk   s             €r\   Údetect_3113Ú)add_meijerg_formulae.<locals>.detect_3113¡  sg  ø€ à�G‰G�A‰JˆØ—'‘'‰ˆˆaÜ�!‘%×!Ñ!Ó#Ó$¨Ó)Ü�a‘e×%Ñ%Ó'Ó(¨AÓ-ØÜ—6‘6œ1Ÿ6™6¤1§6¡6Ð*ˆCØ˜a�AˆB�Aä�a‘e×%Ñ%Ó'Ó(¨AÓ-Ü—v‘vœqŸv™v¤q§v¡vÐ.�Ø !�r��rä—v‘vœqŸv™v¤q§v¡vÐ.�Ø !�r�ä�1‘6×#Ñ#Ó%Ó&¨!Ó+Ü�1‘6×#Ñ#Ó%Ó&¨!Ó+Ü�1‘5×"Ñ"Ó$Ó%¬¯©Ó/Ø‘˜“
˜a™f q›jØà�1ˆv”z 1 # rÁCÓ+HÂC¸q´·±©J¸¬NÁCÑ+HÈ"ÓMÐMÐMùÒ+Hs   Æ$Grx   )rz   r   r   )ÚlistÚmapr	   rL   r#   r   r$   r'   r   r!   r+   r   r*   r   rŒ   )rm   ro   rŸ   rª   ÚsÚc_ÚS_rs   rk   rl   r[   r’   rn   s   `       @@@@@r\   Úadd_meijerg_formulaer±   „  sÞ  ý€ Ü”cœ% Ó(Ó)�J€A€qˆ!ˆQÜ
�‹,€C÷9ò 9ö>ñ ˆˆS‰ˆ	�2˜˜Q ™W�~ rÜ”�a˜!‘e“˜Q ™VÑ#¤C¨£FÑ*¬:°a¸Ó+;Ñ;Ü�a˜!‘e“˜Q  S¡™\Ñ)ð+ó 	,ä��A�ˆxÓÜ��q‘˜"�  1 s¡7˜|Ð,Ó-ØôõNô2 	ˆAŒd�1‹g‰I‹€AÜ	ˆQŒt�A‹w‰Y‹€BÜ	ˆAŒd�1‹g‰I‹œ˜A™Ñ	€BÜ
ˆ1ŒT�!‹W‰9‹€AÙˆˆˆR�!�Q˜œAŸF™F™
Ð# RÜ””R“˜˜Q¤§¡™Z™Ñ(¨"©%°!±#©+Ñ6Ü”R“˜˜A™‘˜q™t b¡d™{Ñ+Ü”R“˜˜A™‘ðó 	 ô 	’
ˆ|ÓÜ�”Q—V‘V‘˜R Ð# a¨¬A¯F©F ^°a¸¸A°YÐ?Ó@Øõr^   c                 ó   ^ • U 4S jnU$ )z?Create a function that simplifies rational functions in ``z``. c                 óÞ   >• U R                  5       u  pUR                  5       n[        UT5      R                  [        UT5      5      u  p1nX1R	                  5       -  UR	                  5       -  $ )z5Efficiently simplify the rational function ``expr``. )Úas_numer_denomr   rP   ÚcancelÚas_expr)ÚexprÚnumerÚdenomr[   rn   s       €r\   ÚsimpÚmake_simp.<locals>.simpÊ  sX   ø€ à×*Ñ*Ó,‰ˆØ—‘“ˆä˜u a›.×/Ñ/´°U¸A³Ó?‰ˆ�%Ø—=‘=“?Ñ" U§]¡]£_Ñ4Ð4r^   rw   )rn   rº   s   ` r\   Ú	make_simpr¼   Ç  s   ø€ õ5ð €Kr^   c                  óV   • [         (       a  U  H  n[        USS9  M     [        5         g g )NÚ )Úend)r   Úprint)Úargsrk   s     r\   ÚdebugrÂ   Õ  s%   € ß‚{ÛˆAÜ�!˜Ôñ ä�ð r^   c                   ó€   ^ • \ rS rSrSrU 4S jr\S 5       r\S 5       r\S 5       r	U 4S jr
S rS	 rS
 rS rSrU =r$ )rd   iÜ  z'A generalized hypergeometric function. c                 ó¶   >• [         TU ]  U 5      n[        [        [	        [
        U5      5      6 Ul        [        [        [	        [
        U5      5      6 Ul        U$ rb   )ÚsuperÚ__new__r   r¬   r­   r   rg   rh   )r`   rg   rh   ÚobjÚ	__class__s       €r\   rÆ   ÚHyper_Function.__new__ß  sD   ø€ Ü‰g‰o˜cÓ"ˆÜœœS¤¨›_Ó-Ð.ˆŒÜœœS¤¨›_Ó-Ð.ˆŒØˆ
r^   c                 ó2   • U R                   U R                  4$ rb   )rg   rh   ©Úselfs    r\   rÁ   ÚHyper_Function.argså  s   € à—‘˜Ÿ™Ð!Ð!r^   c                 óV   • [        U R                  5      [        U R                  5      4$ rb   )Úlenrg   rh   rË   s    r\   ÚsizesÚHyper_Function.sizesé  s   € ä�D—G‘G“œc $§'¡'›lÐ+Ð+r^   c                 ó:   • [        S U R                   5       5      $ )z\
Number of upper parameters that are negative integers

This is a transformation invariant.
c              3   ór   #   • U  H-  n[        UR                  =(       a    UR                  5      v •  M/     g 7frb   )ÚboolÚ
is_integerÚis_negative©Ú.0rZ   s     r\   Ú	<genexpr>Ú'Hyper_Function.gamma.<locals>.<genexpr>ô  s%   é € ÐIÂ¸A”4˜Ÿ™×6¨¯©×7Ð7Âùs   ‚57)Úsumrg   rË   s    r\   r#   ÚHyper_Function.gammaí  s   € ô ÑIÀÇÂÓIÓIÐIr^   c                 óR   >• [         TU ]  5       U R                  U R                  4-   $ rb   )rÅ   Ú_hashable_contentrg   rh   ©rÌ   rÈ   s    €r\   rÞ   Ú Hyper_Function._hashable_contentö  s*   ø€ Ü‰wÑ(Ó*¨d¯g©gØ—‘ð.ñ ð 	r^   c                 óD   • [        U R                  U R                  U5      $ rb   )r?   rg   rh   )rÌ   Úargs     r\   Ú__call__ÚHyper_Function.__call__ú  s   € Ü�T—W‘W˜dŸg™g sÓ+Ð+r^   c                 ó¤   • [        U R                  [        5      [        U R                  [        5      p!S nU R                  U" U5      U" U5      4$ )af  
Compute the invariant vector.

Explanation
===========

The invariant vector is:
    (gamma, ((s1, n1), ..., (sk, nk)), ((t1, m1), ..., (tr, mr)))
where gamma is the number of integer a < 0,
      s1 < ... < sk
      nl is the number of parameters a_i congruent to sl mod 1
      t1 < ... < tr
      ml is the number of parameters b_i congruent to tl mod 1

If the index pair contains parameters, then this is not truly an
invariant, since the parameters cannot be sorted uniquely mod1.

Examples
========

>>> from sympy.simplify.hyperexpand import Hyper_Function
>>> from sympy import S
>>> ap = (S.Half, S.One/3, S(-1)/2, -2)
>>> bq = (1, 2)

Here gamma = 1,
     k = 3, s1 = 0, s2 = 1/3, s3 = 1/2
            n1 = 1, n2 = 1,   n2 = 2
     r = 1, t1 = 0
            m1 = 2:

>>> Hyper_Function(ap, bq).build_invariants()
(1, ((0, 1), (1/3, 1), (1/2, 2)), ((0, 2),))
c           
      óú   • [        U R                  5       5      n [        S U  5       5      (       d  U R                  S S9  [	        U  VVs/ s H  u  pU(       d  M  U[        U5      4PM     snn5      n U $ s  snnf )Nc              3   óH   #   • U  H  n[        US    [        5      v •  M     g7f)r   N)Ú
isinstancer   r×   s     r\   rÙ   Ú>Hyper_Function.build_invariants.<locals>.tr.<locals>.<genexpr>$  s   é € Ð=²f°”z ! A¡$¬×,Ð,²fùs   ‚ "c                 ó   • [        U S   5      $ ©Nr   r   ©rZ   s    r\   Ú<lambda>Ú=Hyper_Function.build_invariants.<locals>.tr.<locals>.<lambda>%  s   € Ô*:¸1¸Q¹4Ô*@r^   ©Úkey)r¬   ÚitemsÚanyÚsortÚtuplerÏ   )ÚbucketÚmodÚvaluess      r\   ÚtrÚ+Hyper_Function.build_invariants.<locals>.tr"  sn   € Ü˜&Ÿ,™,›.Ó)ˆFÜÑ=±fÓ=×=Ñ=Ø—‘Ñ @�ÑAÜÁ&ô Â&±;°3Üó /˜S¤# f£+Ó.Á&ò ó ˆFàˆMùós   ÁA7
ÁA7
)rT   rg   r]   rh   r#   )rÌ   ÚabucketsÚbbucketsrø   s       r\   Úbuild_invariantsÚHyper_Function.build_invariantsý  sB   € ôF " $§'¡'¬5Ó1´4¸¿¹ÄÓ3G�(ò	ð —
‘
™B˜x›L©"¨X«,Ð7Ð7r^   c                 óœ  • U R                   UR                   :w  a  gU R                  U R                  UR                  UR                  4 Vs/ s H  n[        U[        5      PM     snu  p4pVSnXS4Xd44 HÏ  u  p‰[        [        UR                  5       5      [        U	R                  5       5      -   5       HŠ  n
X¨;  d!  X©;  d  [        XŠ   5      [        Xš   5      :w  a      g[        XŠ   5      n[        Xš   5      nUR                  5         UR                  5         [        X¼5       H  u  pÞU[        XÞ-
  5      -  nM     MŒ     MÑ     U$ s  snf )zWEstimate how many steps it takes to reach ``func`` from self.
Return -1 if impossible. ry   r   )r#   rg   rh   rT   r]   Úsetr¬   ÚkeysrÏ   ró   ÚzipÚabs)rÌ   rj   ÚparamsÚ	oabucketsÚ	obbucketsrú   rû   Údiffrõ   Úobucketrö   Úl1Úl2ÚiÚjs                  r\   Ú
difficultyÚHyper_Function.difficulty,  s   € ð �:‰:˜Ÿ™Ó#ØàŸ7™7 D§G¡G¨T¯W©W°d·g±gÑ>ó4@Ú>�ô 59¸ÄÖ4GÙ>ñ4@Ñ0ˆ	˜hð ˆØ!)Ð 5¸Ð7LÓM‰OˆFÜœ4 §¡£Ó.´°g·l±l³nÓ1EÑEÖF�ØÓ%¨3Ó+=Ü˜v™{Ó+¬s°7±<Ó/@Ó@ÚÜ˜&™+Ó&�Ü˜'™,Ó'�Ø—‘”	Ø—‘”	Ü žK‘D�AØœC ¡›JÑ&’Dó (ó Gñ  Nð ˆùò!4@s   ÁE	c                 óJ  • U R                    H?  nU R                   H,  nX-
  R                  (       d  M  X-
  R                  SL d  M+      g   MA     U R                    H  nUS:X  d  M    g   U R                   H)  nUR                  (       d  M  UR                  (       d  M)    g   g)aA  
Decide if ``self`` is a suitable origin.

Explanation
===========

A function is a suitable origin iff:
* none of the ai equals bj + n, with n a non-negative integer
* none of the ai is zero
* none of the bj is a non-positive integer

Note that this gives meaningful results only when none of the indices
are symbolic.

Fr   T)rg   rh   rÕ   rÖ   Úis_nonpositive)rÌ   rk   rl   s      r\   Ú_is_suitable_originÚ"Hyper_Function._is_suitable_originC  s†   € ð  —”ˆAØ—W”W�Ø‘E×%×%Ñ%¨1©5×*=Ñ*=ÀÔ*FÚ ó ñ ð —”ˆAØ�A�vÙñ ð —”ˆAØ�|�|‰| × 0× 0Ñ 0Ùñ ð r^   rw   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rÆ   ÚpropertyrÁ   rÐ   r#   rÞ   rã   rü   r  r  Ú__static_attributes__Ú__classcell__©rÈ   s   @r\   rd   rd   Ü  sh   ø† Ù2õð ñ"ó ð"ð ñ,ó ð,ð ñJó ðJõò,ò-8ò^÷.ð r^   rd   c                   ód   ^ • \ rS rSrSrU 4S jr\S 5       rU 4S jrS r	S r
\S 5       rS	rU =r$ )
r›   i`  zA Meijer G-function. c                 óF  >• [         TU ]  U 5      n[        [        [	        [
        U5      5      6 Ul        [        [        [	        [
        U5      5      6 Ul        [        [        [	        [
        U5      5      6 Ul        [        [        [	        [
        U5      5      6 Ul	        U$ rb   )
rÅ   rÆ   r   r¬   r­   r   r•   rg   r–   rh   )r`   r•   rg   r–   rh   rÇ   rÈ   s         €r\   rÆ   ÚG_Function.__new__c  sr   ø€ Ü‰g‰o˜cÓ"ˆÜœœS¤¨›_Ó-Ð.ˆŒÜœœS¤¨›_Ó-Ð.ˆŒÜœœS¤¨›_Ó-Ð.ˆŒÜœœS¤¨›_Ó-Ð.ˆŒØˆ
r^   c                 ó^   • U R                   U R                  U R                  U R                  4$ rb   )r•   rg   r–   rh   rË   s    r\   rÁ   ÚG_Function.argsk  s!   € à—‘˜Ÿ™ $§'¡'¨4¯7©7Ð3Ð3r^   c                 ó:   >• [         TU ]  5       U R                  -   $ rb   )rÅ   rÞ   rÁ   rß   s    €r\   rÞ   ÚG_Function._hashable_contento  s   ø€ Ü‰wÑ(Ó*¨T¯Y©YÑ6Ð6r^   c                 óp   • [        U R                  U R                  U R                  U R                  U5      $ rb   )rK   r•   rg   r–   rh   )rÌ   rn   s     r\   rã   ÚG_Function.__call__r  s%   € Ü�t—w‘w §¡¨¯©°$·'±'¸1Ó=Ð=r^   c                 ó   ^• [        S5       Vs/ s H  n[        [        5      PM     sn=nu  p4pV[        X R                  U R
                  U R                  U R                  45       H+  u  pxU H   n	U[        U	5         R                  U	5        M"     M-     [        US5       H;  u  pzUR                  5        H"  u  p¼US   mUR                  U4S jU
S9  XÇU'   M$     M=     [        U Vs/ s H  n[        U5      PM     sn5      $ s  snf s  snf )a+  
Compute buckets for the fours sets of parameters.

Explanation
===========

We guarantee that any two equal Mod objects returned are actually the
same, and that the buckets are sorted by real part (an and bq
descendending, bm and ap ascending).

Examples
========

>>> from sympy.simplify.hyperexpand import G_Function
>>> from sympy.abc import y
>>> from sympy import S

>>> a, b = [1, 3, 2, S(3)/2], [1 + y, y, 2, y + 3]
>>> G_Function(a, b, [2], [y]).compute_buckets()
({0: [3, 2, 1], 1/2: [3/2]},
{0: [2], y: [y, y + 1, y + 3]}, {0: [2]}, {y: [y]})

r|   )TFFTr   c                 ó   >• U T-
  $ rb   rw   )rZ   Úx0s    €r\   rí   Ú,G_Function.compute_buckets.<locals>.<lambda>•  s	   ø€ ¨¨Rªr^   )rð   Úreverse)Úranger   r¬   r  r•   rg   r–   rh   r]   re   rñ   ró   rô   Údict)rÌ   r
  ÚdictsÚpanÚpapÚpbmÚpbqÚdicÚlisrZ   ÚflipÚmrñ   r¥   r&  s                 @r\   Úcompute_bucketsÚG_Function.compute_bucketsu  sî   ø€ ô0 BGÀqÄÓ%JÂ¸A¤k´$Ö&7ÁÑ%JÐJˆÑ"�˜#Ü˜E§G¡G¨T¯W©W°d·g±g¸t¿w¹wÐ#GÖH‰HˆCÛ�Ø”E˜!“H‘×$Ñ$ QÖ'ó ñ Iô ˜UÐ$>Ö?‰IˆCØŸI™IžK‘�Ø˜1‘X�Ø—
‘
Ô/¸�
Ñ>Ø�A“ó (ñ @ô ¡uÓ-¢u !”d˜1–g¡uÑ-Ó.Ð.ùò &Kùò .s   �DÃ*Dc                 ó¦   • [        U R                  5      [        U R                  5      [        U R                  5      [        U R                  5      4$ rb   )rÏ   r•   rg   r–   rh   rË   s    r\   Ú	signatureÚG_Function.signatureš  s1   € ä�D—G‘G“œc $§'¡'›l¬C°·±«L¼#¸d¿g¹g»,ÐGÐGr^   rw   )r  r  r  r  r  rÆ   r  rÁ   rÞ   rã   r4  r7  r  r  r  s   @r\   r›   r›   `  sE   ø† Ù õð ñ4ó ð4õ7ò>ò#/ðJ ñHó öHr^   r›   rZ   c                   ó>   • \ rS rSrSrS rS	S jr\S 5       rS r	Sr
g)
rf   i¢  aí  
This class represents hypergeometric formulae.

Explanation
===========

Its data members are:
- z, the argument
- closed_form, the closed form expression
- symbols, the free symbols (parameters) in the formula
- func, the function
- B, C, M (see _compute_basis)

Examples
========

>>> from sympy.abc import a, b, z
>>> from sympy.simplify.hyperexpand import Formula, Hyper_Function
>>> func = Hyper_Function((a/2, a/3 + b, (1+a)/2), (a, b, (a+b)/7))
>>> f = Formula(func, z, None, [a, b])

c                 óX  • U R                   R                   Vs/ s H  n[        U-   PM     nnU R                   R                   Vs/ s H  n[        U-   S-
  PM     nn[        [	        U6 -  U R
                  [	        U6 -  -
  n[        U[        5      nUR                  " 5       S-
  nU/n[        U5       H=  n	UR                  U R
                  US   R                  U R
                  5      -  5        M?     [        U5      U l        [        S/S/U-  -   /5      U l        [        U5      n
U
R                  S[!        US5      5      n
UR"                  " 5       SS nUR%                  5         U
R'                  U[        U/5      * UR"                  " 5       S   -  5      U l        gs  snf s  snf )z‚
Compute a set of functions B=(f1, ..., fn), a nxn matrix M
and a 1xn matrix C such that:
   closed_form = C B
   z d/dz B = M B.
rW   ry   r   N)rj   rg   Ú_xrh   r   rn   rQ   Údegreer)  re   r  rL   rr   rs   rM   Ú
col_insertrN   Ú
all_coeffsr(  Ú
row_insertrt   )rÌ   Úclosed_formrk   Úafactorsrl   Úbfactorsr·   rP   ÚnÚ_r3  rž   s               r\   Ú_compute_basisÚFormula._compute_basisº  sS  € ð %)§I¡I§L¢LÓ1¢L˜q”B˜”F¡LˆÐ1Ø(,¯	©	¯ªÓ5ª 1”B˜‘F˜Q”J©ˆÐ5Ü”#�x�.Ñ  4§6¡6¬#¨x¨.Ñ#8Ñ8ˆÜ�Dœ"‹~ˆà�KŠK‹M˜AÑˆØˆMˆÜ�q–ˆAØ�H‰H�T—V‘V˜A˜b™EŸJ™J t§v¡vÓ.Ñ.Ö/ñ ô ˜“ˆŒÜ˜!˜ ˜s 1™u™˜Ó&ˆŒä�‹FˆØ�L‰L˜œE ! Q›KÓ(ˆØ�OŠOÓ˜a˜bÐ!ˆØ	�	‰	ŒØ—‘˜a¤&¨!¨£+ ¨d¯oªoÓ.?ÀÑ.BÑ!BÓCˆ�ùò# 2ùÚ5s   ™F"ÁF'Nc                 ó  • [        U5      n[        U5      n[        U5       Vs/ s H  o�R                  U5      (       d  M  UPM     nnX l        X@l        XPl        X`l        Xpl        Xl        Ub  U R                  U5        g g s  snf rb   )	r   Úhasrn   r
   rr   rs   rt   rj   rE  )	rÌ   rj   rn   ri   r
   rr   rs   rt   rZ   s	            r\   Ú__init__ÚFormula.__init__Ô  st   € Ü�A‹JˆÜ�c‹lˆÜ% gÔ.Ó>Ò.˜·(±(¸1·+—1Ñ.ˆÐ>àŒØŒØŒØŒØŒØŒ	ð
 ‰?Ø×Ñ Õ$ð ùò ?s   ¤BÁBc                 óv   • [        S [        U R                  U R                  5      [        R
                  5      $ )Nc                 ó   • XS   US   -  -   $ ©Nr   rW   rw   ©r®   r3  s     r\   rí   Ú%Formula.closed_form.<locals>.<lambda>è  ó   €  ! a¡D¨¨1©¡I¢+r^   ©r   r  rs   rr   r   r¢   rË   s    r\   r@  ÚFormula.closed_formæ  ó%   € äÑ-¬s°4·6±6¸4¿6¹6Ó/BÄAÇFÁFÓKÐKr^   c                 óâ  ^ ^!• SSK Jn  UR                  nUR                  n[	        U5      [	        T R
                  R                  5      :w  d,  [	        U5      [	        T R
                  R                  5      :w  a  [        S5      e/ nT R                   H~  nUT R
                  R                  R                  ;   a  UR                  U5        M:  UT R
                  R                  R                  ;   a  UR                  U5        Mq  [        SU< 35      e   [        U6  Vs/ s H+  n[        [        [        T R                  U5      5      5      PM-     nnX44 V	s/ s H  n	[        U	[         5      PM     sn	u  p«X«4 VVVs/ s H2  nUR#                  5        VVs0 s H  u  pmU[	        U5      _M     snnPM4     snnnu  pïT R                   Vs/ s H  nS/PM     nn/ n[%        5       nU GHW  m!T R
                  R                  T R
                  R                  4 V	s/ s H  n	[        U	U!4S j5      PM     sn	u  nnU
U4UU44 GHW  u  nn['        [        UR)                  5       5      [        UR)                  5       5      -   5       GH  nUU;  d$  UU;  d  [	        UU   5      [	        UU   5      :w  a    Mt  [        T R                  U5       HÄ  u  pmT!U   R*                  (       a  M  UU    Vs/ s H  nUR-                  U5      (       d  M  UPM     nnT!R/                  5       nUU==   U-  ss'   U HY  nUU    HM  nU" UR1                  U5      U-
  U5      u  nUR*                  (       a  [        S5      eUR                  U5        MO     M[     MÆ     GM     GMZ     / n[        T R                  U5       Hd  u  pmT!U   n[3        [5        U5      5      n[7        [9        U5      5      nUR                  [;        UUS-   5       V s/ s H  n UU -   PM
     sn 5        Mf     UR=                  U 4S j[        U6  5       5        GMZ     U$ s  snf s  sn	f s  snnf s  snnnf s  snf s  sn	f s  snf s  sn f )	z»
Find substitutions of the free symbols that match ``func``.

Return the substitution dictionaries as a list. Note that the returned
instantiations need not actually match, or be valid!

r   )Úsolvez-Cannot instantiate other number of parametersz?At least one of the parameters of the formula must be equal to c                 ó8   >• [        U R                  T5      5      $ rb   )r]   Úxreplace)rZ   Úrepls    €r\   rí   Ú-Formula.find_instantiations.<locals>.<lambda>	  s   ø€ ´U¸1¿:¹:ÀdÓ;KÔ5Lr^   zValue should not be truerW   c           	   3   ót   >#   • U  H-  n[        [        [        TR                  U5      5      5      v •  M/     g 7frb   )r*  r¬   r  r
   )rØ   rž   rÌ   s     €r\   rÙ   Ú.Formula.find_instantiations.<locals>.<genexpr>#  s+   øé € ÐYÒHXÀ1œd¤4¬¨D¯L©L¸!Ó(<Ó#=×>Ð>ÒHXùs   ƒ58)Úsympy.solversrU  rg   rh   rÏ   rj   Ú	TypeErrorr
   rÁ   re   Ú
ValueErrorr   r*  r¬   r  rT   r]   rñ   r	   rÿ   r   Úfree_symbolsrH  ÚcopyrW  r4   Úminr5   Úmaxr)  Úextend)"rÌ   rj   rU  rg   rh   Úsymbol_valuesrk   r÷   Ú	base_replr  rú   rû   rõ   ÚvalsÚa_invÚb_invrD  Úcritical_valuesÚresultÚ_nÚsymb_aÚsymb_br  rö   r·   ÚexprsÚrepl0ÚtargetÚn0Úa0Úmin_Úmax_rC  rX  s"   `                                @r\   Úfind_instantiationsÚFormula.find_instantiationsê  s±  ù€ õ 	(Ø�W‰WˆØ�W‰WˆÜˆr‹7”c˜$Ÿ)™)Ÿ,™,Ó'Ó'¬3¨r«7´c¸$¿)¹)¿,¹,Ó6GÓ+GÜÐKÓLÐLØˆØ—”ˆAØ�D—I‘I—L‘L×%Ñ%Ó%Ø×$Ñ$ RÖ(Ø�d—i‘i—l‘l×'Ñ'Ó'Ø×$Ñ$ RÖ(å Ú9:ð"=ó >ð >ñ ô & }Ñ5ó7Ú5�Fô œ$œs 4§<¡<°Ó8Ó9Ö:Ù5ð 	ð 7àACÁÓIÂ°fœd 6¬5Ö1ÁÑIÑˆà'Ñ2õ4Ú2�Fð 6<·\±\´^ÔD²^©'¨!˜œC ›Iš±^ÕDÙ2ó4‰ˆà(,¯ªÓ5ª 1˜A›3©ˆÐ5ØˆÜ‹WˆÜˆDà#Ÿy™yŸ|™|¨T¯Y©Y¯\©\Ñ:ó<Ú:�Fô # 6Ô+LÖMÙ:ñ<‰NˆF�Fà%-¨vÐ$6¸À6Ð8JÔ#K‘�˜Üœt F§K¡K£MÓ2´T¸'¿,¹,».Ó5IÑI×J�CØ 6Ó)¨s¸'Ó/AÜ" 6¨#¡;Ó/´3°w¸s±|Ó3DÓDÚÜ#& t§|¡|°_Ö#E™˜Ø ™7×/×/Ù$Ø29¸#²,Ó N²,¨$À$Ç(Á(È1Ç+§±,˜Ð NØ $§	¡	£˜Ø˜a› B™›Û$)˜DØ*0°¬+ Ù&+¨D¯M©M¸%Ó,@À6Ñ,IÈ2Ó&N¡ Ø#%§?§?Ü*4Ð5OÓ*PÐ$PØ $§¡¨B¦ó	 +6ó %*ô $Fô	 Kñ $Lð$ �Ü" 4§<¡<°ÖA‘G�AØ˜a™�BÜ ¤ T£Ó+�DÜ"¤3 t£9Ó-�DØ—M‘M´5¸¸tÀa¹xÔ3HÓ"IÒ3H¨a 2¨¤6Ñ3HÑ"IÖJñ	  Bð
 —‘ÔYÌÐQWÑHXÓY×Yñ7 ð8 ˆùòI7ùâIùÛDùô 4ùâ5ùò<ùò !Oùò #JsB   Ä2QÅQÅ=QÆQÆ.QÇQÈQ"Ë.Q'ÌQ'ÐQ,ÑQ)rr   rs   rt   rj   r
   rn   )NNN)r  r  r  r  r  rE  rI  r  r@  ru  r  rw   r^   r\   rf   rf   ¢  s-   † ñò.Dô4%ð$ ñLó ðLõ:r^   rf   c                   ó$   • \ rS rSrSrS rS rSrg)ÚFormulaCollectioni)  z,A collection of formulae to use as origins. c                 ó¦  • 0 U l         0 U l        / U l        [        U R                  5        U R                   H—  nUR                  R
                  n[        UR                  5      S:”  a-  U R                   R                  U/ 5      R                  U5        M_  UR                  R                  5       nXR                  R                  U0 5      U'   M™     g)z6Doing this globally at module init time is a pain ... r   N)Úsymbolic_formulaeÚconcrete_formulaerm   r�   rj   rÐ   rÏ   r
   Ú
setdefaultre   rü   )rÌ   ÚfrÐ   Úinvs       r\   rI  ÚFormulaCollection.__init__,  s    € à!#ˆÔØ!#ˆÔØˆŒä�T—]‘]Ô#ð
 —”ˆAØ—F‘F—L‘LˆEÜ�1—9‘9‹~ Ó!Ø×&Ñ&×1Ñ1°%¸Ó<×CÑCÀAÖFà—f‘f×-Ñ-Ó/�ØDE×&Ñ&×1Ñ1°%¸Ó<¸SÓAò r^   c                 ó\  • UR                  5       nUR                  nX0R                  ;   a$  X R                  U   ;   a  U R                  U   U   $ X0R                  ;  a  g/ nU R                  U    H{  nUR	                  U5      nU Ha  nUR
                  R                  U5      nUR                  5       (       d  M5  UR                  U5      n	U	S:X  a  MN  UR                  X—XX45        Mc     M}     UR                  S S9  U H§  u  p§pX[        X…R                  S/ UR                  R                  U5      UR                  R                  U5      UR                   R                  U5      5      n[#        S UR                  UR                   UR                  4 5       5      (       a  M¥  Us  $    g)aû  
Given the suitable target ``func``, try to find an origin in our
knowledge base.

Examples
========

>>> from sympy.simplify.hyperexpand import (FormulaCollection,
...     Hyper_Function)
>>> f = FormulaCollection()
>>> f.lookup_origin(Hyper_Function((), ())).closed_form
exp(_z)
>>> f.lookup_origin(Hyper_Function([1], ())).closed_form
HyperRep_power1(-1, _z)

>>> from sympy import S
>>> i = Hyper_Function([S('1/4'), S('3/4 + 4')], [S.Half])
>>> f.lookup_origin(i).closed_form
HyperRep_sqrts1(-1/4, _z)
Nry   c                 ó   • U S   $ rë   rw   rì   s    r\   rí   Ú1FormulaCollection.lookup_origin.<locals>.<lambda>k  s   €  A a¢Dr^   rï   c              3   ó~   #   • U  H3  oR                  [        R                  [        [        * [        5      v •  M5     g 7frb   )rH  r   ÚNaNr   r   )rØ   Úes     r\   rÙ   Ú2FormulaCollection.lookup_origin.<locals>.<genexpr>o  s(   é € ÐNÒ;M°a—u‘uœQŸU™U¤B¬¨¬S×1Ð1Ò;Mùs   ‚;=)rü   rÐ   r{  rz  ru  rj   rW  r  r  re   ró   rf   rn   rr   Úsubsrs   rt   rò   )rÌ   rj   r~  rÐ   Úpossibler}  ÚreplsrX  Úfunc2r  rD  Úf2s               r\   Úlookup_originÚFormulaCollection.lookup_origin?  sn  € ð* ×#Ñ#Ó%ˆØ—
‘
ˆØ×*Ñ*Ó*Ø×-Ñ-¨eÑ4Ó4Ø×)Ñ)¨%Ñ0°Ñ5Ð5ð ×.Ñ.Ó.ØàˆØ×'Ñ'¨Ô.ˆAØ×)Ñ)¨$Ó/ˆEÛ�ØŸ™Ÿ™¨Ó-�Ø×0Ñ0×2Ñ2ÙØ×'Ñ'¨Ó-�Ø˜2“:ÙØ—‘ ¨QÐ 6Ö7ó ñ /ð 	�‰™.ˆÑ)Û!)ÑˆA�QÜ˜§¡ T¨2¨q¯s©s¯x©x¸«~Ø—C‘C—H‘H˜T“N A§C¡C§H¡H¨T£Nó4ˆBäÑN¸B¿D¹DÀ"Ç$Á$ÈÏÉÑ;MÓN×NÓNØ’	ñ	 "*ð r^   )r{  rm   rz  N©r  r  r  r  r  rI  rŒ  r  rw   r^   r\   rx  rx  )  s   † Ù7òFõ&3r^   rx  c                   ó4   • \ rS rSrSrS r\S 5       rS rSr	g)r”   iu  zË
This class represents a Meijer G-function formula.

Its data members are:
- z, the argument
- symbols, the free symbols (parameters) in the formula
- func, the function
- B, C, M (c/f ordinary Formula)
c                 óâ   • XX44 Vs/ s H"  n[        [        [        [        U5      5      6 PM$     snu  pp4[	        XX45      U l        XPl        X`l        X l        Xpl	        X€l
        X�l        g s  snf rb   )r   r¬   r­   r   r›   rj   rn   r
   Ú_matcherrr   rs   rt   )rÌ   r•   rg   r–   rh   rn   r
   rr   rs   rt   r—   r¥   s               r\   rI  ÚMeijerFormula.__init__€  sc   € ØACÈÑ@PÓQÒ@P¸1œ%¤¤c¬&°!£nÓ!5Ó6Ñ@PÑQ‰ˆ�Ü˜r rÓ.ˆŒ	ØŒØŒØŒØŒØŒØ�ùò Rs   ‡)A,c                 óv   • [        S [        U R                  U R                  5      [        R
                  5      $ )Nc                 ó   • XS   US   -  -   $ rM  rw   rN  s     r\   rí   Ú+MeijerFormula.closed_form.<locals>.<lambda>Œ  rP  r^   rQ  rË   s    r\   r@  ÚMeijerFormula.closed_formŠ  rS  r^   c                 ó   • UR                   U R                  R                   :w  a  gU R                  U5      nUb•  Uu  p4[        UR                  UR
                  UR                  UR                  U R                  / U R                  R                  U5      U R                  R                  U5      U R                  R                  U5      S5
      $ g)zg
Try to instantiate the current formula to (almost) match func.
This uses the _matcher passed on init.
N)r7  rj   r‘  r”   r•   rg   r–   rh   rn   rr   r‡  rs   rt   )rÌ   rj   ri   r‡  Únewfuncs        r\   Útry_instantiateÚMeijerFormula.try_instantiateŽ  s›   € ð
 �>‰>˜TŸY™Y×0Ñ0Ó0ØØ�m‰m˜DÓ!ˆØ‰?Ø‰MˆDÜ  §¡¨W¯Z©Z¸¿¹ÀWÇZÁZØ!%§¡¨Ø!%§¡§¡¨TÓ!2°D·F±F·K±KÀÓ4EØ!%§¡§¡¨TÓ!2°Dó:ð :ð r^   )rr   rs   rt   r‘  rj   r
   rn   N)
r  r  r  r  r  rI  r  r@  r™  r  rw   r^   r\   r”   r”   u  s'   † ñòð ñLó ðLõ:r^   r”   c                   ó$   • \ rS rSrSrS rS rSrg)ÚMeijerFormulaCollectioniž  z5
This class holds a collection of meijer g formulae.
c                 óð   • / n[        U5        [        [        5      U l        U H5  nU R                  UR                  R
                     R                  U5        M7     [        U R                  5      U l        g rb   )r±   r   r¬   rm   rj   r7  re   r*  )rÌ   rm   Úformulas      r\   rI  Ú MeijerFormulaCollection.__init__£  sV   € ØˆÜ˜XÔ&Ü#¤DÓ)ˆŒÛˆGØ�M‰M˜'Ÿ,™,×0Ñ0Ñ1×8Ñ8¸ÖAñ  ä˜TŸ]™]Ó+ˆ�r^   c                 óª   • UR                   U R                  ;  a  gU R                  UR                       H  nUR                  U5      nUc  M  Us  $    g)z)Try to find a formula that matches func. N)r7  rm   r™  )rÌ   rj   rž  ri   s       r\   rŒ  Ú%MeijerFormulaCollection.lookup_origin«  sF   € à�>‰> §¡Ó.ØØ—}‘} T§^¡^Ô4ˆGØ×)Ñ)¨$Ó/ˆCØ‹Ø’
ò 5r^   )rm   NrŽ  rw   r^   r\   rœ  rœ  ž  s   † ñò,õr^   rœ  c                   ó   • \ rS rSrSrS rSrg)ÚOperatoriµ  aL  
Base class for operators to be applied to our functions.

Explanation
===========

These operators are differential operators. They are by convention
expressed in the variable D = z*d/dz (although this base class does
not actually care).
Note that when the operator is applied to an object, we typically do
*not* blindly differentiate but instead use a different representation
of the z*d/dz operator (see make_derivative_operator).

To subclass from this, define a __init__ method that initializes a
self._poly variable. This variable stores a polynomial. By convention
the generator is z*d/dz, and acts to the right of all coefficients.

Thus this poly
    x**2 + 2*z*x + 1
represents the differential operator
    (z*d/dz)**2 + 2*z**2*d/dz.

This class is used only in the implementation of the hypergeometric
function expansion algorithm.
c                 ó  • U R                   R                  5       nUR                  5         U/nUSS  H  nUR                  U" US   5      5        M     US   US   -  n[	        USS USS 5       H  u  pWXeU-  -  nM     U$ )aX  
Apply ``self`` to the object ``obj``, where the generator is ``op``.

Examples
========

>>> from sympy.simplify.hyperexpand import Operator
>>> from sympy.polys.polytools import Poly
>>> from sympy.abc import x, y, z
>>> op = Operator()
>>> op._poly = Poly(x**2 + z*x + y, x)
>>> op.apply(z**7, lambda f: f.diff(z))
y*z**7 + 7*z**7 + 42*z**5
rW   Nry   r   )Ú_polyr>  r(  re   r  )rÌ   rÇ   ÚopÚcoeffsÚdiffsr[   ÚrÚds           r\   ÚapplyÚOperator.applyÐ  sŒ   € ð —‘×&Ñ&Ó(ˆØ�‰ÔØ�ˆØ˜˜“ˆAØ�L‰L™˜E "™I›Ö'ñ à�1‰I�e˜A‘hÑˆÜ˜˜q˜r˜
 E¨!¨" IÖ.‰DˆAØ�1‘‰HŠAñ /àˆr^   rw   N)r  r  r  r  r  r«  r  rw   r^   r\   r£  r£  µ  s   † ñõ4r^   r£  c                   ó   • \ rS rSrSrS rSrg)ÚMultOperatoriê  z Simply multiply by a "constant" c                 ó.   • [        U[        5      U l        g rb   )rQ   r;  r¥  )rÌ   Úps     r\   rI  ÚMultOperator.__init__í  s   € Ü˜!œR“[ˆ�
r^   ©r¥  N)r  r  r  r  r  rI  r  rw   r^   r\   r®  r®  ê  s
   † Ù+õ!r^   r®  c                   ó$   • \ rS rSrSrS rS rSrg)ÚShiftAiñ  zIncrement an upper index. c                 óz   • [        U5      nUS:X  a  [        S5      e[        [        U-  S-   [        5      U l        g )Nr   z"Cannot increment zero upper index.rW   ©r   r^  rQ   r;  r¥  )rÌ   Úais     r\   rI  ÚShiftA.__init__ô  s4   € Ü�R‹[ˆØ�‹7ÜÐAÓBÐBÜœ"˜R™% !™)¤RÓ(ˆ�
r^   c                 óH   • SSU R                   R                  5       S   -  -  $ )Nz<Increment upper %s.>rW   r   ©r¥  r>  rË   s    r\   Ú__str__ÚShiftA.__str__ú  s$   € Ø&¨!¨D¯J©J×,AÑ,AÓ,CÀAÑ,FÑ*FÑGÐGr^   r²  N©r  r  r  r  r  rI  r»  r  rw   r^   r\   r´  r´  ñ  s   † Ù%ò)õHr^   r´  c                   ó$   • \ rS rSrSrS rS rSrg)ÚShiftBiþ  zDecrement a lower index. c                 ó€   • [        U5      nUS:X  a  [        S5      e[        [        US-
  -  S-   [        5      U l        g )NrW   z"Cannot decrement unit lower index.r¶  ©rÌ   Úbis     r\   rI  ÚShiftB.__init__  s8   € Ü�R‹[ˆØ�‹7ÜÐAÓBÐBÜœ"˜b 1™f™+¨™/¬2Ó.ˆ�
r^   c                 óN   • SSU R                   R                  5       S   -  S-   -  $ )Nz<Decrement lower %s.>rW   r   rº  rË   s    r\   r»  ÚShiftB.__str__  s)   € Ø&¨!¨D¯J©J×,AÑ,AÓ,CÀAÑ,FÑ*FÈÑ*JÑKÐKr^   r²  Nr½  rw   r^   r\   r¿  r¿  þ  s   † Ù$ò/õLr^   r¿  c                   ó$   • \ rS rSrSrS rS rSrg)ÚUnShiftAi  zDecrement an upper index. c                 óâ  • [        [        [        XU/5      5      u  pnXl        X l        X0l        [        U5      n[        U5      nUR                  U5      S-
  nUS:X  a  [        S5      e[        XE-  [        5      nU H  nU[        [        U-   [        5      -  nM     [        S5      n[        XX-  U-
  U5      =pšU H  nXšUS-
  R                  U5      -   -  n	M     U	R                  S5      * nUS:X  a  [        S5      e[        [        U	R                  5       SS U5      R                  5       R                  U[        U-  S-   5      [        5      n	[        X–-
  U-  [        5      U l        g)úNote: i counts from zero! rW   r   z"Cannot decrement unit upper index.ÚAz0Cannot decrement upper index: cancels with lowerNry   ©r¬   r­   r   Ú_apÚ_bqÚ_iÚpopr^  rQ   r;  r	   Úas_polyÚnthr>  r¶   r‡  r¥  )rÌ   rg   rh   r
  rn   r·  r3  rk   rÊ  rC  ÚDrl   Úb0s                r\   rI  ÚUnShiftA.__init__  sN  € äœœW r¨q kÓ2Ó3‰	ˆ�àŒØŒØŒä�"‹XˆÜ�"‹XˆØ�V‰V�A‹Y˜‰]ˆà�‹7ÜÐAÓBÐBä�‘”r‹NˆÛˆAØ””b˜1‘fœbÓ!Ñ!ŠAñ ô �#‹JˆÜ�R‘T˜B‘Y Ó"Ð"ˆÛˆAØ�a˜!‘e—_‘_ QÓ'Ñ'Ñ'ŠAñ ð �e‰e�A‹hˆYˆØ�‹7Üð 2ó 3ð 3ô ”�a—l‘l“n S bÐ)¨1Ó-×5Ñ5Ó7×<Ñ<¸QÄÀ2ÁÈÁ	ÓJÌBÓOˆä˜1™5 "™*¤bÓ)ˆ�
r^   c                 ó\   • SU R                   < SU R                  < SU R                  < S3$ )Nz<Decrement upper index #ú of ú, ú.>©rÎ  rÌ  rÍ  rË   s    r\   r»  ÚUnShiftA.__str__/  ó"   � Ø;?¿7¼7Ø8<¿¼À$Ç(Ä(ðLð 	Lr^   ©rÌ  rÍ  rÎ  r¥  Nr½  rw   r^   r\   rÇ  rÇ    s   † Ù%ò*õBLr^   rÇ  c                   ó$   • \ rS rSrSrS rS rSrg)ÚUnShiftBi4  zIncrement a lower index. c                 ó  • [        [        [        XU/5      5      u  pnXl        X l        X0l        [        U5      n[        U5      nUR                  U5      S-   nUS:X  a  [        S5      e[        [        US-
  -  [        5      nU H   nU[        [        U-   S-
  [        5      -  nM"     [        S5      n[        US-
  U-  U-
  S-   U5      n	[        XH5      n
U H  nX©UR                  U5      -   -  n
M     U
R                  S5      nUS:X  a  [        S5      e[        [        U
R                  5       SS U5      R                  5       R                  U[        US-
  -  S-   5      [        5      n
[        Xj-
  U-  [        5      U l        g)rÉ  rW   r   z Cannot increment -1 lower index.rr   z*Cannot increment index: cancels with upperNry   rË  )rÌ   rg   rh   r
  rn   rÂ  r3  rl   rr   rÒ  rC  rk   rÓ  s                r\   rI  ÚUnShiftB.__init__7  sg  € äœœW r¨q kÓ2Ó3‰	ˆ�àŒØŒØŒä�"‹XˆÜ�"‹XˆØ�V‰V�A‹Y˜‰]ˆà�‹7ÜÐ?Ó@Ð@ä”�R˜!‘V‘œbÓ!ˆÛˆAØ””b˜1‘f˜q‘j¤"Ó%Ñ%ŠAñ ô �#‹JˆÜ�"�q‘&˜!‘˜b‘ 1Ñ$ aÓ(ˆÜ�‹JˆÛˆAØ�a—i‘i “lÑ"Ñ#ŠAñ ð �U‰U�1‹XˆØ�‹7ÜÐIÓJÐJä”�a—l‘l“n S bÐ)¨1Ó-×5Ñ5Ó7×<Ñ<ØŒr�2˜‘6‰{˜Q‰ó Ü!#ó%ˆô ˜1™5 "™*¤bÓ)ˆ�
r^   c                 ó\   • SU R                   < SU R                  < SU R                  < S3$ )Nz<Increment lower index #rÖ  r×  rØ  rÙ  rË   s    r\   r»  ÚUnShiftB.__str__Y  rÛ  r^   rÜ  Nr½  rw   r^   r\   rÞ  rÞ  4  s   † Ù$ò *õDLr^   rÞ  c                   ó$   • \ rS rSrSrS rS rSrg)ÚMeijerShiftAi^  zIncrement an upper b index. c                 óR   • [        U5      n[        U[        -
  [        5      U l        g rb   ©r   rQ   r;  r¥  rÁ  s     r\   rI  ÚMeijerShiftA.__init__a  s   € Ü�R‹[ˆÜ˜"œr™'¤2Ó&ˆ�
r^   c                 óB   • SU R                   R                  5       S   -  $ )Nz<Increment upper b=%s.>rW   rº  rË   s    r\   r»  ÚMeijerShiftA.__str__e  s   € Ø(¨D¯J©J×,AÑ,AÓ,CÀAÑ,FÑGÐGr^   r²  Nr½  rw   r^   r\   rä  rä  ^  s   † Ù'ò'õHr^   rä  c                   ó$   • \ rS rSrSrS rS rSrg)ÚMeijerShiftBii  zDecrement an upper a index. c                 óX   • [        U5      n[        SU-
  [        -   [        5      U l        g rV   ræ  rÁ  s     r\   rI  ÚMeijerShiftB.__init__l  s!   € Ü�R‹[ˆÜ˜!˜b™&¤2™+¤rÓ*ˆ�
r^   c                 óH   • SSU R                   R                  5       S   -
  -  $ )Nz<Decrement upper a=%s.>rW   rº  rË   s    r\   r»  ÚMeijerShiftB.__str__p  s$   € Ø(¨A°·
±
×0EÑ0EÓ0GÈÑ0JÑ,JÑKÐKr^   r²  Nr½  rw   r^   r\   rë  rë  i  s   † Ù'ò+õLr^   rë  c                   ó$   • \ rS rSrSrS rS rSrg)ÚMeijerShiftCit  zIncrement a lower b index. c                 óT   • [        U5      n[        U* [        -   [        5      U l        g rb   ræ  rÁ  s     r\   rI  ÚMeijerShiftC.__init__w  s   € Ü�R‹[ˆÜ˜2˜#¤™(¤BÓ'ˆ�
r^   c                 óD   • SU R                   R                  5       S   * -  $ )Nz<Increment lower b=%s.>rW   rº  rË   s    r\   r»  ÚMeijerShiftC.__str__{  s"   € Ø(¨T¯Z©Z×-BÑ-BÓ-DÀQÑ-GÐ,GÑHÐHr^   r²  Nr½  rw   r^   r\   rñ  rñ  t  s   † Ù&ò(õIr^   rñ  c                   ó$   • \ rS rSrSrS rS rSrg)ÚMeijerShiftDi  zDecrement a lower a index. c                 óX   • [        U5      n[        US-
  [        -
  [        5      U l        g rV   ræ  rÁ  s     r\   rI  ÚMeijerShiftD.__init__‚  s!   € Ü�R‹[ˆÜ˜"˜q™&¤2™+¤rÓ*ˆ�
r^   c                 óH   • SU R                   R                  5       S   S-   -  $ )Nz<Decrement lower a=%s.>rW   rº  rË   s    r\   r»  ÚMeijerShiftD.__str__†  s$   € Ø(¨D¯J©J×,AÑ,AÓ,CÀAÑ,FÈÑ,JÑKÐKr^   r²  Nr½  rw   r^   r\   r÷  r÷    s   † Ù&ò+õLr^   r÷  c                   ó$   • \ rS rSrSrS rS rSrg)ÚMeijerUnShiftAiŠ  zDecrement an upper b index. c           
      ó$  ^• [        [        [        XX4U/5      5      u  pp4nXl        X l        X0l        X@l        XPl        [        U5      n[        U5      n[        U5      n[        U5      nUR                  U5      S-
  n[        S[        5      [        S U 5       5      -  [        S U 5       5      -  n[        S5      n	[        Xy-
  U	5      m[        Xi5      [        U4S jU 5       5      -  [        U4S jU 5       5      -  n
U
R                  S5      nUS:X  a  [        S5      e[        [        U
R                  5       S	S
 U	5      R!                  5       R#                  X—[        -
  5      [        5      n
[        XŠ-
  U-  [        5      U l        g	)rÉ  rW   c              3   óP   #   • U  H  n[        U[        -
  [        5      v •  M     g 7frb   ©rQ   r;  ©rØ   rl   s     r\   rÙ   Ú*MeijerUnShiftA.__init__.<locals>.<genexpr>�  s   é € Ð<º°Aœt A¬¡F¬B×/Ð/ºùó   ‚$&c              3   óP   #   • U  H  n[        [        U-
  [        5      v •  M     g 7frb   r   r  s     r\   rÙ   r  �  s"   é € ÐCaÒ^`ÐYZÄDÌÈaÉÔQS×DTÐDTÒ^`ùr  rÊ  c              3   ó4   >#   • U  H  nTS -   U-
  v •  M     g7f©rW   Nrw   ©rØ   rk   rÒ  s     €r\   rÙ   r  ¡  s   øé € Ð6²2¨a˜q 1™u qžy²2ùs   ƒc              3   ó6   >#   • U  H  nT* U-   S -
  v •  M     g7fr  rw   r  s     €r\   rÙ   r  ¡  s   øé € Ð=WÒTVÈqÀ¸rÀA¹vÈ¾zÒTVùs   ƒr   z(Cannot decrement upper b index (cancels)Nry   )r¬   r­   r   Ú_anrÌ  Ú_bmrÍ  rÎ  rÏ  rQ   r;  r   r	   rÑ  r^  r>  r¶   r‡  r¥  )rÌ   r•   rg   r–   rh   r
  rn   rÂ  r3  rÊ  rC  rÓ  rÒ  s               @r\   rI  ÚMeijerUnShiftA.__init__�  sH  ø€ ä ¤¤W¨r°r¸qÐ.AÓ!BÓCÑˆ�˜àŒØŒØŒØŒØŒä�"‹XˆÜ�"‹XˆÜ�"‹XˆÜ�"‹XˆØ�V‰V�A‹Y˜‰]ˆä�”B‹Kœ$Ñ<¹Ó<Ó<Ñ<¼tÑCaÑ^`ÓCaÓ?aÑaˆä�#‹JˆÜ�‘˜‹OˆÜ�‹JœÔ6±2Ó6Ó6Ñ6¼Ô=WÑTVÓ=WÓ9WÑWˆà�U‰U�1‹XˆØ�‹7ÜÐGÓHÐHä”�a—l‘l“n S bÐ)¨1Ó-×5Ñ5Ó7×<Ñ<¸QÄRÁÓHÌ"ÓMˆä˜1™5 "™*¤bÓ)ˆ�
r^   c                 ó”   • SU R                   < SU R                  < SU R                  < SU R                  < SU R                  < S3$ )Nz<Decrement upper b index #rÖ  r×  rØ  ©rÎ  r	  rÌ  r
  rÍ  rË   s    r\   r»  ÚMeijerUnShiftA.__str__«  ó.   � ØEIÇWÄWØ&*§h¤h°·´¸$¿(¼(ÀDÇHÄHðNð 	Nr^   ©r	  rÌ  r
  rÍ  rÎ  r¥  Nr½  rw   r^   r\   rý  rý  Š  s   † Ù'ò*õ<Nr^   rý  c                   ó$   • \ rS rSrSrS rS rSrg)ÚMeijerUnShiftBi°  zIncrement an upper a index. c           
      óh  • [        [        [        XX4U/5      5      u  pp4nXl        X l        X0l        X@l        XPl        [        U5      n[        U5      n[        U5      n[        U5      nUR                  U5      S-   n[        U[        5      nU H   n	U[        SU	-
  [        -   [        5      -  nM"     U H   n	U[        U	S-
  [        -
  [        5      -  nM"     [        S5      n
[        X§-   S-
  U
5      n[        SU
5      nU H  nXË* U-   -  nM     U H
  nXËU-
  -  nM     UR                  S5      nUS:X  a  [        S5      e[        [        UR                  5       SS U
5      R                  5       R!                  U
SU-
  [        -   5      [        5      n[        XŒ-
  U-  [        5      U l        g)rÉ  rW   rr   r   z(Cannot increment upper a index (cancels)Nry   ©r¬   r­   r   r	  rÌ  r
  rÍ  rÎ  rÏ  rQ   r;  r	   rÑ  r^  r>  r¶   r‡  r¥  ©rÌ   r•   rg   r–   rh   r
  rn   r·  r3  rk   rr   rÒ  rC  rl   rÓ  s                  r\   rI  ÚMeijerUnShiftB.__init__³  s�  € ä ¤¤W¨r°r¸qÐ.AÓ!BÓCÑˆ�˜àŒØŒØŒØŒØŒä�"‹XˆÜ�"‹XˆÜ�"‹XˆÜ�"‹XˆØ�V‰V�A‹Y˜‰]ˆä�”B‹KˆÛˆAØ”�a˜!‘eœb‘j¤"Ó%Ñ%ŠAñ ãˆAØ”�a˜!‘eœb‘j¤"Ó%Ñ%ŠAñ ô �#‹JˆÜ�‘˜!‘˜QÓˆÜ��A‹JˆÛˆAØ�"�q‘&‰MŠAñ ãˆAØ�a‘%‰LŠAñ ð �U‰U�1‹XˆØ�‹7ÜÐGÓHÐHä”�a—l‘l“n S bÐ)¨1Ó-×5Ñ5Ó7×<Ñ<Øˆq�2‰vœ‰{óÜó!ˆô ˜1™5 "™*¤bÓ)ˆ�
r^   c                 ó”   • SU R                   < SU R                  < SU R                  < SU R                  < SU R                  < S3$ )Nz<Increment upper a index #rÖ  r×  rØ  r  rË   s    r\   r»  ÚMeijerUnShiftB.__str__Ú  r  r^   r  Nr½  rw   r^   r\   r  r  °  s   † Ù'ò%*õNNr^   r  c                   ó$   • \ rS rSrSrS rS rSrg)ÚMeijerUnShiftCiß  zDecrement a lower b index. c           
      óZ  • [        [        [        XX4U/5      5      u  pp4nXl        X l        X0l        X@l        XPl        [        U5      n[        U5      n[        U5      n[        U5      nUR                  U5      S-
  n[        S[        5      nU H  n	U[        U	[        -
  [        5      -  nM     U H  n	U[        [        U	-
  [        5      -  nM     [        S5      n
[        Xz-   U
5      n[        Xj5      nU H  nXËS-   U-
  -  nM     U H  nXË* U-   S-
  -  nM     UR                  S5      nUS:X  a  [        S5      e[        [        UR                  5       SS U
5      R                  5       R!                  U
[        U-
  5      [        5      n[        XŒ-
  U-  [        5      U l        g)rÉ  rW   rs   r   z(Cannot decrement lower b index (cancels)Nry   r  )rÌ   r•   rg   r–   rh   r
  rn   rÂ  r3  rl   rs   rÒ  rC  rk   rÓ  s                  r\   rI  ÚMeijerUnShiftC.__init__ç  s  € ä ¤¤W¨r°r¸qÐ.AÓ!BÓCÑˆ�˜àŒØŒØŒØŒØŒä�"‹XˆÜ�"‹XˆÜ�"‹XˆÜ�"‹XˆØ�V‰V�A‹Y˜‰]ˆä�”B‹KˆÛˆAØ”�aœ"‘fœbÓ!Ñ!ŠAñ ãˆAØ””b˜1‘fœbÓ!Ñ!ŠAñ ô �#‹JˆÜ�‘˜‹OˆÜ�‹JˆÛˆAØ�a‘%˜!‘)ÑŠAñ ãˆAØ�"�q‘&˜1‘*ÑŠAñ ð �U‰U�1‹XˆØ�‹7ÜÐGÓHÐHä”�a—l‘l“n S bÐ)¨1Ó-×5Ñ5Ó7×<Ñ<¸QÄÀRÁÓHÌ"ÓMˆä˜1™5 "™*¤bÓ)ˆ�
r^   c                 ó”   • SU R                   < SU R                  < SU R                  < SU R                  < SU R                  < S3$ )Nz<Decrement lower b index #rÖ  r×  rØ  r  rË   s    r\   r»  ÚMeijerUnShiftC.__str__  r  r^   r  Nr½  rw   r^   r\   r  r  ß  s   † Ù&ò$*õLNr^   r  c                   ó$   • \ rS rSrSrS rS rSrg)ÚMeijerUnShiftDi  zIncrement a lower a index. c           
      óh  • [        [        [        XX4U/5      5      u  pp4nXl        X l        X0l        X@l        XPl        [        U5      n[        U5      n[        U5      n[        U5      nUR                  U5      S-   n[        U[        5      nU H   n	U[        SU	-
  [        -   [        5      -  nM"     U H   n	U[        U	S-
  [        -
  [        5      -  nM"     [        S5      n
[        US-
  U
-
  U
5      n[        SU
5      nU H  nXË* U-   -  nM     U H
  nXËU-
  -  nM     UR                  S5      nUS:X  a  [        S5      e[        [        UR                  5       SS U
5      R                  5       R!                  X§S-
  [        -
  5      [        5      n[        XŒ-
  U-  [        5      U l        g)rÉ  rW   rr   r   z(Cannot increment lower a index (cancels)Nry   r  r  s                  r\   rI  ÚMeijerUnShiftD.__init__  s�  € ä ¤¤W¨r°r¸qÐ.AÓ!BÓCÑˆ�˜àŒØŒØŒØŒØŒä�"‹XˆÜ�"‹XˆÜ�"‹XˆÜ�"‹XˆØ�V‰V�A‹Y˜‰]ˆä�”B‹KˆÛˆAØ”�a˜!‘eœb‘j¤"Ó%Ñ%ŠAñ ãˆAØ”�a˜!‘eœb‘j¤"Ó%Ñ%ŠAñ ô �#‹JˆÜ��a‘˜!‘˜QÓˆÜ��A‹JˆÛˆAØ�"�q‘&‰MŠAñ ãˆAØ�a‘%‰LŠAñ ð �U‰U�1‹XˆØ�‹7ÜÐGÓHÐHä”�a—l‘l“n S bÐ)¨1Ó-×5Ñ5Ó7×<Ñ<Ø�A‰vœ‰{óÜó!ˆô ˜1™5 "™*¤bÓ)ˆ�
r^   c                 ó”   • SU R                   < SU R                  < SU R                  < SU R                  < SU R                  < S3$ )Nz<Increment lower a index #rÖ  r×  rØ  r  rË   s    r\   r»  ÚMeijerUnShiftD.__str__>  r  r^   r  Nr½  rw   r^   r\   r   r     s   † Ù&ò%*õNNr^   r   c                   óT   • \ rS rSrSrS r\S 5       r\S 5       r\S 5       r	S r
Srg	)
ÚReduceOrderiC  z7Reduce Order by cancelling an upper and a lower index. c                 óˆ  • [        U5      n[        U5      nX-
  nUR                  (       a  US:  a  gUR                  (       a  UR                  (       a  g[        R                  U 5      n[        R                  n[        U5       H  nU[        U-   U-   X&-   -  -  nM     [        U[        5      Ul        Xl        X$l        U$ )z;For convenience if reduction is not possible, return None. r   N)r   Ú
is_IntegerrÕ   r  r£  rÆ   r   r�   r)  r;  rQ   r¥  Ú_aÚ_b)r`   r·  ÚbjrC  r·   r°  Úks          r\   rÆ   ÚReduceOrder.__new__F  s›   € ä�R‹[ˆÜ�R‹[ˆØ‰GˆØ�|�|˜q 1›uØØ�=�=˜R×.×.Øä×Ñ Ó$ˆä�E‰EˆÜ�q–ˆAØ”"�r‘'˜A‘+ ¡Ñ'Ñ'ŠAñ ô ˜!œR“[ˆŒ
ØŒØŒàˆr^   c                 ó®  • [        U5      n[        U5      nX-
  nUR                  (       d  UR                  (       d  g[        R	                  U 5      n[
        R                  n[        U5       H  nXc[        -  U-   U-   -  nM     [        U[        5      Ul
        US:X  a  Xl        X%l        U$ [        SUS-
  SS9Ul        [        SUS-
  SS9Ul        U$ )zACancel b + sign*s and a + sign*s
This is for meijer G functions. Nry   rW   F)Úevaluate)r   rÖ   r(  r£  rÆ   r   r�   r)  r;  rQ   r¥  r)  r*  r   )r`   rl   rk   ÚsignrC  r·   r°  r,  s           r\   Ú_meijerÚReduceOrder._meijer\  s¾   € ô �A‹JˆÜ�A‹JˆØ‰EˆØ�=�= §§Øä×Ñ Ó$ˆä�E‰EˆÜ�q–ˆAØ”r‘'˜A‘+ ‘/Ñ"ŠAñ ô ˜!œR“[ˆŒ
Ø�2‹:ØŒGØŒGð
 ˆô ˜!˜Q ™U¨UÑ3ˆDŒGÜ˜!˜Q ™U¨UÑ3ˆDŒGàˆr^   c                 ó&   • U R                  XS5      $ )Nry   ©r1  )r`   rl   rk   s      r\   Úmeijer_minusÚReduceOrder.meijer_minusv  s   € à�{‰{˜1 Ó$Ð$r^   c                 ó4   • U R                  SU-
  SU-
  S5      $ rV   r4  )r`   rk   rl   s      r\   Úmeijer_plusÚReduceOrder.meijer_plusz  s   € à�{‰{˜1˜q™5 ! a¡%¨Ó+Ð+r^   c                 ó@   • SU R                   < SU R                  < S3$ )Nz"<Reduce order by cancelling upper z with lower rØ  )r)  r*  rË   s    r\   r»  ÚReduceOrder.__str__~  s   � à�WŒW�d—g”gðð 	r^   rw   N)r  r  r  r  r  rÆ   Úclassmethodr1  r5  r8  r»  r  rw   r^   r\   r&  r&  C  sK   † ÙBòð, ñó ðð2 ñ%ó ð%ð ñ,ó ð,õr^   r&  c                 óV  • [        U 5      n [        U5      nU R                  US9  UR                  US9  / n/ nU  Hh  nSn[        [        U5      5       H$  nU" XaU   5      nUc  M  UR	                  U5          O   Uc  UR                  U5        MW  UR                  U5        Mj     XAU4$ )z>Order reduction algorithm used in Hypergeometric and Meijer G rï   N)r¬   ró   r)  rÏ   rÏ  re   )	rg   rh   Úgenrð   ÚnapÚ	operatorsrk   r¦  r
  s	            r\   Ú_reduce_orderrA  ƒ  s¨   € ä	ˆb‹€BÜ	ˆb‹€Bà‡G�G�€GÑØ‡G�G�€GÑà
€Cà€IÛˆØˆÜ”s˜2“w–ˆAÙ�Q˜1™“ˆBØ‹~Ø—‘�q”	Ùñ	  ð
 ‰:Ø�J‰J�qŽMà×Ñ˜RÖ ñ ð �IÐÐr^   c                 ó�   • [        U R                  U R                  [        [        5      u  pn[        [        U6 [        U6 5      U4$ )a¬  
Given the hypergeometric function ``func``, find a sequence of operators to
reduces order as much as possible.

Explanation
===========

Return (newfunc, [operators]), where applying the operators to the
hypergeometric function newfunc yields func.

Examples
========

>>> from sympy.simplify.hyperexpand import reduce_order, Hyper_Function
>>> reduce_order(Hyper_Function((1, 2), (3, 4)))
(Hyper_Function((1, 2), (3, 4)), [])
>>> reduce_order(Hyper_Function((1,), (1,)))
(Hyper_Function((), ()), [<Reduce order by cancelling upper 1 with lower 1.>])
>>> reduce_order(Hyper_Function((2, 4), (3, 3)))
(Hyper_Function((2,), (3,)), [<Reduce order by cancelling
upper 4 with lower 3.>])
)rA  rg   rh   r&  r   rd   r   )rj   r?  Únbqr@  s       r\   Úreduce_orderrD  �  s<   € ô. (¨¯©°·±¼+ÔGWÓXÑ€Cˆiäœ% ˜+¤u¨c {Ó3°YÐ>Ð>r^   c                 óø   • [        U R                  U R                  [        R                  S 5      u  pn[        U R
                  U R                  [        R                  [        5      u  pEn[        XXB5      X6-   4$ )aË  
Given the Meijer G function parameters, ``func``, find a sequence of
operators that reduces order as much as possible.

Return newfunc, [operators].

Examples
========

>>> from sympy.simplify.hyperexpand import (reduce_order_meijer,
...                                         G_Function)
>>> reduce_order_meijer(G_Function([3, 4], [5, 6], [3, 4], [1, 2]))[0]
G_Function((4, 3), (5, 6), (3, 4), (2, 1))
>>> reduce_order_meijer(G_Function([3, 4], [5, 6], [3, 4], [1, 8]))[0]
G_Function((3,), (5, 6), (3, 4), (1,))
>>> reduce_order_meijer(G_Function([3, 4], [5, 6], [7, 5], [1, 5]))[0]
G_Function((3,), (), (), (1,))
>>> reduce_order_meijer(G_Function([3, 4], [5, 6], [7, 5], [5, 3]))[0]
G_Function((), (), (), ())
c                 ó   • [        U * 5      $ rb   r   rì   s    r\   rí   Ú%reduce_order_meijer.<locals>.<lambda>Ð  s   € Ô-=¸q¸bÔ-Ar^   )
rA  r•   rh   r&  r8  r–   rg   r5  r   r›   )rj   r   rC  Úops1Únbmr?  Úops2s          r\   Úreduce_order_meijerrK  ¹  se   € ô, # 4§7¡7¨D¯G©G´[×5LÑ5LÙ#AóC�N€Cˆdä" 4§7¡7¨D¯G©G´[×5MÑ5MÜ#3ó5�N€Cˆdô �c Ó)¨4©;Ð6Ð6r^   c                 ó   ^ ^• U U4S jnU$ )z>Create a derivative operator, to be passed to Operator.apply. c                 óp   >• TU R                  T5      -  U T-  -   nUR                  [        T5      5      nU$ rb   )r  Ú	applyfuncr¼   )rs   r©  rt   rn   s     €€r\   ÚdoitÚ&make_derivative_operator.<locals>.doitÙ  s4   ø€ Øˆa�f‰f�Q‹i‰K˜!˜A™#ÑˆØ�K‰Kœ	 !›Ó%ˆØˆr^   rw   )rt   rn   rO  s   `` r\   Úmake_derivative_operatorrQ  ×  s   ù€ öð €Kr^   c                 óP   • U n[        U5       H  nUR                  X25      nM     U$ )z_
Apply the list of operators ``ops`` to object ``obj``, substituting
``op`` for the generator.
)Úreversedr«  )rÇ   Úopsr¦  ri   Úos        r\   Úapply_operatorsrV  à  s*   € ð
 €CÜ�cŽ]ˆØ�g‰g�cÓŠñ à€Jr^   c           	      ób  ^^• U R                   U R                  UR                   UR                  4 Vs/ s H  n[        U[        5      PM     snu  pEpg[	        [        UR                  5       5      5      [	        [        UR                  5       5      5      :w  dF  [	        [        UR                  5       5      5      [	        [        UR                  5       5      5      :w  a  [        U < SU< 35      e/ nS mUU4S jn	UU4S jn
[        [        UR                  5       5      [        UR                  5       5      -   [        S9 GHM  nSnSnSnSnX´;   a  XK   nXk   nXµ;   a  X[   nX{   n[	        U5      [	        U5      :w  d  [	        U5      [	        U5      :w  a  [        U < SU< 35      eXÍXï4 Vs/ s H  n[        U[        S9PM     snu  pÍpïS nU" Xk5      nU" X{5      n[	        U5      S:X  a  XŠ" / XþUU5      -  nO‰[	        U5      S:X  a  X‰" U/ UUU5      -  nOkUS	   nUS	   nUS   U-
  S::  d  US   U-
  S::  a  [        S
5      eUU-
  S:”  a  X‰" XßUUU5      -  nXŠ" XÏUUU5      -  nOXŠ" XßUUU5      -  nX‰" XÞUUU5      -  nXÆU'   XçU'   GMP     UR                  5         U$ s  snf s  snf )a¨  
Devise a plan (consisting of shift and un-shift operators) to be applied
to the hypergeometric function ``target`` to yield ``origin``.
Returns a list of operators.

Examples
========

>>> from sympy.simplify.hyperexpand import devise_plan, Hyper_Function
>>> from sympy.abc import z

Nothing to do:

>>> devise_plan(Hyper_Function((1, 2), ()), Hyper_Function((1, 2), ()), z)
[]
>>> devise_plan(Hyper_Function((), (1, 2)), Hyper_Function((), (1, 2)), z)
[]

Very simple plans:

>>> devise_plan(Hyper_Function((2,), ()), Hyper_Function((1,), ()), z)
[<Increment upper 1.>]
>>> devise_plan(Hyper_Function((), (2,)), Hyper_Function((), (1,)), z)
[<Increment lower index #0 of [], [1].>]

Several buckets:

>>> from sympy import S
>>> devise_plan(Hyper_Function((1, S.Half), ()),
...             Hyper_Function((2, S('3/2')), ()), z) #doctest: +NORMALIZE_WHITESPACE
[<Decrement upper index #0 of [3/2, 1], [].>,
<Decrement upper index #0 of [2, 3/2], [].>]

A slightly more complicated plan:

>>> devise_plan(Hyper_Function((1, 3), ()), Hyper_Function((2, 2), ()), z)
[<Increment upper 2.>, <Decrement upper index #0 of [2, 2], [].>]

Another more complicated plan: (note that the ap have to be shifted first!)

>>> devise_plan(Hyper_Function((1, -1), (2,)), Hyper_Function((3, -2), (4,)), z)
[<Decrement lower 3.>, <Decrement lower 4.>,
<Decrement upper index #1 of [-1, 2], [4].>,
<Decrement upper index #1 of [-1, 3], [4].>, <Increment upper -2.>]
z not reachable from c                 óÊ   • / n[        [        U 5      5       HH  nX   X   -
  S:”  a  UnSnOUnSnX   X   :w  d  M%  XF" X5      /-  nX==   U-  ss'   X   X   :w  a  M#  MJ     U$ )Nr   rW   ry   )r)  rÏ   )ÚfroÚtoÚincÚdecrT  r
  ÚshÚchs           r\   Ú	do_shiftsÚdevise_plan.<locals>.do_shifts"  sw   € ØˆÜ”s˜3“x–ˆAØ‰u�s‘v‰~ Ó!Ø�Ø‘à�Ø�à‘%˜3™6•/Ø˜˜3›
�|Ñ#�Ø“˜"‘“ð ‘%˜3™6—/ñ !ð ˆ
r^   c           	      ó.   >^^^• T" XS UUUU4S j5      $ )z'Shift us from (nal, nbk) to (al, nbk). c                 ó   • [        X   5      $ rb   )r´  ©r°  r
  s     r\   rí   Ú2devise_plan.<locals>.do_shifts_a.<locals>.<lambda>4  s
   € ¬v°a±d¬|r^   c                 ó,   >• [        U T-   TT-   UT5      $ rb   )rÇ  )r°  r
  ÚaotherÚbotherÚnbkrn   s     €€€€r\   rí   rd  5  s   ø€ ¤h¨q°6©z¸3À¹<ÈÈAÔ&Nr^   rw   )Únalrh  Úalrf  rg  r_  rn   s    ` ``€€r\   Údo_shifts_aÚ devise_plan.<locals>.do_shifts_a2  s   û€ á˜Ñ";ßNóPð 	Pr^   c                 ó.   >^ ^^• T" XUUU U4S jS 5      $ )z'Shift us from (nal, nbk) to (nal, bk). c                 ó,   >• [        TT-   U T-   UT5      $ rb   )rÞ  )r°  r
  rf  rg  ri  rn   s     €€€€r\   rí   Ú2devise_plan.<locals>.do_shifts_b.<locals>.<lambda>:  s   ø€ ¤h¨s°V©|¸QÀ¹ZÈÈAÔ&Nr^   c                 ó   • [        X   5      $ rb   )r¿  rc  s     r\   rí   ro  ;  s
   € ¤f¨Q©T¤lr^   rw   )ri  rh  Úbkrf  rg  r_  rn   s   `  ``€€r\   Údo_shifts_bÚ devise_plan.<locals>.do_shifts_b7  s   û€ á˜ßNÙ2ó4ð 	4r^   rï   rw   c                 óP   • / nU  H  nX1:w  d  M
  UR                  X   5        M     U$ rb   )rc  )r0  rð   rž   r,  s       r\   ÚothersÚdevise_plan.<locals>.othersN  s+   € ØˆAÛ�Ø•8Ø—H‘H˜S™VÖ$ñ ð ˆHr^   r   ry   zNon-suitable parameters.)rg   rh   rT   r]   rÏ   r¬   r   r^  Úsortedr   r(  )rp  Úoriginrn   r  rú   rû   Ú	nabucketsÚ	nbbucketsrT  rk  rr  r©  rj  ri  rq  rh  r¥   ru  rf  rg  ÚnamaxÚamaxr_  s     `                   @r\   Údevise_planr}  ë  s¶  ù€ ð^ —y‘y &§)¡)¨V¯Y©Y¸¿	¹	ÑBó0DÚBˆFô 15°V¼UÖ0CÙBñ0DÑ,€H˜	ô Œ4�—‘“Ó Ó!¤S¬¨i¯n©nÓ.>Ó)?Ó%@Ó@Ü”�X—]‘]“_Ó%Ó&¬#¬d°9·>±>Ó3CÓ.DÓ*EÓEÜ³vºvÐFÓGÐGà
€Còö Pö
4ô ”D˜Ÿ™›Ó)¬D°·±³Ó,AÑAÔGWÕXˆØˆØˆØˆØˆØ‹=Ø‘ˆBØ‘,ˆCØ‹=Ø‘ˆBØ‘,ˆCÜˆr‹7”c˜#“hÓ¤# b£'¬S°«XÓ"5Ü»6Â6ÐJÓKÐKð ˜rÑ'ó)Ú'�ô # 1Ô*:Ô;Ù'ñ)Ñˆ�ò	ñ ˜	Ó%ˆÙ˜	Ó%ˆäˆr‹7�a‹<à�;˜r 3¨F°FÓ;Ñ;‰CÜ�‹W˜‹\à�;˜s B¨¨F°FÓ;Ñ;‰Cà˜‘GˆEØ�b‘6ˆDà�1‰v˜‰~ Ó" b¨¡e¨d¡l°aÓ&7Ü Ð!;Ó<Ð<à�t‰|˜aÓà�{ 3¨R°¸Ó@Ñ@�Ø�{ 2¨B°¸Ó?Ñ?‘ð �{ 3¨R°¸Ó@Ñ@�Ø�{ 3¨B°¸Ó?Ñ?�à�!‰Ø�!Œñc Yðf ‡K�K„MØ€Jùòq0Dùòd)s   ³J'Æ1J,c                 ó  • [        U R                  [        5      [        U R                  [        5      p2[	        U[
        R                     5      S:w  a  gU[
        R                     S   nUS::  a  g[
        R                  U;  a  g[        U[
        R                     5      nUR                  5         US   nUS::  a  g[        U R                  5      nUR                  U5        [        U R                  5      nUR                  U5        US-  nU V	s/ s H  o™U-
  PM	     nn	U V	s/ s H  o™U-
  PM	     nn	/ n
[        US-
  5       H   nU
R                  [        US-   5      5        M"     U
R                  5         [        U5      X-  -  nU[        U Vs/ s H  n[!        XÖ5      PM     sn6 -  nU[        U Vs/ s H  n[!        Xæ5      PM     sn6 -  nU
[#        U5      /-  n
Sn[        U5       Hb  nX-  [        U5      -  nU[        U Vs/ s H  n[!        Xë5      PM     sn6 -  nU[        U Vs/ s H  n[!        XÛ5      PM     sn6 -  nUU-  nMd     [%        Xx5      X¯* 4$ s  sn	f s  sn	f s  snf s  snf s  snf s  snf )z>Try to recognise a hypergeometric sum that starts from k > 0. rW   Nr   )rT   rg   r]   rh   rÏ   r   r¢   r¬   ró   Úremover)  re   r´  r(  r7   r   r6   r®  rd   )rj   rn   rú   rû   r©  rž   r,  r?  rC  rZ   rT  rC  Úfacrl   rk   r°  r3  s                    r\   Útry_shifted_sumr�  t  s.  € ä˜dŸg™g¤uÓ-¬t°D·G±G¼UÓ/CˆhÜ
ˆ8”A—F‘FÑÓ Ó!ØØ”—‘Ñ˜Ñ€AØˆAƒvØÜ‡v�v�XÓØÜˆX”a—f‘fÑÓ€AØ‡F�F„HØ	ˆ!‰€AØˆAƒvØä
ˆt�w‰w‹-€CØ‡J�Jˆq„MÜ
ˆt�w‰w‹-€CØ‡J�Jˆq„MØˆ�F€AÙÓ
š#�QˆqŒ5™#€CÐ
ÙÓ
š#�QˆqŒ5™#€CÐ
à
€CÜ�1�q‘5Ž\ˆØ�
‰
”6˜!˜a™%“=Ö!ñ à‡K�K„Mä
�A‹,�q‘tÑ
€CØŒ3¡3Ó'¢3˜a”�A–¡3Ñ'Ð(Ñ(€CØŒ3¡3Ó'¢3˜a”�A–¡3Ñ'Ð(Ñ(€CàŒL˜ÓÐÑ€Cà	€AÜ�1ŽXˆØ‰D”˜1“ÑˆØ	ŒS¡SÓ)¢S ”2�a–8¡SÑ)Ð*Ñ*ˆØ	ŒS¡SÓ)¢S ”2�a–8¡SÑ)Ð*Ñ*ˆØ	ˆQ‰Šñ	 ô ˜#Ó# S¨"Ð,Ð,ùò+ ùÚ
ùò (ùÚ'ùò *ùÚ)s$   ÄI&Ä(I+ÆI0
Æ;I5
ÈI:È4I?c           	      ó  ^• [        U R                  [        5      [        U R                  [        5      p2U[        R
                     nU[        R
                     nUR                  5         UR                  5         U Vs/ s H  ofS::  d  M
  UPM     nnU Vs/ s H  ofS::  d  M
  UPM     snmT(       a   [        U4S jU 5       5      (       a  [        $ U(       d  gUS   nSn	[        R                  n
[        [        [        U* 5      5      6  Hb  nX‘-  n	X›S-   -  n	U	[        U R                   Vs/ s H  oˆU-   PM	     sn6 -  n	U	[        U R                   Vs/ s H  oÌU-   PM	     sn6 -  n	X©-  n
Md     U
$ s  snf s  snf s  snf s  snf )zaRecognise polynomial cases. Returns None if not such a case.
Requires order to be fully reduced. r   c              3   ó2   >#   • U  H  oTS    :  v •  M     g7f)ry   Nrw   )rØ   rk   Úbl0s     €r\   rÙ   Ú!try_polynomial.<locals>.<genexpr>¬  s   øé € Ð,ª 1�s˜2‘w–;ªùs   ƒNry   rW   )rT   rg   r]   rh   r   r¢   ró   Úallr   r�   r   r¬   r)  r   )rj   rn   rú   rû   rr  rÓ  rZ   Úal0rk   r€  ri   rC  rl   r„  s                @r\   Útry_polynomialrˆ  ¡  sF  ø€ ô ˜dŸg™g¤uÓ-¬t°D·G±G¼UÓ/CˆhØ	”!—&‘&Ñ	€BØ	”!—&‘&Ñ	€BØ‡G�G„IØ‡G�G„IÙÓ
#’b� ™F�1‘b€CÐ
#ÙÓ
#’b� ™F�1‘bÑ
#€Cæ
ŒsÔ,©Ó,×,Ñ,Üˆ	ÞØàˆB‰€AØ
€CÜ
�%‰%€CÜ”Dœ ˜r›“OÓ$ˆØ‰ˆØ�1‰u‰ˆØŒs D§G¢GÓ,¢G˜q˜”U¡GÑ,Ð-Ñ-ˆØŒs D§G¢GÓ,¢G˜q˜”U¡GÑ,Ð-Ñ-ˆØ‰
Šñ %ð €Jùò# $ùÚ
#ùò -ùÚ,s$   Á?	E7ÂE7Â	E<Â%E<Ä1FÅFc           	      óê  • [        U R                  [        5      [        U R                  [        5      p!0 nUR	                  5        H@  u  pEUS:w  a  XB;  a    gX$   n[        U5      [        U5      4X4'   UR                  US5        MB     U0 :w  a  g[        R                  U;  a  gU[        R                     u  pxXxS/-   4U[        R                  '   [        S5      n	[        R                  n
[        R                  nUR	                  5        H‘  u  nu  pÆ[        U5      [        U5      :w  a    g[        XÆ5       H`  u  pÞXÞ-
  R                  (       a%  XÞ-
  nU
[        Xé-   U5      -  n
U[        Xï5      -  nM=  Xí-
  nU
[        Xß5      -  n
U[        XÙ-   U5      -  nMb     M“     [        X«-  U	5      n[         R"                  " U5      n/ n0 nU GHv  nUR%                  5       u  p«UR'                  U	5      (       dG  [)        X©5      nUR*                  (       d  [-        S5      eUR/                  5       u  u  píUXÛ-  U4/-  nMs  U
R'                  U	5      (       a  [1        S5      eUR3                  U	5      u  nu  nSnUR4                  (       a  UR6                  nUR8                  nUU	:X  a  SnOrUR:                  (       aV  UR=                  U	5      u  nnSnUU	:w  a  UR=                  U	5      u  nnUXé-  U-   :w  a  [1        SU-  5      eXÞ-  nUUU-  -  nO[1        S5      eUR?                  U/ 5      RA                  U
U-  U45        GMy     0 n0 n[        S	5      nURC                  S
 S9  SSSU-
  -  0nU(       a5  [E        US   S   5       H   nUUU   RG                  U5      -  UUS-   '   M"     U H;  u  nnUR?                  [        R                  / 5      RA                  UUU   -  5        M=     UR	                  5        HÍ  u  nnU H1  u  n nUR?                  [I        UXý5      / 5      RA                  U 5        M3     URC                  S S9  [E        SUS   S   S-   5       H1  nU* [I        UXý5      4S[I        UUS-
  U5      4/U[I        UXý5      '   M3     U* [I        USU5      4SSU-
  -  [        R                  4/U[I        USU5      '   MÏ     0 n![K        [        R                  /[        URM                  5       5      -   5       H  u  nnUU!U'   M     [O        U!R	                  5       S S9 VVs/ s H  u  nn[Q        U5      PM     n"nn[S        U"5      n#[S        S/[        U#5      -  /5      n$UR	                  5        H  u  nn [!        U 6 U$U!U   '   M     [U        [        U#5      5      n%UR	                  5        H  u  nnU H  u  n n&U U%U!U   U!U&   4'   M     M!     [W        U US/ U#U$U%5      $ s  snnf )z‰
Try to find an expression for Hyper_Function ``func`` in terms of Lerch
Transcendents.

Return None if no such expression can be found.
r   NrW   r©   zp should be monomialz<Need partial fraction decomposition with linear denominatorszunrecognised form %sz%unrecognised form of partial fractionrn   c                 ó   • U S   $ rV   rw   rì   s    r\   rí   Útry_lerchphi.<locals>.<lambda>   s   €   1¢r^   rï   ry   c                 ó   • U S   $ rV   rw   rì   s    r\   rí   r‹  *  s   € ˜Q˜qšTr^   rx   c                 ó   • U S   $ rV   rw   rì   s    r\   rí   r‹  4  s   € ¸aÀºdr^   ),rT   rg   r]   rh   rñ   r¬   rÏ  r   r¢   r	   r�   rÏ   r  Úis_positiver6   rO   r   Ú	make_argsr´   rH  rQ   Úis_monomialr]  ÚLTÚNotImplementedErrorÚas_coeff_mulÚis_Powr   ÚbaseÚis_AddÚas_independentr|  re   ró   r)  r  r8   Ú	enumerater   rw  r   rL   rN   rf   )'rj   rú   rû   Úpairedrð   ÚvalueÚbvalueÚaintsÚbintsr©   r¸   r¹   Úavaluerk   rl   r,  ÚpartrÁ   Ú	monomialsÚtermsrâ   r°  ÚindepÚdeprC  ÚtmprD  Úderivr§  rn   Úmonrž   r[   ÚtransÚbasisrr   rs   rt   Úb2s'                                          r\   Útry_lerchphirª  ½  s˜  € ô ˜dŸg™g¤uÓ-¬t°D·G±G¼UÓ/Cˆhà€FØ—n‘nÖ&‰
ˆØ�!‹8˜Ó+ÙØ‘ˆÜ˜E“{¤D¨£LÐ1ˆ‰Ø�‰�S˜$Öñ 'ð �2ƒ~ØÜ‡v�v�XÓØØœ!Ÿ&™&‘>�L€Eà a S™[Ð)€FŒ1�6‰6�Näˆc‹
€AÜ�E‰E€EÜ�E‰E€EØ!'§¡¦ÑˆÑˆfÜˆv‹;œ#˜f›+Ó%Ùô ˜Ö'‰DˆAØ‘×"×"Ø‘E�Øœ˜A™E 1›Ñ%�Øœ˜A›Ñ!’à‘E�Øœ˜A›Ñ!�Øœ˜A™E 1›Ñ%’ó (ñ "0ô( �‘˜aÓ €DÜ�=Š=˜Ó€DØ€IØ€EÜˆØ×)Ñ)Ó+‰ˆØ�y‰y˜�|‰|Ü�U“ˆAØ—=—=ÜÐ 6Ó7Ð7ØŸ™›‰J‰UˆaØ˜1™7 A˜,˜Ñ'ˆIÙØ�9‰9�Q�<‰<Ü%ð 'Bó Cð Cà×)Ñ)¨!Ó,‰ˆ‰u�ØˆØ�:�:Ø—‘ˆAØ—(‘(ˆCØ�!‹8Ø‰AØ�Z�ZØ×'Ñ'¨Ó*‰FˆAˆsØˆAØ�a‹xØ×)Ñ)¨!Ó,‘��1Ø�a‘c˜A‘g‹~Ü)Ð*@À3Ñ*FÓGÐGØ‰FˆAØ�Q˜‘T‰M‰Eä%Ð&MÓNÐNØ×Ñ˜˜BÓ×&Ñ&¨¨e©°QÐ'7×8ñ= ðL €EØ€FÜˆc‹
€AØ‡N�N‘~€NÑ&Øˆa��Q‘‰iˆ.€CÞÜ�y ‘} QÑ'Ö(ˆAØ˜3˜q™6Ÿ;™; q›>Ñ)ˆC��A‘‹Jñ )ã‰ˆˆ1Ø×Ñœ!Ÿ%™% Ó$×+Ñ+¨A¨c°!©f©HÖ5ñ à—‘–‰ˆˆ1Û‰DˆAˆqØ×Ñœh q¨!Ó/°Ó4×;Ñ;¸AÖ>ñ à	�‰‘>ˆÑ"Ü�q˜!˜B™% ™( Q™,Ö'ˆAØ*+¨¬X°a¸Ó->Ð(?Ø)*¬H°Q¸¸A¹¸qÓ,AÐ(Bð(DˆE”(˜1˜aÓ#Ó$ñ (ð '( R¬°!°Q¸Ó):Ð$;Ø%&¨¨A©¡Y´·±Ð$6ð$8ˆŒh�q˜!˜QÓÓ ñ ð €EÜœ1Ÿ5™5˜'¤D¨¯©«Ó$6Ñ6Ö7‰ˆˆ1Øˆˆa‹ñ 8ä*0°·±³Ù5Bò+Dô Eò +D¡  AŒ[˜Ž^ñ +D€Eñ Eäˆu‹€AÜ��”C˜“F‘
ˆ|Ó€AØ—‘–‰ˆˆ1Ü˜1�gˆˆ%�‰(‹ñ äŒc�!‹f‹€AØ—‘–‰ˆˆ1Û‰EˆAˆrØ%&ˆAˆe�A‰h˜˜b™	Ð!Ó"ó ñ ô �4˜˜D " a¨¨AÓ.Ð.ùóEs   Ô0W/c           
      óŒ  • [        S5      nU R                  (       Ga  U R                   Vs/ s H  n[        U-   PM     nnU R                   Vs/ s H  n[        U-   S-
  PM     nn[        [	        U6 -  U[	        U6 -  -
  n[        U[        5      nUR                  " 5       n/ n	[        U5      n
[        U5       Hc  nU R                  S   U-   nU	[        U/[        U R                  SS 5      -   U R                  U5      /-  n	X¸S-
  :  d  MT  U* X«U4'   X*X»S-   4'   Me     [        U	5      n[        S/S/US-
  -  -   /5      n[        U5      /n[        U5       H  nUR                  X®U   -  5        M     UR                  " 5       nUR                  5         S/U-  n[!        U5       H0  u  nn[!        XÞU   -  5       H  u  nnUU==   UU-  -  ss'   M     M2     [!        U5       H5  u  nnU* XèS-
     SUS-
  4   -  UR                  " 5       S   -  X¨S-
  U4'   M7     [#        XS/ XÍU
5      $ / n	[        U R                  SS 5      n[        [%        U5      5       H!  nU	[        / UU5      /-  n	UU==   S-  ss'   M#     U	[        / UU5      /-  n	[        U	5      n[%        U5      n[        S/S/US-
  -  -   /5      n[        U5      n
U[	        U R                  6 -  U
SUS-
  4'   [        SU5       H3  nU R                  US-
     X«US-
  4'   U R                  US-
     * X«U4'   M5     [#        XS/ XÍU
5      $ s  snf s  snf )zM
Create a formula object representing the hypergeometric function ``func``.

rn   rW   r   N)r	   rg   r;  rh   r   rQ   r<  rN   r)  r?   r¬   rL   rM   re   r>  r(  r˜  rf   rÏ   )rj   rn   rk   rA  rl   rB  r·   rP   rC  r¨  rt   r,  rr   rs   Úderivsrž   ri   r[   r©  rª  rh   r
  s                         r\   Úbuild_hypergeometric_formular­  @  s3  € ô 	ˆc‹
€AØ‡w‡w€wØ$(§G¢GÓ,¢G˜q”B˜”F¡GˆÐ,Ø(,¯ªÓ0ª 1”B˜‘F˜Q”J©ˆÐ0Ü”#�x�.Ñ  1¤S¨( ^Ñ#3Ñ3ˆÜ�Dœ"‹~ˆØ�KŠK‹MˆØˆÜ�!‹HˆÜ�q–ˆAØ—‘˜‘
˜Q‘ˆAØ”e˜Q˜C¤$ t§w¡w¨q¨r {Ó"3Ñ3°T·W±W¸aÓ@ÐAÑAˆEØ�q‘5�yØ˜"��Q�$‘Ø�!˜‘U�(“ñ ô �5‹MˆÜ�Q�C˜1˜#˜q 1™u™+Ñ%Ð&Ó'ˆÜ�a“&�ˆÜ�q–ˆAØ�M‰M˜! 1™I™+Ö&ñ à�OŠOÓˆØ	�	‰	ŒØˆc�!‰eˆÜ˜a–L‰DˆAˆqÜ! !¨1¡I¡+Ö.‘��1Ø�A“˜!˜A™#‘•ó /ñ !ô ˜c–N‰DˆAˆqØ˜"˜V¨¡E™]¨1¨a°!©e¨8Ñ4Ñ4°T·_²_Ó5FÀqÑ5IÑIˆA�!‰e�Qˆh‹Kñ #ä�t  b¨!°Ó2Ð2ð ˆÜ�$—'‘'™!�*ÓˆÜ”s˜2“w–ˆAØ”e˜B  AÓ&Ð'Ñ'ˆEØˆq‹E�Q‰J�Eñ  ð 	”%˜˜B Ó"Ð#Ñ#ˆÜ�5‹MˆÜ�‹FˆÜ�Q�C˜1˜#˜q 1™u™+Ñ%Ð&Ó'ˆÜ�!‹HˆØœ˜TŸW™W˜‘oˆˆ!ˆQ�‰Uˆ(‰Ü�q˜!–ˆAØŸ'™' ! a¡%™.ˆA��Q‘ˆh‰KØ—w‘w˜q 1™u‘~�oˆA�ˆd‹Gñ ô �t  b¨!°Ó2Ð2ùòY -ùÚ0s   ¬L<ÁMc                 ó"  • [        U 5      [        U5      pCUn[        U5      nUS:X  a  [        R                  $ SSKJn  US:X  Ga?  US:X  Ga8  X-   u  pxn	US:X  a8  [        X—-
  U-
  5      [        U	5      -  [        X—-
  5      -  [        X˜-
  5      -  $ US:X  a  U" X‡-
  U	-   5      S:X  a  XxpxUS:X  aÔ  U" Xx-
  U	-   5      S:X  aÃ  UR                  (       al  UR                  (       a[  S[        [        U-  S-  5      -  [        U* 5      -  [        X‡-
  S-   5      -  [        U* S-  5      -  [        US-  U-
  S-   5      -  $ [        US-  S-   5      [        X‡-
  S-   5      -  [        US-   5      -  [        US-  U-
  S-   5      -  $ [        XU5      $ )zÑ
Try to find a closed-form expression for hyper(ap, bq, z), where ``z``
is supposed to be a "special" value, e.g. 1.

This function tries various of the classical summation formulae
(Gauss, Saalschuetz, etc).
r   ©rš   rx   rW   ry   )rÏ   r>   r   r�   Úsympy.simplify.simplifyrš   r#   rÕ   rÖ   r!   r   r?   )
rg   rh   rn   r°  ÚqÚz_rš   rk   rl   r[   s
             r\   Úhyperexpand_specialr³  z  sƒ  € ô ˆr‹7”C˜“G€qØ	
€BÜ�1‹€AØˆAƒvÜ�u‰uˆÝ0ØˆA„v�!�q”&à‘'‰ˆˆaØ�‹6ä˜™ ™Ó#¤E¨!£HÑ,¬U°1±5«\Ñ9¼%ÀÁ»,ÑFÐFØ�‹7‘x ¡¨¡	Ó*¨aÓ/ØˆqØ�‹7‘x ¡¨¡	Ó*¨aÓ/à�|�| §§ØœœR ™T !™V›‘}¤U¨A¨2£YÑ.¬u°Q±U¸Q±YÓ/?Ñ?Ü˜A˜2˜a™4“[ñ!Ü!& q¨¡s¨Q¡w°¡{Ó!3ñ4ð 4ô ˜Q˜q™S 1™W“~¤e¨A©E°A©IÓ&6Ñ6Ü˜1˜q™5“\ñ"Ü"'¨¨!©¨a©°!©Ó"4ñ5ð 5ô �˜ÓÐr^   NÚz0rW   Údefaultc                 ó  ^^^^^^• TR                   (       a  [        R                  $ SSKJn  [        TSS9mTS:X  a  SmUUUUUU4S jn[        c
  [        5       q[        SU 5        [        U 5      u  p	U	(       a  [        S	U 5        O[        S
5        [        U T5      n
U
bP  [        S5        [        X©U4S j5      n[        UT-  TU4S j5      n[        U" U5      R                  TT5      5      $ [        R                  n[        U T5      n
U
b  U
u  pn[        SU 5        Xœ-  n	[        X¹U4S j5      n[        UT-  TU4S j5      nU" U5      R                  TT5      n[        T5      S;   aw  [!        U R"                  5      [!        U R$                  5      4S:X  aI  ['        U 5      nU" XÙ5      R)                  [*        [,        5      nUR/                  [*        5      (       d  Xë-   $ [        R1                  U 5      nUc  [3        U 5      nUc  [        SS5        ['        U 5      n[        SUR4                  SUR6                  5        U	[9        XR6                  T5      -  n	U" Xù5      U-   n[;        USS9R)                  [*        [,        5      $ )a  
Try to find an expression for the hypergeometric function ``func``.

Explanation
===========

The result is expressed in terms of a dummy variable ``z0``. Then it
is multiplied by ``premult``. Then ``ops0`` is applied.
``premult`` must be a*z**prem for some a independent of ``z``.
r   r¯  F)r‡  rµ  Únonrepsmallc                 ó´  >• [        U R                  R                  U R                  T
5      U[	        U R
                  R                  U R                  T
5      T
5      5      n[        UT[	        U R
                  R                  U R                  T
5      T[        U R
                  R                  S   5      -  -   T
5      5      nTS:X  a  UR                  [        T
5      5      n[        S [        X R                  R                  U R                  T
5      5      [        R                  5      T-  nUR                  T
T	5      nT(       a  UR                  T5      nU$ )Nr   rW   c                 ó   • XS   US   -  -   $ rM  rw   rN  s     r\   rí   Ú5_hyperexpand.<locals>.carryout_plan.<locals>.<lambda>Á  s   € ˜q 1¡ a¨¡d¡š{r^   )rV  rs   r‡  rn   rQ  rt   rM   ÚshaperN  r¼   r   r  rr   r   r¢   Úrewrite)r}  rT  rs   r©  ri   Úops0ÚpremÚpremultr¼  rn   r´  s        €€€€€€r\   Úcarryout_planÚ#_hyperexpand.<locals>.carryout_plan¸  s  ø€ Ü˜AŸC™CŸH™H Q§S¡S¨"Ó-¨sÜ4°Q·S±S·X±X¸a¿c¹cÀ2Ó5FÈÓKóMˆä˜A˜tÜ4°Q·S±S·X±X¸a¿c¹cÀ2Ó5FØ+/´°A·C±C·I±I¸a±LÓ0AÑ+Añ6BØCEóGóHˆð �a‹<Ø—‘œI b›MÓ*ˆAÜÑ*¬C°·3±3·8±8¸A¿C¹CÀÓ3DÓ,EÄqÇvÁvÓNÈwÑVˆØ�f‰f�R˜‹mˆÞØ—+‘+˜gÓ&ˆCØˆ
r^   z)Trying to expand hypergeometric function ú  Reduced order to ú  Could not reduce order.z  Recognised polynomial.c                 ó,   >• TU R                  T5      -  $ rb   ©r  ©r}  r´  s    €r\   rí   Ú_hyperexpand.<locals>.<lambda>Ý  s   ø€ °°1·6±6¸"³:²r^   c                 ó,   >• TU R                  T5      -  $ rb   rÅ  rÆ  s    €r\   rí   rÇ  Þ  s   ø€ °r¸!¿&¹&À»*²}r^   z+  Recognised shifted sum, reduced order to c                 ó,   >• TU R                  T5      -  $ rb   rÅ  rÆ  s    €r\   rí   rÇ  ê  s   ø€ ¨"¨Q¯V©V°B«Zª-r^   c                 ó,   >• TU R                  T5      -  $ rb   rÅ  rÆ  s    €r\   rí   rÇ  ë  s   ø€ °2°a·f±f¸R³j²=r^   )rW   ry   )rx   rW   z  Could not find an origin. z@Will return answer in terms of simpler hypergeometric functions.z  Found an origin: Ú T©Úpolar)Úis_zeror   r�   r°  rš   r=   Ú_collectionrx  rÂ   rD  rˆ  rV  r>   r‡  r¢   r�  rÏ   rg   rh   r­  Úreplacer?   r³  rH  rŒ  rª  r@  rj   r}  rS   )rj   rn   r½  r´  r¿  r¾  r¼  rš   rÀ  rT  ri   r°  Únopsr}  r©  rž  s    ``````         r\   Ú_hyperexpandrÒ  ¢  sB  ý€ ð 	‡y‡yÜ�u‰uˆå0ä�˜Ñ€AØ�)ÓØˆ÷ò ô* ÑÜ'Ó)ˆä	Ð
5°tÔ<ô ˜TÓ"�I€DÞ
ÜÐ# TÕ*äÐ)Ô*ô ˜˜rÓ
"€CØ
�ÜÐ(Ô)Ü˜CÔ&=Ó>ˆÜ˜A˜g™I tÔ-DÓEˆÜ™( 1›+×*Ñ*¨2¨qÓ1Ó2Ð2ô 	
�‰€AÜ
˜$ Ó
#€CØ
�Ø‰ˆ�AÜÐ;¸TÔBØ‰ˆô 	˜Ô 7Ó8€AÜ˜˜'™	 4Ô)@ÓA€AÙ�‹×Ñ˜˜QÓ€Aô �!ƒ}˜Ó¤S¨¯©£\´3°t·w±w³<Ð$@ÀFÓ$JÜ(¨Ó.ˆÙ˜!Ó!×)Ñ)¬%Ô1DÓEˆØ�u‰u”U�|‰|Ø‘5ˆLô ×'Ñ'¨Ó-€Gð �Ü˜tÓ$ˆà�ÜÐ,ð2ô	3ô /¨tÓ4ˆä	Ð
 ×!4Ñ!4°c¸7¿<¹<ÔHð Œ;�tŸ\™\¨2Ó.Ñ.€Cñ 	�gÓ# aÑ'€Aä�Q˜dÑ#×+Ñ+¬EÔ3FÓGÐGr^   c           	      óŠ  ^^^^	^
• S n[        U R                  5      m[        U R                  5      m[        U R                  5      m	[        U R                  5      m
/ nSnU(       Ga[  SnU" TUR                  UUU	U
U4S jST	T
-   5      nUb	  XF/-  nSnM7  U" TUR                  UUU	U
U4S jST	T
-   5      nUb	  XF/-  nSnMd  U" T	UR                  UUU	U
U4S jSTT-   5      nUb	  XF/-  nSnM‘  U" T
UR                  UUU	U
U4S	 jSTT-   5      nUb	  XF/-  nSnM¾  U" TUR                  U4S
 jS/ 5      nUb	  XF/-  nSnMä  U" TUR                  U4S jS/ 5      nUb
  XF/-  nSnGM  U" T	UR                  U	4S jS/ 5      nUb
  XF/-  nSnGM2  U" T
UR                  U
4S jS/ 5      nUb
  XF/-  nSnGMY  U(       a  GM[  T[        UR                  5      :w  dK  T[        UR                  5      :w  d2  T	[        UR                  5      :w  d  T
[        UR                  5      :w  a  [        S5      eUR                  5         U$ )a^  
Find operators to convert G-function ``fro`` into G-function ``to``.

Explanation
===========

It is assumed that ``fro`` and ``to`` have the same signatures, and that in fact
any corresponding pair of parameters differs by integers, and a direct path
is possible. I.e. if there are parameters a1 b1 c1  and a2 b2 c2 it is
assumed that a1 can be shifted to a2, etc. The only thing this routine
determines is the order of shifts to apply, nothing clever will be tried.
It is also assumed that ``fro`` is suitable.

Examples
========

>>> from sympy.simplify.hyperexpand import (devise_plan_meijer,
...                                         G_Function)
>>> from sympy.abc import z

Empty plan:

>>> devise_plan_meijer(G_Function([1], [2], [3], [4]),
...                    G_Function([1], [2], [3], [4]), z)
[]

Very simple plans:

>>> devise_plan_meijer(G_Function([0], [], [], []),
...                    G_Function([1], [], [], []), z)
[<Increment upper a index #0 of [0], [], [], [].>]
>>> devise_plan_meijer(G_Function([0], [], [], []),
...                    G_Function([-1], [], [], []), z)
[<Decrement upper a=0.>]
>>> devise_plan_meijer(G_Function([], [1], [], []),
...                    G_Function([], [2], [], []), z)
[<Increment lower a index #0 of [], [1], [], [].>]

Slightly more complicated plans:

>>> devise_plan_meijer(G_Function([0], [], [], []),
...                    G_Function([2], [], [], []), z)
[<Increment upper a index #0 of [1], [], [], [].>,
<Increment upper a index #0 of [0], [], [], [].>]
>>> devise_plan_meijer(G_Function([0], [], [0], []),
...                    G_Function([-1], [], [1], []), z)
[<Increment upper b=0.>, <Decrement upper a=0.>]

Order matters:

>>> devise_plan_meijer(G_Function([0], [], [0], []),
...                    G_Function([1], [], [1], []), z)
[<Increment upper a index #0 of [0], [], [1], [].>, <Increment upper b=0.>]
c                 óô   ^• [        [        X5      5       H_  u  nu  mnTU-
  R                  (       d  M  UT-
  U-  S:”  d  M-  [        U4S jU 5       5      (       d  MI  U" U5      nX==   U-  ss'   Us  $    g)a  Try to apply ``shifter`` in order to bring some element in ``f``
nearer to its counterpart in ``to``. ``diff`` is +/- 1 and
determines the effect of ``shifter``. Counter is a list of elements
blocking the shift.

Return an operator if change was possible, else None.
r   c              3   ó.   >#   • U  H
  nTU:g  v •  M     g 7frb   rw   )rØ   rZ   rk   s     €r\   rÙ   Ú8devise_plan_meijer.<locals>.try_shift.<locals>.<genexpr>R  s   øé € Ð0ª 1˜˜Qžªùs   ƒN)r˜  r  rÕ   r†  )	r}  r©   Úshifterr  ÚcounterÚidxrl   r]  rk   s	           @r\   Ú	try_shiftÚ%devise_plan_meijer.<locals>.try_shiftG  si   ø€ ô %¤S¨£YÖ/‰KˆC‘�!�Qà�Q‘×"×"Ñ"¨¨A©¨t¡|°aÕ'7ÜÔ0©Ó0×0Ó0Ù˜S“\�Ø“˜$‘“Ø’	ò 0r^   TFc                 ó$   >• [        TTTTU T5      $ rb   )r  ©r
  ÚfanÚfapÚfbmÚfbqrn   s    €€€€€r\   rí   Ú$devise_plan_meijer.<locals>.<lambda>_  ó   ø€ ¤°°S¸#¸sÀAÀqÔ!Ir^   rW   c                 ó$   >• [        TTTTU T5      $ rb   )r   rÝ  s    €€€€€r\   rí   râ  f  rã  r^   c                 ó$   >• [        TTTTU T5      $ rb   )rý  rÝ  s    €€€€€r\   rí   râ  m  rã  r^   ry   c                 ó$   >• [        TTTTU T5      $ rb   )r  rÝ  s    €€€€€r\   rí   râ  t  rã  r^   c                 ó    >• [        TU    5      $ rb   )rë  )r
  rÞ  s    €r\   rí   râ  z  ó   ø€ ¬\¸#¸a¹&Ô-Ar^   c                 ó    >• [        TU    5      $ rb   )r÷  )r
  rß  s    €r\   rí   râ    rè  r^   c                 ó    >• [        TU    5      $ rb   )rä  )r
  rà  s    €r\   rí   râ  „  rè  r^   c                 ó    >• [        TU    5      $ rb   )rñ  )r
  rá  s    €r\   rí   râ  ‰  rè  r^   zCould not devise plan.)r¬   r•   rg   r–   rh   r’  r(  )rY  rZ  rn   rÚ  rT  Úchanger¦  rÞ  rß  rà  rá  s     `    @@@@r\   Údevise_plan_meijerrí    sL  ü€ òtô ˆs�v‰v‹,€CÜ
ˆs�v‰v‹,€CÜ
ˆs�v‰v‹,€CÜ
ˆs�v‰v‹,€CØ
€CØ€Fß
ØˆÙ�s˜BŸE™EßIÐIØ˜# ™)ó%ˆð ‰>Ø�4‰KˆCØˆFÙÙ�s˜BŸE™EßIÐIØ˜# ™)ó%ˆð ‰>Ø�4‰KˆCØˆFÙÙ�s˜BŸE™EßIÐIØ˜3 ™9ó&ˆð ‰>Ø�4‰KˆCØˆFÙÙ�s˜BŸE™EßIÐIØ˜3 ™9ó&ˆð ‰>Ø�4‰KˆCØˆFÙÙ�s˜BŸE™EÔ#AÀ2ÀrÓJˆØ‰>Ø�4‰KˆCØˆFÙÙ�s˜BŸE™EÔ#AÀ2ÀrÓJˆØ‰>Ø�4‰KˆCØˆFÚÙ�s˜BŸE™EÔ#AÀ1ÀbÓIˆØ‰>Ø�4‰KˆCØˆFÚÙ�s˜BŸE™EÔ#AÀ1ÀbÓIˆØ‰>Ø�4‰KˆCØˆFÚ÷c ‰&ðd Œd�2—5‘5‹kÓ˜S¤D¨¯©£KÓ/°3¼$¸r¿u¹u»+Ó3EØ”4˜Ÿ™“;ÓÜ!Ð":Ó;Ð;Ø‡K�K„MØ€Jr^   c           
      ó0
  ^^^• [         c
  [        5       q US:X  a  SnU n[        SU 5        [        S5      n[	        U 5      u  n mT(       a  [        SU 5        O[        S5        [         R                  U 5      nUbî  [        SUR                  5        T[        UR                  X5      -  m[        UR                  R                  UR                  U5      T[        UR                  R                  UR                  U5      U5      5      nUR                  [        U5      5      nX‡R                   R                  UR                  U5      -  n	U	S   R                  Xa5      n	[#        U	S	S
9$ [        S5        S mUUU4S jn
[        S5      mU
" U R$                  U R&                  U R(                  U R*                  Xa5      u  p¼S nT HA  n[-        UR.                  R                  UST-  [0        [0        * 05      [0        5      Ul        MC     U
" U" U R&                  5      U" U R$                  5      U" U R*                  5      U" U R(                  5      TSU-  5      u  nn[#        UR                  Xa5      S	S
9n[#        UR                  TSU-  5      S	S
9n[3        U[4        5      (       d  UR                  TSU-  5      nU " U5      nUR6                  S:”  do  UR6                  S:X  am  [9        UR(                  5      [9        UR*                  5      :X  aA  [;        UR<                  5      S:  SLa&  [?        U5      [?        S5      :X  a  USLa  S	nUSLa  S	nUS	L a  URA                  U=(       d    S5      nOURA                  U=(       d    S5      nUS	L a  URA                  U=(       d    S5      nOURA                  U=(       d    S5      nUSLa  USLa  US:X  a  SnU[B        :X  a  Sn[3        U[4        5      (       d  UR                  Xa5      n[3        U[4        5      (       d  UR                  Xa5      nS nU" X¼5      nU" UU5      n[E        UU5      SS[F        4::  a
  UU:  a  U$ U$ [I        US   US   5      S::  a.  [I        US   US   5      S::  a  [K        X¼4UU4U" U5      S	45      $ [K        X¼4UU4U" U5      S	45      n	U	RM                  [N        5      (       a  U(       d  [        S5        U	RM                  [N        5      (       a  U(       a  U	$ U" U5      $ )af  
Try to find an expression for the Meijer G function specified
by the G_Function ``func``. If ``allow_hyper`` is True, then returning
an expression in terms of hypergeometric functions is allowed.

Currently this just does Slater's theorem.
If expansions exist both at zero and at infinity, ``place``
can be set to ``0`` or ``zoo`` for the preferred choice.
Nrµ  z1Try to expand Meijer G function corresponding to rn   rÂ  rÃ  z  Found a Meijer G formula: r   TrÌ  z;  Could not find a direct formula. Trying Slater's theorem.c                 ó�   • U  H@  n[        X   5      S:”  d  M  SnX!;   a  [        X   5      nUS-   [        X   5      :  d  M@    g   g)zTest if slater applies. rW   r   FT)rÏ   )r.  r-  r
  rž   s       r\   Úcan_doÚ_meijergexpand.<locals>.can_doÍ  sH   € ãˆAÜ�3‘6‹{˜Q�Ø�Ø“8Ü˜C™F›�AØ�q‘5œ3˜s™v›;Õ&Ù ñ ð r^   c                 ó”  >^• [        XX#5      nUR                  5       u  pxp—T+" X‰5      (       d  [        R                  S4$ [	        U 5      [	        U5      -   [	        U5      [	        U5      -   :  n
[	        U 5      [	        U5      -   [	        U5      [	        U5      -   :X  a  [        T5      S:  n
U
SL a  [        R                  S4$ [        R                  nU GHÇ  n[	        XŒ   5      S:X  GaN  XŒ   S   nSn[        U5      nUR                  U5        U H  nU[        UU-
  5      -  nM     U  H  nU[        SU-   U-
  5      -  nM     U H  nU[        SU-   U-
  5      -  nM     U H  nU[        UU-
  5      -  nM     [        U 5      [        U5      -    Vs/ s H  nSU-   U-
  PM     nn[        U5      [        U5      -    Vs/ s H  nSU-   U-
  PM     nn[        [        R                  [	        U5      [	        U5      -
  -  5      nUU-  nT-U-  U-  n[        [        UU5      UT,T-UUS S9nX¾U-  -  nGMd  XŒ   S   nXŒ   SS   Vs/ s H  nUU-
  PM
     nn[	        U5      nXœ   S US-     Vs/ s H  nUU-
  PM
     nn[        U5      nXŒ    H  nUR                  U5        M     [        U5      n Xœ   S U  H  nU R                  U5        M     US   n![        UU5       V"Vs/ s H  u  n"nU"U-
  PM     n#n"n[        S5      n$TU$-  n%U HJ  n[        US5      (       d%  UR                   (       a  [#        [%        U5      5      nU%[        UU$-
  5      -  n%ML     U  H  nU%[        SU-
  U$-   5      -  n%M     U H  nU%[        SU-
  U$-   5      -  n%M     U H  nU%[        UU$-
  5      -  n%M     ['        U%5      n%[)        [#        [%        U!5      5      5       H)  n&[+        U%U$UU&-   5      n'[-        U'T,U4S j5      n'UU'-  nM+     UU!-   n([        [        R                  [	        U 5      [	        U5      -   S-   -  5      nUU-  nT-U-  U(-  n[        U 5      [        U5      -    Vs/ s H  nSU(-   U-
  PM     snS/-   n[        U5      [        U5      -    Vs/ s H  nSU(-   U-
  PM     nn[        [        UU5      UT,T-UU(S S9n[        R                  U!-  [/        U!5      -  n)[)        U5       H5  n*U)[        R                  U#U*   -  [1        U!UU*   -
  S-   U#U*   5      -  -  n)M7     U  H  nU)[        SU-
  U(-   5      -  n)M     U H  nU)[        UU(-
  5      -  n)M     U  H  nU)[        UU(-
  5      -  n)M     U H  nU)[        SU-
  U(-   5      -  n)M     UU)U-  -  nGMÊ     Xº4$ s  snf s  snf s  snf s  snf s  snn"f s  snf s  snf )NFrW   r   ©r¼  ry   r®   c                 ó,   >• TU R                  T5      -  $ rb   rÅ  )r}  rn   s    €r\   rí   Ú3_meijergexpand.<locals>.do_slater.<locals>.<lambda>!	  s   ø€ À!ÀAÇFÁFÈ1ÃIÂ+r^   )r›   r4  r   r¢   rÏ   r  r¬   r  r#   r2   ÚNegativeOnerÒ  rd   r  r	   r   rX   ÚintÚroundr   r)  rR   rV  r7   r6   ).r•   r–   rg   rh   rn   Úzfinalrj   rD  r.  r-  Úcondri   r3  Úbhr€  Úbor+  Úajrk   r?  rl   rC  r,  Úhargr¿  ÚhypÚb_rÂ  Úkir£   r·  ÚliÚaoÚlurž   Údir®   Ú	integrandr©  ÚresidÚaurs   r
  rð  rT  r©   s.       `                                      €€€r\   Ú	do_slaterÚ!_meijergexpand.<locals>.do_slaterØ  sµ  ù€ ô ˜" "Ó)ˆØ×-Ñ-Ó/‰ˆ�Ù�c×ÑÜ—6‘6˜5�=Ð ä�2‹wœ˜R›Ñ ¤3 r£7¬S°«WÑ#4Ñ4ˆÜˆr‹7”S˜“WÑ¤ B£¬#¨b«'Ñ 1Ó1Ü�q“6˜A‘:ˆDØ�5Š=Ü—6‘6˜5�=Ð ä�f‰fˆÜˆAÜ�3‘6‹{˜aÔØ‘V˜A‘Y�Ø�Ü˜"“X�Ø—	‘	˜"”Û�BØœ5  b¡›>Ñ)’Cñ ã�BØœ5  R¡¨"¡Ó-Ñ-’Cñ ã�BØœ5  R¡¨"¡Ó-Ñ-’Cñ ã�BØœ5  b¡›>Ñ)’Cñ ä+/°«8´d¸2³hÒ+>Ó?Ò+> a�q˜2‘v ”zÑ+>�Ð?Ü+/°«8´d¸2³hÒ+>Ó?Ò+> a�q˜2‘v ”zÑ+>�Ð?äœqŸ}™}¬s°2«w¼¸R»Ñ/@ÑAÓB�Ø˜‘x�ð ˜Q™3 ™)�Ü"¤>°#°sÓ#;¸TÀ3Ø#$ g¨r¸4ñA�à˜S‘yÑ “à‘V˜A‘Y�Ø(+©¨q¨r©
Ó3ª
 "�b˜2”g©
�Ð3Ü˜“G�Ø(+©¨v°°A±©Ó7ª "�b˜2”g©�Ð7Ü˜"“X�Øœ�AØ—I‘I˜a–Lñ  ä˜"“X�Ø™  ›�AØ—I‘I˜a–Lñ $à˜‘V�Ü*-¨b°"¬+Ô6ª+¡  A�a˜!”e©+�Ñ6ô ˜#“J�Ø˜q™D�	Û�AÜ˜q !Ÿ9™9¨¯¯Ü¤ a£›M˜Ø¤ q¨1¡u£Ñ-’Iñ ó �AØ¤ q¨1¡u¨q¡yÓ!1Ñ1’Iñ ã�AØ¤ q¨1¡u¨q¡yÓ!1Ñ1’Iñ ã�AØ¤ q¨1¡u£Ñ-’Iñ ô
 (¨	Ó2�	Üœs¤5¨£9›~Ö.�AÜ# I¨q°"°q±&Ó9�EÜ+¨E°3Ô8MÓN�EØ˜5‘L’Cñ /ð ˜"‘W�ÜœqŸ}™}¬s°2«w¼¸R»Ñ/@À1Ñ/DÑEÓF�Ø˜‘x�Ø˜Q™3 ™)�Ü+/°«8´d¸2³hÒ+>Ó?Ò+> a�q˜2‘v ”zÑ+>Ñ?À1À#ÑE�Ü+/°«8´d¸2³hÒ+>Ó?Ò+> a�q˜2‘v ”zÑ+>�Ð?ä"¤>°#°sÓ#;¸TÀ3Ø#$ g¨r¸4ñA�ô —M‘M BÑ'¬	°"«Ñ5�Ü˜qž�AØœŸ™¨¨1©Ñ-¬b°°b¸±e±¸a±ÀÀAÁÓ.GÑGÑG’Añ "ã�AØœ˜q 1™u r™zÓ*Ñ*’Añ ã�AØœ˜q 2™v›Ñ&’Añ ã�AØœ˜q 2™v›Ñ&’Añ ã�AØœ˜q 1™u r™zÓ*Ñ*’Añ ð �q˜‘u‘“ñi ðl ˆyÐùòQ @ùÚ?ùò 4ùâ7ùó 7ùò: @ùÚ?s*   ÆV&ÇV+ÉV0É3V5Ë)V:Ñ&W ÒWr©   c                 ó8   • U  Vs/ s H  nSU-
  PM
     sn$ s  snf rV   rw   )rž   rZ   s     r\   rø   Ú_meijergexpand.<locals>.trB	  s   € Ù Ó!šq˜!��A”™qÑ!Ð!ùÒ!s   …rW   ry   FÚnonrepr·  c                 óÈ   • USL a  SnO
USL a  SnOSnU R                  [        [        [        * [        5      (       a  SnX R	                  [
        5      U R                  5       4$ )NTr   FrW   rx   r{   )rH  r   r   r   Úcountr?   Ú	count_ops)r·   rú  Úc0s      r\   ÚweightÚ_meijergexpand.<locals>.weightr	  sX   € Ø�4Š<Ø‰BØ�UŠ]Ø‰BàˆBØ�8‰8”Bœœb˜S¤#×&Ñ&ð ˆBØ—J‘JœuÓ% t§~¡~Ó'7Ð8Ð8r^   z@  Could express using hypergeometric functions, but not allowed.)(Ú_meijercollectionrœ  rÂ   r	   rK  rŒ  rj   rí  rV  rs   r‡  rn   rQ  rt   rN  r¼   rr   rS   r•   r–   rg   rh   rQ   r¥  r;  rè   rÔ   ÚdeltarÏ   r:   Únur2   r¼  r   ra  r   rb  r9   rH  r?   )rj   r´  Úallow_hyperr¼  ÚplaceÚfunc0rn   r}  rs   r©  r	  Úslater1Úcond1rø   r¦  Úslater2Úcond2r3  r  Úw1Úw2rð  rT  r©   s                        @@@r\   Ú_meijergexpandr   —  sS  ú€ ô Ñ Ü3Ó5ÐØ�)ÓØˆà€EÜ	Ð
=¸tÔDô 	ˆc‹
€Aä# DÓ)�I€Dˆ#Þ
ÜÐ# TÕ*äÐ)Ô*ô 	×'Ñ'¨Ó-€AØ�}ÜÐ,¨a¯f©fÔ5ØÔ! !§&¡&¨$Ó2Ñ2ˆô ˜AŸC™CŸH™H Q§S¡S¨!Ó,¨cÜ4°Q·S±S·X±X¸a¿c¹cÀ1Ó5EÀqÓIóKˆð �K‰Kœ	 !›Ó%ˆØ�c‰c�h‰h�q—s‘s˜AÓÑˆØˆa‰D�I‰I�aÓˆÜ˜ $Ñ'Ð'ä	Ð
GÔHò	÷eôN 	ˆc‹
€AÙ˜tŸw™w¨¯©°·±¸$¿'¹'À1ÓI�N€Gò"ó ˆÜ˜Ÿ™Ÿ™ q¨!¨A©#¬r´B°3Ð&7Ó8¼"Ó=ˆŽñ á™r $§'¡'›{©B¨t¯w©w«K¹¸D¿G¹G»ÁbÈÏÉÃkØ  ! B¡$ó(�N€GˆUô ˜Ÿ™ QÓ+°4Ñ8€GÜ˜Ÿ™ Q¨¨"©Ó-°TÑ:€GÜ�eœT×"Ñ"Ø—
‘
˜1˜a ™cÓ"ˆáˆQ‹€AØ‡w�w�ƒ{Ø	
�‰�A‹œ#˜aŸd™d›)¤s¨1¯4©4£yÓ0Ü�—‘‹X˜‰] 5Ò(¬Z¸«^¼zÈ!»}Ó-Lð ˜ÒØˆEØ˜ÒØˆEà�‚}Ø—/‘/ '×"5¨XÓ6‰à—/‘/ '×":¨]Ó;ˆØ�‚}Ø—/‘/ '×"5¨XÓ6‰à—/‘/ '×":¨]Ó;ˆà�EÒ˜e¨5Ò0à�A‹:ØˆEØ”C‹<ØˆEä�eœT×"Ñ"Ø—
‘
˜1Ó!ˆÜ�eœT×"Ñ"Ø—
‘
˜1Ó!ˆò9ñ 
�Ó	€BÙ	�˜Ó	€BÜ
ˆ2ˆrƒ{�q˜!œR�jÓ Ø�‹7ØˆNàˆNÜ
ˆ2ˆa‰5�"�Q‘%Ó˜AÓ¤# b¨¡e¨R°©UÓ"3°qÓ"8Ü˜'Ð)¨G°UÐ+;¹eÀB»iÈÐ=NÓOÐOô
 	�7Ð" W¨eÐ$4±u¸R³yÀ$Ð6GÓH€AØ‡u�uŒU‡|�|žKÜð !ô 	"à�5‰5”�<‰<ž;Øˆá�‹9Ðr^   c                 óŽ   ^^^• [        U 5      n U4S jnUUU4S jnU R                  [        U5      R                  [        U5      $ )a°  
Expand hypergeometric functions. If allow_hyper is True, allow partial
simplification (that is a result different from input,
but still containing hypergeometric functions).

If a G-function has expansions both at zero and at infinity,
``place`` can be set to ``0`` or ``zoo`` to indicate the
preferred choice.

Examples
========

>>> from sympy.simplify.hyperexpand import hyperexpand
>>> from sympy.functions import hyper
>>> from sympy.abc import z
>>> hyperexpand(hyper([], [], z))
exp(z)

Non-hyperegeometric parts of the expression and hypergeometric expressions
that are not recognised are left unchanged:

>>> hyperexpand(1 + hyper([1, 1, 1], [], z))
hyper((1, 1, 1), (), z) + 1
c                 óN   >• [        [        X5      UTS9nUc  [        XU5      $ U$ )Nró  )rÒ  rd   r?   )rg   rh   rn   r©  r¼  s       €r\   Ú
do_replaceÚhyperexpand.<locals>.do_replace²	  s-   ø€ Üœ¨Ó/°¸GÑDˆØ‰9Ü˜ Ó#Ð#àˆHr^   c           	      ó¨   >• [        [        U S   U S   US   US   5      UTTTS9nUR                  [        [        [
        [
        * 5      (       d  U$ g )Nr   rW   )r¼  r  )r   r›   rH  r   r   r   )rg   rh   rn   r©  r  r  r¼  s       €€€r\   Ú	do_meijerÚhyperexpand.<locals>.do_meijer¹	  sT   ø€ Üœ: b¨¡e¨R°©U°B°q±E¸2¸a¹5ÓAÀ1Ø¨°uñ>ˆà�u‰u”Sœ#œr¤B 3×'Ñ'ØˆHð (r^   )r   rÐ  r?   rK   )r}  r  r¼  r  r#  r&  s    ```  r\   Úhyperexpandr(  —	  s8   ú€ ô2 	�‹
€Aõ÷ð
 �9‰9”U˜JÓ'×/Ñ/´¸ÓCÐCr^   )Frµ  N)Žr  Úcollectionsr   Ú	itertoolsr   Ú	functoolsr   Úmathr   Úsympyr   Ú
sympy.corer   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úsympy.core.modr   Úsympy.core.sortingr   Úsympy.functionsr   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   Ú$sympy.functions.elementary.complexesr=   r>   Úsympy.functions.special.hyperr?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   Úsympy.matricesrL   rM   rN   Úsympy.polysrO   rP   rQ   Úsympy.seriesrR   Úsympy.simplify.powsimprS   Úsympy.utilities.iterablesrT   r]   r�   r±   r¼   rÂ   rd   r›   r;  rf   rx  r”   rœ  r£  r®  r´  r¿  rÇ  rÞ  rä  rë  rñ  r÷  rý  r  r  r   r&  rA  rD  rK  rQ  rV  r}  r�  rˆ  rª  r­  r³  rÏ  rÒ  rí  r  r   r(  rw   r^   r\   Ú<module>r9     sr  ðñõt $Ý Ý Ý å ÷@÷ @÷ @÷ @õ @å Ý /÷H÷ H÷ H÷ H÷ H÷ H÷ H÷ Hõ H÷ F÷5÷ 5÷ 5õ 5÷ .Ñ -ß )Ñ )Ý  Ý ,Ý *òò]ò@	@òFòôA�Tô AôH<H�ô <Hñ@ ˆ3ƒZ€÷Bñ B÷NIñ I÷X&:ñ &:÷Rñ ÷.2ñ 2ôj!�8ô !ô
HˆXô 
Hô
LˆXô 
Lô&Lˆxô &LôR'Lˆxô 'LôTH�8ô HôL�8ô LôI�8ô IôL�8ô Lô#N�Xô #NôL,N�Xô ,Nô^0N�Xô 0Nôf.N�Xô .Nôb=�(ô =ò@ò4?ò87ò<òòFòR*-òZò8@/òF73òt#ðJ €ð  "¡e¨D£k¸1À1Ø"ôhHòVEðN Ð ð 9BØô}õ@'Dr^   