tscircuit/autorouting-dataset-01
This code manages the hardware and electronic components for circuit design and PCB layout, defining components like resistors, capacitors, transistors, connectors, and footprints, and providing tools for component placement, PCB topology, and electrical connections.
- Version
- 1.0.102
- License
- unset
- Stars
- 4
scripts/create-dataset/processCircuitModule.tsx
import { writeFile } from "node:fs/promises"
import path from "node:path"
import { runAllPlacementChecks } from "@tscircuit/checks"
import { RootCircuit } from "@tscircuit/core"
import { getSimpleRouteJsonFromCircuitJson } from "tscircuit"
/**
* Loads a circuit module and saves its simple route JSON to the dataset.
*/
export const processCircuitModule = async (processCircuitRequest: {
baseName: string
modulePath: string
datasetDirectory: string
}): Promise<string | null> => {
const { baseName, modulePath, datasetDirectory } = processCircuitRequest
let Circuit: any
try {
;({ default: Circuit } = await import(modulePath))
} catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error)
console.log(`[Ignored] ${baseName} due to import failure: ${errorMessage}`)
return null
}
const circuit = new RootCircuit()
process.env.TSCIRCUIT_DATASET_DISABLE_AUTOROUTER = "true"
circuit.schematicDisabled = true
circuit.add(<Circuit />)
const outputPath = path.join(
datasetDirectory,
`${baseName}.simple-route.json`,
)
console.log("[Start]", baseName)
try {
await circuit.renderUntilSettled()
const circuitJson = circuit.getCircuitJson()
const placementErrors = /^circuit\d{3}$/.test(baseName)
? (await runAllPlacementChecks(circuitJson)).filter(
(error) =>
error.type === "pcb_footprint_overlap_error" ||
error.type === "pcb_component_outside_board_error",
)
: []
if (placementErrors.length > 0) {
throw new Error(
[
"tscircuit placement check found invalid PCB placement:",
...placementErrors.map((error) => `- ${error.message}`),
].join("\n"),
)
}
const { simpleRouteJson } = getSimpleRouteJsonFromCircuitJson({
circuitJson,
})
await writeFile(outputPath, JSON.stringify(simpleRouteJson, null, 2))
console.log("[Done]", baseName)
return baseName
} catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error)
console.error(`[Failed] ${baseName}: ${errorMessage}`)
throw error
}
}