Ë
    7^(h’S  ã                   ó¨  — d Z ddlZddlmZ ddlmZmZmZ  ej                  d«      Z	e	j                  ej                  «        ed«      Ze	j                  ej                  «       ergddlZej                   Zej$                  ZdD � cg c]  } ej!                  | d«      ‘Œ c} \  ZZZd	D �cg c]  }ej%                  dd
|¬«      ‘Œ c}\  ZZZndZddlZddlmZ ddlm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' d	D �cg c]  } ejP                  |dd«      ‘Œ c}\  Z)Z*Z+  ejX                  d«      e#«      Z-d„ Z.d„ Z/d„ Z0d„ Z1d„ Z2d„ Z3d„ Z4d„ Z5ed„ «       Z6d„ Z7d„ Z8d„ Z9d„ Z:d„ Z;d „ Z<d!„ Z=d"„ Z>d#„ Z?d$„ Z@d%„ ZAd&„ ZBd'„ ZCd(„ ZDd)„ ZEd*„ ZFd+„ ZGd,„ ZHd-„ ZId.„ ZJd/„ ZKd0„ ZLd1„ ZMd2„ ZNd3„ ZOed4„ «       ZPd5„ ZQd6„ ZRd7„ ZSd8„ ZTd9„ ZUd:„ ZVd;„ ZWd<„ ZXd=„ ZYd>„ ZZd?„ Z[yc c} w c c}w c c}w )@aˆ  
Important note on tests in this module - the Theano printing functions use a
global cache by default, which means that tests using it will modify global
state and thus not be independent from each other. Instead of using the "cache"
keyword argument each time, this module uses the theano_code_ and
theano_function_ functions defined below which default to using a new, empty
cache instead.
é    N)Úimport_module)ÚraisesÚSKIPÚwarns_deprecated_sympyztheano.configdefaultsÚtheanoÚxyzÚfloatXÚXYZ©FF)ÚnameT)ÚS)ÚxÚyÚzÚt)Útheano_codeÚdim_handlingÚtheano_functioné   Úfc                 ó~   — |j                  di «       t        «       5  t        | fi |¤Žcddd«       S # 1 sw Y   yxY w)zB Wrapper for theano_code that uses a new, empty cache by default. ÚcacheN)Ú
setdefaultr   r   )ÚexprÚkwargss     úb/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/printing/tests/test_theanocode.pyÚtheano_code_r   .   s:   € à
×Ñ�g˜rÔ"Ü	Ó	!ñ +Ü˜4Ñ* 6Ñ*÷+÷ +ò +ús   �3³<c                 ó€   — |j                  di «       t        «       5  t        | |fi |¤Žcddd«       S # 1 sw Y   yxY w)zF Wrapper for theano_function that uses a new, empty cache by default. r   N)r   r   r   )ÚinputsÚoutputsr   s      r   Útheano_function_r!   4   s<   € à
×Ñ�g˜rÔ"Ü	Ó	!ñ :Ü˜v wÑ9°&Ñ9÷:÷ :ò :ús   �4´=c                  ó   — t        t        t        | «      «      }t        j                  j
                  j                  |«      }t        j                  j
                  j                  ||«      \  }}t        j                  j                  ||«      S )z³ Transform SymPy expressions into Theano Computation.

    Parameters
    ==========
    exprs
        SymPy expressions

    Returns
    =======
    theano.gof.FunctionGraph
    )	ÚlistÚmapr   r   ÚgofÚgraphr   ÚcloneÚFunctionGraph)ÚexprsÚoutsÚinss      r   Ú	fgraph_ofr,   ;   sf   € ô ””L %Ó(Ó)€DÜ
�*‰*×
Ñ
×
!Ñ
! $Ó
'€CÜ—
‘
× Ñ ×&Ñ& s¨DÓ1�I€CˆÜ�:‰:×#Ñ# C¨Ó.Ð.ó    c                 ó¶   — t         j                  j                  «       j                  d«      }| j	                  «       } |j
                  j                  | «       | S )zŸ Simplify a Theano Computation.

    Parameters
    ==========
    fgraph : theano.gof.FunctionGraph

    Returns
    =======
    theano.gof.FunctionGraph
    Úfusion)r   ÚcompileÚget_default_modeÚ	excludingr'   Ú	optimizerÚoptimize)ÚfgraphÚmodes     r   Útheano_simplifyr7   M   sC   € ô �>‰>×*Ñ*Ó,×6Ñ6°xÓ@€DØ�\‰\‹^€FØ‡N�N×Ñ˜FÔ#Ø€Mr-   c                 ó|  — t         t        t        j                  f}t	        | |«      }t	        ||«      }|s|r
|r|sy| |k(  S t	        | t
        t        f«      }t	        |t
        t        f«      }|s|rO|r|rt        | «      t        |«      k7  ryt        t        t        | «      «      t        t        t        |«      «      k(  S t        j                  j                  | d¬«      }t        j                  j                  |d¬«      }d| |fd||ffD ])  \  }	}
}|dk(  sŒt        d|	›d|	›d	t        |
«      ›d
�«      ‚ ||k(  S )aæ   Test two Theano objects for equality.

    Also accepts numeric types and lists/tuples of supported types.

    Note - debugprint() has a bug where it will accept numeric types but does
    not respect the "file" argument and in this case and instead prints the number
    to stdout and returns an empty string. This can lead to tests passing where
    they should fail because any two numbers will always compare as equal. To
    prevent this we treat numbers as a separate case.
    FÚstr)ÚfileÚaÚbÚ ztheano.printing.debugprint(z) returned empty string (z is instance of ú))ÚintÚfloatÚnpÚnumberÚ
