Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions yt/data_objects/static_output.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,6 @@ class Dataset(abc.ABC):
known_filters: dict[ParticleType, ParticleFilter] | None = None
_index_class: type[Index]
field_units: dict[AnyFieldKey, Unit] | None = None
derived_field_list = requires_index("derived_field_list")
fields = requires_index("fields")
conversion_factors: dict[str, float] | None = None
# _instantiated represents an instantiation time (since Epoch)
Expand Down Expand Up @@ -654,9 +653,13 @@ def print_stats(self):
def field_list(self):
return self.index.field_list

@property
def derived_field_list(self):
self.index
return self.field_info.derived_field_list

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just occurred to me that I should add a setter here for the sake of downstream frontends.

def create_field_info(self):
self.field_dependencies = {}
self.derived_field_list = []
self.filtered_particle_types = []
self.field_info = self._field_info_class(self, self.field_list)
self.coordinates.setup_fields(self.field_info)
Expand Down Expand Up @@ -915,7 +918,7 @@ def _setup_filtered_type(self, filter):
if fn[0] == filter.filtered_type:
# Now we can add this
available = True
self.derived_field_list.append((filter.name, fn[1]))
self.field_info.derived_field_list.append((filter.name, fn[1]))
fi[filter.name, fn[1]] = filter.wrap_func(fn, fi[fn])
# Now we append the dependencies
fd[filter.name, fn[1]] = fd[fn]
Expand Down
12 changes: 7 additions & 5 deletions yt/fields/field_info_container.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,11 @@ class FieldInfoContainer(UserDict):
known_other_fields: KnownFieldsT = ()
known_particle_fields: KnownFieldsT = ()
extra_union_fields: tuple[FieldKey, ...] = ()
derived_field_list: list[FieldKey]

def __init__(self, ds, field_list: list[FieldKey], slice_info=None):
super().__init__()
self.derived_field_list = []
self._show_field_errors: list[Exception] = []
self.ds = ds
# Now we start setting things up.
Expand Down Expand Up @@ -417,8 +419,8 @@ def find_dependencies(self, loaded):
deps, unavailable = self.check_derived_fields(loaded)
self.ds.field_dependencies.update(deps)
# Note we may have duplicated
dfl = set(self.ds.derived_field_list).union(deps.keys())
self.ds.derived_field_list = sorted(dfl)
dfl = set(self.derived_field_list).union(deps.keys())
self.derived_field_list = sorted(dfl)
return loaded, unavailable

def add_output_field(self, name, sampling_type, **kwargs):
Expand Down Expand Up @@ -655,7 +657,7 @@ def check_derived_fields(self, fields_to_check=None):

# now populate the derived field list with results
# this violates isolation principles and should be refactored
dfl = set(self.ds.derived_field_list).union(deps.keys())
dfl = set(self.derived_field_list).union(deps.keys())
dfl = sorted(dfl)

if not hasattr(self.ds.index, "meshes"):
Expand All @@ -681,7 +683,7 @@ def check_derived_fields(self, fields_to_check=None):
filtered_dfl.append(field)
dfl = filtered_dfl

self.ds.derived_field_list = dfl
self.derived_field_list = dfl
self._set_linear_fields()
return deps, unavailable

Expand All @@ -697,6 +699,6 @@ def _set_linear_fields(self):
non_log_fields = [
prefix + coord for prefix in non_log_prefixes for coord in coords
]
for field in self.ds.derived_field_list:
for field in self.derived_field_list:
if field[1] in non_log_fields:
self[field].take_log = False
2 changes: 1 addition & 1 deletion yt/frontends/fits/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ def _setup_derived_fields(self):
[self.dataset.conversion_factors[field] for field in self.field_list]
for field in self.field_list:
if field not in self.derived_field_list:
self.derived_field_list.append(field)
self.dataset.field_info.derived_field_list.append(field)

for field in self.derived_field_list:
f = self.dataset.field_info[field]
Expand Down
1 change: 0 additions & 1 deletion yt/frontends/ytdata/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,6 @@ def _with_parameter_file_open(self, f):

def create_field_info(self):
self.field_dependencies = {}
self.derived_field_list = []
self.filtered_particle_types = []
self.field_info = self._field_info_class(self, self.field_list)
self.coordinates.setup_fields(self.field_info)
Expand Down
Loading