def _validate_ding0_mv_grid_import(grid, ding0_grid):
    """Verify imported data with original data from Ding0

    Parameters
    ----------
    grid: MVGrid
        MV Grid data (eDisGo)
    ding0_grid: ding0.MVGridDing0
        Ding0 MV grid object

    Notes
    -----
    The data validation excludes grid components located in aggregated load
    areas as these are represented differently in eDisGo.

    Returns
    -------
    dict
        Dict showing data integrity for each type of grid component
    """

    integrity_checks = ['branch_tee',
                        'disconnection_point', 'mv_transformer',
                        'lv_station'#,'line',
                        ]

    data_integrity = {}
    data_integrity.update({_: {'ding0': None, 'edisgo': None, 'msg': None}
                           for _ in integrity_checks})

    # Check number of branch tees
    data_integrity['branch_tee']['ding0'] = len(ding0_grid._cable_distributors)
    data_integrity['branch_tee']['edisgo'] = len(
        grid.graph.nodes_by_attribute('branch_tee'))

    # Check number of disconnecting points
    data_integrity['disconnection_point']['ding0'] = len(
        ding0_grid._circuit_breakers)
    data_integrity['disconnection_point']['edisgo'] = len(
        grid.graph.nodes_by_attribute('mv_disconnecting_point'))

    # Check number of MV transformers
    data_integrity['mv_transformer']['ding0'] = len(
        list(ding0_grid.station().transformers()))
    data_integrity['mv_transformer']['edisgo'] = len(
        grid.station.transformers)

    # Check number of LV stations in MV grid (graph)
    data_integrity['lv_station']['edisgo'] = len(grid.graph.nodes_by_attribute(
        'lv_station'))
    data_integrity['lv_station']['ding0'] = len(
        [_ for _ in ding0_grid._graph.nodes()
         if (isinstance(_, LVStationDing0) and
             not _.grid.grid_district.lv_load_area.is_aggregated)])

    # Check number of lines outside aggregated LA
    # edges_w_la = grid.graph.lines()
    # data_integrity['line']['edisgo'] = len([_ for _ in edges_w_la
    #          if not (_['adj_nodes'][0] == grid.station or
    #                  _['adj_nodes'][1] == grid.station) and
    #          _['line']._length > .5])
    # data_integrity['line']['ding0'] = len(
    #     [_ for _ in ding0_grid.lines()
    #      if not _['branch'].connects_aggregated])

    # raise an error if data does not match
    for c in integrity_checks:
        if data_integrity[c]['edisgo'] != data_integrity[c]['ding0']:
            raise ValueError(
                'Unequal number of objects for {c}. '
                '\n\tDing0:\t{ding0_no}'
                '\n\teDisGo:\t{edisgo_no}'.format(
                    c=c,
                    ding0_no=data_integrity[c]['ding0'],
                    edisgo_no=data_integrity[c]['edisgo']))

    return data_integrity
Verify imported data with original data from Ding0

    Parameters
    ----------
    grid: MVGrid
        MV Grid data (eDisGo)
    ding0_grid: ding0.MVGridDing0
        Ding0 MV grid object

    Notes
    -----
    The data validation excludes grid components located in aggregated load
    areas as these are represented differently in eDisGo.

    Returns
    -------
    dict
        Dict showing data integrity for each type of grid component