ellipse a=8/5, b=1; caustic lambda=64/169; a''^2=9216/4225, b''^2=105/169
foci at (+-c,0), c = None

=== ORBIT I (vertex at (a,0)): start (8/5, 0), initial direction (-8/105*sqrt(105), 1)
vertices:
  P1 = (8/5, 0)   ~ (1.600000, 0.000000)
  P2 = (64/65, 1/13*sqrt(105))   ~ (0.984615, 0.788227)
  P3 = (-64/65, 1/13*sqrt(105))   ~ (-0.984615, 0.788227)
  P4 = (-8/5, 0)   ~ (-1.600000, 0.000000)
  P5 = (-64/65, -1/13*sqrt(105))   ~ (-0.984615, -0.788227)
  P6 = (64/65, -1/13*sqrt(105))   ~ (0.984615, -0.788227)
contact points:
  P''1 = (1152/845, 5/169*sqrt(105))  ratio along side = 5/13
  P''2 = (0, 1/13*sqrt(105))  ratio along side = 1/2
  P''3 = (-1152/845, 5/169*sqrt(105))  ratio along side = 8/13
  P''4 = (-1152/845, -5/169*sqrt(105))  ratio along side = 5/13
  P''5 = (0, -1/13*sqrt(105))  ratio along side = 1/2
  P''6 = (1152/845, -5/169*sqrt(105))  ratio along side = 8/13
  check start_on_ellipse: True
  check all_vertices_on_ellipse: True
  check closes_after_N: True
  check direction_returns: True
  check no_earlier_return: True
  check distinct_vertices: True
  check all_sides_tangent: True
  check all_contacts_interior: True
  check convex_ccw: True
  check orbit_is_valid_member: True
outer polygon vertices:
  P'1 = (8/5, 1/21*sqrt(105))
  P'2 = (0, 13/105*sqrt(105))
  P'3 = (-8/5, 1/21*sqrt(105))
  P'4 = (-8/5, -1/21*sqrt(105))
  P'5 = (0, -13/105*sqrt(105))
  P'6 = (8/5, -1/21*sqrt(105))
antipedal (M=O) vertices:
  Q*1 = (8/5, 1/525*sqrt(105))
  Q*2 = (0, 517/2625*sqrt(105))
  Q*3 = (-8/5, 1/525*sqrt(105))
  Q*4 = (-8/5, -1/525*sqrt(105))
  Q*5 = (0, -517/2625*sqrt(105))
  Q*6 = (8/5, -1/525*sqrt(105))
areas:
  A = 336/845*sqrt(105)   ~ 4.0745271685
  A' = 96/175*sqrt(105)   ~ 5.6211844202
  A'' = 41472/142805*sqrt(105)   ~ 2.9758169684
  A_pedal_O = 43344/142805*sqrt(105)   ~ 3.1101420398
  A*_O = 2784/4375*sqrt(105)   ~ 6.5205739274
  A'*_O = 11323/14700*sqrt(105)   ~ 7.8929403757
  A'_pedal_O = 21/50*sqrt(105)   ~ 4.3037193217
products / ratios:
  A'*A*_O (k401 at O) = 801792/21875   ~ 36.6533485714
  A'*A (k106/Chavez-Caliz) = 96768/4225   ~ 22.9036686391
  A'/A'' (k113) = 28561/15120   ~ 1.8889550265
  A*A*_O = 2806272/105625   ~ 26.5682556213
  A''*A*_O = 346374144/17850625   ~ 19.4040345366
  A'*A'*_O (antipedal of outer) = 271752/6125   ~ 44.3676734694
  A*A'*_O = 804/25   ~ 32.1600000000
  A/A_pedal_O (k204 at O) = 169/129   ~ 1.3100775194
  A'*A'_pedal_O (k303a at O) = 3024/125   ~ 24.1920000000
  perimeter = 516/65

=== ORBIT II (vertex at (0,b)): start (0, 1), initial direction (-12/5, -1)
vertices:
  P1 = (0, 1)   ~ (0.000000, 1.000000)
  P2 = (-96/65, 5/13)   ~ (-1.476923, 0.384615)
  P3 = (-96/65, -5/13)   ~ (-1.476923, -0.384615)
  P4 = (0, -1)   ~ (0.000000, -1.000000)
  P5 = (96/65, -5/13)   ~ (1.476923, -0.384615)
  P6 = (96/65, 5/13)   ~ (1.476923, 0.384615)
