<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def find(self, sub, start=0, end=None):
 """Test if elements contain substring. Parameters sub : str start : int, optional Index to start searching from. end : int, optional Index to stop searching from. Returns ------- Series """

        check_type(sub, str)
        check_type(start, int)
        check_type(end, int)

        if end is not None and start >= end:
            raise ValueError('End must be greater than start')

        return Series(weld_str_find(self._data.values, sub, start, end),
                      self._data.index,
                      weld_to_numpy_dtype(WeldLong()),
                      self._data.name)