[yt-dev] RFC: introduce {length, mass}_units (similar to time_units)
Casey W. Stark
caseywstark at gmail.com
Tue Feb 21 16:01:07 PST 2012
I don't think I understand all the uses here, but is it just a question of
unit conversion? If so, I don't think it should be tied into StaticOutput,
but a function and a dictionary of unit data in cgs sitting somewhere.
Is it always clear what type of unit is being converted? I like the idea of
getting values in code units like the pf.length(dist_in_mpc, "Mpc") idiom
Matt suggests.
When I imagined units in yt before, I only thought about attaching units to
fields. I'm not sure about the region object cases.
Best,
Casey
On Tue, Feb 21, 2012 at 9:20 AM, Britton Smith <brittonsmith at gmail.com>wrote:
> I'm in favor of a general unit converting object for all quantities. The
> alternative to would be to have time_units, length_units, b_units, etc,
> which will unwieldy quickly. It might also be nice if it had some sort of
> support for prefixes like kilo, mega, giga, etc. That way, we wouldn't
> have to carry around, for example, conversions to pc, kpc, and Mpc. If
> this sounds like what people would be interested in having, I wouldn't mind
> working on this.
>
> Britton
>
>
> On Tue, Feb 21, 2012 at 7:37 AM, Matthew Turk <matthewturk at gmail.com>wrote:
>
>> The places we typically use conversions to length scales explicitly in
>> recipes:
>>
>> * Spheres (this accepts tuples)
>> * Disks (this accepts tuples)
>> * Plot collection (only accepts the equivalent of tuples)
>>
>> But we also implicitly use length scale when constructing things like
>> regions, which require left_edge and right_edge. A common pattern for
>> those is to add on to a left edge a given length.
>>
>> Before I go committing any deprecation warnings, I'd like to make sure
>> we have the idioms down.
>>
>> 1) Parameters should either be accessed as a property if they are
>> independent of frontend (i.e., current_time, cosmology_simulation) or
>> as an item in the .parameters dict.
>> 2) Lengths when explicitly specified (as opposed to coordinates) are
>> recommended to be in tuples when writing recipes. yt should still
>> accept code units.
>> 3) Uses of unit conversion internal to yt (the only place they should
>> be with any regularity, in my opinion) should explicitly query the
>> appropriate {something}_units dict.
>> 4) Any calls to __getitem__ on pf will raise a deprecation warning.
>>
>> But, how should we expose length conversion to the user, for instances
>> of specifying (for instance) relative coordinates? I would rather we
>> come up with a solution now rather than later. Of the different units
>> -- length, density/b-field/whatever, time -- we really only need to
>> expose to the user the conversion to and from code units for length.
>> So should this be a special case? i.e., pf.length(val, unit)? Or
>> should we set up a more generic, pf.units object, with
>> pf.units.convert(ival, iunit, ounit='code')?
>>
>> -Matt
>>
>> On Mon, Feb 20, 2012 at 10:24 AM, Britton Smith <brittonsmith at gmail.com>
>> wrote:
>> > I'm +1 on deprecating the __getitem__ stuff. I think at this point it
>> > mostly creates confusion.
>> >
>> > I also think it might be a good idea to phase out instantiation of
>> sphere,
>> > disk, etc object in the manner discuss in point 3 and push toward using
>> the
>> > (size, unit) tuple method. This method is consistent with how the
>> > time_series analogs of those objects are created and I think that
>> > consistency is valuable.
>> >
>> > Britton
>> >
>> >
>> > On Sun, Feb 19, 2012 at 11:49 AM, Matthew Turk <matthewturk at gmail.com>
>> > wrote:
>> >>
>> >> Hi Kacper,
>> >>
>> >> This is a gigantic weak spot in yt: handling of units, which generally
>> >> does *work*, is done behind some relatively old and unnecessary code.
>> >> When I started writing it, I learned about operator overloading, and
>> >> so I tossed all the parameters, units, and time_units into a single
>> >> call to __getitem__. I've disliked this for quite some time, as it
>> >> conflates all types of conversion between things, as well as
>> >> conflating conversion with parameters.
>> >>
>> >> Adding a length and mass unit system would be a bandaid to this system
>> >> ... I'm inclined to say it's probably okay to do, but I would rather
>> >> we go through a more in-depth improvement.
>> >>
>> >> 1) Deprecate *immediately* __getitem__ on a parameter file. This
>> >> means adding a DeprecationWarning, in whcih we say that in version 3.0
>> >> this functionality will go away.
>> >> 2) Replace all usages of pf[whatever] in the code with calls to
>> >> explicitly the parameters dict or something else.
>> >> 3) Find all places where the idiom something/pf[unit] is used, and
>> >> either replace them with fix_length on it or find some other way
>> >> around it. (Did you know that spheres, cylinders, etc can all have
>> >> tuples of value, unit passed in?)
>> >> 4) Set up our base of unit conversions, which are applied when IO is
>> >> conducted.
>> >> 5) Use conversions between those units rather than relying on the
>> >> parameter file.
>> >>
>> >> For #5, we could either use a system like Amusecode.org uses (where
>> >> they apply sidecar unit values to wrapped ndarrays; the main amuse
>> >> architect is on this list, so perhaps he could say a bit more) or I
>> >> noticed that Casey's blog indicated he released Dimensionful, a
>> >> library for light tracking and converting units, which would also work
>> >> quite nicely for this.
>> >>
>> >> Either way, I want to get rid of the current system and plan something
>> >> out; first step is letting people know that we're deprecating
>> >> pf[something]. [+-][01]? But, for now, adding on what you suggest is
>> >> fine, Kacper. :)
>> >>
>> >> Thoughts?
>> >>
>> >> -Matt
>> >>
>> >> On Sat, Feb 18, 2012 at 10:02 AM, Kacper Kowalik
>> >> <xarthisius.kk at gmail.com> wrote:
>> >> > Hi,
>> >> > I've been hit by a part of the code
>> >> > (plot_modifications:get_smallest_appropriate_unit) that assumed my
>> data
>> >> > knows what a Mpc, or even Rsun is. While it's trivial to workaround
>> by
>> >> > using try/except, that made wonder why time_units get a special
>> >> > treatment in StaticOutput? Would it be beneficial to introduce
>> >> > corresponding {lenght,mass}_units?
>> >> > Cheers,
>> >> > Kacper
>> >> >
>> >> >
>> >> >
>> >> > _______________________________________________
>> >> > yt-dev mailing list
>> >> > yt-dev at lists.spacepope.org
>> >> > http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>> >> >
>> >> _______________________________________________
>> >> yt-dev mailing list
>> >> yt-dev at lists.spacepope.org
>> >> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>> >
>> >
>> >
>> > _______________________________________________
>> > yt-dev mailing list
>> > yt-dev at lists.spacepope.org
>> > http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>> >
>> _______________________________________________
>> yt-dev mailing list
>> yt-dev at lists.spacepope.org
>> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>>
>
>
> _______________________________________________
> yt-dev mailing list
> yt-dev at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-dev-spacepope.org/attachments/20120221/915303cc/attachment.html>
More information about the yt-dev
mailing list