'weighted covariance of data if data is 2 dimensional
assumes variables in columns and observations in rows
uses default ddof'

@OneTimeProperty
def cov(self):

    cov_ = np.dot((self.weights * self.demeaned.T), self.demeaned)
    cov_ /= (self.sum_weights - self.ddof)
    return cov_
