[AstroPy] why the warning about Converting Quantity?

Thomas Robitaille thomas.robitaille at gmail.com
Fri Mar 22 11:18:53 EDT 2013


I think that

In [4]: np.array([1,2,3]) * constants.au
WARNING: Converting Quantity object in units 'm' to a Numpy array
[astropy.units.quantity]
Out[4]: array([  1.49597871e+11,   2.99195741e+11,   4.48793612e+11])

is actually a bug, as this should return a Quantity (like it does for
scalars). I'll submit a PR shortly.

Cheers,
Tom

On 22 March 2013 15:57, Erik Tollerud <erik.tollerud at gmail.com> wrote:
> Hello Jonathan et al.,
>
> I think some confusion here stems from the fact that ``AU`` is a bit
> of a special constant - in most cases, you're probably better off
> using the AU *unit*, rather than the constant.  That is, if you were
> doing something like
>
> arrinau = arr * constants.au
>
> That gives exactly the warning you mentioned, whereas
>
> arrinau = arr * units.au
>
> won't give out a warning, because it creates a `Quantity` object with
> the units `AU`, rather than a regular array without any units.
>
>
> Does that make sense, or am I still misunderstanding how you're using
> this? If the latter, can you give an actual example of the line that
> actually produces this warning? That'll make it easier to understand
> exactly what you're suggesting.
>
>
>
>
> On Thu, Mar 21, 2013 at 3:22 PM, Jonathan Slavin
> <jslavin at cfa.harvard.edu> wrote:
>> Hi Adrian,
>>
>> Yes, as I mentioned farther down in my post, the warnings are generated
>> when I use it in an expression -- with numpy arrays.  It'd be nice to
>> have a less cumbersome way of suppressing those warnings (yes it's just
>> one line, but not so easy to remember).  In fact, I would expect to use
>> the constants mostly in expressions with numpy arrays, variables, etc.
>> that don't have units, so my preference would be that by default those
>> warnings are turned off -- at least for the constants.  The constants
>> are useful for their values alone, though clearly the value of the units
>> module is to associate units with values.  Maybe a simple method like
>> value.asfloat() could be added that would allow conversion from a units
>> object to a numpy float.
>>
>> Jon
>>
>> On Thu, 2013-03-21 at 15:05 -0400, Adrian Price-Whelan wrote:
>>> Hey Jonathan --
>>>
>>> Are you sure that's the point in the code that's producing the
>>> warning? What operations are you doing with the AU object? When you
>>> use the .to() method, it still returns a Quantity object -- *not* the
>>> value of the original object in those units. If you then stick AU into
>>> any numpy function, it will work but will just extract the value from
>>> the object (hence the warning).
>>>
>>> See, for example:
>>>
>>> >>> import astropy.units as u
>>> >>> np.sqrt(15*u.km)
>>> WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> [astropy.units.quantity]
>>> 3.872983346207417
>>>
>>> To turn this off, you'll want to set:
>>> >>> u.quantity.WARN_IMPLICIT_NUMERIC_CONVERSION.set(False)
>>> >>> np.sqrt(15*u.km)
>>> 3.872983346207417
>>>
>>> Note that this is documented in the astropy.units.quantity section of
>>> the astropy documentation:
>>> http://docs.astropy.org/en/latest/units/quantity.html#converting-to-python-or-numpy-types
>>>
>>> Thanks,
>>> Adrian
>>>
>>> On Mar 21, 2013, at 2:20 PM, Jonathan Slavin wrote:
>>>
>>> > Hi,
>>> >
>>> > I have just used the constants module in astropy for the first time and
>>> > got 6 warnings from my code as a result:
>>> >
>>> > import astropy.constants as const
>>> > AU = const.au.to('km')
>>> >
>>> > leads to
>>> > WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> > [astropy.units.quantity]
>>> > WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> > [astropy.units.quantity]
>>> > WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> > [astropy.units.quantity]
>>> > WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> > [astropy.units.quantity]
>>> > WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> > [astropy.units.quantity]
>>> > WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> > [astropy.units.quantity]
>>> >
>>> > It seems that I get the warning every place I use the value of AU.  Do I
>>> > have to turn off warnings  to prevent this?  Is there some other way to
>>> > deal with this?
>>> >
>>> > Jon
>>> > --
>>> > ______________________________________________________________
>>> > Jonathan D. Slavin              Harvard-Smithsonian CfA
>>> > jslavin at cfa.harvard.edu         60 Garden Street, MS 83
>>> > phone: (617) 496-7981           Cambridge, MA 02138-1516
>>> > cell: (781) 363-0035           USA
>>> > ______________________________________________________________
>>> >
>>> > _______________________________________________
>>> > AstroPy mailing list
>>> > AstroPy at scipy.org
>>> > http://mail.scipy.org/mailman/listinfo/astropy
>>>
>>> --
>>> Adrian Price-Whelan
>>> Department of Astronomy
>>> Columbia University
>>>
>>>
>>>
>>
>> --
>> ______________________________________________________________
>> Jonathan D. Slavin              Harvard-Smithsonian CfA
>> jslavin at cfa.harvard.edu         60 Garden Street, MS 83
>> phone: (617) 496-7981           Cambridge, MA 02138-1516
>>  cell: (781) 363-0035           USA
>> ______________________________________________________________
>>
>> _______________________________________________
>> AstroPy mailing list
>> AstroPy at scipy.org
>> http://mail.scipy.org/mailman/listinfo/astropy
>
>
>
> --
> Erik
>
> On Thu, Mar 21, 2013 at 3:22 PM, Jonathan Slavin
> <jslavin at cfa.harvard.edu> wrote:
>> Hi Adrian,
>>
>> Yes, as I mentioned farther down in my post, the warnings are generated
>> when I use it in an expression -- with numpy arrays.  It'd be nice to
>> have a less cumbersome way of suppressing those warnings (yes it's just
>> one line, but not so easy to remember).  In fact, I would expect to use
>> the constants mostly in expressions with numpy arrays, variables, etc.
>> that don't have units, so my preference would be that by default those
>> warnings are turned off -- at least for the constants.  The constants
>> are useful for their values alone, though clearly the value of the units
>> module is to associate units with values.  Maybe a simple method like
>> value.asfloat() could be added that would allow conversion from a units
>> object to a numpy float.
>>
>> Jon
>>
>> On Thu, 2013-03-21 at 15:05 -0400, Adrian Price-Whelan wrote:
>>> Hey Jonathan --
>>>
>>> Are you sure that's the point in the code that's producing the
>>> warning? What operations are you doing with the AU object? When you
>>> use the .to() method, it still returns a Quantity object -- *not* the
>>> value of the original object in those units. If you then stick AU into
>>> any numpy function, it will work but will just extract the value from
>>> the object (hence the warning).
>>>
>>> See, for example:
>>>
>>> >>> import astropy.units as u
>>> >>> np.sqrt(15*u.km)
>>> WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> [astropy.units.quantity]
>>> 3.872983346207417
>>>
>>> To turn this off, you'll want to set:
>>> >>> u.quantity.WARN_IMPLICIT_NUMERIC_CONVERSION.set(False)
>>> >>> np.sqrt(15*u.km)
>>> 3.872983346207417
>>>
>>> Note that this is documented in the astropy.units.quantity section of
>>> the astropy documentation:
>>> http://docs.astropy.org/en/latest/units/quantity.html#converting-to-python-or-numpy-types
>>>
>>> Thanks,
>>> Adrian
>>>
>>> On Mar 21, 2013, at 2:20 PM, Jonathan Slavin wrote:
>>>
>>> > Hi,
>>> >
>>> > I have just used the constants module in astropy for the first time and
>>> > got 6 warnings from my code as a result:
>>> >
>>> > import astropy.constants as const
>>> > AU = const.au.to('km')
>>> >
>>> > leads to
>>> > WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> > [astropy.units.quantity]
>>> > WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> > [astropy.units.quantity]
>>> > WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> > [astropy.units.quantity]
>>> > WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> > [astropy.units.quantity]
>>> > WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> > [astropy.units.quantity]
>>> > WARNING: Converting Quantity object in units 'km' to a Numpy array
>>> > [astropy.units.quantity]
>>> >
>>> > It seems that I get the warning every place I use the value of AU.  Do I
>>> > have to turn off warnings  to prevent this?  Is there some other way to
>>> > deal with this?
>>> >
>>> > Jon
>>> > --
>>> > ______________________________________________________________
>>> > Jonathan D. Slavin              Harvard-Smithsonian CfA
>>> > jslavin at cfa.harvard.edu         60 Garden Street, MS 83
>>> > phone: (617) 496-7981           Cambridge, MA 02138-1516
>>> > cell: (781) 363-0035           USA
>>> > ______________________________________________________________
>>> >
>>> > _______________________________________________
>>> > AstroPy mailing list
>>> > AstroPy at scipy.org
>>> > http://mail.scipy.org/mailman/listinfo/astropy
>>>
>>> --
>>> Adrian Price-Whelan
>>> Department of Astronomy
>>> Columbia University
>>>
>>>
>>>
>>
>> --
>> ______________________________________________________________
>> Jonathan D. Slavin              Harvard-Smithsonian CfA
>> jslavin at cfa.harvard.edu         60 Garden Street, MS 83
>> phone: (617) 496-7981           Cambridge, MA 02138-1516
>>  cell: (781) 363-0035           USA
>> ______________________________________________________________
>>
>> _______________________________________________
>> AstroPy mailing list
>> AstroPy at scipy.org
>> http://mail.scipy.org/mailman/listinfo/astropy
>
>
>
> --
> Erik Tollerud
> _______________________________________________
> AstroPy mailing list
> AstroPy at scipy.org
> http://mail.scipy.org/mailman/listinfo/astropy



More information about the AstroPy mailing list