Skip to main content
PyPowSyBl provides built-in IEEE standard test networks that are commonly used for power system analysis, testing, and benchmarking. These networks are ready to use without any external files.

Available IEEE Networks

PyPowSyBl includes six IEEE standard test networks:
  • IEEE 9-bus - Small 3-generator system
  • IEEE 14-bus - Classic test case with 5 generators
  • IEEE 30-bus - Medium-sized system
  • IEEE 57-bus - Larger test system
  • IEEE 118-bus - Complex transmission system
  • IEEE 300-bus - Large-scale test network

Creating IEEE Networks

1

Import PyPowSyBl

import pypowsybl as pp
2

Create an IEEE network

Use the appropriate create_ieee* function:
# Create IEEE 14-bus network
network = pp.network.create_ieee14()

# Or any other IEEE network
network_9 = pp.network.create_ieee9()
network_30 = pp.network.create_ieee30()
network_57 = pp.network.create_ieee57()
network_118 = pp.network.create_ieee118()
network_300 = pp.network.create_ieee300()
3

Explore the network

# Get basic information
print(f"Network ID: {network.id}")
print(f"Substations: {len(network.get_substations())}")
print(f"Buses: {len(network.get_buses())}")
print(f"Generators: {len(network.get_generators())}")
print(f"Loads: {len(network.get_loads())}")
print(f"Lines: {len(network.get_lines())}")

Working with IEEE 14-Bus Network

The IEEE 14-bus system is one of the most popular test cases. Here’s a complete example:
import pypowsybl as pp
import pandas as pd

# Create the network
network = pp.network.create_ieee14()

# View generators
generators = network.get_generators()
print("\nGenerators:")
print(generators[['bus_id', 'target_p', 'target_v', 'max_p']])

# View loads
loads = network.get_loads()
print("\nLoads:")
print(loads[['bus_id', 'p0', 'q0']])

# Run a power flow
results = pp.loadflow.run_ac(network)
print(f"\nLoadflow converged: {results[0].status}")

# Check bus voltages after loadflow
buses = network.get_buses()
print("\nBus Voltages:")
print(buses[['v_mag', 'v_angle']])
All IEEE networks are created with realistic parameters and are ready for power flow analysis.

Analyzing Network Components

import pypowsybl as pp

network = pp.network.create_ieee14()

# Get all generators
gens = network.get_generators()
print(f"Total generators: {len(gens)}")

# Analyze generator capacity
total_capacity = gens['max_p'].sum()
print(f"Total generation capacity: {total_capacity:.2f} MW")

# Find the largest generator
largest_gen = gens.loc[gens['max_p'].idxmax()]
print(f"Largest generator: {largest_gen.name}")
print(f"Capacity: {largest_gen['max_p']:.2f} MW")

Power Flow Analysis Example

Perform a complete power flow analysis on an IEEE network:
import pypowsybl as pp
import pandas as pd

# Create IEEE 30-bus network
network = pp.network.create_ieee30()

# Run AC power flow
print("Running AC power flow...")
results = pp.loadflow.run_ac(network)

if results[0].status.name == 'CONVERGED':
    print("Power flow converged successfully!\n")
    
    # Get line flows
    lines = network.get_lines()
    print("Line Flows:")
    print(lines[['p1', 'q1', 'p2', 'q2', 'i1', 'i2']])
    
    # Calculate losses
    total_losses = (lines['p1'] + lines['p2']).sum()
    print(f"\nTotal active power losses: {total_losses:.2f} MW")
    
    # Check voltage violations
    buses = network.get_buses()
    v_min, v_max = 0.95, 1.05
    violations = buses[(buses['v_mag'] < v_min) | (buses['v_mag'] > v_max)]
    
    if len(violations) > 0:
        print(f"\nVoltage violations detected at {len(violations)} buses")
    else:
        print("\nAll bus voltages within limits")
else:
    print(f"Power flow did not converge: {results[0].status}")

Comparing Different Network Sizes

Compare characteristics across different IEEE networks:
import pypowsybl as pp
import pandas as pd

# Create multiple networks
networks = {
    'IEEE-9': pp.network.create_ieee9(),
    'IEEE-14': pp.network.create_ieee14(),
    'IEEE-30': pp.network.create_ieee30(),
    'IEEE-57': pp.network.create_ieee57(),
}

# Collect statistics
stats = []
for name, net in networks.items():
    stats.append({
        'Network': name,
        'Buses': len(net.get_buses()),
        'Generators': len(net.get_generators()),
        'Loads': len(net.get_loads()),
        'Lines': len(net.get_lines()),
        'Transformers': len(net.get_2_windings_transformers()),
    })

# Display comparison
df_stats = pd.DataFrame(stats)
print(df_stats.to_string(index=False))
IEEE networks are perfect for:
  • Testing new algorithms
  • Validating simulation results
  • Learning power system analysis
  • Benchmarking performance

Using IEEE Networks for Sensitivity Analysis

import pypowsybl as pp

# Create IEEE 14-bus network
network = pp.network.create_ieee14()

# Run initial power flow
pp.loadflow.run_ac(network)

# Perform sensitivity analysis
# Define sensitivity factors
factor_matrix = pp.sensitivity.create_dc_analysis()
factor_matrix.add_branch_flow_factor_matrix(
    branches_ids=network.get_lines().index.tolist()[:5],
    variables_ids=network.get_generators().index.tolist()
)

# Run sensitivity analysis
results = factor_matrix.run(network)

# Display sensitivity values
print("Branch Flow Sensitivities:")
print(results.get_branch_flows_sensitivity_matrix())

Modifying IEEE Networks

You can modify IEEE networks for custom scenarios:
import pypowsybl as pp

# Create base network
network = pp.network.create_ieee14()

# Increase load at specific buses
loads = network.get_loads()
loads_df = loads.copy()
loads_df['p0'] = loads_df['p0'] * 1.2  # 20% increase
network.update_loads(loads_df)

# Modify generator limits
gens = network.get_generators()
gens_df = gens.copy()
gens_df['max_p'] = gens_df['max_p'] * 1.1  # 10% increase
network.update_generators(gens_df)

# Run power flow with modified network
results = pp.loadflow.run_ac(network)
print(f"Modified network power flow: {results[0].status}")

Next Steps

Build docs developers (and LLMs) love