import numpy as np
from .utils import name_from_op_name
from ....core import Operator
[docs]
class Clip(Operator):
"""
Clip data between two extreme values.
Parameters
----------
min : float, optional
Lower value for the clipping, defaults to None (no lower clipping).
max : float, optional
Upper value for the clipping, defaults to None (no upper clipping).
"""
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.min = kwargs.pop('min', None)
self.max = kwargs.pop('max', None)
[docs]
def forward(self, field, **kwargs):
out_field = field.alike(name=name_from_op_name(self, field))
out_field.extended_data[:] = field.extended_data
if self.min is not None or self.max is not None:
out_field.extended_data[:] = np.clip(field.extended_data,
self.min, self.max)
return out_field
[docs]
def adjoint(self, d_field, field, **kwargs):
raise NotImplementedError('No adjoint implemented for step %s' % self.__class__.__name__)