
    IR-eM                        d Z ddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ g ej        dfej        dz  d	fej        ej        z  d
fej        ej        z  d	fej        ej        dz  z  dfej        ej        z  dfej        dfej        ej        dz  ej        z  ej        z  z  dfej        ej        dz  ej        z  ej        z  z  dfej        ej        dz  ej        z  ej        z  z  dfej        dfej        dfej        j        ej        z  d
fej        ej        z  dfej        ej        z  dfej        ej        z  ej        dz  z  dfej        ej        dz  z  dfej        ej        z  dfej         ej!        z  df ej"        d          dfej        dz  dfej        dfej         dfej#        dfej        ej        dz  z  dfej        d fej$        d!fej%        d"fej&        d#fej'        d#fej        j(        d#fej        j)        d#fej        j)        ej        z  d$fej        d%fej*        dfej+        d&fej,        dfej-        ej        dz  z  d'fej        dz  ej-        z  d(fej%        ej        dz  z  d)fej-        ej        z  ej        z  d*fej-        ej        dz  z  ej        z  dfej         ej        z  dfej         ej        dz  z  d+fej$        ej        ej        z  z  d,fej        dz  ej        z  d-fej        d.z  d/fej.        dfej        d0fej/        d1fej0        d2fej1        d3fej2        d4fej        ej        z  d5fej.        ej        dz  z  dfej/        ej        z  d6fej        ej        dz  z  d7fej        ej        dz  z  d8fej2        ej        z  d9fej3        dfej        d:fej.        ej        z  d;fej4        ej        z  d<fej4        d=fej5        d>fej6        d?fej7        d@fej,        ej#        z  dAfej5        ej        dz  z  dBfej8        j9        dCfej8        j:        dDfej;        j        dfej;        j        ej        z  dEfej<        j=        dFfej<        j>        dGfej<        j?        dHfej<        j@        dIfej        jA        ej        ej        z  ej        j(        z  z  dJfej        jB        ej'        z  dKfej        jB        ej'        z  ej$        z  dLfej*        ej        dMz  z  ej        d.z  z  dNfej,        ej        dz  z  dNfej        dz  ej%        z  dOfej        ej1        z  dPfej1        ej        z  dQfej.        ej        dz  z  dRfej*        ej        z  dRfejC        d.z  ej        dSz  z  dTfej        ej        dz  z  dUfej        ej        dVz  z  dWfej        ej        dXz  z  dYfej        ej        dZz  z  d[fej'        ej        z  d\fej        j(        ej        z  d\fej        j)        ej        jD        z  d\fej        jE        ej$        z  d]fej%        ejF        z  ej        z  d^fej        jG        ej        jD        z  ej        dz  z  d_fej%        ej        z  d`fej        jH        ej'        z  ej%        z  dafej%        ej-        z  dbfej        jI        ejJ        z  dcfej        jD        dz  ej        z  ddfej        ej        z  defej+        d.z  dffejK        dfZLejM        N                    dgeL          dh             ZOej        jP        ZQej        jP        ZRej        ej        z  jP        ZSej        dz  jP        ZTej        d.z  jP        ZUejK        jP        ZVej+        jP        ZWej-        ej        z  ej        z  jP        ZXejM        N                    didjej        dfdkdXej        z  dfeQeQfej+        dlfdmg          dn             ZYejM        N                    dodeZfdpeZfdqhe[fg          dr             Z\ds Z]g eQeQdtdufeQeTdtdvfeQddtdufdeQdte^feVeVdtdufeXd*dtdufeWdldtdufej        dz  jP        ddtdufej        dz  jP        ej        dwz  jP        dtdvfeQeQdxdvfeSeRdxdufeWeVdxdufeQej        dte^feQeQdyeTfeSeRdyeQfeSeRdzeQfeQeRd{eSfeTeQd{eQfeQeTd|eQfeVeVdyeVfeVeVd{eVfeQdd}eTfeTd~d}eQfeVdVd}eVfej        eQdye^fdeQdye^fej        eRd{e^fdeQd{e^feQej        dyeTfeQej        dzeTfeSej        dyeQfeQddyeQfeQddzeQfeQej        d{eSfeTdd{eTfeRej        d|eSfeQdd|eUfeQdd}eTfeQddye^feQddze^feQdd{e^feQd.d|e^feQddyeTfeQddzeTfeTdd{eQfeQdd|eQfZ_ejM        N                    de_          d             Z`ej        dhfej-        ej        z  ej        z  ddhfej+        h dfgZaejM        N                    dea          d             Zbd Zcd Zdej        ej        fej        ej        fej        ej-        ej        z  ej        dMz  z  fej        ej        z  ej        dz  fej&        ej'        fej&        ej        j)        fej&        ej        j(        fej'        ej        j(        fej        dz  eje        dz  fg	ZfejM        N                    def          d             ZgejM        N                    def          d             Zhej        ej        fej        dz  ej        dz  fej        ej*        fej        ej        j(        fgZiejM        N                    dei          d             ZjeQdfeSdfeWdfej'        jP        d#fej*        ej&        z  ej-        z  jP        dfgZkeQdfeSdfeWdfej'        jP        dfej*        ej&        z  ej-        z  jP        dfgZlejM        N                    dek          d             ZmejM        N                    del          d             Znd ZoejM        N                    d ep            ddd.g          d             Zqd ZrddgZsejM        N                    des          d             Zt G d d          ZuejM        N                    dg d          d             Zvd ZwejM        N                    dg d          d             Zxd ZydS )zC
Unit tests for the handling of physical types in `astropy.units`.
    N)units)hbar)physical)AstropyDeprecationWarninglength   volumespeed   unknowndimensionlesszangular momentum   zspectral flux density wavzphoton flux density wavzphoton flux densityzdata quantitypowerzelectrical currentzelectrical current densityzmagnetic fluxenergyzangular speed   areatimeanglezsolid angleacceleration	frequencymasszamount of substancetemperaturetemperature_gradientforcepressurezmass densityzspecific volumezmolar concentrationzmomentum/impulsezangular accelerationzdynamic viscosityzkinematic viscosity
