Ok,
So with default numpyro version I get
scipy.linalg.eigvalsh(cov_mtx @ cov_mtx.T)
array([3.83983388e-05, 4.65340486e-05, 6.91931066e-05, 8.96049148e-05,
1.40020191e-04, 2.04647600e-04, 2.21610850e-04, 3.13116108e-04,
4.24430683e-04, 4.34722115e-04, 6.63581353e-04, 8.59684905e-04,
1.24136592e-03, 1.94184297e-03, 2.19267430e-03, 2.73803374e-03,
8.53066369e-03, 1.06220697e-02, 1.66424332e-02, 1.76046482e-02,
5.60047983e-02])
while with ‘tiny’ add
array([0.00110434, 0.00118957, 0.00125707, 0.00192099, 0.00276472,
0.00318466, 0.00367067, 0.00396311, 0.004351 , 0.00457785,
0.00492745, 0.00531568, 0.00599618, 0.00659526, 0.00686332,
0.00895719, 0.00987089, 0.01077368, 0.01156738, 0.01361659,
0.03144244])
One can argue that the second matrix is better conditionned as the ratio lambda_max/lambda_min is 28 against 1458.