diff --git a/yt/data_objects/static_output.py b/yt/data_objects/static_output.py index 515ab007c9..8e6356ba1f 100644 --- a/yt/data_objects/static_output.py +++ b/yt/data_objects/static_output.py @@ -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) @@ -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 + 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) @@ -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] diff --git a/yt/fields/field_info_container.py b/yt/fields/field_info_container.py index b3837f5ad2..55a7fd06d6 100644 --- a/yt/fields/field_info_container.py +++ b/yt/fields/field_info_container.py @@ -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. @@ -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): @@ -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"): @@ -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 @@ -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 diff --git a/yt/frontends/fits/data_structures.py b/yt/frontends/fits/data_structures.py index b178f27822..13a40705f5 100644 --- a/yt/frontends/fits/data_structures.py +++ b/yt/frontends/fits/data_structures.py @@ -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] diff --git a/yt/frontends/ytdata/data_structures.py b/yt/frontends/ytdata/data_structures.py index 2e2a27da56..f741d26109 100644 --- a/yt/frontends/ytdata/data_structures.py +++ b/yt/frontends/ytdata/data_structures.py @@ -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)