def U3(self):
    if self.iden:
        return (0, 0, 0)
    A = (np.sin(self.a) ** 2)
    (nx, ny, nz) = (self.v[(0, 0)], self.v[(0, 1)], self.v[(0, 2)])
    part = ((nx ** 2) + (ny ** 2))
    vd = (np.cos(self.a) + ((1j * nz) * np.sin(self.a)))
    vo = (((1j * nx) - ny) * np.sin(self.a))
    if (abs((part - 0)) <= 1e-10):
        theta = 0
        sigma = (1j * np.log(vd)).real
        delta = 0
    else:
        theta = (2 * np.arcsin(np.sqrt((((nx ** 2) + (ny ** 2)) * A))))
        aleph = (((- ny) * np.sin(self.a)) / np.sin((theta / 2)))
        beta = ((nx * np.sin(self.a)) / np.sin((theta / 2)))
        delta = ((- 1j) * np.log((vo / np.sin((theta / 2))))).real
        sigma = (1j * np.log((vd / np.cos((theta / 2))))).real
    return (theta, (sigma + delta), (sigma - delta))
def U3(self):
    if self.iden:
        return (0, 0, 0)
    A = (np.sin(self.a) ** 2)
    (nx, ny, nz) = (self.v[(0, 0)], self.v[(0, 1)], self.v[(0, 2)])
    part = ((nx ** 2) + (ny ** 2))
    vd = (np.cos(self.a) + ((1j * nz) * np.sin(self.a)))
    vo = (((1j * nx) - ny) * np.sin(self.a))
    if (abs((part - 0)) <= 1e-10):
        theta = 0
        sigma = (1j * np.log(vd)).real
        delta = 0
    else:
        theta = (2 * np.arcsin(np.sqrt((((nx ** 2) + (ny ** 2)) * A))))
        aleph = (((- ny) * np.sin(self.a)) / np.sin((theta / 2)))
        beta = ((nx * np.sin(self.a)) / np.sin((theta / 2)))
        delta = ((- 1j) * np.log((vo / np.sin((theta / 2))))).real
        sigma = (1j * np.log((vd / np.cos((theta / 2))))).real
    return (theta, (sigma + delta), (sigma - delta))