package layoutgraph

import 

// ValidatePositionedGraph checks the structural and positioned geometry
// invariants required by algorithms that inspect labels and routed edges.
func ( context.Context,  string,  *Graph) error {
	return ValidatePositionedGraphSelection(, , , nil)
}

// Area returns the area of the graph's unrounded bounding box, including
// routed edges and positioned labels.
func ( *Graph) () float64 {
	return .area()
}

// IsImage reports whether the node uses the image shape. Image nodes do not
// render their icon as a separately positioned object.
func ( *Node) () bool {
	return  != nil && .shapeType == imageType
}

// EffectiveContainer returns the node's active layout container. Active
// cluster and sequence vessels replace the node's direct container while
// those grouping algorithms are running.
func ( *Node) () *Node {
	if  == nil {
		return nil
	}
	return .container()
}

// AncestryParent returns the parent relation used by layout ancestry checks.
// Unlike EffectiveContainer, active cluster and sequence ancestry follows the
// vessel itself.
func ( *Node) () *Node {
	return ancestryParent()
}