def reflection_from_matrix(matrix):
M = numpy.array(matrix, dtype=numpy.float64, copy=False)<EOL>w, V = numpy.linalg.eig(M[:<NUM_LIT:3>, :<NUM_LIT:3>])<EOL>i = numpy.where(abs(numpy.real(w) + <NUM_LIT:1.0>) < <NUM_LIT>)[<NUM_LIT:0>]<EOL>if not len(i):<EOL><INDENT>raise ValueError("<STR_LIT>")<EOL><DEDENT>normal = numpy.real(V[:, i[<NUM_LIT:0>]]).squeeze()<EOL>w, V = numpy.linalg.eig(M)<EOL>i = numpy.where(abs(numpy.real(w) - <NUM_LIT:1.0>) < <NUM_LIT>)[<NUM_LIT:0>]<EOL>if not len(i):<EOL><INDENT>raise ValueError("<STR_LIT>")<EOL><DEDENT>point = numpy.real(V[:, i[-<NUM_LIT:1>]]).squeeze()<EOL>point /= point[<NUM_LIT:3>]<EOL>return point, normal<EOL>
Return mirror plane point and normal vector from reflection matrix.

    >>> v0 = numpy.random.random(3) - 0.5
    >>> v1 = numpy.random.random(3) - 0.5
    >>> M0 = reflection_matrix(v0, v1)
    >>> point, normal = reflection_from_matrix(M0)
    >>> M1 = reflection_matrix(point, normal)
    >>> is_same_transform(M0, M1)
    True