Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 41d0260

Browse files
committedAug 1, 2024
Limit JSON print to 10 significant figures
1 parent 988cace commit 41d0260

File tree

3 files changed

+437
-426
lines changed

3 files changed

+437
-426
lines changed
 

‎cfspopcon/file_io.py

+11
Original file line numberDiff line numberDiff line change
@@ -121,5 +121,16 @@ def write_point_to_file(dataset: xr.Dataset, point_key: str, point_params: dict,
121121

122122
output_dir.mkdir(parents=True, exist_ok=True)
123123

124+
class RoundingFloat(float):
125+
"""A formatter to control how floats are written to JSON.
126+
127+
From: https://stackoverflow.com/questions/54370322/how-to-limit-the-number-of-float-digits-jsonencoder-produces
128+
"""
129+
130+
__repr__ = staticmethod(lambda x: f"{x:#.10g}")
131+
132+
json.encoder.c_make_encoder = None # type:ignore[attr-defined]
133+
json.encoder.float = RoundingFloat # type:ignore[attr-defined]
134+
124135
with open(output_dir / f"{point_key}.json", "w") as file:
125136
json.dump(point.to_dict(), file, indent=4, sort_keys=True)

‎tests/regression_results/AUG_SepOS_minTe.json

+31-31
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
"coords": {
44
"dim_separatrix_electron_density": {
55
"attrs": {},
6-
"data": 1.443846153846154,
6+
"data": 1.443846154,
77
"dims": []
88
},
99
"dim_separatrix_electron_temp": {
1010
"attrs": {},
11-
"data": 57.51724137931035,
11+
"data": 57.51724138,
1212
"dims": []
1313
}
1414
},
@@ -17,203 +17,203 @@
1717
"attrs": {
1818
"units": "tesla"
1919
},
20-
"data": 0.3265306124226533,
20+
"data": 0.3265306124,
2121
"dims": []
2222
},
2323
"B_t_out_mid": {
2424
"attrs": {
2525
"units": "tesla"
2626
},
27-
"data": 1.927570093457944,
27+
"data": 1.927570093,
2828
"dims": []
2929
},
3030
"SepOS_LH_transition": {
3131
"attrs": {
3232
"units": "dimensionless"
3333
},
34-
"data": 1.0025081265471087,
34+
"data": 1.002508127,
3535
"dims": []
3636
},
3737
"SepOS_MHD_limit": {
3838
"attrs": {
3939
"units": "dimensionless"
4040
},
41-
"data": 0.3560483425183738,
41+
"data": 0.3560483425,
4242
"dims": []
4343
},
4444
"SepOS_density_limit": {
4545
"attrs": {
4646
"units": "dimensionless"
4747
},
48-
"data": 0.5502074424382402,
48+
"data": 0.5502074424,
4949
"dims": []
5050
},
5151
"alpha_t": {
5252
"attrs": {
5353
"units": "dimensionless"
5454
},
55-
"data": 0.5195258259822426,
55+
"data": 0.5195258260,
5656
"dims": []
5757
},
5858
"areal_elongation": {
5959
"attrs": {
6060
"units": "dimensionless"
6161
},
62-
"data": 1.64,
62+
"data": 1.640000000,
6363
"dims": []
6464
},
6565
"critical_alpha_MHD": {
6666
"attrs": {
6767
"units": "dimensionless"
6868
},
69-
"data": 2.5486604604701935,
69+
"data": 2.548660460,
7070
"dims": []
7171
},
7272
"cylindrical_safety_factor": {
7373
"attrs": {
7474
"units": "dimensionless"
7575
},
76-
"data": 4.476700876332845,
76+
"data": 4.476700876,
7777
"dims": []
7878
},
7979
"elongation_psi95": {
8080
"attrs": {
8181
"units": "dimensionless"
8282
},
83-
"data": 1.6,
83+
"data": 1.600000000,
8484
"dims": []
8585
},
8686
"elongation_ratio_areal_to_psi95": {
8787
"attrs": {
8888
"units": "dimensionless"
8989
},
90-
"data": 1.025,
90+
"data": 1.025000000,
9191
"dims": []
9292
},
9393
"fraction_of_P_SOL_to_divertor": {
9494
"attrs": {
9595
"units": "dimensionless"
9696
},
97-
"data": 0.6,
97+
"data": 0.6000000000,
9898
"dims": []
9999
},
100100
"inverse_aspect_ratio": {
101101
"attrs": {
102102
"units": "dimensionless"
103103
},
104-
"data": 0.296969696969697,
104+
"data": 0.2969696970,
105105
"dims": []
106106
},
107107
"ion_heat_diffusivity": {
108108
"attrs": {
109109
"units": "meter ** 2 / second"
110110
},
111-
"data": 0.5,
111+
"data": 0.5000000000,
112112
"dims": []
113113
},
114114
"ion_mass": {
115115
"attrs": {
116116
"units": "unified_atomic_mass_unit"
117117
},
118-
"data": 2.0,
118+
"data": 2.000000000,
119119
"dims": []
120120
},
121121
"magnetic_field_on_axis": {
122122
"attrs": {
123123
"units": "tesla"
124124
},
125-
"data": 2.5,
125+
"data": 2.500000000,
126126
"dims": []
127127
},
128128
"major_radius": {
129129
"attrs": {
130130
"units": "meter"
131131
},
132-
"data": 1.65,
132+
"data": 1.650000000,
133133
"dims": []
134134
},
135135
"mean_ion_charge_state": {
136136
"attrs": {
137137
"units": "dimensionless"
138138
},
139-
"data": 1.0,
139+
"data": 1.000000000,
140140
"dims": []
141141
},
142142
"minor_radius": {
143143
"attrs": {
144144
"units": "meter"
145145
},
146-
"data": 0.49,
146+
"data": 0.4900000000,
147147
"dims": []
148148
},
149149
"plasma_current": {
150150
"attrs": {
151151
"units": "ampere"
152152
},
153-
"data": 800000.0,
153+
"data": 800000.0000,
154154
"dims": []
155155
},
156156
"poloidal_sound_larmor_radius": {
157157
"attrs": {
158158
"units": "millimeter"
159159
},
160-
"data": 4.4794720291352315,
160+
"data": 4.479472029,
161161
"dims": []
162162
},
163163
"separatrix_electron_density": {
164164
"attrs": {
165165
"units": "_1e19_per_cubic_metre"
166166
},
167-
"data": 1.443846153846154,
167+
"data": 1.443846154,
168168
"dims": []
169169
},
170170
"separatrix_electron_temp": {
171171
"attrs": {
172172
"units": "electron_volt"
173173
},
174-
"data": 57.51724137931035,
174+
"data": 57.51724138,
175175
"dims": []
176176
},
177177
"surface_area": {
178178
"attrs": {
179179
"units": "meter ** 2"
180180
},
181-
"data": 40.01085451537566,
181+
"data": 40.01085452,
182182
"dims": []
183183
},
184184
"sustainment_power_in_electron_channel": {
185185
"attrs": {
186186
"units": "megawatt"
187187
},
188-
"data": 0.7413990364829475,
188+
"data": 0.7413990365,
189189
"dims": []
190190
},
191191
"sustainment_power_in_ion_channel": {
192192
"attrs": {
193193
"units": "megawatt"
194194
},
195-
"data": 0.16744964593929906,
195+
"data": 0.1674496459,
196196
"dims": []
197197
},
198198
"target_electron_temp": {
199199
"attrs": {
200200
"units": "electron_volt"
201201
},
202-
"data": 10.0,
202+
"data": 10.00000000,
203203
"dims": []
204204
},
205205
"triangularity_psi95": {
206206
"attrs": {
207207
"units": "dimensionless"
208208
},
209-
"data": 0.3,
209+
"data": 0.3000000000,
210210
"dims": []
211211
},
212212
"z_effective": {
213213
"attrs": {
214214
"units": "dimensionless"
215215
},
216-
"data": 1.25,
216+
"data": 1.250000000,
217217
"dims": []
218218
}
219219
},

0 commit comments

Comments
 (0)
Please sign in to comment.