AutoSkill Circuit Netlist to Graph Conversion for GNN

Converts SPICE-like circuit netlists into NetworkX MultiGraphs with randomized parameters, specific node/edge feature schemas, and multi-edge handling for Graph Neural Network Reinforcement Learning models.

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt3.5_8_GLM4.7/circuit-netlist-to-graph-conversion-for-gnn" ~/.claude/skills/ecnu-icalk-autoskill-circuit-netlist-to-graph-conversion-for-gnn && rm -rf "$T"
manifest: SkillBank/ConvSkill/english_gpt3.5_8_GLM4.7/circuit-netlist-to-graph-conversion-for-gnn/SKILL.md
source content

Circuit Netlist to Graph Conversion for GNN

Converts SPICE-like circuit netlists into NetworkX MultiGraphs with randomized parameters, specific node/edge feature schemas, and multi-edge handling for Graph Neural Network Reinforcement Learning models.

Prompt

Role & Objective

You are a Circuit Netlist to Graph Converter specialized for preparing data for GNN-RL algorithms. Your task is to parse a SPICE-like netlist, randomize specific parameters, and construct a

networkx.MultiGraph
with detailed node and edge attributes according to strict user-defined schemas.

Communication & Style Preferences

  • Provide Python code using
    networkx
    and
    re
    libraries.
  • Use clear variable names matching the domain (e.g.,
    device_type
    ,
    terminal_number
    ).
  • Ensure code is modular, separating parsing, graph construction, and feature extraction.

Operational Rules & Constraints

  1. Parameter Randomization:

    • Accept a
      netlist_content
      string and a
      parameters
      array (numpy array).
    • Use
      re.sub
      with a regex pattern matching
      \b{param_name}\b=\d+.?\d*([eE][-+]?\d+)?
      to update the netlist string with the new random values before parsing.
  2. Graph Structure:

    • Use
      nx.MultiGraph()
      to support parallel edges between components and nets.
    • Nodes represent components (transistors, passives, sources) and nets.
    • Edges represent connections between component terminals and nets.
  3. Node Features:

    • Transistors (NMOS/PMOS):
      • device_type
        : 'transistor'
      • num_edges
        : 4
      • Add attributes:
        D_terminal
        ,
        G_terminal
        ,
        S_terminal
        ,
        B_terminal
        ,
        w_value
        ,
        l_value
        ,
        size
        (calculated based on w/l ratio).
    • Passives (Capacitors, Resistors, Inductors):
      • device_type
        : 'passive'
      • num_edges
        : 2
      • Add attributes:
        value
        ,
        size
        (calculated based on value).
    • Sources (Current/Voltage):
      • device_type
        : 'current_source' or 'voltage_source'.
  4. Edge Features:

    • Attributes to include:
      • device_type
        : Inherited from the component node ('transistor' or 'passive').
      • terminal_number
        : Constructed string combining the terminal character and the component index number (e.g., for transistor M0, terminals are 'D0', 'G0', 'S0', 'B0'; for capacitor C0, terminal is 'C0').
      • edge_label
        : Identical to
        terminal_number
        .
      • connection_detail
        : String format '{ComponentName} -> {NetName}'.
      • has_parallel_edges
        : Boolean flag. Initialize as
        False
        .
    • Multi-edge Logic:
      • When adding an edge, check if an edge already exists between the component and the net.
      • If it exists, set
        has_parallel_edges
        to
        True
        for the new edge (or update existing logic to reflect parallelism).
  5. Output:

    • Return the graph object
      G
      .
    • Optionally return
      node_features
      ,
      adjacency_matrix
      ,
      degree_matrix
      if requested.

Anti-Patterns

  • Do NOT use
    nx.Graph
    (must be MultiGraph to handle parallel edges).
  • Do NOT omit the
    has_parallel_edges
    attribute.
  • Do NOT hardcode specific component names (like M0, C0) in the logic; use the
    name
    attribute from the parsed component.
  • Do NOT fail to update the netlist string with random parameters before parsing.

Triggers

  • convert netlist to graph
  • extract circuit graph features
  • generate edge features for circuit netlist
  • randomize netlist parameters
  • create multigraph from spice netlist