contact points:
  P''1 = (-768/845, 105/169)  ratio along side = 8/13
  P''2 = (-96/65, 0)  ratio along side = 1/2
  P''3 = (-768/845, -105/169)  ratio along side = 5/13
  P''4 = (768/845, -105/169)  ratio along side = 8/13
  P''5 = (96/65, 0)  ratio along side = 1/2
  P''6 = (768/845, 105/169)  ratio along side = 5/13
  check start_on_ellipse: True
  check all_vertices_on_ellipse: True
  check closes_after_N: True
  check direction_returns: True
  check no_earlier_return: True
  check distinct_vertices: True
  check all_sides_tangent: True
  check all_contacts_interior: True
  check convex_ccw: True
  check orbit_is_valid_member: True
outer polygon vertices:
  P'1 = (-16/15, 1)
  P'2 = (-26/15, 0)
  P'3 = (-16/15, -1)
  P'4 = (16/15, -1)
  P'5 = (26/15, 0)
  P'6 = (16/15, 1)
antipedal (M=O) vertices:
  Q*1 = (-79/60, 1)
  Q*2 = (-757/480, 0)
  Q*3 = (-79/60, -1)
  Q*4 = (79/60, -1)
  Q*5 = (757/480, 0)
  Q*6 = (79/60, 1)
areas:
  A = 3456/845   ~ 4.0899408284
  A' = 28/5   ~ 5.6000000000
  A'' = 84672/28561   ~ 2.9646020798
  A_pedal_O = 445824/142805   ~ 3.1219074962
  A*_O = 463/80   ~ 5.7875000000
  A'*_O = 9464/1125   ~ 8.4124444444
  A'_pedal_O = 108/25   ~ 4.3200000000
products / ratios:
  A'*A*_O (k401 at O) = 3241/100   ~ 32.4100000000
  A'*A (k106/Chavez-Caliz) = 96768/4225   ~ 22.9036686391
  A'/A'' (k113) = 28561/15120   ~ 1.8889550265
  A*A*_O = 100008/4225   ~ 23.6705325444
  A''*A*_O = 2450196/142805   ~ 17.1576345366
  A'*A'*_O (antipedal of outer) = 264992/5625   ~ 47.1096888889
  A*A'*_O = 21504/625   ~ 34.4064000000
  A/A_pedal_O (k204 at O) = 169/129   ~ 1.3100775194
  A'*A'_pedal_O (k303a at O) = 3024/125   ~ 24.1920000000
  perimeter = 516/65

=== COMPARISON (k401 at M = O and at the foci) ===
  A'*A*_O (k401 at O): I = 801792/21875, II = 3241/100, DIFFERENT (diff = 371293/87500)
  A'*A (k106/Chavez-Caliz): I = 96768/4225, II = 96768/4225, EQUAL
  A'/A'' (k113): I = 28561/15120, II = 28561/15120, EQUAL
  A*A*_O: I = 2806272/105625, II = 100008/4225, DIFFERENT (diff = 23544/8125)
  A''*A*_O: I = 346374144/17850625, II = 2450196/142805, DIFFERENT (diff = 1404/625)
  A'*A'*_O (antipedal of outer): I = 271752/6125, II = 264992/5625, DIFFERENT (diff = -755768/275625)
  A*A'*_O: I = 804/25, II = 21504/625, DIFFERENT (diff = -1404/625)
  A/A_pedal_O (k204 at O): I = 169/129, II = 169/129, EQUAL
  A'*A'_pedal_O (k303a at O): I = 3024/125, II = 3024/125, EQUAL

k401 at O: difference I - II = 371293/87500  (claim: 371293/87500 = 371293/87500; match: True)
claimed values: I = 801792/21875 -> True, II = 3241/100 -> True
foci need sqrt(39), not in Q(sqrt(105)): focal products are computed in own_exact_sympy_k401.py
4a^2(4b^2-a^2) = 9216/625

VERDICT: k401 at O fails for this family iff the difference above is nonzero: True
