def adj(self,X): 'adjoint linear operator' assert np.iscomplexobj(Y) == self.cpx,'wrong value for cpx in constructor' return np.einsum('...jk,mj->...mk',X,self.S.T.conj())