isinstanceÚtupler#   Útyper$   Útheqr   ÚprintingÚ
debugprintÚ	TypeError)r;   r<   Únumeric_typesÚa_is_numÚb_is_numÚa_is_seqÚb_is_seqÚastrÚbstrÚargnameÚargvalÚargstrs               r   rF   rF   ^   s2  € ô œ%¤§¡Ð+€MÜ˜!˜]Ó+€HÜ˜!˜]Ó+€Hñ ‘8Ù™XØà�A‰vˆô ˜!œe¤T˜]Ó+€HÜ˜!œe¤T˜]Ó+€Há‘8Ù™X¬$¨q«'´T¸!³WÒ*<Øä”Cœ˜a“LÓ!¤T¬#¬d°A«,Ó%7Ñ7Ð7ô �?‰?×%Ñ% a¨eÐ%Ó4€DÜ�?‰?×%Ñ% a¨eÐ%Ó4€Dð &)¨!¨T N°S¸!¸T°NÐ#Cò Ñˆ�˜Ø�R‹<Ýò šG¤T¨&¥\ð3óð ðð �4‰<Ðr-   c                  óx  — t        t        t        t        «      «      sJ ‚t        t        t        t
        «      «      sJ ‚t        t        t        t        «      «      sJ ‚t        t        t        t        «      «      sJ ‚t        t        t        t        «      «      sJ ‚t        t        t        t        «      «      sJ ‚y)z‰
    Check that the example symbols in this module print to their Theano
    equivalents, as many of the other tests depend on this.
    N)rF   Úxtr   r   Úytr   Úztr   ÚXtÚXÚYtÚYÚZtÚZ© r-   r   Útest_example_symbolsr_   Ž   s|   € ô
 ””L¤“OÔ$Ð$Ð$Ü””L¤“OÔ$Ð$Ð$Ü””L¤“OÔ$Ð$Ð$Ü””L¤“OÔ$Ð$Ð$Ü””L¤“OÔ$Ð$Ð$Ü””L¤“OÔ$Ð$Ñ$r-   c                  óh  — t        t        «      } t        | t        j                  t
        j                  f«      sJ ‚| j                  dk(  sJ ‚| j                  t        j                  k(  sJ ‚t        t        t        di¬«      }|j                  dk(  sJ ‚|j                  t        j                  k(  sJ ‚y)z. Test printing a Symbol to a theano variable. r^   ©F©ÚbroadcastablesN)	r   r   rC   ÚttÚTensorVariableÚtsÚScalarVariableÚbroadcastabler   )ÚxxÚxx2s     r   Útest_Symbolrk   ›   s�   € ä	”a‹€BÜ�bœ2×,Ñ,¬b×.?Ñ.?Ð@ÔAÐAÐAØ×Ñ˜rÒ!Ð!Ð!Ø�7‰7”a—f‘fÒÐÐä
”q¬!¨X¨Ô
7€CØ×Ñ Ò(Ð(Ð(Ø�8‰8”q—v‘vÒÐÑr-   c                  ó|   — t        t        «      } t        | t        j                  «      sJ ‚| j
                  dk(  sJ ‚y)z4 Test printing a MatrixSymbol to a theano variable. r   N)r   rY   rC   rd   re   rh   )ÚXXs    r   Útest_MatrixSymbolrn   ¦   s5   € ä	”a‹€BÜ�bœ"×+Ñ+Ô,Ð,Ð,Ø×Ñ˜~Ò-Ð-Ñ-r-   c                  ó�   — g d¢} | D ]1  }t        t        «      5  t        t        t        |i¬«       ddd«       Œ3 y# 1 sw Y   Œ>xY w)z/ Test MatrixSymbol with invalid broadcastable. )r^   ra   ©T©TF©FT)TTrb   N)r   Ú
ValueErrorr   rY   )ÚbcsÚbcs     r   Útest_MatrixSymbol_wrong_dimsrv   ¬   sI   € ò O€CØò 4ˆÜ”JÓñ 	4Üœ¬A¨r¨7Õ3÷	4ð 	4ñ4÷	4ð 	4ús	   ™<¼A	c                  óž   — t        t        «      } t        | t        j                  «      sJ ‚| j
                  dk(  sJ ‚| j                  dk(  sJ ‚y)zG Test printing AppliedUndef instance, which works similarly to Symbol. r^   Úf_tN)r   rx   rC   rd   re   rh   r   )Úftts    r   Útest_AppliedUndefrz   ´   sH   € ä
”sÓ
€CÜ�cœ2×,Ñ,Ô-Ð-Ð-Ø×Ñ Ò"Ð"Ð"Ø�8‰8�uÒÐÑr-   c                  óš   — t         t        z   } t        | «      }|j                  j                  t
        j                  j                  k(  sJ ‚y ©N)r   r   r   ÚownerÚopr   ÚtensorÚadd©r   Úcomps     r   Útest_addrƒ   ¼   s5   € ÜŒq‰5€DÜ˜Ó€DØ�:‰:�=‰=œFŸM™M×-Ñ-Ò-Ð-Ñ-r-   c                  ó  — t        t        t        j                  t        «      «      t
        j                  t        «      «      sJ ‚t        t        t        j                  t        «      «      t
        j                  t        «      «      sJ ‚y r|   )rF   r   ÚsyÚsinr   rd   rU   Útanr^   r-   r   Ú	test_trigrˆ   Á   sL   € Ü”œRŸV™V¤A›YÓ'¬¯©´«Ô4Ð4Ð4Ü”œRŸV™V¤A›YÓ'¬¯©´«Ô4Ð4Ñ4r-   c                  ó‚  — t        j                  t        dz  t        j                  t        «      z   «      t        j
                  dt        z  «      z  } t        | «      }t        j                  t        dz  t        j                  t        «      z   «      t        j                  dt        z  «      z  }t        ||«      sJ ‚y)z; Test printing a complex expression with multiple symbols. é   N)r…   Úexpr   Úcosr   Úlogr   r   rd   rU   rV   rW   rF   )r   r‚   Úexpecteds      r   Ú	test_manyr�   Å   s|   € ä�6‰6”!�Q‘$œŸ™¤›Ñ"Ó#¤b§f¡f¨Q¬q©S£kÑ1€DÜ˜Ó€DÜ�v‰v”b˜!‘eœbŸf™f¤R›jÑ(Ó)¬B¯F©F°1´R±4«LÑ8€HÜ��hÔÐÑr-   c                  ó°  — dD ]2  } t        t        t        | i¬«      j                  j                  | k(  rŒ2J ‚ t        t        t        di¬«      j                  j                  dv sJ ‚t        t        dz   t        di¬«      j                  j                  dk(  sJ ‚t        t        t        z   t        dt        di¬«      j                  j                  dk(  sJ ‚y)	zA Test specifying specific data types through the dtype argument. )Úfloat32Úfloat64Úint8Úint16Úint32Úint64©Údtypesr	   )r‘   r’   é   r‘   r’   N)r   r   rE   Údtyper   )rš   s    r   Ú
