Edisk = Circle((0, 0), 1)
O = (0, 0)

Tool: Klein Disk (command KleinDisk)
Click anywhere to (re)create Klein disk
Input: A
Output: c

c = Circle(A - A, 1)

Tool: Elliptic Line (command ELine1)
Input: A, B
Output: e

d: 2 * (x(A) * y(B) - x(B) * y(A))
ra: x(A)^(2) + y(A)^(2) - 1
rb: x(B)^(2) + y(B)^(2) - 1
K: (ra * y(B) - rb * y(A), -ra * x(B) + rb * x(A)) / d
c = Circle(K, A)
C = Intersect(Circle[(0, 0), 1], c, 1)
D = Intersect(Circle[(0, 0), 1], c, 2)
e = CircleArc(K, C, D)

Tool: Elliptic Segment (command ESegment1)
Input: A, B
Output: f

d: 2 * (x(A) * y(B) - x(B) * y(A))
ra: x(A)^(2) + y(A)^(2) - 1
rb: x(B)^(2) + y(B)^(2) - 1
K: (ra * y(B) - rb * y(A), -ra * x(B) + rb * x(A)) / d
f = CircleArc(K, A, B)

Tool: Elliptic Distance (command EDistance)
Input: A, B
Output: text1

ta: 2 * atan(sqrt(x(A)^(2) + y(A)^(2)))
tb: 2 * atan(sqrt(x(B)^(2) + y(B)^(2)))
pa: atan2(x(A),y(A))
pb: atan2(x(B),y(B))
dab: acos(cos(ta) * cos(tb) + sin(ta) * sin(tb) * cos(pa - pb))
text1: "" + dab + " in"

Tool: Elliptic Circle with Center through Point (command ECircleCP)
Input: A, B
Output: c0

ta: 2 * atan(sqrt(x(A)^(2) + y(A)^(2)))
tb: 2 * atan(sqrt(x(B)^(2) + y(B)^(2)))
pa: atan2(x(A),y(A))
pb: atan2(x(B),y(B))
dab: acos(cos(ta) * cos(tb) + sin(ta) * sin(tb) * cos(pa - pb))
C1: tan((ta + dab) / 2) / tan(ta / 2) * A
C2: tan((ta - dab) / 2) / tan(ta / 2) * A
C0 = Midpoint(C1, C2)
c0 = Circle(C0, C2)

Tool: Elliptic Circle with Center and Radius (command ECircleCR)
Input: E, A, B
Output: e0

te: 2 * atan(sqrt(x(E)^(2) + y(E)^(2)))
pb: atan2(x(B),y(B))
tb: 2 * atan(sqrt(x(B)^(2) + y(B)^(2)))
pa: atan2(x(A),y(A))
ta: 2 * atan(sqrt(x(A)^(2) + y(A)^(2)))
dab: acos(cos(ta) * cos(tb) + sin(ta) * sin(tb) * cos(pa - pb))
E2: tan((te - dab) / 2) / tan(te / 2) * E
E1: tan((te + dab) / 2) / tan(te / 2) * E
E0 = Midpoint(E1, E2)
e0 = Circle(E0, E2)

Tool: MySlope
Input: A, B
Output: ma

d: 2 * (x(A) * y(B) - x(B) * y(A))
ra: x(A)^(2) + y(A)^(2) - 1
rb: x(B)^(2) + y(B)^(2) - 1
K: (ra * y(B) - rb * y(A), -ra * x(B) + rb * x(A)) / d
ma: (-(x(A) - x(K))) / (y(A) - y(K))

Tool: Elliptic Angle (command EAngle)
Input: B, A, E
Output: BAE

BAE_1: abs(atan(MySlope[A, B]) - atan(MySlope[A, E])) * 180 / π
BAE2 = Min(BAE_1, 180 - BAE_1)
BAE: "" + BAE2 + "°"