core

package
v0.0.0-...-6f0bcac Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 26, 2026 License: Apache-2.0 Imports: 8 Imported by: 0

README

AutoTrace Go Core

Importable computation package for AutoTrace consumers.

Import path:

import core "github.com/Homiakus/autotraceLab/go_engine/core"

Current extracted surface:

  • versioned contract identity (ContractVersion, EngineID);
  • scene validation;
  • block/port geometry;
  • deterministic orthogonal A* routing;
  • route cleanup;
  • label placement;
  • benchmark/quality metrics;
  • typed RouteRequest / RouteResult API.

The root go_engine package remains the WASM/native compatibility shell during migration. New protocol consumers are routed through this package. Legacy global functions remain temporarily for AutoTraceLab UI compatibility.

Planned next extraction: NLP/global optimization, full artifact cleaner parity, scene patch/incremental APIs, and removal of duplicated root-package implementations after parity gates pass.

Documentation

Index

Constants

View Source
const (
	BaseGrid            = 4.0
	PlacementGrid       = 10.0
	RoutingGrid         = 10.0
	DefaultCornerMargin = 14.0
	DefaultPortPitch    = 20.0
	MinBlockWidth       = 120.0
	MinBlockHeight      = 72.0
	HeaderHeight        = 24.0
	BodyPadding         = 12.0
)
View Source
const ContractVersion = 1
View Source
const EngineID = "autotrace-core-go"
View Source
const MaxLabelOffArrowPenalty = 50000.0

Variables

View Source
var (
	ErrSceneNotFound    = errors.New("autotrace scene not found")
	ErrRevisionConflict = errors.New("autotrace scene revision conflict")
)

Functions

func CalculateMinimumBlockSize

func CalculateMinimumBlockSize(node BlockNode, cornerMargin, portPitch float64) (minWidth, minHeight, wPorts, hPorts float64)

func ComputeOptimizedLabels

func ComputeOptimizedLabels(nodes []BlockNode, edges []EdgeConnection, customOffsets map[string]Point, clearance float64) map[string]LabelPlacement

func NormalizeModel

func NormalizeModel(nodes []BlockNode, edges []EdgeConnection) ([]BlockNode, []EdgeConnection, []string)

func ValidateScene

func ValidateScene(nodes []BlockNode, edges []EdgeConnection) error

Types

type BenchmarkMetrics

type BenchmarkMetrics struct {
	TotalWirelength        float64       `json:"totalWirelength"`
	BendCount              int           `json:"bendCount"`
	CrossingsCount         int           `json:"crossingsCount"`
	CollinearOverlapCount  int           `json:"collinearOverlapCount"`
	CollinearOverlapLength float64       `json:"collinearOverlapLength"`
	LabelsOnArrowCount     int           `json:"labelsOnArrowCount"`
	TotalLabelsCount       int           `json:"totalLabelsCount"`
	LabelsOnArrowRatio     float64       `json:"labelsOnArrowRatio"`
	LabelCollisionCount    int           `json:"labelCollisionCount"`
	ExecutionTimeMs        float64       `json:"executionTimeMs"`
	CompositeScore         float64       `json:"compositeOptimalityScore"`
	LayoutAlgorithm        string        `json:"layoutAlgorithm"`
	RoutingAlgorithm       string        `json:"routingAlgorithm"`
	QualityVector          QualityVector `json:"qualityVector,omitempty"`
}

func CalculateBenchmarkMetrics

func CalculateBenchmarkMetrics(nodes []BlockNode, edges []EdgeConnection, durationMs float64, layoutAlgo, routingAlgo string) BenchmarkMetrics

type BlockCategory

type BlockCategory string

type BlockNode

