Source code for toast.ops.delete

# Copyright (c) 2015-2020 by the parties listed in the AUTHORS file.
# All rights reserved.  Use of this source code is governed by
# a BSD-style license that can be found in the LICENSE file.

import traitlets

from ..timing import function_timer
from ..traits import Int, List, trait_docs
from ..utils import Logger
from .operator import Operator


[docs]@trait_docs class Delete(Operator): """Class to purge data from observations. This operator takes lists of shared, detdata, intervals and meta keys to delete from observations. """ # Class traits API = Int(0, help="Internal interface version for this operator") meta = List([], help="List of Observation dictionary keys to delete") detdata = List([], help="List of Observation detdata keys to delete") shared = List([], help="List of Observation shared keys to delete") intervals = List( [], help="List of tuples of Observation intervals keys to delete", ) def __init__(self, **kwargs): super().__init__(**kwargs) @function_timer def _exec(self, data, detectors=None, **kwargs): log = Logger.get() for ob in data.obs: for key in self.detdata: # This ignores non-existant keys del ob.detdata[key] for key in self.shared: # This ignores non-existant keys del ob.shared[key] for key in self.intervals: # This ignores non-existant keys del ob.intervals[key] for key in self.meta: try: del ob[key] except KeyError: pass return def _finalize(self, data, **kwargs): return None def _requires(self): # Although we could require nothing, since we are deleting keys only if they # exist, providing these as requirements allows us to catch dependency issues # in pipelines. req = dict() if self.meta is not None: req["meta"] = list(self.meta) if self.detdata is not None: req["detdata"] = list(self.detdata) if self.shared is not None: req["shared"] = list(self.shared) if self.intervals is not None: req["intervals"] = list(self.intervals) return req def _provides(self): return dict()