wavenumberzelectrical chargezelectrical potentialzelectrical resistancezelectrical conductancezelectrical capacitancezelectrical dipole momentzelectrical field strengthzelectrical flux densityzelectrical charge densitypermittivityzmagnetic flux densityzmagnetic field strengthzelectromagnetic field strength
inductancezluminous intensityzluminous fluxzluminous emittance/illuminancezradiant intensity	luminancezspectral flux densityzphoton flux	bandwidthzelectrical charge (ESU)zelectrical current (ESU)zelectrical current (EMU)zelectrical charge (EMU)zthermal conductivityzheat capacityzspecific heat capacityzenergy fluxzmolar volumezelectrical resistivityzelectrical conductivityzmagnetic momentzvolumetric ratejerk   snap   crackle   popztemperature gradientzspecific energyzreaction ratezmoment of inertiazcatalytic activityzmolar heat capacitymolalityabsementzvolumetric flow ratezfrequency driftcompressibilityzunit, physical_typec                 L    | j         |k    sJ | d|d| j         d            dS )z
    Test that the `physical_type` attribute of `u.Unit` objects provides
    the expected physical type for various units.

    Many of these tests are used to test backwards compatibility.
    z&.physical_type was expected to return z, but instead returned .Nphysical_type)unitr1   s     Alib/python3.11/site-packages/astropy/units/tests/test_physical.pytest_physical_type_namesr4   }   s\     ... 	K 	K	K 	K373E	K 	K 	K /....    z0physical_type_representation, physical_type_name)      ?r   )workr7   energy_density)r8   r8   c                 v    t          j        |           }t          |t           j                  sJ ||k    sJ dS )z/Test different ways of getting a physical type.N)r   get_physical_type
isinstancePhysicalType)physical_type_representationphysical_type_namer1   s      r3   test_getting_physical_typer?      sF     ./KLLMmX%:;;;;;.......r5   zargument, exceptionznot a name of a physical typez'this set cannot be made into a Quantityc                     t          j        |          5  t          j        |            ddd           dS # 1 swxY w Y   dS )zo
    Test that `get_physical_type` raises appropriate exceptions when
    provided with invalid arguments.
    N)pytestraisesr   r:   )argument	exceptions     r3   %test_getting_physical_type_exceptionsrE      s     
