[yt-dev] Issue #773: Unitrefactor: cannot process units for magnetic fields (yt_analysis/yt)

John ZuHone issues-reply at bitbucket.org
Mon Feb 3 21:20:01 PST 2014


New issue 773: Unitrefactor: cannot process units for magnetic fields
https://bitbucket.org/yt_analysis/yt/issue/773/unitrefactor-cannot-process-units-for

John ZuHone:

This script:


```
#!python

pf = load("GasSloshing/sloshing_nomag2_hdf5_plt_cnt_0100")
v, c = pf.h.find_max("density")
sl = pf.h.slice(0, c[0])
print sl["magnetic_field_z"].shape
```
results in this:


```

---------------------------------------------------------------------------
UnitParseError                            Traceback (most recent call last)
<ipython-input-3-9aa7caa31868> in <module>()
      5 print sl["z"]
      6 print sl["pdx"]
----> 7 print sl["magnetic_field_z"].shape

/Users/jzuhone/Source/yt-units-notbroke/yt/data_objects/data_containers.pyc in __getitem__(self, key)
    203                 return self.field_data[f]
    204             else:
--> 205                 self.get_data(f)
    206         # fi.units is the unit expression string. We depend on the registry
    207         # hanging off the dataset to define this unit object.

/Users/jzuhone/Source/yt-units-notbroke/yt/data_objects/data_containers.pyc in get_data(self, fields)
    607 
    608         fields_to_generate += gen_fluids + gen_particles
--> 609         self._generate_fields(fields_to_generate)
    610 
    611     def _generate_fields(self, fields_to_generate):

/Users/jzuhone/Source/yt-units-notbroke/yt/data_objects/data_containers.pyc in _generate_fields(self, fields_to_generate)
    630                         raise RuntimeError
    631                     self.field_data[field] = fd
--> 632                     fd.convert_to_units(fi.units)
    633                 except GenerationInProgress as gip:
    634                     for f in gip.fields:

/Users/jzuhone/Source/yt-units-notbroke/yt/units/yt_array.pyc in convert_to_units(self, units)
    330 
    331         """
--> 332         new_units = self._unit_repr_check_same(units)
    333         conversion_factor = self.units.get_conversion_factor(new_units)
    334 

/Users/jzuhone/Source/yt-units-notbroke/yt/units/yt_array.pyc in _unit_repr_check_same(self, units)
    312         # let Unit() handle units arg if it's not already a Unit obj.
    313         if not isinstance(units, Unit):
--> 314             units = Unit(units, registry = self.units.registry)
    315 
    316         if not self.units.same_dimensions_as(units):

/Users/jzuhone/Source/yt-units-notbroke/yt/units/unit_object.pyc in __new__(cls, unit_expr, cgs_value, dimensions, registry, **assumptions)
    133         else:
    134             # lookup the unit symbols
--> 135             cgs_value, dimensions = _get_unit_data_from_expr(unit_expr, registry.lut)
    136 
    137         # Sympy trick to get dimensions powers as Rationals

/Users/jzuhone/Source/yt-units-notbroke/yt/units/unit_object.pyc in _get_unit_data_from_expr(unit_expr, unit_symbol_lut)
    407         dimensions = 1
    408         for expr in unit_expr.args:
--> 409             unit_data = _get_unit_data_from_expr(expr, unit_symbol_lut)
    410             cgs_value *= unit_data[0]
    411             dimensions *= unit_data[1]

/Users/jzuhone/Source/yt-units-notbroke/yt/units/unit_object.pyc in _get_unit_data_from_expr(unit_expr, unit_symbol_lut)
    397 
    398     if isinstance(unit_expr, Pow):
--> 399         unit_data = _get_unit_data_from_expr(unit_expr.args[0], unit_symbol_lut)
    400         power = unit_expr.args[1]
    401         conv = float(unit_data[0]**power)

/Users/jzuhone/Source/yt-units-notbroke/yt/units/unit_object.pyc in _get_unit_data_from_expr(unit_expr, unit_symbol_lut)
    415     raise UnitParseError("Cannot parse for unit data from '%s'. Please supply" \
    416                          " an expression of only Unit, Symbol, Pow, and Mul" \
--> 417                          "objects." % str(unit_expr))
    418 
    419 

UnitParseError: Cannot parse for unit data from 'sqrt(cm)'. Please supply an expression of only Unit, Symbol, Pow, and Mulobjects.

: UnitParseError: Cannot parse for unit data from 'sqrt(cm)'. Please supply an expression of only Unit, Symbol, Pow, and Mulobjects. [yt.units.unit_object]
```

Responsible: MatthewTurk



More information about the yt-dev mailing list