<<>> <> <> <> DIRECTORY QPSolve, Rope; QPSetup: CEDAR DEFINITIONS = BEGIN OPEN QPSolve; ROPE: TYPE ~ Rope.ROPE; noRow: INT ~ -1; Graph: TYPE ~ REF GraphRep; GraphRep: TYPE ~ RECORD [order: INT, nV: NAT, vList: VertexList, eqnList: EqnList]; Vertex: TYPE ~ REF VertexRep; VertexRep: TYPE ~ RECORD [name: ROPE, visited: INT, tree: Edge, adj: EdgeList, val: REAL _ 0.0, vid: INT]; VertexList: TYPE ~ REF VertexListRep; VertexListRep: TYPE ~ RECORD [name: ROPE, first: Vertex, rest: VertexList, forward: Skips]; Level: TYPE ~ NAT; Skips: TYPE ~ REF SkipsRep; SkipsRep: TYPE ~ RECORD[SEQUENCE level: Level OF VertexList]; Edge: TYPE ~ REF EdgeRep; EdgeRep: TYPE ~ RECORD [thisEnd, thatEnd: Vertex, eData: EdgeData, dir: REAL _ 1.0]; EdgeList: TYPE ~ LIST OF Edge; EdgeData: TYPE ~ REF EdgeDataRep; EdgeDataRep: TYPE ~ RECORD [ join: Component, spread: REAL _ 0.0, squeeze: REAL _ 1.0, -- actually, SqRt[squeeze] relaxed: REAL _ 0.0, var: NAT, val: REAL _ 0.0]; Term: TYPE ~ RECORD [eData: EdgeData, coef: REAL]; TermList: TYPE ~ LIST OF Term; EqnList: TYPE ~ LIST OF TermList; Component: TYPE ~ REF ComponentRep; ComponentRep: TYPE ~ RECORD [ join: Component, weight: INT, edges: EdgeList, cycleEqns, extraEqns: EqnList]; ComponentList: TYPE ~ LIST OF Component; FindComponents: PROC [g: Graph] RETURNS [compList: ComponentList _ NIL]; <> CoupleComponents: PROC [compList: ComponentList, extraEqns: EqnList] RETURNS [coupledList: ComponentList]; <> FindFreeVars: PROC [cycleEqns, extraEqns: EqnList, nEqns, nVars: NAT] RETURNS [rowOf: IVector]; <> <> SolveComponent: PROC [component: Component]; <> SolveGraph: PROC [g: Graph]; <> NewGraph: PROC RETURNS [g: Graph]; AcquireVertex: PROC [g: Graph, name: ROPE] RETURNS [v: Vertex]; AcquireEdge: PROC [g: Graph, thisEnd, thatEnd: Vertex] RETURNS [edge: Edge]; SpreadEdge: PROC [g: Graph, edge: Edge, spread: REAL]; SqueezeEdge: PROC [g: Graph, edge: Edge, squeeze: REAL]; RelaxEdge: PROC [g: Graph, edge: Edge, relaxed: REAL]; ConstrainEdges: PROC [g: Graph, termList: TermList]; ListGraph: PROC [g: Graph, full: BOOL _ FALSE] RETURNS [list: LIST OF REF]; ESee: PROC [edge: Edge, full: BOOL _ FALSE] RETURNS [list: LIST OF REF]; ELSee: PROC [edges: EdgeList, full: BOOL _ FALSE] RETURNS [list: LIST OF REF]; ListComp: PROC [comp: Component, full: BOOL _ FALSE] RETURNS [list: LIST OF REF]; END..