def str_find(arr, sub, start=<NUM_LIT:0>, end=None, side='<STR_LIT:left>'):
if not isinstance(sub, str):<EOL><INDENT>msg = '<STR_LIT>'<EOL>raise TypeError(msg.format(type(sub).__name__))<EOL><DEDENT>if side == '<STR_LIT:left>':<EOL><INDENT>method = '<STR_LIT>'<EOL><DEDENT>elif side == '<STR_LIT:right>':<EOL><INDENT>method = '<STR_LIT>'<EOL><DEDENT>else:  <EOL><INDENT>raise ValueError('<STR_LIT>')<EOL><DEDENT>if end is None:<EOL><INDENT>f = lambda x: getattr(x, method)(sub, start)<EOL><DEDENT>else:<EOL><INDENT>f = lambda x: getattr(x, method)(sub, start, end)<EOL><DEDENT>return _na_map(f, arr, dtype=int)<EOL>
Return indexes in each strings in the Series/Index where the
substring is fully contained between [start:end]. Return -1 on failure.

Parameters
----------
sub : str
    Substring being searched.
start : int
    Left edge index.
end : int
    Right edge index.
side : {'left', 'right'}, default 'left'
    Specifies a starting side, equivalent to ``find`` or ``rfind``.

Returns
-------
Series or Index
    Indexes where substring is found.