y	!	! - -"8,,,- - - - - - - - - - - - - - - - - -s   7;;c                      t          j        t                    5  t          j        t          j        j        t          j                   ddd           dS # 1 swxY w Y   dS )z
    Test that `PhysicalType` instances cannot be cast into `Quantity`
    objects.  A failure in this test could be related to failures
    in subsequent tests.
    N)rA   rB   	TypeErroruQuantitymr1    r5   r3   )test_physical_type_cannot_become_quantityrL      s     
y	!	! + +	
13$ac***+ + + + + + + + + + + + + + + + + +s   /AAA__eq__TF	   __ne____mul____rmul____truediv____rtruediv____pow__g      ?g	@r6       zleft, right, operator, expectedc                 D     t          | |          |          |k    sJ dS )zg
    Test that `PhysicalType` dunder methods that require another
    argument behave as intended.
    N)getattr)leftrightoperatorexpecteds       r3   test_physical_type_operationsr\      s/     #74""5))X555555r5   impulsemomentum>   stressr   energy densityzunit, expected_setc                 >    t          | j                  }||k    sJ dS )z<Test making a `physical.PhysicalType` instance into a `set`.N)setr1   )r2   expected_setresulting_sets      r3   test_physical_type_as_setre     s+     *++ML((((((r5   c                  <    d t           D             } | g dk    sJ dS )z5Test iterating through different physical type names.c                     g | ]}|S rK   rK   ).0r>   s     r3   
