<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parallelisation(network, args, group_size, extra_functionality=None):
 """ Function that splits problem in selected number of snapshot groups and runs optimization successive for each group. Not useful for calculations with storage untis or extension. Parameters network : :class:`pypsa.Network Overall container of PyPSA args: dict Contains calculation settings of appl.py Returns ------- network : :class:`pypsa.Network Overall container of PyPSA """


    print("Performing linear OPF, {} snapshot(s) at a time:".
          format(group_size))
    t = time.time()

    for i in range(int((args['end_snapshot'] - args['start_snapshot'] + 1)
        / group_size)):
        if i > 0:
            network.storage_units.state_of_charge_initial = network.\
                storage_units_t.state_of_charge.loc[
                    network.snapshots[group_size * i - 1]]
        network.lopf(network.snapshots[
                     group_size * i:group_size * i + group_size],
                     solver_name=args['solver_name'],
                     solver_options=args['solver_options'],
                     extra_functionality=extra_functionality)
        network.lines.s_nom = network.lines.s_nom_opt

    print(time.time() - t / 60)
    return