<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def components(channel, channel_name, unique_names, prefix="", master=None):
 """ yield pandas Series and unique name based on the ndarray object Parameters channel : numpy.ndarray channel to be used foir Series channel_name : str channel name unique_names : UniqueDB unique names object prefix : str prefix used in case of nested recarrays Returns ------- name, series : (str, pandas.Series) tuple of unqiue name and Series object """

    names = channel.dtype.names

    # channel arrays
    if names[0] == channel_name:
        name = names[0]

        if prefix:
            name_ = unique_names.get_unique_name(f"{prefix}.{name}")
        else:
            name_ = unique_names.get_unique_name(name)

        values = channel[name]
        if len(values.shape) > 1:
            arr = [values]
            types = [("", values.dtype, values.shape[1:])]
            values = fromarrays(arr, dtype=types)
            del arr
        yield name_, Series(values, index=master, dtype="O")

        for name in names[1:]:
            values = channel[name]
            axis_name = unique_names.get_unique_name(f"{name_}.{name}")
            if len(values.shape) > 1:
                arr = [values]
                types = [("", values.dtype, values.shape[1:])]
                values = fromarrays(arr, dtype=types)
                del arr
            yield axis_name, Series(values, index=master, dtype="O")

    # structure composition
    else:
        for name in channel.dtype.names:
            values = channel[name]

            if values.dtype.names:
                yield from components(
                    values, name, unique_names,
                    prefix=f"{prefix}.{channel_name}" if prefix else f"{channel_name}",
                    master=master
                )

            else:
                name_ = unique_names.get_unique_name(
                    f"{prefix}.{channel_name}.{name}" if prefix else f"{channel_name}.{name}"
                )
                if len(values.shape) > 1:
                    arr = [values]
                    types = [("", values.dtype, values.shape[1:])]
                    values = fromarrays(arr, dtype=types)
                    del arr
                yield name_, Series(values, index=master)