Missing local
Johnicholas opened this issue · comments
.domain:
type Box
type Place <: Box
type Transition <: Box
type Arrow
constructor Arrow(Box b1, Box b2)
.substance:
Place work_in
Place dev_in
Transition start
Place px
Place py
Transition delegate
Transition stop
Place work_out
Place dev_out
Arrow work_in_start := Arrow(work_in, start)
Arrow dev_in_delegate := Arrow(dev_in, delegate)
Arrow start_v1_i := Arrow(start, px) for i in [0, 4]
Arrow px_delegate := Arrow(px, delegate)
Arrow py_stop_i := Arrow(py, stop) for i in [0, 4]
Arrow stop_start_i := Arrow(stop, start) for i in [0, 4]
Arrow stop_work_out := Arrow(stop, work_out)
Arrow delegate_dev_out := Arrow(delegate, dev_out)
AutoLabel All
.style:
canvas {
width = 1000
height = 1000
}
GLOBAL {
REST_LENGTH = 500
COLOR_BLACK = #000000ff
COLOR_WHITE = #ffffffff
COLOR_DEBUG = #ff0000ff
}
layout = [boxes, arrows]
forall Box b {
b.center = (? in boxes, ? in boxes, ? in boxes, ? in boxes, ? in boxes)
vec2 b.projected_center = (b.center[0], b.center[1])
}
forall Place p {
shape p.icon = Circle {
center: p.projected_center
r: 30
strokeWidth: 1
strokeColor: GLOBAL.COLOR_BLACK
fillColor: GLOBAL.COLOR_WHITE
}
shape p.arrowTarget = p.icon
}
forall Transition t {
shape t.icon = Rectangle {
center: t.projected_center
width: 15
height: 15
fillColor: GLOBAL.COLOR_BLACK
}
shape t.arrowTarget = Rectangle {
center: t.projected_center
width: 15
height: 15
fillColor: GLOBAL.COLOR_DEBUG
}
t.arrowTarget above t.icon
}
forall Box b1; Box b2 {
encourage maximal(vdist(b1.center, b2.center)) in boxes
ensure disjoint(b1.icon, b2.icon)
}
forall Arrow a; Box b1; Box b2 where a := Arrow(b1, b2) {
-- hooke's law attraction of boxes connected by arrows?
encourage equal(0, sqr(vdist(b1.center, b2.center) - GLOBAL.REST_LENGTH)) in boxes
vec2 a.start = (? in arrows, ? in arrows)
encourage equal(0, norm(closestPoint(b1.arrowTarget, b2.projected_center) - a.start)) in arrows
vec2 a.end = closestPoint(b2.arrowTarget, b1.projected_center)
shape a.line = Line {
start: a.start
end: a.end
endArrowhead: "straight"
strokeColor: GLOBAL.COLOR_BLACK
}
a.firstCorner = (? in arrows, ? in arrows)
a.secondCorner = (? in arrows, ? in arrows)
-- ensure equal(a.start[1], a.firstCorner[1]) in arrows
-- ensure equal(a.firstCorner[0], a.secondCorner[0]) in arrows
-- ensure equal(a.secondCorner[1], a.end[1]) in arrows
shape a.debugFirstCornerDebug = Circle {
center: a.firstCorner
r: 6
fillColor: GLOBAL.COLOR_DEBUG
}
shape a.debugSecondCornerDebug = Circle {
center: a.secondCorner
r: 6
fillColor: GLOBAL.COLOR_DEBUG
}
shape a.debugLineOne = Line {
start: a.start
end: a.firstCorner
strokeColor: GLOBAL.COLOR_DEBUG
}
shape a.debugLineTwo = Line {
start: a.firstCorner
end: a.secondCorner
strokeColor: GLOBAL.COLOR_DEBUG
}
shape a.debugLineThree = Line {
start: a.secondCorner
end: a.end
strokeColor: GLOBAL.COLOR_DEBUG
}
encourage minimal(perimeter([a.start, a.firstCorner, a.secondCorner, a.end], false)) in arrows
-- encourage equal(0, norm(a.firstCorner - a.start) + norm(a.secondCorner - a.firstCorner) + norm(a.end - a.secondCorner)) in arrows
ensure isEquilateral([a.start, a.firstCorner, a.secondCorner, a.end], false) in arrows
}
-- collect Box b into boxes {
-- centers = listof center from boxes
-- projected_centers = listof projected_center from boxes
-- encourage minimal(tsneEnergy(centers, projected_centers))
-- }
Error message:
Uncaught (in promise) TypeError: missing local
at ru (index-0629f25b.js:236:22024)
at AT (index-0629f25b.js:247:19681)
at KAe (index-0629f25b.js:247:20722)
at index-0629f25b.js:247:21692
at Array.map (<anonymous>)
at KU (index-0629f25b.js:247:21662)
at ngt (index-0629f25b.js:247:24285)
at hAt (index-0629f25b.js:266:2926)
at async dAt (index-0629f25b.js:266:3451)
at async CFe (index-0629f25b.js:308:7815)
index-0629f25b.js:236 Uncaught (in promise) TypeError: missing local
at ru (index-0629f25b.js:236:22024)
at AT (index-0629f25b.js:247:19681)
at KAe (index-0629f25b.js:247:20722)
at index-0629f25b.js:247:21692
at Array.map (<anonymous>)
at KU (index-0629f25b.js:247:21662)
at ngt (index-0629f25b.js:247:24285)
at hAt (index-0629f25b.js:266:2926)
at async dAt (index-0629f25b.js:266:3451)
at async CFe (index-0629f25b.js:308:7815)
ru @ index-0629f25b.js:236
AT @ index-0629f25b.js:247
KAe @ index-0629f25b.js:247
(anonymous) @ index-0629f25b.js:247
KU @ index-0629f25b.js:247
ngt @ index-0629f25b.js:247
hAt @ index-0629f25b.js:266
index-0629f25b.js:236 Uncaught (in promise) TypeError: missing local
at ru (index-0629f25b.js:236:22024)
at AT (index-0629f25b.js:247:19681)
at KAe (index-0629f25b.js:247:20722)
at index-0629f25b.js:247:21692
at Array.map (<anonymous>)
at KU (index-0629f25b.js:247:21662)
at ngt (index-0629f25b.js:247:24285)
at hAt (index-0629f25b.js:266:2926)
at async dAt (index-0629f25b.js:266:3451)
at async CFe (index-0629f25b.js:308:7815)
contextKeyService.ts:394 Element already has context attribute
Can't reproduce yet but created a sharable link for this trio: https://penrose.cs.cmu.edu/try/?gist=47f337506eb5f0500ed1cf1c98a8061c. Thanks for reporting @Johnicholas!!
Interesting; that error message comes from here:
penrose/packages/core/src/engine/Autodiff.ts
Lines 1579 to 1586 in 8b33ba1
Seems like a bug? But @wodeni you said you're unable to reproduce?
Another occurrence of the same error message:
index-b4db132c.js:236 Uncaught (in promise) TypeError: missing local
at ru (index-b4db132c.js:236:22024)
at AT (index-b4db132c.js:247:19681)
at KAe (index-b4db132c.js:247:20722)
at index-b4db132c.js:247:21692
at Array.map (<anonymous>)
at JU (index-b4db132c.js:247:21662)
at rgt (index-b4db132c.js:247:24285)
at fAt (index-b4db132c.js:266:2926)
at async mAt (index-b4db132c.js:266:3451)
at async wFe (index-b4db132c.js:308:7815)
.domain empty, .substance empty, .style:
canvas {
width = 1000
height = 1000
}
GLOBAL {
COLOR_TRANSPARENT = #00000000
COLOR_DEBUG = #ff0000ff
COLOR_BLACK = #000000ff
-- sqrtFirstRun = 10 -- or ?
-- firstRun = sqr(sqrtFirstRun)
-- a = (?, ?)
-- b = a + (firstRun, 0)
-- sqrtSecondRun = 10 -- or ?
-- secondRun = sqr(sqrtSecondRun)
-- sqrtRise = 10 -- or ?
-- rise = sqr(sqrtRise)
-- c = b + (secondRun, rise)
-- sqrtThirdRun = 10 -- or ?
-- thirdRun = sqr(sqrtThirdRun)
-- d = c + (thirdRun, 0)
-- ab = Line {
-- start: a
-- end: b
-- }
-- bc = Line {
-- start: b
-- end: c
-- }
-- cd = Line {
-- start: c
-- end: d
-- }
-- -- Polyline {
-- -- points: [a, b, c, d]
-- -- }
-- -- ensure a[1] == b[1]
-- -- ensure a[0] < b[0]
-- -- ensure b[0] < c[0]
-- -- ensure c[0] < d[0]
-- -- ensure c[1] == d[1]
-- -- ensure a[1] < c[1]
-- -- firstCornerCenter = (?, ?)
-- firstCornerCircle = Circle {
-- fillColor: COLOR_TRANSPARENT
-- r: 50
-- strokeWidth: 1
-- strokeColor: COLOR_BLACK
-- }
-- Circle {
-- center: firstCornerCircle.center
-- r: 6
-- fillColor: COLOR_DEBUG
-- }
-- Circle {
-- center: closestPointLine(a, b, firstCornerCircle.center)
-- r: 6
-- fillColor: COLOR_DEBUG
-- }
-- Circle {
-- center: closestPointLine(b, c, firstCornerCircle.center)
-- r: 6
-- fillColor: COLOR_DEBUG
-- }
-- ensure
-- ensure signedDistanceLine(a, b, firstCornerCircle.center) == firstCornerCircle.r
-- ensure signedDistanceLine(b, c, firstCornerCircle.center) == firstCornerCircle.r
-- ensure signedArea([closestPointLine(a, b, firstCornerCircle.center), firstCornerCircle.center, closestPointLine(b, c, firstCornerCircle.center)], true) > 10
-- secondCornerCircle = Circle {
-- fillColor: COLOR_TRANSPARENT
-- r: 50
-- strokeWidth: 1
-- strokeColor: COLOR_BLACK
-- }
-- ensure signedDistanceLine(b, c, secondCornerCircle.center) == secondCornerCircle.r
-- ensure signedDistanceLine(c, d, secondCornerCircle.center) == secondCornerCircle.r
-- ensure secondCornerCircle.center[1] < c[1]
-- Circle {
-- center: closestPointLine(b, c, secondCornerCircle.center)
-- r: 6
-- fillColor: COLOR_DEBUG
-- }
-- Circle {
-- center: closestPointLine(c, d, secondCornerCircle.center)
-- r: 6
-- fillColor: COLOR_DEBUG
-- }
-- a = (?, ?)
-- b = (?, ?)
-- c = (?, ?)
-- d = (?, ?)
-- line1 = Line {
-- start: a
-- end: b
-- }
-- circle1 = Circle {
-- fillColor: COLOR_TRANSPARENT
-- strokeWidth: 1
-- strokeColor: COLOR_BLACK
-- }
-- ensure collinearOrdered(a, closestPointLine(a, b, circle1.center), b)
-- ensure vdist(closestPointLine(a, b, circle1.center), circle1.center) == circle1.r
-- line2 = Line {
-- start: b
-- end: c
-- }
-- ensure collinearOrdered(b, closestPointLine(b, c, circle1.center), c)
-- ensure vdist(closestPointLine(b, c, circle1.center), circle1.center) == circle1.r
a = (?, ?)
b = (?, ?)
c = (?, ?)
d = (?, ?)
Line {
start: a
end: b
}
Line {
start: b
end: c
}
Line {
start: c
end: d
}
Circle {
center: innerPointOffset(a, b, c, 50)
r: 6
fillColor: COLOR_DEBUG
}
}
I am guessing it has something to do with using the /try editor for a while.