https://scipy-cookbook.readthedocs.io/items/CorrelatedRandomSamples.html
I am wondering if there's a way to turn uncorrelated variables into correlated ones using covariance matrix.
The link above does so using the Cholesky decomposition for the normal distribution. But should it work for non-normal distributions such as poisson, uniform, etc?
You can use a Gaussian copula approach to combine a correlation-based dependence structure with a (pretty much) arbitrary collection of marginal distributions. This works best for continuous marginal distributions but can probably be adapted for discrete/mixed distributions too.
Let's suppose you have $n$ marginal distributions with cumulative distribution functions $F_1,\ldots,F_n : \mathbb{R}\rightarrow[0,1]$, and an $n\times n$ correlation matrix $\Sigma$. You can generate a random sample of $n$ variables with the given marginal distributions and dependence structure based on $\Sigma$ as follows:
The $Y_i$ computed in this way will be have marginal distribution $F_i$ and will have dependence structure given by the correlation matrix $\Sigma$.
Notes: