[yt-svn] commit/yt: atmyers: Merged in ngoldbaum/yt (pull request #2197)
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Fri Jun 10 10:40:32 PDT 2016
1 new commit in yt:
https://bitbucket.org/yt_analysis/yt/commits/ba52d675cf38/
Changeset: ba52d675cf38
Branch: yt
User: atmyers
Date: 2016-06-10 17:40:19+00:00
Summary: Merged in ngoldbaum/yt (pull request #2197)
ValidateParameter ensures parameter values are used during field detection. Closes #1220.
Affected #: 4 files
diff -r f7b75dc94b48bae93e652e4409201323816848b7 -r ba52d675cf3826c4f3a1a42376049c00a3d95f41 yt/fields/astro_fields.py
--- a/yt/fields/astro_fields.py
+++ b/yt/fields/astro_fields.py
@@ -136,7 +136,8 @@
registry.add_field((ftype, "sz_kinetic"),
function=_sz_kinetic,
units=unit_system["length"]**-1,
- validators=[ValidateParameter("axis")])
+ validators=[
+ ValidateParameter("axis", {'axis': [0, 1, 2]})])
def _szy(field, data):
scale = 0.88 / mh * kboltz / (me * clight*clight) * sigma_thompson
diff -r f7b75dc94b48bae93e652e4409201323816848b7 -r ba52d675cf3826c4f3a1a42376049c00a3d95f41 yt/fields/derived_field.py
--- a/yt/fields/derived_field.py
+++ b/yt/fields/derived_field.py
@@ -23,6 +23,7 @@
NeedsDataField, \
NeedsProperty, \
NeedsParameter, \
+ NeedsParameterValue, \
FieldUnitsError
from .field_detector import \
FieldDetector
@@ -256,14 +257,21 @@
pass
class ValidateParameter(FieldValidator):
- def __init__(self, parameters):
+ def __init__(self, parameters, parameter_values=None):
"""
This validator ensures that the dataset has a given parameter.
+
+ If *parameter_values* is supplied, this will also ensure that the field
+ is available for all permutations of the field parameter.
"""
FieldValidator.__init__(self)
self.parameters = ensure_list(parameters)
+ self.parameter_values = parameter_values
def __call__(self, data):
doesnt_have = []
+ if self.parameter_values is not None:
+ if isinstance(data, FieldDetector):
+ raise NeedsParameterValue(self.parameter_values)
for p in self.parameters:
if not data.has_field_parameter(p):
doesnt_have.append(p)
diff -r f7b75dc94b48bae93e652e4409201323816848b7 -r ba52d675cf3826c4f3a1a42376049c00a3d95f41 yt/fields/field_detector.py
--- a/yt/fields/field_detector.py
+++ b/yt/fields/field_detector.py
@@ -17,7 +17,8 @@
from collections import defaultdict
from yt.units.yt_array import YTArray
from .field_exceptions import \
- NeedsGridType
+ NeedsGridType, \
+ NeedsParameterValue
class FieldDetector(defaultdict):
Level = 1
@@ -26,7 +27,7 @@
_id_offset = 0
domain_id = 0
- def __init__(self, nd = 16, ds = None, flat = False):
+ def __init__(self, nd = 16, ds = None, flat = False, field_parameters=None):
self.nd = nd
self.flat = flat
self._spatial = not flat
@@ -36,6 +37,7 @@
self.LeftEdge = [0.0, 0.0, 0.0]
self.RightEdge = [1.0, 1.0, 1.0]
self.dds = np.ones(3, "float64")
+ self.field_parameters = field_parameters
class fake_dataset(defaultdict):
pass
@@ -106,6 +108,32 @@
for i in nfd.requested_parameters:
if i not in self.requested_parameters:
self.requested_parameters.append(i)
+ except NeedsParameterValue as npv:
+ # redo field detection with a new FieldDetector, ensuring
+ # all needed field parameter values are set
+ for param in npv.parameter_values:
+ # temporarily remove any ValidateParameter instances for
+ # this field to avoid infinitely re-raising
+ # NeedsParameterValue exceptions
+ saved_validators = []
+ for i, validator in enumerate(finfo.validators):
+ params = getattr(validator, 'parameters', [])
+ if param in params:
+ saved_validators.append(validator)
+ del finfo.validators[i]
+
+ for pv in npv.parameter_values[param]:
+ nfd = FieldDetector(self.nd, ds=self.ds,
+ field_parameters={param: pv})
+ vv = finfo(nfd)
+ for i in nfd.requested:
+ if i not in self.requested:
+ self.requested.append(i)
+ for i in nfd.requested_parameters:
+ if i not in self.requested_parameters:
+ self.requested_parameters.append(i)
+
+ finfo.validators.extend(saved_validators)
if vv is not None:
if not self.flat: self[item] = vv
else: self[item] = vv.ravel()
@@ -176,6 +204,8 @@
}
def get_field_parameter(self, param, default = 0.0):
+ if self.field_parameters and param in self.field_parameters:
+ return self.field_parameters[param]
self.requested_parameters.append(param)
if param in ['bulk_velocity', 'center', 'normal']:
return self.ds.arr(np.random.random(3) * 1e-2, self.fp_units[param])
diff -r f7b75dc94b48bae93e652e4409201323816848b7 -r ba52d675cf3826c4f3a1a42376049c00a3d95f41 yt/fields/field_exceptions.py
--- a/yt/fields/field_exceptions.py
+++ b/yt/fields/field_exceptions.py
@@ -46,6 +46,10 @@
def __str__(self):
return "(%s)" % (self.missing_parameters)
+class NeedsParameterValue(ValidationException):
+ def __init__(self, parameter_values):
+ self.parameter_values = parameter_values
+
class NeedsConfiguration(ValidationException):
def __init__(self, parameter, value):
self.parameter = parameter
Repository URL: https://bitbucket.org/yt_analysis/yt/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the yt-svn
mailing list