test_dtyper›   Í   sº   € àJò FˆÜœA¤q¨% jÔ1×6Ñ6×<Ñ<ÀÓEÐEÐEðFô œ¤1 h -Ô0×5Ñ5×;Ñ;Ð?UÑUÐUÐUô œ˜A™¤q¨) nÔ5×:Ñ:×@Ñ@ÀIÒMÐMÐMÜœœA™¤q¨)´Q¸	Ð&BÔC×HÑH×NÑNÐR[Ò[Ð[Ñ[r-   c                  óp   — t         t        fD ]'  } dD ]   }t        | | |i¬«      j                  |k(  rŒ J ‚ Œ) y)zG Test the "broadcastables" argument when printing symbol-like objects. )r^   ra   rp   r   rq   rb   N)r   rx   r   rh   )Úsru   s     r   Útest_broadcastablesrž   Ú   sI   € ô ”ˆXò OˆØHò 	OˆBÜ °1°b°'Ô:×HÑHÈBÓNÐNÐNñ	OñOr-   c                  óª   — t         t        z   } g d¢g d¢g d¢g d¢g d¢g}|D ]0  \  }}}t        | t         |t        |i¬«      }|j                  |k(  rŒ0J ‚ y)zG Test "broadcastable" attribute after applying element-wise binary op. )r^   r^   r^   )ra   ra   ra   )rp   ra   ra   )rr   r   r   )rq   r   r   rb   N)r   r   r   rh   )r   ÚcasesÚbc1Úbc2Úbc3r‚   s         r   Útest_broadcastingr¤   ä   se   € ô Œq‰5€Dò 	Ú&Ú%Ú7Ú7ð€Eð ò )‰ˆˆS�#Ü˜D´!°S¼!¸SÐ1AÔBˆØ×!Ñ! SÓ(Ð(Ð(ñ)r-   c                  ó  — t         t        z  t        z  } t        | «      }t	        |j
                  j                  t        j                  «      sJ ‚t        |t        j                  t        «      j                  t        «      «      sJ ‚y r|   )rY   r[   r]   r   rC   r}   r~   rd   ÚDotrF   rX   ÚdotrZ   r\   )r   Úexpr_ts     r   Útest_MatMulr©   ö   sV   € ÜŒQ‰3Œq‰5€DÜ˜$Ó€FÜ�f—l‘l—o‘o¤r§v¡vÔ.Ð.Ð.Ü�œŸ™œr›
Ÿ™¤rÓ*Ô+Ð+Ñ+r-   c                  ó’   — t        t        t        j                  «      j                  j
                  t        j                  «      sJ ‚y r|   )rC   r   rY   ÚTr}   r~   rd   Ú
DimShuffler^   r-   r   Útest_Transposer­   ü   s+   € Ü”l¤1§3¡3Ó'×-Ñ-×0Ñ0´"·-±-Ô@Ð@Ñ@r-   c                  óž   — t         t        z   t        z   } t        t	        | «      j
                  j                  t        j                  «      sJ ‚y r|   )	rY   r[   r]   rC   r   r}   r~   rd   ÚElemwise©r   s    r   Útest_MatAddr±   ÿ   s4   € ÜŒQ‰3Œq‰5€DÜ”l 4Ó(×.Ñ.×1Ñ1´2·;±;Ô?Ð?Ñ?r-   c                  óø   — t        t        t        j                  d«      dz  «      t        j                  dd«      «      sJ ‚t        t        t        j                  «      t        j                  dd«      «      sJ ‚y )NrŠ   é   r™   )rF   r   r…   ÚIntegerrd   Útrue_divr   ÚHalfr^   r-   r   Útest_Rationalsr·     sS   € Ü”œRŸZ™Z¨›]¨QÑ.Ó/´·±¸QÀÓ1BÔCÐCÐCÜ”œQŸV™VÓ$¤b§k¡k°!°QÓ&7Ô8Ð8Ñ8r-   c                  óJ   — t        t        j                  d«      «      dk(  sJ ‚y )Nr³   )r   r…   r´   r^   r-   r   Útest_Integersr¹     s   € ÜœŸ
™
 1›Ó&¨!Ò+Ð+Ñ+r-   c                  ón   — t        j                  d«      } t        t        j                  | «      «      sJ ‚y )NÚn)r…   ÚSymbolr   Ú	factorial)r»   s    r   Útest_factorialr¾     s%   € Ü
�	‰	�#‹€AÜœŸ™ Q›Ô(Ð(Ñ(r-   c                  ó  — d„ } t         | t        t        j                  t        j                  t
        «      t
        d¬«      «      «       | t        j                  t        j	                  t        «      t        «      «      «      sJ ‚y )Nc                 ó*   — t        t        | «      «      S r|   )r7   r,   r°   s    r   ú<lambda>z!test_Derivative.<locals>.<lambda>  s   € œ¬	°$«Ó8€ r-   F©Úevaluate)
