flipcosmo 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. flip/__init__.py +27 -0
  2. flip/config.py +1 -0
  3. flip/covariance/__init__.py +15 -0
  4. flip/covariance/adamsblake17/__init__.py +5 -0
  5. flip/covariance/adamsblake17/coefficients.py +27 -0
  6. flip/covariance/adamsblake17/fisher_terms.py +300 -0
  7. flip/covariance/adamsblake17/flip_terms.py +78 -0
  8. flip/covariance/adamsblake17plane/__init__.py +5 -0
  9. flip/covariance/adamsblake17plane/coefficients.py +27 -0
  10. flip/covariance/adamsblake17plane/fisher_terms.py +300 -0
  11. flip/covariance/adamsblake17plane/flip_terms.py +75 -0
  12. flip/covariance/adamsblake17plane/generator.py +263 -0
  13. flip/covariance/adamsblake20/__init__.py +10 -0
  14. flip/covariance/adamsblake20/coefficients.py +46 -0
  15. flip/covariance/adamsblake20/fisher_terms.py +813 -0
  16. flip/covariance/adamsblake20/flip_terms.py +346 -0
  17. flip/covariance/carreres23/__init__.py +8 -0
  18. flip/covariance/carreres23/coefficients.py +18 -0
  19. flip/covariance/carreres23/fisher_terms.py +48 -0
  20. flip/covariance/carreres23/flip_terms.py +46 -0
  21. flip/covariance/carreres23/generator.py +132 -0
  22. flip/covariance/contraction.py +345 -0
  23. flip/covariance/cov_utils.py +437 -0
  24. flip/covariance/covariance.py +825 -0
  25. flip/covariance/emulators/__init__.py +3 -0
  26. flip/covariance/emulators/generator.py +317 -0
  27. flip/covariance/emulators/gpmatrix.py +95 -0
  28. flip/covariance/emulators/nnmatrix.py +218 -0
  29. flip/covariance/generator.py +713 -0
  30. flip/covariance/lai22/__init__.py +11 -0
  31. flip/covariance/lai22/coefficients.py +83 -0
  32. flip/covariance/lai22/fisher_terms.py +3911 -0
  33. flip/covariance/lai22/flip_terms.py +16003 -0
  34. flip/covariance/lai22/generator.py +868 -0
  35. flip/covariance/lai22/h_terms.py +2202 -0
  36. flip/covariance/lai22/symbolic.py +148 -0
  37. flip/covariance/ravouxcarreres/__init__.py +10 -0
  38. flip/covariance/ravouxcarreres/coefficients.py +46 -0
  39. flip/covariance/ravouxcarreres/fisher_terms.py +813 -0
  40. flip/covariance/ravouxcarreres/flip_terms.py +884 -0
  41. flip/covariance/ravouxcarreres/flip_terms_lmax.py +3395 -0
  42. flip/covariance/ravouxnoanchor25/__init__.py +13 -0
  43. flip/covariance/ravouxnoanchor25/coefficients.py +49 -0
  44. flip/covariance/ravouxnoanchor25/fisher_terms.py +48 -0
  45. flip/covariance/ravouxnoanchor25/flip_terms.py +54 -0
  46. flip/covariance/rcrk24/__init__.py +10 -0
  47. flip/covariance/rcrk24/coefficients.py +251 -0
  48. flip/covariance/rcrk24/fisher_terms.py +126 -0
  49. flip/covariance/rcrk24/flip_terms.py +55 -0
  50. flip/covariance/symbolic.py +1274 -0
  51. flip/data/__init__.py +3 -0
  52. flip/data/density_data.parquet +0 -0
  53. flip/data/grid_window_m.parquet +0 -0
  54. flip/data/power_spectrum_mm.txt +3 -0
  55. flip/data/power_spectrum_mt.txt +3 -0
  56. flip/data/power_spectrum_tt.txt +3 -0
  57. flip/data/style.mplstyle +86 -0
  58. flip/data/velocity_data.parquet +0 -0
  59. flip/data_vector/__init__.py +4 -0
  60. flip/data_vector/basic.py +374 -0
  61. flip/data_vector/cosmo_utils.py +6 -0
  62. flip/data_vector/galaxypv_vectors.py +480 -0
  63. flip/data_vector/snia_vectors.py +172 -0
  64. flip/data_vector/vector_utils.py +148 -0
  65. flip/fisher.py +190 -0
  66. flip/fit_utils.py +882 -0
  67. flip/fitter.py +558 -0
  68. flip/gridding.py +999 -0
  69. flip/likelihood.py +610 -0
  70. flip/plot_utils.py +477 -0
  71. flip/power_spectra/__init__.py +4 -0
  72. flip/power_spectra/class_engine.py +165 -0
  73. flip/power_spectra/cosmoprimo_engine.py +73 -0
  74. flip/power_spectra/generator.py +190 -0
  75. flip/power_spectra/models.py +124 -0
  76. flip/power_spectra/pyccl_engine.py +96 -0
  77. flip/utils.py +228 -0
  78. flipcosmo-1.0.0.dist-info/METADATA +32 -0
  79. flipcosmo-1.0.0.dist-info/RECORD +82 -0
  80. flipcosmo-1.0.0.dist-info/WHEEL +5 -0
  81. flipcosmo-1.0.0.dist-info/licenses/LICENSE +21 -0
  82. flipcosmo-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,148 @@