type BlockNode struct {
	ID                string        `json:"id"`
	Title             string        `json:"title"`
	Subtitle          string        `json:"subtitle,omitempty"`
	Category          BlockCategory `json:"category"`
	SemanticType      string        `json:"semanticType,omitempty"`
	Description       string        `json:"description,omitempty"`
	X                 float64       `json:"x"`
	Y                 float64       `json:"y"`
	Width             float64       `json:"width"`
	Height            float64       `json:"height"`
	Inputs            []Port        `json:"inputs"`
	Outputs           []Port        `json:"outputs"`
	IsPinned          bool          `json:"isPinned,omitempty"`
	Layer             int           `json:"layer,omitempty"`
	Order             int           `json:"order,omitempty"`
	Color             string        `json:"color,omitempty"`
	Shape             string        `json:"shape,omitempty"`
	AutoSize          bool          `json:"autoSize,omitempty"`
	MinWidth          float64       `json:"minWidth,omitempty"`
	MinHeight         float64       `json:"minHeight,omitempty"`
	ImageURL          string        `json:"imageUrl,omitempty"`
	ImageFit          string        `json:"imageFit,omitempty"`
	ImageOpacity      float64       `json:"imageOpacity,omitempty"`
	ShowTitleOverlay  bool          `json:"showTitleOverlay,omitempty"`
	IconName          string        `json:"iconName,omitempty"`
	PortsAdaptiveMode string        `json:"portsAdaptiveMode,omitempty"`
	RoutingClearance  float64       `json:"routingClearance,omitempty"`
	PreferredFlow     string        `json:"preferredFlow,omitempty"`
}

type DerivedBlockGeometry

type DerivedBlockGeometry struct {
	BlockID        string            `json:"blockId"`
	VisualBounds   [4]float64        `json:"visualBounds"`
	RoutingBounds  [4]float64        `json:"routingBounds"`
	ObstacleBounds [4]float64        `json:"obstacleBounds"`
	PortAnchors    []PortCoordinates `json:"portAnchors"`
	MinWidth       float64           `json:"minWidth"`
	MinHeight      float64           `json:"minHeight"`
	Valid          bool              `json:"valid"`
	Violations     []string          `json:"violations"`
}

func BuildDerivedBlockGeometry

func BuildDerivedBlockGeometry(node BlockNode, clearance float64) DerivedBlockGeometry

type Direction

type Direction struct {
	Dx int `json:"dx"`
	Dy int `json:"dy"`
}

Direction vector.

type EdgeConnection

type EdgeConnection struct {
	ID            string  `json:"id"`
	SourceBlockID string  `json:"sourceBlockId"`
	SourcePortID  string  `json:"sourcePortId"`
	TargetBlockID string  `json:"targetBlockId"`
	TargetPortID  string  `json:"targetPortId"`
	Label         string  `json:"label,omitempty"`
	Color         string  `json:"color,omitempty"`
	Path          []Point `json:"path,omitempty"`
	Bends         int     `json:"bends,omitempty"`
	Crossings     int     `json:"crossings,omitempty"`
	Length        float64 `json:"length,omitempty"`
	DataType      string  `json:"dataType,omitempty"`
}

func RouteOrthogonalAStar

func RouteOrthogonalAStar(nodes []BlockNode, edges []EdgeConnection, options RoutingOptions) []EdgeConnection

RouteOrthogonalAStar is the first public importable AutoTrace Core router. It is deterministic for identical inputs/options and preserves edge order.

type Engine

type Engine struct {
	// contains filtered or unexported fields
}

Engine owns revisioned graph scenes and reuses routes that remain valid after a patch. It is safe for concurrent native callers; the WASM bridge uses one process-wide instance so scene state survives across protocol calls.

func NewEngine

func NewEngine() *Engine

func (*Engine) Close

func (e *Engine) Close(graphID string) bool

func (*Engine) Open

func (e *Engine) Open(request SceneOpenRequest) (SceneResult, error)

func (*Engine) Patch

func (e *Engine) Patch(request ScenePatchRequest) (SceneResult, error)

func (*Engine) Snapshot

func (e *Engine) Snapshot(graphID string) (SceneResult, error)

type LabelPlacement

type LabelPlacement struct {
	EdgeID          string  `json:"edgeId"`
	Label           string  `json:"label"`
	X               float64 `json:"x"`
	Y               float64 `json:"y"`
	Width           float64 `json:"width"`
	Height          float64 `json:"height"`
	SegmentIndex    int     `json:"segmentIndex"`
	IsHorizontal    bool    `json:"isHorizontal"`
	IsOnArrow       bool    `json:"isOnArrow"`
	IsCollisionFree bool    `json:"isCollisionFree"`
	Penalty         float64 `json:"penalty"`
}