rF   r   r…   Ú
Derivativer†   r   r   Úgradrd   rU   )Úsimps    r   Útest_DerivativerÇ     sU   € Ù8€DÜ‘”\¤"§-¡-´·±´q³	¼1ÀuÔ"MÓNÓOÙ”V—[‘[¤§¡¬£¬RÓ0Ó1ô3ð 3ñ 3r-   c                  ód   — t        t        t        gt        t        z   g«      }  | dd«      dk(  sJ ‚y)z, Test theano_function() with single output. rŠ   r³   é   N©r!   r   r   )r   s    r   Útest_theano_function_simplerË     s*   € äœ!œQ˜¤!¤A¡# Ó'€AÙˆQ�‹7�aŠ<Ð‰<r-   c                  ó”   — t        t        t        gt        t        z   t        t        z
  g«      }  | dd«      \  }}|dk(  sJ ‚|dk(  sJ ‚y)z/ Test theano_function() with multiple outputs. rŠ   r³   rÉ   éÿÿÿÿNrÊ   )r   Úo1Úo2s      r   Útest_theano_function_multirÐ     sC   € äœ!œQ˜¤!¤A¡#¤q¬¡s Ó,€AÙˆq�!‹W�F€BˆØ�Š7€Nˆ7Ø�Š8€O‰8r-   c            	      ót  — t        t        t        gt        t        z   gdt        dt        di¬«      } t        j                  j                   | ddgddg«      t        j                  ddg«      z
  «      dk  sJ ‚t        t        t        gt        t        z   gt        dt        did¬	«      } t        j                  d«      j                  d«      }dt        j                  d«      j                  d«      z  }t        j                  j                   | ||«      dt        j                  d«      z  z
  «      dk  sJ ‚y
)z1 Test theano_function() vs Numpy implementation. r™   r’   )Údimr˜   rŠ   r³   r   é   ç•Ö&è.>)r˜   rÒ   N)	r!   r   r   rA   ÚlinalgÚnormÚasarrayÚarangeÚastype)r   ri   Úyys      r   Útest_theano_function_numpyrÛ   !  sñ   € äœ!œQ˜¤!¤A¡# ¨AÜ!" I¬q°)Ð <ô	>€Aä�9‰9�>‰>™!˜Q ˜F Q¨ FÓ+¬b¯j©j¸!¸Q¸Ó.@Ñ@ÓAÀDÒHÐHÐHäœ!œQ˜¤!¤A¡# ´°9¼aÀÐ/KØô	 €Aä	�‰�1‹×	Ñ	˜YÓ	'€BØ	
Œ2�9‰9�Q‹<×Ñ˜yÓ)Ñ	)€BÜ�9‰9�>‰>™!˜B ›) a¬¯	©	°!«¡nÑ4Ó5¸Ò<Ð<Ñ<r-   c                  óä  — t        j                  t        t        gt        t        t        z   t        z   gg«      } t        j                  ddgddgg«      }t        t        t        t        g| g«      }t
        j                  j                   |ddd«      |«       t        t        t        t        g| gd¬«      }t
        j                  j                   |ddd«      |«       t        t        t        t        g| | g«      }t         |ddd«      t        g «      «      sJ ‚t
        j                  j                   |ddd«      d   |«       t
        j                  j                   |ddd«      d   |«       y )	Nç      ð?ç       @g      @g      @T)Úscalarr   r™   )r…   ÚMatrixr   r   r   rA   Úarrayr!   ÚtestingÚassert_allcloserC   rE   )ÚmrŽ   r   s      r   Útest_theano_function_matrixrå   .  s  € Ü
�	‰	”A”q�6œAœq¤1™u¤q™y˜>Ð*Ó+€AÜ�x‰x˜#˜s˜ c¨?Ð%;Ð<Ó=€HÜœ!œQ¤˜ Q CÓ(€AÜ‡J�J×Ñ™q  c¨3Ó/°Ô:Üœ!œQ¤˜ Q C°Ô5€AÜ‡J�J×Ñ™q  c¨3Ó/°Ô:Üœ!œQ¤˜ Q¨ FÓ+€AÜ‘a˜˜S #Ó&¬¨R«Ô1Ð1Ð1Ü‡J�J×Ñ™q  c¨3Ó/°Ñ2°HÔ=Ü‡J�J×Ñ™q  c¨3Ó/°Ñ2°HÕ=r-   c                  óì   — t        t        gd¬«      t        dik(  sJ ‚t        t        t        gt        dt        di¬«      t        dt        dik(  sJ ‚t        t        gt        di¬«      t        dik(  sJ ‚y )	NrŠ   )rÒ   r   r™   )Údimsrr   ra   rb   )r   r   r   r^   r-   r   Útest_dim_handlingrè   :  st   € Üœ˜ Ô#¬¨>Ð':Ò:Ð:Ð:ÜœœA˜¤a¨¬A¨q \Ô2´q¸-Ü78¸.ð7Jò Jð Jð Jäœ˜¬Q°¨MÔ:¼qÀ(¸mÒKÐKÑKr-   c                  óÔ  — ddl } t        t        t        t        gt        t        z   gddt        dt        dt        di¬«      }| j
                  j                   |ddgdd	gddg«       | j                  d	d
g«      z
  «      dk  sJ ‚t        t        t        t        gt        t        z   gt        dt        dt        didd¬«      } | j                  d«      j                  d«      }d | j                  d«      j                  d«      z  }d | j                  d«      j                  d«      z  }| j
                  j                   ||||«      d | j                  d«      z  z
  «      dk  sJ ‚y)zU
    Test passing additional kwargs from theano_function() to theano.function().
    r   Nr™   Úignorer’   )rÒ   Úon_unused_inputr˜   rŠ   r³   r   rÓ   rÔ   )r˜   rÒ   rë   )
Únumpyr!   r   r   r   rÕ   rÖ   r×   rØ   rÙ   )rA   r   ri   rÚ   Úzzs        r   Útest_theano_function_kwargsrî   @  s8  € ó Üœ!œQ¤˜¤Q¤q¡S E¨qÀ(Ü�y¤! Y´°9Ð=ô	?€Aà�9‰9�>‰>™!˜Q ˜F Q¨ F¨Q°¨FÓ3°j°b·j±jÀ!ÀQÀÓ6HÑHÓIÈDÒPÐPÐPäœ!œQ¤˜¤Q¤q¡S EÜ ! 9¬a°¼A¸yÐIØ¨xô	9€Að 
ˆ�‰�1‹×	Ñ	˜YÓ	'€BØ	
ˆ9ˆ2�9‰9�Q‹<×Ñ˜yÓ)Ñ	)€BØ	
ˆ9ˆ2�9‰9�Q‹<×Ñ˜yÓ)Ñ	)€BØ�9‰9�>‰>™!˜B  B›-¨!¨I¨B¯I©I°a«L©.Ñ8Ó9¸DÒ@Ð@Ñ@r-   c                  ó>  — t         t        gt         t        z   gddgft        t        gt        t        z   gddgft         t        gt         t        z   gt         dt        didgft         t        gt         t        z   t         t        z
  gdddgft         t        t        t        gt         t        z   t        t        z   gdddgfg} | D �]N  \  }}}}dD �]@  }t	        ||||¬«      }t        |j                  t        j                  j                  j                  «      sJ ‚|j                  j                  D ��cg c]=  }t        j                  |j                  j                  D �cg c]  }|rdnd‘Œ
 c}«      ‘Œ? }	}} ||	Ž }
