[yt-dev] Issue #1336: Field parameters that yt doesn't know about are assumed to be dimensionless (yt_analysis/yt)

Nathan Goldbaum issues-reply at bitbucket.org
Mon Mar 20 08:38:19 PDT 2017


New issue 1336: Field parameters that yt doesn't know about are assumed to be dimensionless
https://bitbucket.org/yt_analysis/yt/issues/1336/field-parameters-that-yt-doesnt-know-about

Nathan Goldbaum:

Consider the following script:

```
import yt
from yt.fields.derived_field import ValidateParameter

def _overdensity(field, data):
    rhobar = data.get_field_parameter('rhobar')
    return data[('ramses', 'Density')]/rhobar - 1.


ds = yt.load('output_00080/info_00080.txt')
ad = ds.all_data()
rhobar = ad.mean(('ramses', 'Density'))
ad.set_field_parameter('rhobar', rhobar)

ds.add_field(("gas", "overdensity"), function=_overdensity,
             take_log=False, force_override=True,
             validators=[ValidateParameter('rhobar')])

print(ad['overdensity'])
```

Right now this dies with the following traceback:

```
Traceback (most recent call last):
  File "test.py", line 16, in <module>
    validators=[ValidateParameter('rhobar')])
  File "/usr/local/lib/python3.5/site-packages/yt/data_objects/static_output.py", line 1090, in add_field
    deps, _ = self.field_info.check_derived_fields([name])
  File "/usr/local/lib/python3.5/site-packages/yt/fields/field_info_container.py", line 362, in check_derived_fields
    fd = fi.get_dependencies(ds = self.ds)
  File "/usr/local/lib/python3.5/site-packages/yt/fields/derived_field.py", line 178, in get_dependencies
    e[self.name]
  File "/usr/local/lib/python3.5/site-packages/yt/fields/field_detector.py", line 99, in __missing__
    vv = finfo(self)
  File "/usr/local/lib/python3.5/site-packages/yt/fields/derived_field.py", line 204, in __call__
    dd = self._function(self, data)
  File "test.py", line 6, in _overdensity
    return data[('ramses', 'Density')]/rhobar - 1.
  File "/usr/local/lib/python3.5/site-packages/yt/units/yt_array.py", line 927, in __sub__
    ro = sanitize_units_add(self, right_object, "subtraction")
  File "/usr/local/lib/python3.5/site-packages/yt/units/yt_array.py", line 163, in sanitize_units_add
    raise YTUnitOperationError(op_string, inp.units, dimensionless)
yt.utilities.exceptions.YTUnitOperationError: The subtraction operator for YTArrays with units (code_density) and (1) is not well defined.
```

What's going wrong here is the field detection system doesn't know that `rhobar` is a possible name for a field parameter, so it assumes it must be dimensionless. We should make the way the field detection system handles field parameters a bit smarter.

Responsible: ngoldbaum


More information about the yt-dev mailing list