<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def create_periodic(mu_err=0., sigma_err=1., seed=None, **kwargs):
 """Generate a data with magnitudes with periodic variability distribution; the error instead are gaussian. Parameters mu_err : float (default=0) Mean of the gaussian distribution of magnitudes sigma_err : float (default=1) Standar deviation of the gaussian distribution of magnitude errorrs seed : {None, int, array_like}, optional Random seed used to initialize the pseudo-random number generator. Can be any integer between 0 and 2**32 - 1 inclusive, an array (or other sequence) of such integers, or None (the default). If seed is None, then RandomState will try to read data from /dev/urandom (or the Windows analogue) if available or seed from the clock otherwise. kwargs : optional extra arguments for create_random. Returns ------- data A Data object with a random lightcurves. Examples -------- .. code-block:: pycon Data(id=None, ds_name='feets-synthetic', bands=('Ks',)) 2.57880082, 1.03376863]) """


    random = np.random.RandomState(seed)

    size = kwargs.get("size", DEFAULT_SIZE)

    times, mags, errors = [], [], []
    for b in kwargs.get("bands", BANDS):
        time = 100 * random.rand(size)
        error = random.normal(size=size, loc=mu_err, scale=sigma_err)
        mag = np.sin(2 * np.pi * time) + error * random.randn(size)
        times.append(time)
        errors.append(error)
        mags.append(mag)

    times, mags, errors = iter(times), iter(mags), iter(errors)

    return create_random(
        magf=lambda **k: next(mags), magf_params={},
        errf=lambda **k: next(errors), errf_params={},
        timef=lambda **k: next(times), timef_params={}, **kwargs)