type ObstacleBox

type ObstacleBox struct {
	ID   string
	MinX float64
	MaxX float64
	MinY float64
	MaxY float64
}

ObstacleBox is a block clearance envelope used by the router.

type OptimizationWeights

type OptimizationWeights struct {
	CrossingWeight      float64 `json:"crossingWeight"`
	StraightnessWeight  float64 `json:"straightnessWeight"`
	G1SplineWeight      float64 `json:"g1SplineWeight"`
	PortAlignmentWeight float64 `json:"portAlignmentWeight"`
	ClearanceWeight     float64 `json:"clearanceWeight"`
	WirelengthWeight    float64 `json:"wirelengthWeight"`
	BendWeight          float64 `json:"bendWeight"`
	LabelOverlapWeight  float64 `json:"labelOverlapWeight"`
}

type Point

type Point struct {
	X float64 `json:"x"`
	Y float64 `json:"y"`
}

Point represents an (X, Y) 2D point.

func CleanOrthogonalArtifacts

func CleanOrthogonalArtifacts(raw []Point, source, target *PortCoordinates, nodes []BlockNode, clearance, sourceStub, targetStub float64) []Point

CleanOrthogonalArtifacts removes duplicate and collinear route points and preserves orthogonal source/target stubs. This is the first extracted core implementation; parity tests guard it against the legacy package.

type Port

type Port struct {
	ID               string     `json:"id"`
	Name             string     `json:"name"`
	Side             PortSide   `json:"side,omitempty"`
	Type             string     `json:"type"`
	DataType         string     `json:"dataType,omitempty"`
	PlacementMode    string     `json:"placementMode,omitempty"`
	RelativePosition float64    `json:"relativePosition,omitempty"`
	CustomOffset     float64    `json:"customOffset,omitempty"`
	PinNumber        int        `json:"pinNumber,omitempty"`
	PreferredSide    PortSide   `json:"preferredSide,omitempty"`
	AllowedSides     []PortSide `json:"allowedSides,omitempty"`
	Order            int        `json:"order,omitempty"`
	GroupID          string     `json:"groupId,omitempty"`
	Color            string     `json:"color,omitempty"`
	Description      string     `json:"description,omitempty"`
	MinSpacing       float64    `json:"minSpacing,omitempty"`
	OffsetPct        float64    `json:"offsetPct,omitempty"`
}

Port defines a block terminal conforming to rule/2.md §12.

func SortPortsDeterministically

func SortPortsDeterministically(ports []Port) []Port

type PortCoordinates

type PortCoordinates struct {
	X      float64   `json:"x"`
	Y      float64   `json:"y"`
	Normal Direction `json:"normal"`
	Side   PortSide  `json:"side"`
	Port   Port      `json:"port"`
}

func GetPortCoordinates

func GetPortCoordinates(node BlockNode, portID string, outputHint bool) PortCoordinates

func GetPortCoordinatesAccurate

func GetPortCoordinatesAccurate(node BlockNode, portID string, isOutputHint bool) PortCoordinates

type PortSide

type PortSide string

PortSide represents left, right, top, bottom.

const (
	SideLeft   PortSide = "left"
	SideRight  PortSide = "right"
	SideTop    PortSide = "top"
	SideBottom PortSide = "bottom"
)

type QualityVector

type QualityVector struct {
	HardViolations          int     `json:"hardViolations"`
	Crossings               int     `json:"crossings"`
	CollinearOverlapCount   int     `json:"collinearOverlapCount"`
	CollinearOverlapLength  float64 `json:"collinearOverlapLength"`
	CongestionOverflow      float64 `json:"congestionOverflow"`
	Bends                   int     `json:"bends"`
	StraightWiresCount      int     `json:"straightWiresCount"`
	StraightEdgeRatio       float64 `json:"straightEdgeRatio"`
	PortMisalignmentScore   float64 `json:"portMisalignmentScore"`
	PortAlignmentScore      float64 `json:"portAlignmentScore"`
	AreaRatio               float64 `json:"areaRatio"`
	DensityDeviation        float64 `json:"densityDeviation"`
	VoidRatio               float64 `json:"voidRatio"`
	AspectPenalty           float64 `json:"aspectPenalty"`
	NormalizedWirelength    float64 `json:"normalizedWirelength"`
	LabelCollisions         int     `json:"labelCollisions"`
	LabelsOnArrowPercentage float64 `json:"labelsOnArrowPercentage"`
	CompositeScore          float64 `json:"compositeScore"`
}