<listcomp>z0test_physical_type_iteration.<locals>.<listcomp>  s    QQQ2D-QQQr5   )r`   r   r_   N)r   )physical_type_namess    r3   test_physical_type_iterationrk     s4    QQQQQ"J"J"JJJJJJJr5   c                  2    dt           v sJ dt          v sJ dS )ze
    Test that `in` works as expected for `PhysicalType` objects with one
    or multiple names.
    r   r   N)r   r   rK   r5   r3   test_physical_type_inrm     s,    
 v!!!!!!r5      zunit1, unit2c                 V    | j         |j         k    du sJ | j         |j         k    du sJ dS )zi
    Test that `physical.PhysicalType` instances for units of the same
    dimensionality are equal.
    TFNr0   )unit1unit2s     r3   $test_physical_type_instance_equalityrr   )  sB     5#664????5#665@@@@@@r5   c                     t          j        |           }t          j        |          }||k    sJ |dk    r||u sJ dS dS )z
    Test that `get_physical_type` retrieves the same `PhysicalType`
    instances for equivalent physical types, except for unknown types
    which are not cataloged.
    r   N)r   r:   rp   rq   physical_type1physical_type2s       r3   'test_get_physical_type_equivalent_pairsrw   3  s_     /66N/66N^++++""//// #"//r5      c                     t          j        | d          }t          j        |d          }||k    du sJ ||k    du sJ dS )zy
    Test that `physical.PhysicalType` instances for units with different
    dimensionality are considered unequal.
    ptype1ptype2TFN)r   r<   rt   s       r3   &test_physical_type_instance_inequalityr|   I  sZ     *5(;;N*5(;;Nn,5555n,666666r5   zspeed/velocityzenergy density/pressure/stressz'specific entropy/specific heat capacityzPhysicalType('length')z#PhysicalType({'speed', 'velocity'})z6PhysicalType({'energy density', 'pressure', 'stress'})zPhysicalType('temperature')z<PhysicalType({'specific entropy', 'specific heat capacity'})zphysical_type, expected_strc                 0    t          |           |k    sJ dS )z.Test using `str` on a `PhysicalType` instance.N)str)r1   expected_strs     r3   test_physical_type_strr   i  s#     }------r5   zphysical_type, expected_reprc                 0    t          |           |k    sJ dS )z/Test using `repr` on a `PhysicalType` instance.N)repr)r1   expected_reprs     r3   physical_type_reprr   o  s#    
 -//////r5   c                  >    t           di} | t                    dk    sJ dS )z>Test that a `PhysicalType` instance can be used as a dict key.*   N)r   )
dictionarys    r3   test_physical_type_hashr   w  s'    "Jf######r5   multiplicandr   c                 ~    t          j        t                    5  t          | z   ddd           dS # 1 swxY w Y   dS )zv
    Test that multiplication of a physical type returns `NotImplemented`
    when attempted for an invalid type.
    N)rA   rB   rG   r   )r   s    r3   !test_physical_type_multiplicationr   }  s     
y	!	!                   s   266c                      t          j        dd          } | j        }t          |t          j                  sJ |dk    sJ dS )zU
    Test basic functionality for the physical type of an unrecognized
    unit.
    parrotsilent)parse_strictr   N)rH   Unitr1   r;   r   r<   )unrecognized_unitr1   s     r3   $test_unrecognized_unit_physical_typer     sQ    
 xh???%3MmX%:;;;;;I%%%%%%r5   )r   )zvalid inputr   invalid_inputc                     t           j        dz  }t          j        t                    5  t          j        ||            ddd           n# 1 swxY w Y   |j        dk    sJ dS )z
    Test that `PhysicalType` cannot be instantiated when one of the
    supplied names is not a string, while making sure that the physical
    type for the unit remains unknown.
    W   Nr   )rH   srA   rB   
ValueErrorr   r<   r1   )r   obscure_units     r3   test_invalid_physical_typesr     s     37L	z	"	" ; ;lM:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;%222222s   AAAc                   j    e Zd Zej        dz  Zej        dz  Zd Zd Z	d Z
d Zed             Zd Zd	S )
TestDefPhysTypec   r   c                     t          j        t                    5  t          j        | j        d           ddd           n# 1 swxY w Y   dt          j        vsJ dS )z.Test that a unit cannot be defined as unknown.r   N)rA   rB   r   r   def_physical_type
weird_unit_unit_physical_mappingselfs    r3   ,test_attempt_to_define_unknown_physical_typez<TestDefPhysType.test_attempt_to_define_unknown_physical_type  s    ]:&& 	C 	C&t	BBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C ???????s   AAAc                     t          j        t                    5  t          j        | j        ddh           ddd           n# 1 swxY w Y   | j        j        dk    sJ dS )z
        Test that `def_physical_type` raises an exception when it tries to
        set the physical type of a new unit as the name of an existing
        physical type.
        r   	somethingNr   )rA   rB   r   r   r   r   r1   r   s    r3   &test_multiple_same_physical_type_namesz6TestDefPhysType.test_multiple_same_physical_type_names  s     ]:&& 	O 	O&t8MNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O,	999999s   AA
Ac                 Z   d}d}	 t          j        | j        |           | j        j        |k    sJ d| j                     n# t          $ r  w xY w	 t           j                            |                    dd          d           t           j                            |d           nY# t           j                            |                    dd          d           t           j                            |d           w xY w	 t          j        | j        |           t          | j        j                  ||hk    s
J d            n# t          $ r  w xY w	 t           j                            |                    dd          d           t           j                            |d           t           j                            |                    dd          d           t           j                            |d           dS # t           j                            |                    dd          d           t           j                            |d           t           j                            |                    dd          d           t           j                            |d           w xY w)z{
        Test that calling `def_physical_type` on an existing physical
        type adds a new physical type name.
        z
weird namezstrange namez unable to set physical type for  _Nz2did not correctly append a new physical type name.)
r   r   r   r1   	Exception_attrname_physical_mappingr*   replace_name_physical_mappingrb   )r   
weird_namestrange_names      r3   &test_expanding_names_for_physical_typez6TestDefPhysType.test_expanding_names_for_physical_type  s   
 "
%		B&t
CCC-;;;C$/CC <;;; 	 	 		 <
 /33J4F4FsC4P4PRVWWW+//
DAAAA /33J4F4FsC4P4PRVWWW+//
DAAAA	B&tEEE677<    D     	 	 			 /33$$S#..   +//dCCC/33J4F4FsC4P4PRVWWW+//
DAAAAA /33$$S#..   +//dCCC/33J4F4FsC4P4PRVWWW+//
DAAAAs>   <A B( AB( (AC>AE H  EH   B*J*c                     t          j        t                    5  t          j        | j        d           ddd           dS # 1 swxY w Y   dS )z
        Test that a physical type name already in use cannot be assigned
        for another unit (excluding `"unknown"`).
        r   N)rA   rB   r   r   r   r   r   s    r3   test_redundant_physical_typez,TestDefPhysType.test_redundant_physical_type  s    
 ]:&& 	B 	B&tAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   AA	Ac                     t          | j                  D ]}t          j        |= t          j        |                                 = | j        dk    sJ dS )z-Reset the physical type of unit to "unknown".r   N)listr1   r   r   _physical_unit_mapping_get_physical_type_id)r2   names     r3   _undef_physical_typez$TestDefPhysType._undef_physical_type  s]     +,, 	6 	6D/55+D,F,F,H,HI!Y......r5   c                     | j         | j        fD ]J}t          j        |          }|dk    r|                     |           |j        dk    sJ d| d            KdS )z
        Remove the definitions of the physical types that were added
        using `def_physical_unit` for testing purposes.
        r   zthe physical type for z., which was added fortesting, was not deleted.N)r   strange_unitr   r:   r   r1   )r   r2   r1   s      r3   teardown_methodzTestDefPhysType.teardown_method  s    
 _d&78 	 	D$6t<<M	))))$///%222, , , , 3222		 	r5   N)__name__
__module____qualname__rH   rJ   r   r   r   r   r   r   r   staticmethodr   r   rK   r5   r3   r   r     s        bJ37L@ @ @: : :"B "B "BHB B B / / \/    r5   r   zmethod, expected))titleLength)isalphaT)	isnumericF)upperLENGTHc                     t          j        t          d          5   t          t          |                       }ddd           n# 1 swxY w Y   ||k    sJ dS )zj
    Test that str methods work for `PhysicalType` instances while issuing
    a deprecation warning.
    zPhysicalType instancesmatchN)rA   warnsr   rW   r   )methodr[   result_of_method_calls      r3   .test_that_str_methods_work_with_physical_typesr     s     
/7O	P	P	P : : 7 7 7 9 9: : : : : : : : : : : : : : : H,,,,,,s   AA
A
c                      t          j        t                    5  t          j         ddd           dS # 1 swxY w Y   dS )z
    Test that a missing attribute raises an `AttributeError`.

    This test should be removed when the deprecated option of calling
    string methods on PhysicalType instances is removed from
    `PhysicalType.__getattr__`.
    N)rA   rB   AttributeErrorr   0not_the_name_of_a_str_or_physical_type_attributerK   r5   r3   $test_missing_physical_type_attributer     s     
~	&	& @ @??@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   488
ptype_name)r   r
   entropyc                     t          j        |           }t          j        |          }t          j        |          }||k    sJ d S )N)rH   r:   pickledumpsloads)r   ptypepklothers       r3   test_picklingr     sC     
++E
,u

CLEE>>>>>>r5   c                  p   t          t          t                                                  t          j                                                  sJ t          t          t                                                  t          j                  sJ t          j                                        D ]D} t          j        |          }t          t          |           sJ t          t          |           |u sJ Et          j
        t          d          5  t          j         d d d            d S # 1 swxY w Y   d S )Nzhas no attributer   )rb   dirr   
issupersetr   keys__all__hasattrrW   rA   rB   r   not_a_valid_physical_type_name)pnamer   s     r3   !test_physical_types_module_accessr     sJ   s8}}(()L)Q)Q)S)STTTTTs8}}(()9::::: 499;; 1 13E:x'''''x''500000 
~-?	@	@	@ 0 0//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   D++D/2D/)z__doc__r   rA   astropyr   rH   astropy.constantsr   astropy.unitsr   astropy.utils.exceptionsr   rJ   cmkmhbarnMpcr   r2   ergAAphotonHzbytebitimperialmiweekCTNradmsr   srgmolKdeg_Cdeg_Fdeg_RJPaWkgAVOhmSFWbHcdlmlx	astrophysJyRmisccgsFranklin
statampereBiot	abcoulombbtucalyrftCalorieLlbfkcalinchhrdimensionless_unscaledunit_physical_type_pairsmarkparametrizer4   r1   r   r   r
   r   r   r   r   r^   r?   r   rG   rE   rL   NotImplementedoperation_parametersr\   unit_with_physical_type_setre   rk   rm   pcequivalent_unit_pairsrr   rw   nonequivalent_unit_pairsr|   physical_type_with_expected_str physical_type_with_expected_reprr   r   r   r   r   r   invalid_inputsr   r   r   r   r   r   rK   r5   r3   <module>r1     s=            " " " " " " " " " " " " > > > > > >kS(OkT1Whk TACZk Vae^X	k
 S136\9k S13Y k 
Y"#k UadAgmad"#%@Ak Xq13%&(ABk Xq13%&(=>k V_k UOk Z]QVW%k UQS['k S13Y$%k  S13Yq67!k" S136\?##k$ S13Y%k& UQT\?#'k( QVAYY )k* S!VV+k, S&M-k. UG/k0 T=1k2 S136\>"3k4 T;5k6 S&M7k8 U!"9k: S-;k< Wm=k> Z}%?k@ Z}%AkB Z34CkD S'NEkF S(OGkH T:IkJ S'NKkL TACF]N#MkN S!Vad]%&OkP UQS!V^*+QkR TACZ!#)*SkT TACF]QS,-UkV UQS[/"WkX UQS!V^+,YkZ SAC!#I+,[k\ S!Vac\()]k^ S"Wl_k` S
akb S
ckd S
 !ekf U#$gkh S
