<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def intervals(weights):
 """ Extract intervals where generics are composed of different tradeable instruments. Parameters weights: DataFrame or dict A DataFrame or dictionary of DataFrames with columns representing generics and a MultiIndex of date and contract. Values represent weights on tradeables for each generic. Returns ------- A DataFrame with [columns] ['contract', 'generic', 'start_date', 'end_date'] """

    intrvls = []
    if isinstance(weights, dict):
        for root in weights:
            wts = weights[root]
            intrvls.append(_intervals(wts))
        intrvls = pd.concat(intrvls, axis=0)
    else:
        intrvls = _intervals(weights)
    intrvls = intrvls.reset_index(drop=True)
    return intrvls