<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def PDCF(self):
 """Partial directed coherence factor. .. math:: \mathrm{PDCF}_{ij}(f) = \\frac{A_{ij}(f)}{\sqrt{A_{:j}'(f) \mathbf{C}^{-1} A_{:j}(f)}} References L. A. Baccalá, K. Sameshima. Partial directed coherence: a new concept in neural structure determination. Biol. Cybernetics 84(6):
 463-474, 2001. """

        A = self.A()
        # TODO: can we do that more efficiently?
        return np.abs(A / np.sqrt(np.einsum('aj..., ab..., bj... ->j...',
                                            A.conj(), self.Cinv(), A)))