"#ikj S
"#kkl S13Y*+mkn S136\/0okp S13Y+,qkr S136\,-skt S136\./ukv S13Ywkx T?ykz S
!"{k| S13Y)*}k~ S13Y01k@ S,AkB T CkD T?EkF T+,GkH S14Z$%IkJ TACF]K KkL [^,-MkN []M"OkP VZ!QkR VZ!#{#SkT U^./UkV U12WkX UZ+,YkZ U_/0[k\ Z^qsQSy1:#3346LM]k^ Z^ag/_k` Z^ag#%=>akb S137]QS"Wm,ckd S136\=!ekf S!Vae^^$gkh S13Y()ikj S13Y)*kkl S136\$%mkn S13Y!"okp T2Xr	,-qkr S136\6skt S136\6ukv S136\9wkx S136\5ykz Wqs]*+{k| Z34}k~ Z
%'=>k@ Z!#01AkB UQS[13(CkD Z^ajm#ac1f,.ABEkF UQS[&'GkH Z_qw&(=>IkJ UQT\:KkL Z_qtZ(MkN Z]A34OkP TACZ"#QkR T2X !SkT /Uk \ .0HII
 
 JI
 
	s	
qs!	Qc2g$
(64D13J+ 6	
h	
QS(		
 , / / / 	J	(*5
3	4i@ - - -+ + +/VXt$/T8U#/ Xx&/ vx0	/
 M8T2/ !8T2/ 40/ c1fY$7/ c1fac1f3XuE/ VXu%/ D(D!/ }h-/ QS(N+/ VY%/ D)V$/  D*f%!/" T=%(#/$ 
6=&)%/& T>6*'/( M9m<)/* M=-@+/, Q	4 -/. 
3	6"//0 Ay-01/2 S&)^,3/4 	&)^,5/6 S$~.7/8 	&-09/: QS)T";/< QS*d#=/> ACF#?/@ Q	6"A/B Q
F#C/D QS-'E/F 
1mT"G/H 
13&I/J S.*-K/L Q	4 M/N RN+O/P Q
N+Q/R S-0S/T R0U/V Xy$'W/X Xz4(Y/Z 
8]F+[/\ V^V,]/ d :<PQQ6 6 RQ6 S8*TACZ!#	:./T3334  -/JKK) ) LK)K K K" " " S!#JS!$KS!$*qsBw
Vae^QT1WS!'NS!*
S!*
WajS"WadBh
  )>??A A @?A )>??
0 
0 @?
0 S!#JS"Wac2gS!#JVQZ	  )ABB7 7 CB7 X
/0WM*cACi!$%'PQ#  %&
12GHW9:	
qsQT	(F	$   68WXX. . YX.
 "$D 0 0 0
$ $ $ $$&&"a)<==  >=& & & ,- .99	3 	3 :9	3T T T T T T T Tn WWW - -	 -	@ 	@ 	@ 'E'E'EFF  GF0 0 0 0 0r5   