t        |
t         «      s|
g}
t#        |«      t#        |
«      k(  sJ ‚t%        ||
«      D ]V  \  }}|r"|dk(  rt        |t        j&                  «      rŒ(J ‚t        |t        j(                  «      sJ ‚|j*                  |k(  rŒVJ ‚ �ŒC �ŒQ yc c}w c c}}w )z2 Test the "scalar" argument to theano_function(). Nr   rŠ   r™   rr   )rç   rß   rÉ   )r   r   rY   r[   r!   rC   r   r   r0   Úfunction_moduleÚFunctionÚinput_storagerA   ÚonesrE   rh   r#   ÚlenÚziprB   ÚndarrayÚndim)Úargsr   r    Úin_dimsÚout_dimsrß   r   Úiru   Ú	in_valuesÚ
out_valuesÚdÚvalues                r   Útest_theano_function_scalarr   Q  së  € ô ŒQˆ”!”a‘%�˜$  Ð$Ü
ŒQˆ”!”a‘%�˜$  Ð$Ü
ŒQˆ”!”a‘%�œ1˜a¤ A˜,¨¨Ð,Ü
ŒQˆ”!”a‘%œœQ™� ¨¨1 vÐ.Ü
ŒQ””1ˆœœA™œq¤1™u�~ t¨a°¨VÐ4ð€Dð /3ó +Ñ*ˆ�˜ (Ø#ó 	+ˆFä  ¨°wÀvÔNˆAô ˜a×/Ñ/´·±×1OÑ1O×1XÑ1XÔYÐYÐYð
 ×*Ñ*×8Ñ8÷àô —‘°!·&±&×2FÑ2FÖG¨B™b™ a™ÒGÕHðˆIñ ñ ˜I˜ˆJÜ˜j¬$Ô/Ø(˜\�
ô �x“=¤C¨
£OÒ3Ð3Ð3Ü ¨*Ó5ò 	+‘��5á˜a 1šfä% e¬R¯Y©YÕ7Ð7Ð7ô & e¬R¯Z©ZÔ8Ð8Ð8Ø Ÿ:™:¨›?Ð*˜?ò	+ò%	+ñ+ùò Hùós   Ä2,H
ÅHÅ+	H
ÈH
c                  ó&   — t        t        d„ «       y)za
    Passing an unknown keyword argument to theano_function() should raise an
    exception.
    c                  ó8   — t        t        gt        dz   gd¬«      S )Nr™   r³   )Úfoobar)r!   r   r^   r-   r   rÁ   z0test_theano_function_bad_kwarg.<locals>.<lambda>€  s   € Ô/´°´a¸±c°UÀ1ÔE€ r-   N)r   Ú	Exceptionr^   r-   r   Útest_theano_function_bad_kwargr  {  s   € ô
 Œ9ÑEÕFr-   c            	      óN  — t        t        ddd«      «      t        ddd«      k(  sJ ‚d„ } t        dt        di} | t        t        t        t        «      |¬«      t        t        t
        «      «      sJ ‚ | t        t        dt        d«      |¬«      t        dt        d«      «      sJ ‚y )Nr™   rŠ   r³   c                 óv   — dD ]4  }t        | |«      }t        ||«      }|�|€|€Œ"|€Œ% yt        ||«      rŒ4 y y)N)ÚstartÚstopÚstepFT)ÚgetattrrF   )Ús1Ús2ÚattrÚa1Úa2s        r   Ú
theq_sliceztest_slice.<locals>.theq_slice†  sO   € Ø-ò 	ˆDÜ˜˜TÓ"ˆBÜ˜˜TÓ"ˆBØˆz˜R˜ZØ™
 b¡jÙ Ü˜"˜b•\Ùð	ð r-   r•   r—   )r   Úslicer   r   rU   rV   )r  r˜   s     r   Ú
test_slicer  ƒ  s…   € Üœ˜a  A›Ó'¬5°°A°q«>Ò9Ð9Ð9ò	ô �œ!˜WÐ%€FÙ”l¤5¬¬A£;°vÔ>ÄÄbÌ"ÃÔNÐNÐNÙ”l¤5¨¬A¨q£>¸&ÔAÄ5ÈÌBÐPQÃ?ÔSÐSÑSr-   c                  ó|  ‡‡	‡
— ddl mŠ i } t        j                  dd¬«      }t        j                  d||«      }|ddd	…d
dd…f   }t        || ¬«      Š	t        j                  d«      Š
t        ‰	j                  j                  j                  «      t        ‰
‰
‰
«      t        ‰
‰
‰
«      fk(  sJ ‚‰	j                  j                  d   t        || ¬«      k(  sJ ‚t        ˆˆ	ˆ
fd„t        dd«      D «       «      sJ ‚t        j                  d«      }t        ||di¬«       d
|d}}}||||…   }t        ||d|di¬«      Š	y )Nr   )ÚConstantr»   T©ÚintegerrY   r™   rŠ   r³   r   rÉ   rÓ   ©r   r–   c              3   ó|   •K  — | ]3  }‰j                   j                  |   j                   ‰‰|«      «      –— Œ5 y ­wr|   )r}   r   Úequals)Ú.0rû   r  rZ   r�   s     €€€r   ú	<genexpr>z#test_MatrixSlice.<locals>.<genexpr>¥  s/   øè ø€ ÒN¸Qˆr�x‰x�‰˜qÑ!×(Ñ(©°!°Q«×8ÑNùs   ƒ9<é   Úkr•   r—   )r   r  r…   r¼   ÚMatrixSymbolr   rf   ÚScalarrD   r}   r~   Úidx_listr  r   ÚallÚrange)r   r»   rY   r[   r  r  r	  r
  r  rZ   r�   s           @@@r   Útest_MatrixSlicer$  •  s!  ú€ Ýà€Eä
�	‰	�#˜tÔ$€AÜ
�‰˜˜Q Ó"€Aà	ˆ!ˆAˆaˆ%��1�Q�ˆ,‰€AÜ	�a˜uÔ	%€Bä
�	‰	�'Ó€AÜ�—‘—‘×%Ñ%Ó&¬5°°A°q«>¼5ÀÀAÀq»>Ð*JÒJÐJÐJØ�8‰8�?‰?˜1Ñ¤¨a°uÔ!=Ò=Ð=Ð=ô ÕNÄ%ÈÈ1Ã+ÔNÔNÐNÐNä
�	‰	�#‹€AÜ�˜A˜w˜<Õ(Ø˜1˜a�ˆ4€EØ	ˆ%��Tˆ/Ñ€AÜ	�a  G¨Q°Ð 8Ô	9�Br-   c            
      ó@  ‡— t        j                  dd¬«      } dD �cg c]  }t        j                  || | «      ‘Œ c}\  }}}}t        t        ||||f«      \  }}}}	t        j
                  ||g||gg«      }
