Astropy: рд╡реЗрдЧ рдХреЗ рд╕рд╛рде рдлреНрд░реЗрдо рдФрд░ рдПрдХ "рдЗрдХрд╛рдИ" рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рджрд┐рд╕ре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: astropy/astropy

#6944 рдореЗрдВ рдХреБрдЫ рдХреЛрдиреЗ-рдХреЗрд╕ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдиреЗ рдЙрди рдлрд╝реНрд░реЗрдореЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдЬрд┐рдирдореЗрдВ рд╡реЗрдЧ рд╣реИ рдЬрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ UnitSpherical ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдЪ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдорд╛рдорд▓реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ:

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ #6944 рдХреЛ рдорд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдмрдЧ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реНрдерд╛рди рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдмрдЧ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдЙрди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрдиреНрд╣реЗрдВ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП coordinates рдЙрдк-рдкреИрдХреЗрдЬ #7028 рд▓рд┐рдП рдЦреЛрдЬреЗрдВ)ред

рдпрд╣ рд╕рд╣реА рд╣реИ:

>>> f = ICRS(1*u.deg, 2*u.deg)
>>> f.cartesian
<CartesianRepresentation (x, y, z) [dimensionless]
    ( 0.99923861,  0.01744177,  0.0348995)>

рд▓реЗрдХрд┐рди рдпреЗ рджреЛ рдорд╛рдорд▓реЗ рдирд╣реАрдВ рд╣реИрдВ:

>>> f = ICRS(1*u.deg, 2*u.deg,
          pm_dec=1*u.mas/u.yr, pm_ra_cosdec=2*u.mas/u.yr, radial_velocity=10*u.km/u.s)
>>> f.represent_as('cartesian', in_frame_units=True)
UnitConversionError: 'mas / (rad yr)' (frequency) and 'km / s' (speed) are not convertible
>>> f = ICRS(1*u.deg, 2*u.deg, 
                pm_dec=1*u.mas/u.yr, pm_ra_cosdec=2*u.mas/u.yr)
>>> g = f.transform_to(GCRS)
>>> g.cartesian
UnitConversionError: '1 / s' (frequency) and 'km / s' (speed) are not convertible

рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕реБрд░рд╛рдЧ рд╣реИ рдХрд┐ рджреВрд╕рд░реЗ рдЕрд╕рдлрд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, f.cartesian рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдЬреАрд╕реАрдЖрд░рдПрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╡рд┐рдлрд▓ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпреЗ рд╕реВрдХреНрд╖реНрдо рд░реВрдк рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореБрджреНрджреЗ рд╣реЛрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЗрддрдиреЗ рдХрд░реАрдм рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдпрдж рдПрдХ рд╕рд╛рде рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

@adrn рдпрд╛ @mhvk , рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдХреЛрдИ рдпрд╣ рддрд░реНрдХ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рд╡рд░реНрддрди рдЪрд░рдг рдХреБрдЫ рд╣рдж рддрдХ рдЦрд░рд╛рдм рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЛ рднреА рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдЗрдХрд╛рдЗрдпрд╛рдВ рдереЛрдбрд╝реА рдЕрдЬреАрдм рд╣реЛрдВ ...

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдп @eteq ,

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ,


>>> f = ICRS(1*u.deg, 2*u.deg,
          pm_dec=1*u.mas/u.yr, pm_ra_cosdec=2*u.mas/u.yr, radial_velocity=10*u.km/u.s)
>>> f.represent_as('cartesian', in_frame_units=True)

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреЛрдИ distance рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ radial_velocity ред рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдореИрдВ рдлреНрд░реЗрдо рдореЗрдВ рдХреБрдЫ рджреВрд░реА рд░рдЦрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рднреНрд░рдорд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реВрдВред

@shreyasbapat рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ https://github.com/astropy/astropy/pull/9064 рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ? (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)

9086 рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛ рджреАред рджреЛ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП:

рдХреЛрдИ рджреВрд░реА рдирд╣реАрдВ рд▓реЗрдХрд┐рди RV . рдХреЗ рд╕рд╛рде

>>> f = ICRS(1*u.deg, 2*u.deg,
          pm_dec=1*u.mas/u.yr, pm_ra_cosdec=2*u.mas/u.yr, radial_velocity=10*u.km/u.s)
>>> f.represent_as('cartesian', in_frame_units=True)
UnitConversionError: 'mas / (rad yr)' (frequency) and 'km / s' (speed) are not convertible

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд╕рдлрд▓ рд╣реИ: рджреВрд░реА рдХреЗ рдмрд┐рдирд╛, рдХреЛрдИ рдЙрдЪрд┐рдд рдЧрддрд┐ рдХреЛ рдПрдХ рд╕реНрдерд╛рдирд┐рдХ рд╡реЗрдЧ, рдпрд╛ рдПрдХ рд╕реНрдерд╛рдирд┐рдХ рд╡реЗрдЧ рдХреЛ рдПрдХ рдХреЛрдгреАрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╕реНрдкрд╖реНрдЯ рд╣реИ (рдЖрд░рд╡реА рд╣реЛрдиреЗ рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рд▓реЗрдХрд┐рди рдХреЛрдИ рджреВрд░реА рдирд╣реАрдВ)ред

рдЖрд░.рд╡реА. рд╕рдордиреНрд╡рдп рдкрд░рд┐рд╡рд░реНрддрди рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛

>>> f = ICRS(1*u.deg, 2*u.deg, 
                pm_dec=1*u.mas/u.yr, pm_ra_cosdec=2*u.mas/u.yr)
