<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def clone_pores(network, pores, labels=['clone'], mode='parents'):
    r'''
    Clones the specified pores and adds them to the network

    Parameters
    ----------
    network : OpenPNM Network Object
        The Network object to which the new pores are to be added

    pores : array_like
        List of pores to clone

    labels : string, or list of strings
        The labels to apply to the clones, default is 'clone'

    mode : string
        Controls the connections between parents and clones.  Options are:

        - 'parents': (Default) Each clone is connected only to its parent
        - 'siblings': Clones are only connected to each other in the same
                      manner as parents were connected
        - 'isolated': No connections between parents or siblings
    '''
    if len(network.project.geometries()) > 0:
        logger.warning('Network has active Geometries, new pores must be \
                        assigned a Geometry')
    if len(network.project.phases()) > 0:
        raise Exception('Network has active Phases, cannot proceed')

    if type(labels) == str:
        labels = [labels]
    Np = network.Np
    Nt = network.Nt
    # Clone pores
    parents = sp.array(pores, ndmin=1)
    pcurrent = network['pore.coords']
    pclone = pcurrent[pores, :]
    pnew = sp.concatenate((pcurrent, pclone), axis=0)
    Npnew = sp.shape(pnew)[0]
    clones = sp.arange(Np, Npnew)
    # Add clone labels to network
    for item in labels:
        network['pore.'+item] = False
        network['throat.'+item] = False
    # Add connections between parents and clones
    if mode == 'parents':
        tclone = sp.vstack((parents, clones)).T
        extend(network=network, pore_coords=pclone, throat_conns=tclone)
    if mode == 'siblings':
        ts = network.find_neighbor_throats(pores=pores, mode='xnor')
        tclone = network['throat.conns'][ts] + network.num_pores()
        extend(network=network, pore_coords=pclone, throat_conns=tclone)
    if mode == 'isolated':
        extend(network=network, pore_coords=pclone)
    # Apply provided labels to cloned pores
    for item in labels:
        network['pore.'+item][network.pores('all') >= Np] = True
        network['throat.'+item][network.throats('all') >= Nt] = True

    # Clear adjacency and incidence matrices which will be out of date now
    network._am.clear()
    network._im.clear()