t	        |
«      Št        j                  dt        j                  d||«      t        j                  d||	«      «      t        j                  dt        j                  d||«      t        j                  d||	«      «      g}t        ˆfd„|D «       «      sJ ‚y c c}w )Nr»   Tr  ÚABCDr   r™   c              3   ó6   •K  — | ]  }t        ‰|«      –— Œ y ­wr|   )rF   )r  ÚsolutionÚBlockts     €r   r  z#test_BlockMatrix.<locals>.<genexpr>¶  s   øè ø€ Ò@¨(Œt�F˜H×%Ñ@ùs   ƒ)	r…   r¼   r  r$   r   ÚBlockMatrixrd   ÚjoinÚany)r»   r   ÚAÚBÚCÚDÚAtÚBtÚCtÚDtÚBlockÚ	solutionsr)  s               @r   Útest_BlockMatrixr7  ®  sï   ø€ Ü
�	‰	�#˜tÔ$€AØ:@ÖA°$”"—/‘/ $¨¨1Õ-ÒA�J€A€qˆ!ˆQÜœ¨¨1¨a° |Ó4�N€BˆˆB�Ü�N‰N˜Q ˜F Q¨ FÐ+Ó,€EÜ˜%Ó €FÜ—‘˜œBŸG™G A r¨2Ó.´·±¸¸2¸rÓ0BÓCÜ—‘˜œBŸG™G A r¨2Ó.´·±¸¸2¸rÓ0BÓCðE€IäÓ@°iÔ@Ô@Ð@Ñ@ùò Bs   �Dc            	      ó   — d\  } }d}t        j                  d|| «      }t        j                  d||«      }||f}|j                  |z  }||dz  |dz  f| dz  | dz  fg||dz  |dz  f|dz  |dz  fgi}|D �cg c]  }t        j                  |g||   ¢­Ž ‘Œ }	}|j	                  t        t        ||	«      «      «      }
t        t        ||gt        |«      z  «      «      }t        ||g|i ¬«      }t        |t        j                  |
«      g|i ¬«      }|D �cg c]7  }t        j                  j                  |j                  Ž j                  |«      ‘Œ9 }}t        j                  || z  «      j!                  |j                  «      j                  |«      t        j"                  |«      j                  |«      g}|dxx   t        j$                  |j                  «      dz  z  cc<   t        j&                   ||Ž  ||Ž d¬	«      sJ ‚y c c}w c c}w )
N)rŠ   r   r‘   r-  r.  rŠ   )r˜   r   r™   gñhãˆµøä>)Úrtol)r…   r  ÚIÚblockcutÚsubsÚdictrõ   rô   r!   Úblock_collapserA   ÚrandomÚrandÚshaperÙ   rØ   ÚreshapeÚeyeró   Úallclose)r  r»   rš   r-  r.  r   ÚoutputÚcutsizesrû   Ú	cutinputsÚ	cutoutputr˜   r   Úfblockedr   Úninputss                   r   Ú"test_BlockMatrix_Inverse_executionrK  ¸  sæ  € à�D€A€qØ€EÜ
�‰˜˜Q Ó"€AÜ
�‰˜˜Q Ó"€AØ�ˆT€FØ�S‰S�‰U€Fà�Q˜‘T˜1˜a™4�L 1 a¡4¨¨A© ,Ð/Ø�Q˜‘T˜1˜a™4�L 1 a¡4¨¨A© ,Ð/ð1€Hà7=Ö>°!”—‘˜QÐ- ¨!¡Ô-Ð>€IÐ>Ø—‘œD¤ V¨YÓ!7Ó8Ó9€Iä”#�f˜u˜g¤c¨&£kÑ1Ó2Ó3€FÜ˜ & °&ÀÔC€AÜ ¬×):Ñ):¸9Ó)EÐ(FØ'-°Rô9€Hð @FÖF¸!Œr�y‰y�~‰~˜qŸw™wÐ'×.Ñ.¨uÕ5ÐF€GÐFÜ�y‰y˜˜1™‹~×%Ñ% a§g¡gÓ.×5Ñ5°eÓ<Ü�v‰v�a‹y×Ñ Ó&ð(€GàˆAƒJ”"—'‘'˜!Ÿ'™'Ó" 4Ñ'Ñ'ƒJä�;‰;‘q˜'�{¡H¨gÐ$6¸TÕBÐBÑBùò ?ùò Gs   Á7 HÄ<Hc                  óÎ  — t        j                  d«      } t         j                  t         j                  fD ]­  } |t        j                  | «      t        j
                  | «       gt        j
                  | «      t        j                  | «      gg«      }t        |«      }t        |t        j                  «      sJ ‚|j                  j                  t        j                  k(  rŒ­J ‚ y )NÚtheta)r…   r¼   rà   ÚImmutableMatrixrŒ   r†   r   rC   rd   re   r}   r~   Újoin_)r   Ú
MatrixTyperY   ÚtXs       r   Útest_DenseMatrixrR  Ò  s¢   € Ü
�	‰	�'Ó€AÜ—y‘y¤"×"4Ñ"4Ð5ò 'ˆ
ÙœŸ™ ›¤R§V¡V¨A£Y JÐ/´"·&±&¸³)¼R¿V¹VÀA»YÐ1GÐHÓIˆÜ˜!‹_ˆÜ˜"œb×/Ñ/Ô0Ð0Ð0Ø�x‰x�{‰{œbŸh™hÓ&Ð&Ð&ñ	'r-   c                  óŒ  — t         t        j                  d«      ft        t        j                  dgt        j
                  ¢­Ž ft         t        j                  d«      t        j                  d«      «      fg} | D ]G  \  }}i }t        ||¬«      }t        ||¬«      |u sJ ‚t        |i ¬«      |usJ ‚t        ||¬«      |u rŒGJ ‚ y)zH Test single symbol-like objects are cached when printed by themselves. r   rY   r   r   r  N)	r   r…   r¼   rY   r  rA  rx   rñ   r   )Úpairsr  r  r   Ústs        r   Útest_cache_basicrV  Û  sÁ   € ô
 