>>> g = f.transform_to(GCRS)
>>> repr(g)
# error
>>> g.data
<CartesianRepresentation (x, y, z) [dimensionless]
    (0.99923901, 0.01742676, 0.03489572)
 (has differentials w.r.t.: 's')>
g.data.differentials
<CartesianDifferential (d_x, d_y, d_z) in 1 / s
    (6.07736084e-13, -1.85772092e-11, -8.12625661e-12)>

рдпрд╣ рдХреБрдЫ рдЬреНрдпрд╛рджрд╛ рд╣реА рд╕реВрдХреНрд╖реНрдо рд╣реИред рдЙрдЪрд┐рдд рдЧрддрд┐ рдХреЗ рдмрд┐рдирд╛, g UnitSpherical , рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рдпрд╣ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИред рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП, рдЗрдХрд╛рдИ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдЗрд╕рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

g.represent_as('unitspherical')                                                               
Out[24]: 
<UnitSphericalRepresentation (lon, lat) in rad
    (0.01743826, 0.0349028)
 (has differentials w.r.t.: 's')>

In [25]: g.represent_as('unitspherical').differentials['s']                                            
Out[25]: 
<UnitSphericalDifferential (d_lon, d_lat) in rad / s
    (-1.85963079e-11, -8.13120751e-12)>

рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, g.cartesian рдХреЛ рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдпрд╣рд╛рдВ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдлреНрд░реЗрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА рдЗрдХрд╛рдЗрдпрд╛рдВ рд╕рдордЭрджрд╛рд░ рд╣реИрдВ, рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реБрдП рдХрд┐ рдХрд╛рд░реНрдЯреЗрд╕рд┐рдпрди рд╡реЗрдЧ km/s (рдмреЗрд╢рдХ, рдпрд╣ рд╡рд╛рдкрд╕ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдореЗрд░реА рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓реА рдЖ рд░рд╣реА рд╢рд┐рдХрд╛рдпрдд рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рд╕рдордиреНрд╡рдп рдЗрдХрд╛рдЗрдпрд╛рдВ рдореЗрд░реЗ рд▓рд┐рдП рддрдп рдХреА рдЧрдИ рд╣реИрдВ...): https://github.com/astropy/astropy/blob/c3dc7b38303b3615945aa36a11ebf7bd31d5cc0a/astropy/coordinates/baseframe.py#L1744 -L1753

рдЗрдХрд╛рдЗрдпрд╛рдБ рд╕реНрд╡рдпрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВ:

g.representation_info
{astropy.coordinates.representation.CartesianRepresentation: {'names': ['x',
   'y',
   'z'],
  'units': [None, None, None]},
 astropy.coordinates.representation.UnitSphericalRepresentation: {'names': ('ra',
   'dec'),
  'units': (Unit("deg"), Unit("deg"))},
 astropy.coordinates.representation.RadialRepresentation: {'names': ['distance'],
  'units': [None]},
 astropy.coordinates.representation.SphericalRepresentation: {'names': ('ra',
   'dec',
   'distance'),
  'units': (Unit("deg"), Unit("deg"), None)},
 astropy.coordinates.representation.PhysicsSphericalRepresentation: {'names': ['phi',
   'theta',
   'r'],
  'units': [Unit("deg"), Unit("deg"), None]},
 astropy.coordinates.representation.CylindricalRepresentation: {'names': ['rho',
   'phi',
   'z'],
  'units': [None, Unit("deg"), None]},
 astropy.coordinates.representation.CartesianDifferential: {'names': ('v_x',
   'v_y',
   'v_z'),
  'units': (Unit("km / s"), Unit("km / s"), Unit("km / s"))},
 astropy.coordinates.representation.UnitSphericalDifferential: {'names': ('pm_ra',
   'pm_dec'),
  'units': (Unit("mas / yr"), Unit("mas / yr"))},
 astropy.coordinates.representation.SphericalDifferential: {'names': ('pm_ra',
   'pm_dec',
   'radial_velocity'),
  'units': (Unit("mas / yr"), Unit("mas / yr"), Unit("km / s"))},
 astropy.coordinates.representation.UnitSphericalCosLatDifferential: {'names': ('pm_ra_cosdec',
   'pm_dec'),
  'units': (Unit("mas / yr"), Unit("mas / yr"))},
 astropy.coordinates.representation.SphericalCosLatDifferential: {'names': ('pm_ra_cosdec',
   'pm_dec',
   'radial_velocity'),
  'units': (Unit("mas / yr"), Unit("mas / yr"), Unit("km / s"))},
 astropy.coordinates.representation.RadialDifferential: {'names': ['d_distance'],
  'units': [None]},
 astropy.coordinates.representation.PhysicsSphericalDifferential: {'names': ['d_phi',
   'd_theta',
   'd_r'],
  'units': [None, None, None]},
 astropy.coordinates.representation.CylindricalDifferential: {'names': ['d_rho',
   'd_phi',
   'd_z'],
  'units': [None, None, None]}}

рдХреЛрдИ рдпрд╣рд╛рдВ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ CartesianDifferential рд╣реА рдЧрд▓рдд рд╣реИ, рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдкрд╕рдВрджреАрджрд╛ рдЗрдХрд╛рдЗрдпрд╛рдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕реЗрдЯ рд╣реИрдВред

рдЬрд┐рд╕рдХрд╛ рд╢рд╛рдпрдж рдорддрд▓рдм рд╣реИ рдХрд┐ #9086 рдореЗрдВ рд╕реБрдзрд╛рд░ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕рдВрд╢реЛрдзрди рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИ: рдХрд┐рд╕реА рдХреЛ рдЕрдиреБрд░реЛрдзрд┐рдд рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