def METHOD_NAME(expected: SolvePoints, actual: SolvePoints) -> AttitudeMatrix:
    ex = np.array([list(point) for point in expected]).transpose()
    ac = np.array([list(point) for point in actual]).transpose()
    t = np.dot(ac, inv(ex))  # type: ignore[no-untyped-call]
    mask_transform = np.array(
        [[True, True, False], [True, True, False], [False, False, False]]
    )
    masked_array = np.ma.masked_array(t, ~mask_transform)  # type: ignore[var-annotated, no-untyped-call]
    no_z_component = np.zeros((3, 3))
    np.put(no_z_component, [8, 8], 1)
    transform = masked_array.filled(0) + no_z_component  # type: ignore[no-untyped-call]
    return transform.round(4).tolist()  # type: ignore[no-any-return]