type RevisionConflictError

type RevisionConflictError struct {
	GraphID  string
	Expected int
	Actual   int
}

func (*RevisionConflictError) Error

func (e *RevisionConflictError) Error() string

func (*RevisionConflictError) Unwrap

func (e *RevisionConflictError) Unwrap() error

type RouteRequest

type RouteRequest struct {
	GraphID string           `json:"graphId"`
	Nodes   []BlockNode      `json:"nodes"`
	Edges   []EdgeConnection `json:"edges"`
	Options RoutingOptions   `json:"options"`
}

type RouteResult

type RouteResult struct {
	GraphID         string           `json:"graphId"`
	Edges           []EdgeConnection `json:"edges"`
	Metrics         BenchmarkMetrics `json:"metrics"`
	DurationMs      float64          `json:"durationMs"`
	Engine          string           `json:"engine"`
	ContractVersion int              `json:"contractVersion"`
}

func Route

func Route(request RouteRequest) (RouteResult, error)

type RoutingOptions

type RoutingOptions struct {
	GridSize               float64             `json:"gridSize"`
	ObstacleClearance      float64             `json:"obstacleClearance"`
	BendPenalty            float64             `json:"bendPenalty"`
	CrossingPenalty        float64             `json:"crossingPenalty"`
	ChannelSpacing         float64             `json:"channelSpacing"`
	PortExitOffset         float64             `json:"portExitOffset"`
	AdaptivePortExitOffset bool                `json:"adaptivePortExitOffset"`
	SmoothCorners          bool                `json:"smoothCorners"`
	JumpBridges            bool                `json:"jumpBridges"`
	PinAlignment           bool                `json:"pinAlignment"`
	ArtifactCleaning       bool                `json:"artifactCleaning"`
	Weights                OptimizationWeights `json:"weights"`
}

type Scene

type Scene struct {
	Revision   int                    `json:"revision"`
	Nodes      []BlockNode            `json:"nodes"`
	Edges      []EdgeConnection       `json:"edges"`
	Geometries []DerivedBlockGeometry `json:"geometries"`
	Metrics    BenchmarkMetrics       `json:"metrics"`
}

type SceneOpenRequest

type SceneOpenRequest struct {
	GraphID  string           `json:"graphId"`
	Revision int              `json:"revision"`
	Nodes    []BlockNode      `json:"nodes"`
	Edges    []EdgeConnection `json:"edges"`
	Options  RoutingOptions   `json:"options"`
}

type ScenePatch

type ScenePatch struct {
	BaseRevision    int              `json:"baseRevision"`
	Revision        int              `json:"revision"`
	ChangedBlocks   []BlockNode      `json:"changedBlocks"`
	ChangedEdges    []EdgeConnection `json:"changedEdges"`
	RemovedBlockIDs []string         `json:"removedBlockIds,omitempty"`
	RemovedEdgeIDs  []string         `json:"removedEdgeIds,omitempty"`
}

type ScenePatchRequest

type ScenePatchRequest struct {
	GraphID string     `json:"graphId"`
	Patch   ScenePatch `json:"patch"`
}

type SceneResult

type SceneResult struct {
	GraphID         string           `json:"graphId"`
	Revision        int              `json:"revision"`
	Nodes           []BlockNode      `json:"nodes"`
	Edges           []EdgeConnection `json:"edges"`
	Metrics         BenchmarkMetrics `json:"metrics"`
	DurationMs      float64          `json:"durationMs"`
	ReusedEdges     int              `json:"reusedEdges"`
	ReroutedEdges   int              `json:"reroutedEdges"`
	ReroutedEdgeIDs []string         `json:"reroutedEdgeIds,omitempty"`
	Engine          string           `json:"engine"`
	ContractVersion int              `json:"contractVersion"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL