Arrow label positioning code, label shoots off into hyperspace, has anyone done this before?

Here is some explanation behind the theoretical math.
Here is the relevant code, short and sweet:
def updateTextPosition(self): from geom_tools import mag2D from PyQt5.QtGui import QTransform src = self.sourcePoint() tar = self.targetPoint() if src and tar: dx = src.posDelta() dy = tar.posDelta() #c = self.pointCenter() x = src.pos() # c y = tar.pos() #  c #dc = c  self.lastPointCenter() if x != y: x0 = x  dx y0 = y  dy magx = mag2D(x0) magy = mag2D(y0) T = QTransform(x.x(), y.x(), x.y(), y.y(), 0, 0) #dc.x(), dc.y()) for label in self.allLabels(): p = label.pos() # c u = QPointF.dotProduct(x0, p) v = QPointF.dotProduct(y0, p) if abs(magx) > 0: u /= magx if abs(magy) > 0: v /= magy p = QPointF(u, v) label.setPos(T.map(p))
As you can see I've also tried keeping the positioning relative to the arrow's controlpoint center.
self.sourcePoint() returns the controlpoint that touches the node at the source end of the arrow and likewise for self.targetPoint().
So all I'm trying to do is do a properly proportioned transform of each labels text.
Before I did it by storing textpositioning info for each of the labels, very inelegant and that is now buggy, so I'm coming up with a simpler solution.
Both the labels and the control points are parented by self (Arrow).
"Hyperspace" is a good description and it whitesout the QGraphicsScene.
def updateTextPosition(self): line = self.labelPosLine() line0 = self.lastLabelPosLine() p = line.p1() q = line.p2() p0 = line0.p1() q0 = line0.p2() dv = ((pp0) + (q  q0))/2 for label in self.allLabels(): label.setPos(label.pos() + dv)
Averaging looks okay but is not quite right! The arrow will sometimes swap sides when you rotate an arrow around one of its ends 180 degrees.

Yeah, I know I'm doing it wrong. Just now discovered. I will post a solution to this.