Source code for habitat.analysis.operation



[docs]class Operation: """ Abstract representation of a logical operation in a model. """
[docs] def __repr__(self): return self.name
@property
[docs] def run_time_ms(self): if self.backward is None: return self.forward.run_time_ms return self.forward.run_time_ms + self.backward.run_time_ms
@property
[docs] def ktime_ns(self): if self.backward is None: return self.forward.ktime_ns return self.forward.ktime_ns + self.backward.ktime_ns
@property
[docs] def arguments(self): return None
@property
[docs] def forward(self): raise NotImplementedError
@property
[docs] def backward(self): raise NotImplementedError
@property
[docs] def name(self): raise NotImplementedError
@property
[docs] def device(self): raise NotImplementedError
[docs] def to_device(self, dest_device, predictor): raise NotImplementedError
[docs]class MeasuredOperation(Operation): def __init__( self, name, arguments, forward, backward, device, ): super().__init__() self._name = name self._arguments = arguments self._forward = forward self._backward = backward self._device = device @property
[docs] def name(self): return self._name
@property
[docs] def arguments(self): return self._arguments
@property
[docs] def forward(self): return self._forward
@property
[docs] def backward(self): return self._backward
@property
[docs] def device(self): return self._device
[docs] def to_device(self, dest_device, predictor): if dest_device.name == self._device.name: return self return predictor.predict_operation(self, dest_device)
[docs]class PredictedOperation(Operation): def __init__( self, measured_operation, forward, backward, device ): self._measured_operation = measured_operation self._forward = forward self._backward = backward self._device = device @property
[docs] def name(self): return self._measured_operation.name
@property
[docs] def arguments(self): return self._measured_operation.arguments
@property
[docs] def forward(self): return self._forward
@property
[docs] def backward(self): return self._backward
@property
[docs] def device(self): return self._device
[docs] def to_device(self, dest_device, predictor): raise RuntimeError( 'Cannot make a prediction using a predicted operation.',
)