ŒB�I‰I�c‹NÐÜ	
ŒB�O‰O˜CÐ*¤!§'¡'Ò*Ð+Ü	ÐŒb�k‰k˜#ÓœrŸy™y¨›~Ó.Ð/ð€Eð ò 3‰ˆˆBØˆÜ˜" EÔ*ˆô ˜B eÔ,°Ñ2Ð2Ð2ô ˜B bÔ)°Ñ3Ð3Ð3ô ˜B eÔ,°Ò2Ð2Ð2ñ3r-   c                  ó8  — ddl m}  t        | «      }	 | j                  «        t        t
        t        fD ]0  }t        «       5  t        |«      }t        |«      |u sJ ‚	 ddd«       Œ2 	 | j                  |«       y# 1 sw Y   ŒOxY w# | j                  |«       w xY w)z Test use of the global cache. r   )Úglobal_cacheN)
Úsympy.printing.theanocoderX  r=  Úclearr   rY   rx   r   r   Úupdate)rX  Úbackupr�   rU  s       r   Útest_global_cacher]  ò  s‘   € å6ä�,Ó€Fð$à×ÑÔä”Qœ�ò 	,ˆAÜ'Ó)ñ ,Ü  “^�Ü" 1“~¨Ñ+Ð+Ñ+÷,ð ,ñ	,ð 	×Ñ˜FÕ#÷,ð ,ûð 	×Ñ˜FÕ#ús#   “.B ÁA:Á
B Á:B	Á?B ÂBc            	      óÖ  — t        j                  d«      t        j                  ddd«      t        g} i }i }| D ](  }t	        ||¬«      }||j                  «       vsJ ‚|||<   Œ* t        t        t        t        |j                  «       «      «      «      t        | «      k(  sJ ‚|j                  «       D ]*  \  }}t        «       5  t        ||¬«      |u sJ ‚	 ddd«       Œ, y# 1 sw Y   Œ7xY w)z§
    Test that symbol-like objects of different types (Symbol, MatrixSymbol,
    AppliedUndef) are distinguished by the cache even if they have the same
    name.
    rx   r   r  N)r…   r¼   r  rx   r   Úvaluesrô   Úsetr$   ÚidÚitemsr   r   )Úsymbolsr   Úprintedr�   rU  s        r   Útest_cache_types_distinctre    så   € ô �y‰y˜Ó¤§¡°¸¸1Ó!=¼sÐC€Gà€EØ€Gàò ˆÜ˜! 5Ô)ˆØ˜Ÿ™Ó)Ñ)Ð)Ð)Øˆ�Š
