def define_dynamic_lists(m):
    """
    Spinning_Reserve_Requirements and Spinning_Reserve_Provisions are
    dicts of lists of components that contribute to the requirement or provision
    of spinning reserves. Entries in each dict are indexed by reserve
    product. In the simple scenario, you may only have a single product called
    'spinning'. In other scenarios where some generators are limited in what
    kind of reserves they can provide, you may have "regulation" and
    "contingency" reserve products.
    The dicts are setup as defaultdicts, so they will automatically
    return an empty list if nothing has been added for a particular
    type of reserves.

    Spinning_Reserve_Up_Requirements and Spinning_Reserve_Down_Requirements
    list model components that increase reserve requirements in each balancing
    area and timepoint.

    Spinning_Reserve_Up_Provisions and Spinning_Reserve_Down_Provisions list
    model components that help satisfy spinning reserve requirements in
    each balancing area and timepoint.

    Spinning_Reserve_Up_Contingencies and Spinning_Reserve_Down_Contingencies
    list model components describing maximum contingency events. Elements of
    this list are summarized into a MaximumContingency variable that is added
    to the Spinning_Reserve_Requirements['contingency'] list.

    Each component in the Requirements and Provisions lists needs to use units
    of MW and be indexed by reserve type, balancing area and timepoint. Missing
    entries will be treated as zero (no reserves required or no reserves available).

    Each component in the Contingencies list should be in MW and indexed by
    (ba, tp) in BALANCING_AREA_TIMEPOINTS.
    """
    m.Spinning_Reserve_Up_Requirements = []
    m.Spinning_Reserve_Down_Requirements = []
    m.Spinning_Reserve_Up_Provisions = []
    m.Spinning_Reserve_Down_Provisions = []
    m.Spinning_Reserve_Up_Contingencies = []
    m.Spinning_Reserve_Down_Contingencies = []
