<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def clip(self, lower=float('nan'), upper=float('nan')):
 """ Create a new SArray with each value clipped to be within the given bounds. In this case, "clipped" means that values below the lower bound will be set to the lower bound value. Values above the upper bound will be set to the upper bound value. This function can operate on SArrays of numeric type as well as array type, in which case each individual element in each array is clipped. By default ``lower`` and ``upper`` are set to ``float('nan')`` which indicates the respective bound should be ignored. The method fails if invoked on an SArray of non-numeric type. Parameters lower : int, optional The lower bound used to clip. Ignored if equal to ``float('nan')`` (the default). upper : int, optional The upper bound used to clip. Ignored if equal to ``float('nan')`` (the default). Returns ------- out : SArray See Also -------- clip_lower, clip_upper Examples -------- dtype: int Rows: 3 [2, 2, 2] """

        with cython_context():
            return SArray(_proxy=self.__proxy__.clip(lower, upper))