ðô Œs”3”r˜7Ÿ>™>Ó+Ó,Ó-Ó.´#°g³,Ò>Ð>Ð>ð —‘“ò 5‰ˆˆ2Ü#Ó%ñ 	5Ü˜q¨Ô.°"Ñ4Ð4Ñ4÷	5ð 	5ñ5÷	5ð 	5ús   ÃCÃC(	c                  óÐ   — t        j                  t        t        d¬«      } t        | «      }t	        |t
        t
        z   «      sJ ‚t	        |t
        t        t        «      z   «      rJ ‚y)zf
    Test that a symbol is cached and reused when it appears in an expression
    more than once.
    FrÂ   N)r…   ÚAddr   r   rF   rU   r�   s     r   Útest_symbols_are_created_oncerh    sP   € ô
 �6‰6”!”Q Ô'€DÜ˜Ó€Dä�”bœ2‘gÔÐÐÜ�Dœ"œ|¬A›Ñ.Ô/Ð/Ð/Ð/r-   c                  ó|  — t         dz  t        t        j                  t         «      z
  t        j                  t
        t         t        z  z
  «      z  z   } | j                  D �ch c]  }|j                  ’Œ }}t        | «      }t        «       }t        j                  j                  j                  |g«      D ]y  }|j                  �Œt        |t        j                  j                  j                   «      rŒ?|j                  |v sJ ‚|j                  |vsJ ‚|j#                  |j                  «       Œ{ ||k(  sJ ‚yc c}w )zf
    Test caching on a complicated expression with multiple symbols appearing
    multiple times.
    rŠ   N)r   r   r…   r‹   r†   r   Úfree_symbolsr   r   r`  r   r%   r&   Ú	ancestorsr}   rC   r  r€   )r   r�   Úsymbol_namesr¨   ÚseenÚvs         r   Útest_cache_complexro  '  sõ   € ô
 �‰6”QœŸ™¤›‘]¤b§f¡f¬Q´´Q±©YÓ&7Ñ7Ñ7€DØ$(×$5Ñ$5Ö6˜q�A—F“FÐ6€LÐ6Ü˜$Ó€Fô ‹5€DÜ�Z‰Z×Ñ×'Ñ'¨¨Ó1ò ˆà�7‰7‰?¤:¨a´·±×1AÑ1A×1JÑ1JÕ#Kà—6‘6˜\Ñ)Ð)Ð)Ø—6‘6 Ñ%Ð%Ð%Ø�H‰H�Q—V‘VÕðð �<ÒÐÑùò 7s   Á!D9c                  ó.  — t        j                  dt        dk  ft        t        dk  fd«      } t        | «      }|j                  j
                  t        j                  k(  sJ ‚t        j                  t        dk  dt        j                  t        dk  t        d«      «      }t        ||«      sJ ‚t        j                  t        t        dk  f«      } t        | «      }t        j                  t        dk  t        t        j                  «      }t        ||«      sJ ‚t        j                  dt        j                  t        dkD  t        dk  «      ft        t        j                  t        dkD  t        dk  «      f«      } t        | «      }t        j                  t        j                  t        dkD  t        dk  «      dt        j                  t        j                  t        dkD  t        dk  «      t        t        j                  «      «      }t        ||«      sJ ‚y )Nr   rŠ   )r™   Tr™   )r…   Ú	Piecewiser   r   r}   r~   rd   ÚswitchrU   rF   rA   ÚnanÚAndÚOrÚand_Úor_)r   ÚresultrŽ   s      r   Útest_Piecewisery  ?  sq  € ä�<‰<˜œA˜a™C˜¤1¤a¨¡c (¨IÓ6€DÜ˜$Ó€FØ�<‰<�?‰?œbŸi™iÒ'Ð'Ð'ä�y‰yœ˜A™˜q¤"§)¡)¬B¨q©D´"°aÓ"8Ó9€HÜ�˜Ô!Ð!Ð!ä�<‰<œœA ™E˜
Ó#€DÜ˜$Ó€FÜ�y‰yœ˜a™¤¤R§V¡VÓ,€HÜ�˜Ô!Ð!Ð!ä�<‰<˜œBŸF™F¤1 Q¡3¬¨!©Ó,Ð-Ü	
ŒB�E‰E”!�A‘#”q˜‘s‹OÐó€Dä˜$Ó€FÜ�y‰yœŸ™¤ A¡¤b¨¡dÓ+¨QÜ
�	‰	”"—&‘&œ˜A™œr !™tÓ$¤b¬"¯&©&Ó1ó3€Hä�˜Ô!Ð!Ñ!r-   c                  ó
  — t        t        t        j                  t        t
        «      «      t        j                  t        t        «      «      sJ ‚t        t        t        t
        kD  «      t        t        kD  «      sJ ‚t        t        t        t
        k  «      t        t        k  «      sJ ‚t        t        t        t
        k\  «      t        t        k\  «      sJ ‚t        t        t        t
        k  «      t        t        k  «      sJ ‚y r|   )
rF   r   r…   ÚEqr   r   rd   ÚeqrU   rV   r^   r-   r   Útest_Relationalsr}  U  sŸ   € Ü”œRŸU™U¤1¤a›[Ó)¬2¯5©5´´R«=Ô9Ð9Ð9ä”œQ¤™UÓ#¤R¬"¡WÔ-Ð-Ð-Ü”œQ¤™UÓ#¤R¬"¡WÔ-Ð-Ð-Ü”œQ¤!™VÓ$¤b¬B¡hÔ/Ð/Ð/Ü”œQ¤!™VÓ$¤b¬B¡hÔ/Ð/Ñ/r-   c                  óè  — t        «       5  t        t        t        di¬«      t        t        t        di¬«      }} d d d «       ddlm} ddlm} ddlm} t        «       5  t        t        t         |t        «      z  «       j                  «       z  «      sJ ‚t        t        dt        z  «      |  |d«       |d	«       |dd
«      z  z   z  «      sJ ‚	 d d d «       y # 1 sw Y   Œ£xY w# 1 sw Y   y xY w)NÚ
complex128r—   r   )Ú	conjugate)Úas_tensor_variable)Úcomplexy      ð?       @rÝ   rÞ   r™   )r   r   r   r   Ú$sympy.functions.elementary.complexesr€  Útheano.tensorr�  r‚  rF   Úconj)rU   rV   r€  ÚatvÚcplxs        r   Útest_complexfunctionsrˆ  ^  sÏ   € Ü	Ó	!ñ eÜœa¬¨<Ð(8Ô9¼<ÌÔSTÐVbÐRcÔ;dˆBˆ÷eå>Ý7Ý-Ü	Ó	!ñ NÜ”L¤¡9¬Q£<¡Ó0°"°b·g±g³i±.ÔAÐAÐAÜ”L $¬¡Ó*¨B±°C³¹¸S»Á$ÀqÈÃ)Ñ9KÑ0KÑ,LÔMÐMÑM÷Nð N÷eð eú÷
Nð Nús   ‹/CÁA4C(ÃC%Ã(C1c                  ót   — t        «       5  t        g dg«      } d d d «         «       dk(  sJ ‚y # 1 sw Y   ŒxY w)Ny      ð?      ð?)r   r!   )Útfs    r   Útest_constantfunctionsr‹  i  s9   € Ü	Ó	!ñ )Ü˜b $ Ó(ˆ÷)á‹4�Š:Ð‰:÷)ð )ús   ‹.®7c                  ó2  — t        j                  d«      } t         j                  }t        j                  j                  t        | «      t        j                  «       t        j                  j                  t        |«      t        j                  «       t        | «      }t        j                  j                  t        | «      |j                  «       «       t        |«      }t        j                  j                  t        |«      |j                  «       «       y)zP
    Test that exp(1) prints without error and evaluates close to SymPy's E
    r™   N)
r…   r‹   ÚErA   râ   rã   r@   Úer   Úeval)Úe_aÚe_brŽ  s      r   Ú	test_Exp1r’  o  s¢   € ô �&‰&�‹)€CÜ
�$‰$€Cä‡J�J×Ñœu S›z¬2¯4©4Ô0Ü‡J�J×Ñœu S›z¬2¯4©4Ô0ä�SÓ€AÜ‡J�J×Ñœu S›z¨1¯6©6«8Ô4ä�SÓ€AÜ‡J�J×Ñœu S›z¨1¯6©6«8Õ4r-   )\Ú__doc__ÚloggingÚsympy.externalr   Úsympy.testing.pytestr   r   r   Ú	getLoggerÚtheanologgerÚsetLevelÚCRITICALr   ÚWARNINGrì   rA   rß   rf   r   rd   rU   rV   rW   rX   rZ   r\   ÚdisabledÚsympyr…   Úsympy.core.singletonr   Ú	sympy.abcr   r   r   r   rY  r   r   r   r  rY   r[   r]   rñ   rx   r   r!   r,   r7   rF   r_   rk   rn   rv   rz   rƒ   rˆ   r�   r›   rž   r¤   r©   r­   r±   r·   r¹   r¾   rÇ   rË   rÐ   rÛ   rå   rè   rî   r   r  r  r$  r7  rK  rR  rV  r]  re  rh  ro  ry  r}  rˆ  r‹  r’  )r   r»   s   00r   ú<module>r      s8  ðñó å (ß EÑ Eà ˆw× Ñ Ð!8Ó9€Ø × Ñ �g×&Ñ&Ô 'Ù	�xÓ	 €Ø × Ñ �g—o‘oÔ &ñ 
ÛØ	�‰€BØ	�‰€BØ8=Ö>°�"—)‘)˜D (Õ+Ò>�J€BˆˆBØGLÖMÀ!�"—)‘)˜H n¸1�)Õ=ÒM�J€Bˆ‰Bð €Hã Ý "ß  Ó  ÷ñ ð .3Ö
3¨ˆ?ˆ2�?‰?˜1˜a Õ#Ò
3�€€1€að €k€b‡k�k�#Ó�qÓ€ò+ò:ò/ò$ò"-ò`
%ò	ò.ð ñ4ó ð4òò.ò
5ò ò
\òOò)ò$,òAò@ò
9ò,ò)ò3òò
ò
=ò
>òLòAò"(+òTGòTò$:ò2Að ñCó ðCò2'ò3ò.$ò$5ò0	0ò ò0"ò,0òNòó5ùòm ?ùÚMùò 4s   Â	GÂ-G
Ã6G