Пример #1
0
def test_switch_configuration(test_net, diag_params, report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'wrong_switch_configuration'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    net.switch.closed.at[0] = 0
    net.switch.closed.at[2] = 0
    check_result = pp.wrong_switch_configuration(net)
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == True
    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.switch.closed.at[0] = 1
    net.switch.closed.at[2] = 1
    net.switch.closed = 0
    # this will raise the warning "Matrix is exactly singular" -> ignore
    warnings.simplefilter("ignore")
    check_result = pp.wrong_switch_configuration(net)
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == True
    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
    net.switch.closed = 1
    net.load.p_kw.at[4] *= 1000
    check_result = pp.wrong_switch_configuration(net)
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == 'uncertain'
    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #2
0
def test_lines_with_impedance_close_to_zero(test_net, diag_params, report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'lines_with_impedance_close_to_zero'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    net.line.length_km.at[0] = 0
    net.line.r_ohm_per_km.at[1] = 0
    net.line.x_ohm_per_km.at[1] = 0
    net.line.r_ohm_per_km.at[2] = 0
    net.line.x_ohm_per_km.at[3] = 0
    net.line.length_km.at[4] = 0
    net.line.r_ohm_per_km.at[4] = 0
    net.line.x_ohm_per_km.at[4] = 0
    check_result = pp.lines_with_impedance_close_to_zero(net,
                                                         diag_params['lines_min_length_km'],
                                                         diag_params['lines_min_z_ohm'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == [0, 1, 4]

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.line.length_km.at[0] = 0.001
    net.line.r_ohm_per_km.at[1] = 0.001
    net.line.x_ohm_per_km.at[1] = 0.001
    net.line.r_ohm_per_km.at[2] = 0.001
    net.line.x_ohm_per_km.at[3] = 0.001
    net.line.length_km.at[4] = 1
    net.line.r_ohm_per_km.at[4] = 0.001
    net.line.x_ohm_per_km.at[4] = 0.001
    check_result = pp.lines_with_impedance_close_to_zero(net,
                                                         diag_params['lines_min_length_km'],
                                                         diag_params['lines_min_z_ohm'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert check_function not in diag_results

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #3
0
def test_impedance_with_impedance_close_to_zero(test_net, diag_params,
                                                report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'impedance_with_impedance_close_to_zero'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    net.impedance.rft_pu = 0
    net.impedance.xft_pu = 0
    net.impedance.rtf_pu = 0
    net.impedance.xtf_pu = 0
    check_result = pp.impedance_with_impedance_close_to_zero(
        net, diag_params['impedance_min_z_pu'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == net.impedance.index.values.tolist()

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.impedance.rft_pu = 1
    net.impedance.xft_pu = 1
    net.impedance.rtf_pu = 1
    net.impedance.xtf_pu = 1
    check_result = pp.impedance_with_impedance_close_to_zero(
        net, diag_params['impedance_min_z_pu'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert check_function not in diag_results

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #4
0
def test_switch_configuration(test_net, diag_params, diag_errors,
                              report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'wrong_switch_configuration'
    check_result = pp.wrong_switch_configuration(net)
    diag_results = {check_function: check_result}
    assert diag_results[check_function] == None
    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_errors,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_errors,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net = copy.deepcopy(test_net)
    net.switch.closed = 1
    net.load.p_mw.at[4] *= 1000
    check_result = pp.wrong_switch_configuration(net)
    diag_results = {check_function: check_result}
    assert diag_results[check_function] == False
    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_errors,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #5
0
def test_overload(test_net, diag_params, report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'overload'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    net.load.p_kw.at[4] *= 1000

    check_result = pp.overload(net, diag_params['overload_scaling_factor'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == \
    {'generation': 'uncertain', 'load': True}

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.load.p_kw.at[4] /= 1000
    net.gen.p_kw *= 1000
    check_result = pp.overload(net, diag_params['overload_scaling_factor'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == \
    {'generation': True, 'load': 'uncertain'}

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #6
0
def test_xward_with_impedance_close_to_zero(test_net, diag_params,
                                            report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'xward_with_impedance_close_to_zero'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    net.xward.x_ohm = 0
    check_result = pp.xward_with_impedance_close_to_zero(
        net, diag_params['lines_min_z_ohm'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == [0, 1]

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.xward.x_ohm = 1
    check_result = pp.xward_with_impedance_close_to_zero(
        net, diag_params['lines_min_z_ohm'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert check_function not in diag_results

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #7
0
def test_different_voltage_levels_connected(test_net, diag_params, diag_errors,
                                            report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'different_voltage_levels_connected'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    pp.create_switch(net, 41, 45, et='b')
    net.bus.vn_kv.loc[38] = 30
    check_result = pp.different_voltage_levels_connected(net)
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == \
    {'lines': [6, 7], 'switches': [88]}

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_errors,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #8
0
def test_missing_bus_indices(test_net, diag_params, diag_errors, report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'missing_bus_indices'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    net.line.from_bus.iloc[0] = 10000
    net.trafo.lv_bus.iloc[0] = 10001
    net.trafo3w.mv_bus.iloc[0] = 10002
    net.switch.bus.iloc[0] = 10003
    net.switch.element.iloc[0] = 10004
    net.ext_grid.bus.iloc[0] = 10005
    check_result = pp.missing_bus_indices(net)
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == {'ext_grid': [(0, 'bus', 10005)],
                                            'line': [(0, 'from_bus', 10000)],
                                            'switch': [(0, 'bus', 10003), (0, 'element', 10004)],
                                            'trafo': [(0, 'lv_bus', 10001)],
                                            'trafo3w': [(0, 'mv_bus', 10002)]}

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #9
0
    def test_number(self, test_net, diag_params, diag_errors, report_methods):
        net = copy.deepcopy(test_net)
        check_function = 'invalid_values'
        diag_params = copy.deepcopy(diag_params)
        report_methods = copy.deepcopy(report_methods)
        net.load.loc[0, 'p_mw'] = '1000'
        net.load.loc[1, 'q_mvar'] = None
        net.gen.loc[0, 'p_mw'] = False
        net.sgen.loc[0, 'p_mw'] = -1.5
        net.sgen.loc[1, 'q_mvar'] = np.nan
        net.ext_grid.loc[0, 'va_degree'] = 13.55

        check_result = pp.invalid_values(net)
        if check_result:
            diag_results = {check_function: check_result}
        else:
            diag_results = {}
        assert diag_results[check_function] == \
        {'gen': [(0, 'p_mw', False, 'number')],
         'load': [(0, 'p_mw', '1000', 'number'), (1, 'q_mvar', 'nan', 'number')],
         'sgen': [(1, 'q_mvar', 'nan', 'number')]}

        for bool_value in [True, False]:
            diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
            report_check = None
            try:
                eval(report_methods[check_function])
                report_check = True
            except:
                report_check = False
            assert report_check
Пример #10
0
def test_numba_comparison(test_net, diag_params, diag_errors, report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'numba_comparison'
    diag_params['numba_tolerance'] = 1e-13
    check_result = pp.numba_comparison(
        net, numba_tolerance=diag_params['numba_tolerance'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    for element_type in diag_results[check_function]:
        check_results = diag_results[check_function]
        for result_type in check_results[element_type]:
            for result in check_results[element_type][result_type]:
                assert result > diag_params['numba_tolerance']

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_errors,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #11
0
    def test_switch_type(self, test_net, diag_params, diag_errors, report_methods):
        net = copy.deepcopy(test_net)
        check_function = 'invalid_values'
        diag_params = copy.deepcopy(diag_params)
        report_methods = copy.deepcopy(report_methods)
        net.switch.loc[0, 'et'] = 'bus'
        net.switch.loc[1, 'et'] = 1
        net.switch.loc[2, 'et'] = None
        net.switch.loc[3, 'et'] = True
        net.switch.loc[4, 'et'] = 't'

        check_result = pp.invalid_values(net)
        if check_result:
            diag_results = {check_function: check_result}
        else:
            diag_results = {}
        assert diag_results[check_function] == \
        {'switch': [(0, 'et', 'bus', 'switch_type'),
                    (1, 'et', 1, 'switch_type'),
                    (2, 'et', 'None', 'switch_type'),
                    (3, 'et', True, 'switch_type')]}

        for bool_value in [True, False]:
            diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
            report_check = None
            try:
                eval(report_methods[check_function])
                report_check = True
            except:
                report_check = False
            assert report_check
Пример #12
0
def test_multiple_voltage_controlling_elements_per_bus(test_net, diag_params, diag_errors, report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'multiple_voltage_controlling_elements_per_bus'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    net.gen.bus.at[0] = 0
    pp.create_ext_grid(net, 1)
    net.ext_grid.bus.at[1] = 0

    check_result = pp.multiple_voltage_controlling_elements_per_bus(net)
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == \
    {'buses_with_gens_and_ext_grids': [0],
     'buses_with_mult_ext_grids': [0]}

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #13
0
def test_wrong_reference_system(test_net, diag_params, diag_errors,
                                report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'wrong_reference_system'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    net.load.p_mw.at[0] = -1
    net.gen.p_mw.at[0] = -1
    net.sgen.p_mw.at[0] = -1
    check_result = pp.wrong_reference_system(net)
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == {
        'gens': [0],
        'loads': [0],
        'sgens': [0]
    }

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_errors,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #14
0
def test_parallel_switches(test_net, diag_params, diag_errors, report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'parallel_switches'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    pp.create_switch(net, 1, 2, et='b')
    pp.create_switch(net, 13, 0, et='t', closed=False)
    pp.create_switch(net, 13, 0, et='t')
    pp.create_switch(net, 47, 16, et='l')
    pp.create_switch(net, 13, 0, et='b')

    check_result = pp.parallel_switches(net)
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == [[0, 88], [84, 89, 90], [66, 91]]

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #15
0
    def test_between_zero_and_one(self, test_net, diag_params, diag_errors,
                                  report_methods):
        net = copy.deepcopy(test_net)
        check_function = 'invalid_values'
        diag_params = copy.deepcopy(diag_params)
        report_methods = copy.deepcopy(report_methods)
        net.line.loc[0, 'df'] = 1.5

        check_result = pp.invalid_values(net)
        if check_result:
            diag_results = {check_function: check_result}
        else:
            diag_results = {}
        assert diag_results[check_function] == \
        {'line': [(0, 'df', 1.5, '0<x<=1')]}

        for bool_value in [True, False]:
            diag_report = DiagnosticReports(net,
                                            diag_results,
                                            diag_errors,
                                            diag_params,
                                            compact_report=bool_value)
            report_check = None
            try:
                eval(report_methods[check_function])
                report_check = True
            except:
                report_check = False
            assert report_check
Пример #16
0
    def test_boolean(self, test_net, diag_params, report_methods):
        net = copy.deepcopy(test_net)
        check_function = 'invalid_values'
        diag_params = copy.deepcopy(diag_params)
        report_methods = copy.deepcopy(report_methods)
        net.sgen.loc[0, 'in_service'] = 0
        net.sgen.loc[1, 'in_service'] = 0.0
        net.sgen.loc[2, 'in_service'] = '0'
        net.sgen.loc[3, 'in_service'] = '0.0'
        net.sgen.loc[4, 'in_service'] = 1
        net.gen.loc[0, 'in_service'] = '1'
        net.load.loc[0, 'in_service'] = '10'
        net.line.loc[0, 'in_service'] = '-1'
        net.bus.loc[0, 'in_service'] = 'no'
        net.trafo.loc[0, 'in_service'] = 'True'
        net.trafo3w.loc[0, 'in_service'] = None
        net.switch.loc[0, 'closed'] = 0
        net.switch.loc[1, 'closed'] = 'False'
        net.switch.loc[2, 'closed'] = False
        net.switch.loc[3, 'closed'] = 'False'
        net.switch.loc[4, 'closed'] = None
        net.switch.loc[5, 'closed'] = '10'

        check_result = pp.invalid_values(net)
        if check_result:
            diag_results = {check_function: check_result}
        else:
            diag_results = {}
        assert diag_results[check_function] == \
        {'bus': [(0, 'in_service', 'no', 'boolean')],
         'gen': [(0, 'in_service', '1', 'boolean')],
         'line': [(0, 'in_service', '-1', 'boolean')],
         'load': [(0, 'in_service', '10', 'boolean')],
         'sgen': [(2, 'in_service', '0', 'boolean'),
                  (3, 'in_service', '0.0', 'boolean')],
         'switch': [(1, 'closed', 'False', 'boolean'),
                    (3, 'closed', 'False', 'boolean'),
                    (4, 'closed', 'None', 'boolean'),
                    (5, 'closed', '10', 'boolean')],
         'trafo': [(0, 'in_service', 'True', 'boolean')],
         'trafo3w': [(0, 'in_service', 'nan', 'boolean')]}

        for bool_value in [True, False]:
            diag_report = DiagnosticReports(net,
                                            diag_results,
                                            diag_params,
                                            compact_report=bool_value)
            report_check = None
            try:
                eval(report_methods[check_function])
                report_check = True
            except:
                report_check = False
            assert report_check
Пример #17
0
    def test_greater_equal_zero(self, test_net, diag_params, diag_errors,
                                report_methods):
        net = copy.deepcopy(test_net)
        check_function = 'invalid_values'
        net.line.loc[7, 'r_ohm_per_km'] = -1
        net.line.loc[8, 'x_ohm_per_km'] = None
        net.line.loc[8, 'c_nf_per_km'] = '0'
        net.trafo.loc[0, 'vkr_percent'] = '-1'
        net.trafo.loc[0, 'pfe_kw'] = -1.5
        net.trafo.loc[0, 'i0_percent'] = -0.001
        net.trafo3w.loc[0, 'vkr_hv_percent'] = True
        net.trafo3w.loc[0, 'vkr_mv_percent'] = False
        net.trafo3w.loc[0, 'vkr_lv_percent'] = 1
        net.trafo3w.loc[0, 'pfe_kw'] = '2'
        net.trafo3w.loc[0, 'i0_percent'] = 10
        net.load.loc[0, 'scaling'] = -0.1
        net.load.loc[1, 'scaling'] = 0
        net.load.loc[2, 'scaling'] = 1
        net.load.loc[3, 'scaling'] = '1'
        net.gen.loc[0, 'scaling'] = None
        net.sgen.loc[0, 'scaling'] = False

        check_result = pp.invalid_values(net)
        if check_result:
            diag_results = {check_function: check_result}
        else:
            diag_results = {}
        assert diag_results[check_function] == \
        {'line': [(7, 'r_ohm_per_km', -1.0, '>=0'), (8, 'x_ohm_per_km', 'nan', '>=0'),
                  (8, 'c_nf_per_km', '0', '>=0')],
         'trafo': [(0, 'vkr_percent', '-1', '>=0'), (0, 'pfe_kw', -1.5, '>=0'),
                   (0, 'i0_percent', -0.001, '>=0')],
         'trafo3w': [(0, 'vkr_hv_percent', True, '>=0'), (0, 'vkr_mv_percent', False, '>=0'),
                     (0, 'pfe_kw', '2', '>=0')],
         'gen': [(0, 'scaling', 'nan', '>=0')],
         'load': [(0, 'scaling', -0.1, '>=0'), (3, 'scaling', '1', '>=0')],
         'sgen': [(0, 'scaling', False, '>=0')]}

        for bool_value in [True, False]:
            diag_report = DiagnosticReports(net,
                                            diag_results,
                                            diag_errors,
                                            diag_params,
                                            compact_report=bool_value)
            report_check = None
            try:
                eval(report_methods[check_function])
                report_check = True
            except:
                report_check = False
            assert report_check
Пример #18
0
def test_no_issues(diag_params, diag_errors, report_methods):
    net = nw.example_simple()
    diag_results = pp.diagnostic(net, report_style=None)
    assert diag_results == {}
    for bool_value in [True, False]:
        for check_function in report_methods.keys():
            diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
            report_check = None
            try:
                eval(report_methods[check_function])
                report_check = True
            except:
                report_check = False
            assert report_check
Пример #19
0
def test_disconnected_elements(test_net, diag_params, diag_errors,
                               report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'disconnected_elements'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    net.switch.closed.loc[37, 38] = False
    pp.drop_trafos(net, [1])
    check_result = pp.disconnected_elements(net)
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    expected_disconnect = [{
        'buses': [33, 36, 37, 38, 39, 40, 41, 42, 43, 44],
        'lines': [6, 7, 8, 9, 11, 12, 13],
        'loads': [2, 5, 6, 7, 8, 9, 10, 11, 12],
        'sgens': [1, 2, 3, 4],
        'switches': [
            37, 38, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
            61
        ],
        'trafos3w': [0]
    }, {
        'buses': [45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56],
        'lines': [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24],
        'loads': [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24],
        'sgens': [5, 6, 7, 8, 9, 10],
        'switches': [
            62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
            79, 80, 81, 82, 83
        ]
    }]
    for area, expected_area in zip(diag_results[check_function],
                                   expected_disconnect):
        assert area == expected_area

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_errors,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #20
0
    def test_pos_int(self, test_net, diag_params, diag_errors, report_methods):
        net = copy.deepcopy(test_net)
        check_function = 'invalid_values'
        diag_params = copy.deepcopy(diag_params)
        report_methods = copy.deepcopy(report_methods)
        net.line.loc[7, 'from_bus'] = 1
        net.line.loc[8, 'to_bus'] = '2'
        net.trafo.loc[0, 'hv_bus'] = False
        net.trafo.loc[0, 'lv_bus'] = None
        net.trafo3w.loc[0, 'hv_bus'] = False
        net.trafo3w.loc[0, 'mv_bus'] = 0.5
        net.trafo3w.loc[0, 'lv_bus'] = 2
        net.load.loc[0, 'bus'] = True
        net.sgen.loc[0, 'bus'] = 1.5
        net.gen.loc[0, 'bus'] = np.nan
        net.ext_grid.loc[0, 'bus'] = -2.5
        net.switch.loc[0, 'bus'] = None
        net.switch.loc[0, 'element'] = -1.5

        check_result = pp.invalid_values(net)
        if check_result:
            diag_results = {check_function: check_result}
        else:
            diag_results = {}
        assert diag_results[check_function] == \
        {'ext_grid': [(0, 'bus', -2.5, 'positive_integer')],
         'gen': [(0, 'bus', 'nan', 'positive_integer')],
         'line': [(8, 'to_bus', '2', 'positive_integer')],
         'load': [(0, 'bus', True, 'positive_integer')],
         'sgen': [(0, 'bus', 1.5, 'positive_integer')],
         'switch': [(0, 'bus', 'nan', 'positive_integer'),
                    (0, 'element', -1.5, 'positive_integer')],
         'trafo': [(0, 'hv_bus', False, 'positive_integer'),
                   (0, 'lv_bus', 'nan', 'positive_integer')],
         'trafo3w': [(0, 'hv_bus', False, 'positive_integer'),
                     (0, 'mv_bus', 0.5, 'positive_integer')]}

        for bool_value in [True, False]:
            diag_report = DiagnosticReports(net,
                                            diag_results,
                                            diag_errors,
                                            diag_params,
                                            compact_report=bool_value)
            report_check = None
            try:
                eval(report_methods[check_function])
                report_check = True
            except:
                report_check = False
            assert report_check
Пример #21
0
    def test_greater_zero(self, test_net, diag_params, diag_errors,
                          report_methods):
        net = copy.deepcopy(test_net)
        check_function = 'invalid_values'
        net.bus.loc[42, 'vn_kv'] = '-1'
        net.line.loc[7, 'length_km'] = -1
        net.line.loc[8, 'max_i_ka'] = 0
        net.trafo.loc[0, 'vk_percent'] = 0.0
        net.trafo.loc[0, 'sn_mva'] = None
        net.trafo.loc[0, 'vn_hv_kv'] = -1.5
        net.trafo.loc[0, 'vn_lv_kv'] = False
        net.trafo3w.loc[0, 'vk_hv_percent'] = 2.3
        net.trafo3w.loc[0, 'vk_mv_percent'] = np.nan
        net.trafo3w.loc[0, 'vk_lv_percent'] = 0.0
        net.trafo3w.loc[0, 'sn_hv_mva'] = 11
        net.trafo3w.loc[0, 'sn_mv_mva'] = 'a'
        net.trafo3w.loc[0, 'vn_hv_kv'] = -1.5
        net.trafo3w.loc[0, 'vn_mv_kv'] = -1.5
        net.trafo3w.loc[0, 'vn_lv_kv'] = False
        net.ext_grid.loc[0, 'vm_pu'] = True

        check_result = pp.invalid_values(net)
        if check_result:
            diag_results = {check_function: check_result}
        else:
            diag_results = {}

        assert diag_results[check_function] == \
        {'bus': [(42, 'vn_kv', '-1', '>0')],
         'ext_grid': [(0, 'vm_pu', True, '>0')],
         'line': [(7, 'length_km', -1.0, '>0'), (8, 'max_i_ka', 0.0, '>0')],
         'trafo': [(0, 'sn_mva', 'nan', '>0'), (0, 'vn_hv_kv', -1.5, '>0'),
                   (0, 'vn_lv_kv', False, '>0'), (0, 'vk_percent', 0.0, '>0')],
         'trafo3w': [(0, 'sn_mv_mva', 'a', '>0'), (0, 'vn_hv_kv', -1.5, '>0'),
                     (0, 'vn_mv_kv', -1.5, '>0'), (0, 'vn_lv_kv', False, '>0'),
                     (0, 'vk_mv_percent', 'nan', '>0'), (0, 'vk_lv_percent', 0.0, '>0')]}

        for bool_value in [True, False]:
            diag_report = DiagnosticReports(net,
                                            diag_results,
                                            diag_errors,
                                            diag_params,
                                            compact_report=bool_value)
            report_check = None
            try:
                eval(report_methods[check_function])
                report_check = True
            except:
                report_check = False
            assert report_check
Пример #22
0
def test_deviation_from_std_type(test_net, diag_params, diag_errors,
                                 report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'deviation_from_std_type'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    net.line.r_ohm_per_km.loc[0] += 1
    net.line.x_ohm_per_km.loc[6] -= 1
    net.line.c_nf_per_km.loc[14] *= -1
    net.line.max_i_ka.loc[21] = '5'
    pp.change_std_type(net, 0, element='trafo', name='160 MVA 380/110 kV')
    net.trafo.vk_percent.loc[0] *= 2
    check_result = pp.deviation_from_std_type(net)
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == \
    {'line': {0: {'e_value': 1.1571, 'param': 'r_ohm_per_km', 'std_type_in_lib': True,
                  'std_type_value': 0.1571},
              6: {'e_value': -0.883, 'param': 'x_ohm_per_km', 'std_type_in_lib': True,
                  'std_type_value': 0.117},
              14: {'e_value': -264.0, 'param': 'c_nf_per_km', 'std_type_in_lib': True,
                   'std_type_value': 264},
              21: {'e_value': '5', 'param': 'max_i_ka', 'std_type_in_lib': True,
                   'std_type_value': 0.105}},
    'trafo': {0: {'e_value': 24.4, 'param': 'vk_percent', 'std_type_in_lib': True,
                  'std_type_value': 12.2}}
    }

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net,
                                        diag_results,
                                        diag_errors,
                                        diag_params,
                                        compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #23
0
def test_diagnostic_report():
    net = nw.example_multivoltage()
    net.line.loc[7, 'length_km'] = -1
    net.gen.bus.at[0] = 0
    net.load.p_kw.at[4] *= 1000
    net.switch.closed.at[0] = 0
    net.switch.closed.at[2] = 0
    pp.create_switch(net, 41, 45, et='b')
    net.line.r_ohm_per_km.at[1] = 0
    net.load.p_kw.at[0] = -1
    net.switch.closed.loc[37, 38] = False
    net.line.x_ohm_per_km.loc[6] -= 1
    net.line.from_bus.iloc[0] = 10000
    pp.create_switch(net, 1, 2, et='b')

    diag_results = pp.diagnostic(net)
    diag_params = {
        "overload_scaling_factor": 0.001,
        "lines_min_length_km": 0,
        "lines_min_z_ohm": 0,
        "nom_voltage_tolerance": 0.3,
        "numba_tolerance": 1e-5
    }
    diag_report = DiagnosticReports(net,
                                    diag_results,
                                    diag_params,
                                    compact_report=False)
    report_methods = {
        "missing_bus_indeces": diag_report.report_missing_bus_indeces,
        "disconnected_elements": diag_report.report_disconnected_elements,
        "different_voltage_levels_connected":
        diag_report.report_different_voltage_levels_connected,
        "lines_with_impedance_close_to_zero":
        diag_report.report_lines_with_impedance_close_to_zero,
        "nominal_voltages_dont_match":
        diag_report.report_nominal_voltages_dont_match,
        "invalid_values": diag_report.report_invalid_values,
        "overload": diag_report.report_overload,
        "multiple_voltage_controlling_elements_per_bus":
        diag_report.report_multiple_voltage_controlling_elements_per_bus,
        "wrong_switch_configuration":
        diag_report.report_wrong_switch_configuration,
        "no_ext_grid": diag_report.report_no_ext_grid,
        "wrong_reference_system": diag_report.report_wrong_reference_system,
        "deviation_from_std_type": diag_report.report_deviation_from_std_type,
        "numba_comparison": diag_report.report_numba_comparison,
        "parallel_switches": diag_report.report_parallel_switches
    }

    for key in diag_results:
        report_check = None
        try:
            report_methods[key]()
            report_check = True
        except:
            report_check = False
        assert report_check

    diag_report = DiagnosticReports(net,
                                    diag_results,
                                    diag_params,
                                    compact_report=True)
    for key in diag_results:
        report_check = None
        try:
            report_methods[key]()
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #24
0
def test_nominal_voltages_dont_match(test_net, diag_params, diag_errors, report_methods):
    net = copy.deepcopy(test_net)
    check_function = 'nominal_voltages_dont_match'
    diag_params = copy.deepcopy(diag_params)
    report_methods = copy.deepcopy(report_methods)
    trafo_copy = copy.deepcopy(net.trafo)
    trafo3w_copy = copy.deepcopy(net.trafo3w)
    net.trafo.hv_bus.at[0] = trafo_copy.lv_bus.at[0]
    net.trafo.lv_bus.at[0] = trafo_copy.hv_bus.at[0]
    check_result = pp.nominal_voltages_dont_match(net, diag_params['nom_voltage_tolerance'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == \
    {'trafo': {'hv_lv_swapped': [0]}}

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.trafo = copy.deepcopy(trafo_copy)
    net.trafo.vn_hv_kv.at[0] *= 1.31
    net.trafo.vn_lv_kv.at[0] *= 1.31
    check_result = pp.nominal_voltages_dont_match(net, diag_params['nom_voltage_tolerance'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == \
    {'trafo': {'hv_bus': [0], 'lv_bus': [0]}}

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.trafo = copy.deepcopy(trafo_copy)
    net.trafo.vn_hv_kv.at[0] *= 0.69
    net.trafo.vn_lv_kv.at[0] *= 0.69
    check_result = pp.nominal_voltages_dont_match(net, diag_params['nom_voltage_tolerance'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == \
    {'trafo': {'hv_bus': [0], 'lv_bus': [0]}}

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.trafo = copy.deepcopy(trafo_copy)
    net.trafo.vn_hv_kv.at[0] *= 1.29
    net.trafo.vn_lv_kv.at[0] *= 1.29
    check_result = pp.nominal_voltages_dont_match(net, diag_params['nom_voltage_tolerance'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert check_function not in diag_results

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.trafo = copy.deepcopy(trafo_copy)
    net.trafo.vn_hv_kv.at[0] *= 0.71
    net.trafo.vn_lv_kv.at[0] *= 0.71
    check_result = pp.nominal_voltages_dont_match(net, diag_params['nom_voltage_tolerance'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert check_function not in diag_results

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.trafo = copy.deepcopy(trafo_copy)

    net.trafo3w.hv_bus.at[0] = trafo3w_copy.mv_bus.at[0]
    net.trafo3w.mv_bus.at[0] = trafo3w_copy.lv_bus.at[0]
    net.trafo3w.lv_bus.at[0] = trafo3w_copy.hv_bus.at[0]
    check_result = pp.nominal_voltages_dont_match(net, diag_params['nom_voltage_tolerance'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == \
    {'trafo3w': {'connectors_swapped_3w': [0]}}

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.trafo3w = copy.deepcopy(trafo3w_copy)
    net.trafo3w.vn_hv_kv.at[0] *= 1.31
    net.trafo3w.vn_mv_kv.at[0] *= 1.31
    net.trafo3w.vn_lv_kv.at[0] *= 1.31
    check_result = pp.nominal_voltages_dont_match(net, diag_params['nom_voltage_tolerance'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == \
    {'trafo3w': {'hv_bus': [0], 'lv_bus': [0], 'mv_bus': [0]}}

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.trafo3w = copy.deepcopy(trafo3w_copy)
    net.trafo3w.vn_hv_kv.at[0] *= 0.69
    net.trafo3w.vn_mv_kv.at[0] *= 0.69
    net.trafo3w.vn_lv_kv.at[0] *= 0.69
    check_result = pp.nominal_voltages_dont_match(net, diag_params['nom_voltage_tolerance'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == \
    {'trafo3w': {'hv_bus': [0], 'lv_bus': [0], 'mv_bus': [0]}}

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.trafo3w = copy.deepcopy(trafo3w_copy)
    net.trafo3w.vn_hv_kv.at[0] *= 1.29
    net.trafo3w.vn_mv_kv.at[0] *= 1.29
    net.trafo3w.vn_lv_kv.at[0] *= 1.29
    check_result = pp.nominal_voltages_dont_match(net, diag_params['nom_voltage_tolerance'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert check_function not in diag_results

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net.trafo3w = copy.deepcopy(trafo3w_copy)
    net.trafo3w.vn_hv_kv.at[0] *= 0.71
    net.trafo3w.vn_mv_kv.at[0] *= 0.71
    net.trafo3w.vn_lv_kv.at[0] *= 0.71
    check_result = pp.nominal_voltages_dont_match(net, diag_params['nom_voltage_tolerance'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert check_function not in diag_results

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check
Пример #25
0
def test_impedance_values_close_to_zero(test_net, diag_params, diag_errors, report_methods):

    # line test
    net = copy.deepcopy(test_net)
    check_function = 'impedance_values_close_to_zero'
    net.line.length_km.at[0] = 0
    net.line.r_ohm_per_km.at[1] = 0
    net.line.x_ohm_per_km.at[1] = 0
    net.line.r_ohm_per_km.at[2] = 0
    net.line.x_ohm_per_km.at[3] = 0
    net.line.length_km.at[4] = 0
    net.line.r_ohm_per_km.at[4] = 0
    net.line.x_ohm_per_km.at[4] = 0
    net.xward.drop(net.xward.index, inplace=True)
    check_result = pp.impedance_values_close_to_zero(net, diag_params['min_r_ohm'], diag_params['min_x_ohm'],
                                                     diag_params['min_r_pu'], diag_params['min_x_pu'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == [{'line': [0, 1, 2, 3, 4]},
                                            {"loadflow_converges_with_switch_replacement": True}]

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    # xward test
    net = copy.deepcopy(test_net)
    check_function = 'impedance_values_close_to_zero'
    net.xward.x_ohm = 0
    check_result = pp.impedance_values_close_to_zero(net, diag_params['min_r_ohm'], diag_params['min_x_ohm'],
                                                     diag_params['min_r_pu'], diag_params['min_x_pu'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == [{'xward': [0, 1]}]
    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net = copy.deepcopy(test_net)
    net.xward.r_ohm = 1
    check_result = pp.impedance_values_close_to_zero(net, diag_params['min_r_ohm'], diag_params['min_x_ohm'],
                                                     diag_params['min_r_pu'], diag_params['min_x_pu'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert check_function not in diag_results

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    # impedance test
    net = copy.deepcopy(test_net)
    net.xward.drop(net.xward.index, inplace=True)
    net.impedance.rft_pu = 0
    net.impedance.xft_pu = 0
    net.impedance.rtf_pu = 0
    net.impedance.xtf_pu = 0
    check_result = pp.impedance_values_close_to_zero(net, diag_params['min_r_ohm'], diag_params['min_x_ohm'],
                                                     diag_params['min_r_pu'], diag_params['min_x_pu'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert diag_results[check_function] == [{'impedance': [0]},
                                            {'loadflow_converges_with_switch_replacement': True}]

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check

    net = copy.deepcopy(test_net)
    net.xward.drop(net.xward.index, inplace=True)
    net.impedance.rft_pu = 1
    net.impedance.xft_pu = 1
    net.impedance.rtf_pu = 1
    net.impedance.xtf_pu = 1
    check_result = pp.impedance_values_close_to_zero(net, diag_params['min_r_ohm'], diag_params['min_x_ohm'],
                                                     diag_params['min_r_pu'], diag_params['min_x_pu'])
    if check_result:
        diag_results = {check_function: check_result}
    else:
        diag_results = {}
    assert check_function not in diag_results

    for bool_value in [True, False]:
        diag_report = DiagnosticReports(net, diag_results, diag_errors, diag_params, compact_report=bool_value)
        report_check = None
        try:
            eval(report_methods[check_function])
            report_check = True
        except:
            report_check = False
        assert report_check