1
+ import multiprocessing as mp
2
+
3
+ import sympy as sy
4
+ from sympy.physics import wigner
5
+ from sympy.polys.orthopolys import legendre_poly
6
+ from sympy.printing import pycode
7
+ from sympy.simplify.fu import TR8
8
+
9
+
10
+ def simplify_h(H, max_simplification=20):
11
+ """simplification tests with https://docs.sympy.org/latest/tutorials/intro-tutorial/simplification.html
12
+ https://docs.sympy.org/latest/modules/simplify/simplify.html#ratsimpmodprime
13
+ https://docs.sympy.org/dev/modules/simplify/fu.html#sympy.simplify.fu
14
+ """
15
+ H_simplified = sy.factor(TR8(H))
16
+ i = 0
17
+ while (H_simplified != H) & (i < max_simplification):
18
+ H_simplified, H = sy.factor(TR8(H_simplified)), H_simplified
19
+ i += 1
20
+ return H_simplified
21
+
22
+
23
+ def generate_h_term(l, p, q):
24
+ theta, phi = sy.symbols("theta phi")
25
+ mu = sy.symbols("mu")
26
+ l1max = int(2 * p + 1)
27
+ l2max = int(2 * q + 1)
28
+ p = sy.Rational(p)
29
+ q = sy.Rational(q)
30
+ H = 0
31
+ for l1 in range(l1max):
32
+ for l2 in range(l2max):
33
+ h_term = (sy.Rational(4) * sy.pi) ** 2 / sy.Rational(
34
+ ((2 * l1 + 1) * (2 * l2 + 1))
35
+ )
36
+
37
+ legendre_int_l1_2p = sy.integrate(
38
+ mu ** (2 * p) * legendre_poly(l1, x=mu), mu
39
+ )
40
+ legendre_int_l2_2q = sy.integrate(
41
+ mu ** (2 * q) * legendre_poly(l2, x=mu), mu
42
+ )
43
+
44
+ a_l1_2p = sy.Rational(((2 * l1 + 1) / 2)) * (
45
+ legendre_int_l1_2p.subs(mu, 1) - legendre_int_l1_2p.subs(mu, -1)
46
+ )
47
+ a_l2_2q = sy.Rational(((2 * l2 + 1) / 2)) * (
48
+ legendre_int_l2_2q.subs(mu, 1) - legendre_int_l2_2q.subs(mu, -1)
49
+ )
50
+
51
+ h_sum = 0
52
+
53
+ for m in range(-l, l + 1):
54
+ for m1 in range(-l1, l1 + 1):
55
+ for m2 in range(-l2, l2 + 1):
56
+ sum_term = wigner.gaunt(l, l1, l2, m, m1, m2)
57
+ sum_term *= (
58
+ sy.Ynm(l, m, sy.pi - phi, 0)
59
+ * sy.Ynm(l1, m1, theta / 2, 0)
60
+ * sy.Ynm(l2, m2, theta / 2, sy.pi)
61
+ )
62
+ sum_term *= a_l1_2p * a_l2_2q
63
+ h_sum = h_sum + sum_term
64
+
65
+ H = H + h_term * h_sum
66
+ H = simplify_h(H.expand(func=True))
67
+ return H
68
+
69
+
70
+ def write_h_terms(pmax, qmax, filename="./h_terms.py", number_worker=1):
71
+ params_pool = []
72
+ for p in range(pmax + 1):
73
+ for q in range(qmax + 1):
74
+ lmax = 2 * (p + q + 1)
75
+ for l in range(0, lmax + 1, 2):
76
+ params_pool.append([l, p, q])
77
+
78
+ if number_worker == 1:
79
+ output_H_gg = [generate_h_term(*param) for param in params_pool]
80
+ else:
81
+ with mp.Pool(number_worker) as pool:
82
+ output_H_gg = pool.starmap(generate_h_term, params_pool)
83
+
84
+ params_pool = []
85
+ for p in range(pmax + 1):
86
+ lmax = 2 * (p + 1)
87
+ for l in range(1, lmax + 1, 2):
88
+ params_pool.append([l, p, 1 / 2])
89
+
90
+ if number_worker == 1:
91
+ output_H_gv = [generate_h_term(*param) for param in params_pool]
92
+ else:
93
+ with mp.Pool(number_worker) as pool:
94
+ output_H_gv = pool.starmap(generate_h_term, params_pool)
95
+
96
+ params_pool = []
97
+ lmax = 2
98
+ for l in range(0, lmax + 1, 2):
99
+ params_pool.append([l, 1 / 2, 1 / 2])
100
+
101
+ if number_worker == 1:
102
+ output_H_vv = [generate_h_term(*param) for param in params_pool]
103
+ else:
104
+ with mp.Pool(number_worker) as pool:
105
+ output_H_vv = pool.starmap(generate_h_term, params_pool)
106
+
107
+ f = open(filename, "w")
108
+ f.write("import numpy as np\n")
109
+ f.write("\n")
110
+ f.write("\n")
111
+ f.write("# Density-Density \n")
112
+ f.write("\n")
113
+ i = 0
114
+ for p in range(pmax + 1):
115
+ for q in range(qmax + 1):
116
+ lmax = 2 * (p + q + 1)
117
+ for l in range(0, lmax + 1, 2):
118
+ H_txt = pycode(output_H_gg[i]).replace("math.", "np.")
119
+ i = i + 1
120
+ f.write(f"def H_gg_l{l}_p{p}_q{q}(theta,phi):\n")
121
+ f.write(f" return({H_txt})\n")
122
+ f.write("\n")
123
+
124
+ f.write("\n")
125
+ f.write("# Density-Velocity \n")
126
+ i = 0
127
+ for p in range(pmax + 1):
128
+ lmax = 2 * (p + 1)
129
+ for l in range(1, lmax + 1, 2):
130
+ H_txt = pycode(output_H_gv[i]).replace("math.", "np.")
131
+ i = i + 1
132
+ f.write(f"def H_gv_l{l}_p{p}(theta,phi):\n")
133
+ f.write(f" return({H_txt})\n")
134
+ f.write("\n")
135
+
136
+ f.write("\n")
137
+ f.write("# Velocity-Velocity \n")
138
+ lmax = 2
139
+ i = 0
140
+ for l in range(0, lmax + 1, 2):
141
+ H_txt = pycode(output_H_vv[i]).replace("math.", "np.")
142
+ i = i + 1
143
+ f.write(f"def H_vv_l{l}(theta,phi):\n")
144
+ f.write(f" return({H_txt})\n")
145
+ f.write("\n")
146
+
147
+ f.write("\n")
148
+ f.close()
@@ -0,0 +1,10 @@
1
+ _variant = [None, "baseline", "nobeta"]
2
+
3
+ _free_par = {
4
+ "fs8": ["velocity@all", "density@nobeta"],
5
+ "bs8": "density@all",
6
+ "sigv": "velocity@all",
7
+ "beta_f": "density@baseline",
8
+ }
9
+
10
+ _coordinate_keys = ["ra", "dec", "rcom_zobs"]
@@ -0,0 +1,46 @@
1
+ def get_coefficients(
2
+ parameter_values_dict,
3
+ model_kind,
4
+ variant=None,
5
+ redshift_dict=None,
6
+ ):
7
+ coefficients_dict = {}
8
+ if model_kind in ["density", "full", "density_velocity"]:
9
+ if variant == "nobeta":
10
+ coefficients_dict["gg"] = [
11
+ parameter_values_dict["bs8"] ** 2,
12
+ parameter_values_dict["bs8"] * parameter_values_dict["fs8"],
13
+ parameter_values_dict["fs8"] ** 2,
14
+ ]
15
+ else:
16
+ coefficients_dict["gg"] = [
17
+ parameter_values_dict["bs8"] ** 2,
18
+ parameter_values_dict["bs8"] ** 2 * parameter_values_dict["beta_f"],
19
+ parameter_values_dict["bs8"] ** 2
20
+ * parameter_values_dict["beta_f"] ** 2,
21
+ ]
22
+ if model_kind in ["full"]:
23
+ if variant == "nobeta":
24
+ coefficients_dict["gv"] = [
25
+ parameter_values_dict["bs8"] * parameter_values_dict["fs8"],
26
+ parameter_values_dict["fs8"] ** 2,
27
+ ]
28
+ else:
29
+ coefficients_dict["gv"] = [
30
+ parameter_values_dict["bs8"] * parameter_values_dict["fs8"],
31
+ parameter_values_dict["bs8"]
32
+ * parameter_values_dict["fs8"]
33
+ * parameter_values_dict["beta_f"],
34
+ ]
35
+ if model_kind in ["velocity", "full", "density_velocity"]:
36
+ coefficients_dict["vv"] = [parameter_values_dict["fs8"] ** 2]
37
+ return coefficients_dict
38
+
39
+
40
+ def get_diagonal_coefficients(parameter_values_dict, model_kind):
41
+ coefficients_dict = {}
42
+ if model_kind in ["density", "full", "density_velocity"]:
43
+ coefficients_dict["gg"] = 0.0
44
+ if model_kind in ["velocity", "full", "density_velocity"]:
45
+ coefficients_dict["vv"] = parameter_values_dict["sigv"] ** 2
46
+ return coefficients_dict