polytope-python 1.0.31__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 (49) hide show
  1. polytope_feature/__init__.py +1 -0
  2. polytope_feature/datacube/__init__.py +1 -0
  3. polytope_feature/datacube/backends/__init__.py +1 -0
  4. polytope_feature/datacube/backends/datacube.py +171 -0
  5. polytope_feature/datacube/backends/fdb.py +399 -0
  6. polytope_feature/datacube/backends/mock.py +71 -0
  7. polytope_feature/datacube/backends/xarray.py +142 -0
  8. polytope_feature/datacube/datacube_axis.py +332 -0
  9. polytope_feature/datacube/index_tree_pb2.py +27 -0
  10. polytope_feature/datacube/tensor_index_tree.py +228 -0
  11. polytope_feature/datacube/transformations/__init__.py +1 -0
  12. polytope_feature/datacube/transformations/datacube_cyclic/__init__.py +1 -0
  13. polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py +171 -0
  14. polytope_feature/datacube/transformations/datacube_mappers/__init__.py +1 -0
  15. polytope_feature/datacube/transformations/datacube_mappers/datacube_mappers.py +141 -0
  16. polytope_feature/datacube/transformations/datacube_mappers/mapper_types/__init__.py +5 -0
  17. polytope_feature/datacube/transformations/datacube_mappers/mapper_types/healpix.py +147 -0
  18. polytope_feature/datacube/transformations/datacube_mappers/mapper_types/healpix_nested.py +229 -0
  19. polytope_feature/datacube/transformations/datacube_mappers/mapper_types/local_regular.py +95 -0
  20. polytope_feature/datacube/transformations/datacube_mappers/mapper_types/octahedral.py +7896 -0
  21. polytope_feature/datacube/transformations/datacube_mappers/mapper_types/reduced_gaussian.py +1459 -0
  22. polytope_feature/datacube/transformations/datacube_mappers/mapper_types/reduced_ll.py +5128 -0
  23. polytope_feature/datacube/transformations/datacube_mappers/mapper_types/regular.py +75 -0
  24. polytope_feature/datacube/transformations/datacube_merger/__init__.py +1 -0
  25. polytope_feature/datacube/transformations/datacube_merger/datacube_merger.py +95 -0
  26. polytope_feature/datacube/transformations/datacube_reverse/__init__.py +1 -0
  27. polytope_feature/datacube/transformations/datacube_reverse/datacube_reverse.py +65 -0
  28. polytope_feature/datacube/transformations/datacube_transformations.py +96 -0
  29. polytope_feature/datacube/transformations/datacube_type_change/__init__.py +1 -0
  30. polytope_feature/datacube/transformations/datacube_type_change/datacube_type_change.py +124 -0
  31. polytope_feature/datacube/tree_encoding.py +132 -0
  32. polytope_feature/engine/__init__.py +1 -0
  33. polytope_feature/engine/engine.py +19 -0
  34. polytope_feature/engine/hullslicer.py +316 -0
  35. polytope_feature/options.py +77 -0
  36. polytope_feature/polytope.py +71 -0
  37. polytope_feature/shapes.py +405 -0
  38. polytope_feature/utility/__init__.py +0 -0
  39. polytope_feature/utility/combinatorics.py +48 -0
  40. polytope_feature/utility/exceptions.py +45 -0
  41. polytope_feature/utility/geometry.py +26 -0
  42. polytope_feature/utility/list_tools.py +41 -0
  43. polytope_feature/utility/profiling.py +14 -0
  44. polytope_feature/version.py +1 -0
  45. polytope_python-1.0.31.dist-info/LICENSE +201 -0
  46. polytope_python-1.0.31.dist-info/METADATA +21 -0
  47. polytope_python-1.0.31.dist-info/RECORD +49 -0
  48. polytope_python-1.0.31.dist-info/WHEEL +5 -0
  49. polytope_python-1.0.31.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1459 @@
1
+ import logging
2
+ import math
3
+
4
+ from .....utility.list_tools import bisect_left_cmp, bisect_right_cmp
5
+ from ..datacube_mappers import DatacubeMapper
6
+
7
+
8
+ class ReducedGaussianGridMapper(DatacubeMapper):
9
+ def __init__(self, base_axis, mapped_axes, resolution, md5_hash=None, local_area=[], axis_reversed=None):
10
+ # TODO: if local area is not empty list, raise NotImplemented
11
+ self._mapped_axes = mapped_axes
12
+ self._base_axis = base_axis
13
+ self._resolution = resolution
14
+ self._first_axis_vals = self.first_axis_vals()
15
+ self._second_axis_spacing = {}
16
+ self._axis_reversed = {mapped_axes[0]: True, mapped_axes[1]: False}
17
+ if self._axis_reversed[mapped_axes[1]]:
18
+ raise NotImplementedError("Octahedral grid with second axis in decreasing order is not supported")
19
+ if not self._axis_reversed[mapped_axes[0]]:
20
+ raise NotImplementedError("Octahedral grid with first axis in increasing order is not supported")
21
+ self.compressed_grid_axes = [self._mapped_axes[1]]
22
+ if md5_hash is not None:
23
+ self.md5_hash = md5_hash
24
+ else:
25
+ self.md5_hash = _md5_hash.get(resolution, None)
26
+
27
+ def gauss_first_guess(self):
28
+ i = 0
29
+ gvals = [
30
+ 2.4048255577e0,
31
+ 5.5200781103e0,
32
+ 8.6537279129e0,
33
+ 11.7915344391e0,
34
+ 14.9309177086e0,
35
+ 18.0710639679e0,
36
+ 21.2116366299e0,
37
+ 24.3524715308e0,
38
+ 27.4934791320e0,
39
+ 30.6346064684e0,
40
+ 33.7758202136e0,
41
+ 36.9170983537e0,
42
+ 40.0584257646e0,
43
+ 43.1997917132e0,
44
+ 46.3411883717e0,
45
+ 49.4826098974e0,
46
+ 52.6240518411e0,
47
+ 55.7655107550e0,
48
+ 58.9069839261e0,
49
+ 62.0484691902e0,
50
+ 65.1899648002e0,
51
+ 68.3314693299e0,
52
+ 71.4729816036e0,
53
+ 74.6145006437e0,
54
+ 77.7560256304e0,
55
+ 80.8975558711e0,
56
+ 84.0390907769e0,
57
+ 87.1806298436e0,
58
+ 90.3221726372e0,
59
+ 93.4637187819e0,
60
+ 96.6052679510e0,
61
+ 99.7468198587e0,
62
+ 102.8883742542e0,
63
+ 106.0299309165e0,
64
+ 109.1714896498e0,
65
+ 112.3130502805e0,
66
+ 115.4546126537e0,
67
+ 118.5961766309e0,
68
+ 121.7377420880e0,
69
+ 124.8793089132e0,
70
+ 128.0208770059e0,
71
+ 131.1624462752e0,
72
+ 134.3040166383e0,
73
+ 137.4455880203e0,
74
+ 140.5871603528e0,
75
+ 143.7287335737e0,
76
+ 146.8703076258e0,
77
+ 150.0118824570e0,
78
+ 153.1534580192e0,
79
+ 156.2950342685e0,
80
+ ]
81
+
82
+ numVals = len(gvals)
83
+ vals = []
84
+ for i in range(self._resolution):
85
+ if i < numVals:
86
+ vals.append(gvals[i])
87
+ else:
88
+ vals.append(vals[i - 1] + math.pi)
89
+ return vals
90
+
91
+ def get_precomputed_values_N320(self):
92
+ lats = [
93
+ -89.78487690721863,
94
+ -89.50620273820637,
95
+ -89.22588284761157,
96
+ -88.94519111831644,
97
+ -88.66435834182293,
98
+ -88.38345731224797,
99
+ -88.10251813893724,
100
+ -87.82155550711056,
101
+ -87.54057742641116,
102
+ -87.25958863483953,
103
+ -86.97859211359663,
104
+ -86.69758983192202,
105
+ -86.41658314273641,
106
+ -86.13557300618399,
107
+ -85.85456012248531,
108
+ -85.57354501429673,
109
+ -85.29252807962695,
110
+ -85.01150962689766,
111
+ -84.73048989880277,
112
+ -84.44946908892904,
113
+ -84.16844735357665,
114
+ -83.88742482032309,
115
+ -83.60640159433007,
116
+ -83.32537776305915,
117
+ -83.04435339984514,
118
+ -82.76332856663693,
119
+ -82.48230331612486,
120
+ -82.20127769340762,
121
+ -81.92025173731213,
122
+ -81.63922548144693,
123
+ -81.35819895505040,
124
+ -81.07717218367863,
125
+ -80.79614518976737,
126
+ -80.51511799309434,
127
+ -80.23409061116114,
128
+ -79.95306305951186,
129
+ -79.67203535199914,
130
+ -79.39100750100822,
131
+ -79.10997951764607,
132
+ -78.82895141190238,
133
+ -78.54792319278644,
134
+ -78.26689486844451,
135
+ -77.98586644626094,
136
+ -77.70483793294494,
137
+ -77.42380933460623,
138
+ -77.14278065682046,
139
+ -76.86175190468626,
140
+ -76.58072308287524,
141
+ -76.29969419567588,
142
+ -76.01866524703182,
143
+ -75.73763624057599,
144
+ -75.45660717966057,
145
+ -75.17557806738355,
146
+ -74.89454890661246,
147
+ -74.61351970000541,
148
+ -74.33249045002979,
149
+ -74.05146115897912,
150
+ -73.77043182898812,
151
+ -73.48940246204617,
152
+ -73.20837306000952,
153
+ -72.92734362461226,
154
+ -72.64631415747613,
155
+ -72.36528466011954,
156
+ -72.08425513396567,
157
+ -71.80322558034980,
158
+ -71.52219600052597,
159
+ -71.24116639567315,
160
+ -70.96013676690066,
161
+ -70.67910711525340,
162
+ -70.39807744171628,
163
+ -70.11704774721858,
164
+ -69.83601803263780,
165
+ -69.55498829880318,
166
+ -69.27395854649907,
167
+ -68.99292877646779,
168
+ -68.71189898941257,
169
+ -68.43086918599992,
170
+ -68.14983936686214,
171
+ -67.86880953259940,
172
+ -67.58777968378180,
173
+ -67.30674982095123,
174
+ -67.02571994462305,
175
+ -66.74469005528775,
176
+ -66.46366015341239,
177
+ -66.18263023944205,
178
+ -65.90160031380103,
179
+ -65.62057037689407,
180
+ -65.33954042910749,
181
+ -65.05851047081022,
182
+ -64.77748050235478,
183
+ -64.49645052407814,
184
+ -64.21542053630260,
185
+ -63.93439053933660,
186
+ -63.65336053347541,
187
+ -63.37233051900186,
188
+ -63.09130049618697,
189
+ -62.81027046529061,
190
+ -62.52924042656195,
191
+ -62.24821038024017,
192
+ -61.96718032655483,
193
+ -61.68615026572643,
194
+ -61.40512019796673,
195
+ -61.12409012347936,
196
+ -60.84306004246005,
197
+ -60.56202995509710,
198
+ -60.28099986157171,
199
+ -59.99996976205827,
200
+ -59.71893965672474,
201
+ -59.43790954573291,
202
+ -59.15687942923870,
203
+ -58.87584930739236,
204
+ -58.59481918033887,
205
+ -58.31378904821798,
206
+ -58.03275891116461,
207
+ -57.75172876930898,
208
+ -57.47069862277679,
209
+ -57.18966847168948,
210
+ -56.90863831616438,
211
+ -56.62760815631488,
212
+ -56.34657799225056,
213
+ -56.06554782407743,
214
+ -55.78451765189804,
215
+ -55.50348747581155,
216
+ -55.22245729591398,
217
+ -54.94142711229829,
218
+ -54.66039692505446,
219
+ -54.37936673426967,
220
+ -54.09833654002838,
221
+ -53.81730634241245,
222
+ -53.53627614150120,
223
+ -53.25524593737158,
224
+ -52.97421573009819,
225
+ -52.69318551975338,
226
+ -52.41215530640741,
227
+ -52.13112509012841,
228
+ -51.85009487098255,
229
+ -51.56906464903404,
230
+ -51.28803442434530,
231
+ -51.00700419697692,
232
+ -50.72597396698776,
233
+ -50.44494373443509,
234
+ -50.16391349937449,
235
+ -49.88288326186004,
236
+ -49.60185302194436,
237
+ -49.32082277967856,
238
+ -49.03979253511243,
239
+ -48.75876228829437,
240
+ -48.47773203927152,
241
+ -48.19670178808972,
242
+ -47.91567153479365,
243
+ -47.63464127942677,
244
+ -47.35361102203147,
245
+ -47.07258076264900,
246
+ -46.79155050131955,
247
+ -46.51052023808231,
248
+ -46.22948997297545,
249
+ -45.94845970603621,
250
+ -45.66742943730089,
251
+ -45.38639916680486,
252
+ -45.10536889458269,
253
+ -44.82433862066802,
254
+ -44.54330834509373,
255
+ -44.26227806789189,
256
+ -43.98124778909381,
257
+ -43.70021750873003,
258
+ -43.41918722683038,
259
+ -43.13815694342401,
260
+ -42.85712665853937,
261
+ -42.57609637220426,
262
+ -42.29506608444584,
263
+ -42.01403579529062,
264
+ -41.73300550476453,
265
+ -41.45197521289295,
266
+ -41.17094491970063,
267
+ -40.88991462521181,
268
+ -40.60888432945017,
269
+ -40.32785403243889,
270
+ -40.04682373420064,
271
+ -39.76579343475757,
272
+ -39.48476313413139,
273
+ -39.20373283234334,
274
+ -38.92270252941418,
275
+ -38.64167222536426,
276
+ -38.36064192021350,
277
+ -38.07961161398138,
278
+ -37.79858130668703,
279
+ -37.51755099834911,
280
+ -37.23652068898597,
281
+ -36.95549037861555,
282
+ -36.67446006725543,
283
+ -36.39342975492286,
284
+ -36.11239944163471,
285
+ -35.83136912740756,
286
+ -35.55033881225761,
287
+ -35.26930849620082,
288
+ -34.98827817925277,
289
+ -34.70724786142878,
290
+ -34.42621754274384,
291
+ -34.14518722321272,
292
+ -33.86415690284984,
293
+ -33.58312658166939,
294
+ -33.30209625968529,
295
+ -33.02106593691121,
296
+ -32.74003561336056,
297
+ -32.45900528904648,
298
+ -32.17797496398192,
299
+ -31.89694463817959,
300
+ -31.61591431165194,
301
+ -31.33488398441122,
302
+ -31.05385365646946,
303
+ -30.77282332783850,
304
+ -30.49179299852995,
305
+ -30.21076266855524,
306
+ -29.92973233792557,
307
+ -29.64870200665200,
308
+ -29.36767167474536,
309
+ -29.08664134221633,
310
+ -28.80561100907540,
311
+ -28.52458067533288,
312
+ -28.24355034099893,
313
+ -27.96252000608353,
314
+ -27.68148967059651,
315
+ -27.40045933454753,
316
+ -27.11942899794612,
317
+ -26.83839866080164,
318
+ -26.55736832312331,
319
+ -26.27633798492022,
320
+ -25.99530764620129,
321
+ -25.71427730697534,
322
+ -25.43324696725105,
323
+ -25.15221662703694,
324
+ -24.87118628634144,
325
+ -24.59015594517284,
326
+ -24.30912560353932,
327
+ -24.02809526144893,
328
+ -23.74706491890961,
329
+ -23.46603457592919,
330
+ -23.18500423251539,
331
+ -22.90397388867583,
332
+ -22.62294354441799,
333
+ -22.34191319974931,
334
+ -22.06088285467707,
335
+ -21.77985250920850,
336
+ -21.49882216335069,
337
+ -21.21779181711067,
338
+ -20.93676147049538,
339
+ -20.65573112351166,
340
+ -20.37470077616624,
341
+ -20.09367042846582,
342
+ -19.81264008041698,
343
+ -19.53160973202621,
344
+ -19.25057938329996,
345
+ -18.96954903424457,
346
+ -18.68851868486632,
347
+ -18.40748833517141,
348
+ -18.12645798516599,
349
+ -17.84542763485610,
350
+ -17.56439728424774,
351
+ -17.28336693334685,
352
+ -17.00233658215929,
353
+ -16.72130623069085,
354
+ -16.44027587894727,
355
+ -16.15924552693424,
356
+ -15.87821517465737,
357
+ -15.59718482212223,
358
+ -15.31615446933432,
359
+ -15.03512411629909,
360
+ -14.75409376302196,
361
+ -14.47306340950825,
362
+ -14.19203305576328,
363
+ -13.91100270179228,
364
+ -13.62997234760047,
365
+ -13.34894199319299,
366
+ -13.06791163857496,
367
+ -12.78688128375144,
368
+ -12.50585092872746,
369
+ -12.22482057350799,
370
+ -11.94379021809798,
371
+ -11.66275986250232,
372
+ -11.38172950672589,
373
+ -11.10069915077350,
374
+ -10.81966879464995,
375
+ -10.53863843836000,
376
+ -10.25760808190837,
377
+ -9.97657772529974,
378
+ -9.69554736853877,
379
+ -9.41451701163010,
380
+ -9.13348665457831,
381
+ -8.85245629738798,
382
+ -8.57142594006364,
383
+ -8.29039558260981,
384
+ -8.00936522503099,
385
+ -7.72833486733163,
386
+ -7.44730450951617,
387
+ -7.16627415158902,
388
+ -6.88524379355459,
389
+ -6.60421343541725,
390
+ -6.32318307718135,
391
+ -6.04215271885122,
392
+ -5.76112236043118,
393
+ -5.48009200192553,
394
+ -5.19906164333854,
395
+ -4.91803128467449,
396
+ -4.63700092593762,
397
+ -4.35597056713217,
398
+ -4.07494020826237,
399
+ -3.79390984933241,
400
+ -3.51287949034651,
401
+ -3.23184913130884,
402
+ -2.95081877222359,
403
+ -2.66978841309493,
404
+ -2.38875805392700,
405
+ -2.10772769472398,
406
+ -1.82669733549000,
407
+ -1.54566697622920,
408
+ -1.26463661694571,
409
+ -0.98360625764368,
410
+ -0.70257589832721,
411
+ -0.42154553900045,
412
+ -0.14051517966750,
413
+ 0.14051517966750,
414
+ 0.42154553900045,
415
+ 0.70257589832721,
416
+ 0.98360625764368,
417
+ 1.26463661694571,
418
+ 1.54566697622920,
419
+ 1.82669733549000,
420
+ 2.10772769472398,
421
+ 2.38875805392700,
422
+ 2.66978841309493,
423
+ 2.95081877222359,
424
+ 3.23184913130884,
425
+ 3.51287949034651,
426
+ 3.79390984933241,
427
+ 4.07494020826237,
428
+ 4.35597056713217,
429
+ 4.63700092593762,
430
+ 4.91803128467449,
431
+ 5.19906164333854,
432
+ 5.48009200192553,
433
+ 5.76112236043118,
434
+ 6.04215271885122,
435
+ 6.32318307718135,
436
+ 6.60421343541725,
437
+ 6.88524379355459,
438
+ 7.16627415158902,
439
+ 7.44730450951617,
440
+ 7.72833486733163,
441
+ 8.00936522503099,
442
+ 8.29039558260981,
443
+ 8.57142594006364,
444
+ 8.85245629738798,
445
+ 9.13348665457831,
446
+ 9.41451701163010,
447
+ 9.69554736853877,
448
+ 9.97657772529974,
449
+ 10.25760808190837,
450
+ 10.53863843836000,
451
+ 10.81966879464995,
452
+ 11.10069915077350,
453
+ 11.38172950672589,
454
+ 11.66275986250232,
455
+ 11.94379021809798,
456
+ 12.22482057350799,
457
+ 12.50585092872746,
458
+ 12.78688128375144,
459
+ 13.06791163857496,
460
+ 13.34894199319299,
461
+ 13.62997234760047,
462
+ 13.91100270179228,
463
+ 14.19203305576328,
464
+ 14.47306340950825,
465
+ 14.75409376302196,
466
+ 15.03512411629909,
467
+ 15.31615446933432,
468
+ 15.59718482212223,
469
+ 15.87821517465737,
470
+ 16.15924552693424,
471
+ 16.44027587894727,
472
+ 16.72130623069085,
473
+ 17.00233658215929,
474
+ 17.28336693334685,
475
+ 17.56439728424774,
476
+ 17.84542763485610,
477
+ 18.12645798516599,
478
+ 18.40748833517141,
479
+ 18.68851868486632,
480
+ 18.96954903424457,
481
+ 19.25057938329996,
482
+ 19.53160973202621,
483
+ 19.81264008041698,
484
+ 20.09367042846582,
485
+ 20.37470077616624,
486
+ 20.65573112351166,
487
+ 20.93676147049538,
488
+ 21.21779181711067,
489
+ 21.49882216335069,
490
+ 21.77985250920850,
491
+ 22.06088285467707,
492
+ 22.34191319974931,
493
+ 22.62294354441799,
494
+ 22.90397388867583,
495
+ 23.18500423251539,
496
+ 23.46603457592919,
497
+ 23.74706491890961,
498
+ 24.02809526144893,
499
+ 24.30912560353932,
500
+ 24.59015594517284,
501
+ 24.87118628634144,
502
+ 25.15221662703694,
503
+ 25.43324696725105,
504
+ 25.71427730697534,
505
+ 25.99530764620129,
506
+ 26.27633798492022,
507
+ 26.55736832312331,
508
+ 26.83839866080164,
509
+ 27.11942899794612,
510
+ 27.40045933454753,
511
+ 27.68148967059651,
512
+ 27.96252000608353,
513
+ 28.24355034099893,
514
+ 28.52458067533288,
515
+ 28.80561100907540,
516
+ 29.08664134221633,
517
+ 29.36767167474536,
518
+ 29.64870200665200,
519
+ 29.92973233792557,
520
+ 30.21076266855524,
521
+ 30.49179299852995,
522
+ 30.77282332783850,
523
+ 31.05385365646946,
524
+ 31.33488398441122,
525
+ 31.61591431165194,
526
+ 31.89694463817959,
527
+ 32.17797496398192,
528
+ 32.45900528904648,
529
+ 32.74003561336056,
530
+ 33.02106593691121,
531
+ 33.30209625968529,
532
+ 33.58312658166939,
533
+ 33.86415690284984,
534
+ 34.14518722321272,
535
+ 34.42621754274384,
536
+ 34.70724786142878,
537
+ 34.98827817925277,
538
+ 35.26930849620082,
539
+ 35.55033881225761,
540
+ 35.83136912740756,
541
+ 36.11239944163471,
542
+ 36.39342975492286,
543
+ 36.67446006725543,
544
+ 36.95549037861555,
545
+ 37.23652068898597,
546
+ 37.51755099834911,
547
+ 37.79858130668703,
548
+ 38.07961161398138,
549
+ 38.36064192021350,
550
+ 38.64167222536426,
551
+ 38.92270252941418,
552
+ 39.20373283234334,
553
+ 39.48476313413139,
554
+ 39.76579343475757,
555
+ 40.04682373420064,
556
+ 40.32785403243889,
557
+ 40.60888432945017,
558
+ 40.88991462521181,
559
+ 41.17094491970063,
560
+ 41.45197521289295,
561
+ 41.73300550476453,
562
+ 42.01403579529062,
563
+ 42.29506608444584,
564
+ 42.57609637220426,
565
+ 42.85712665853937,
566
+ 43.13815694342401,
567
+ 43.41918722683038,
568
+ 43.70021750873003,
569
+ 43.98124778909381,
570
+ 44.26227806789189,
571
+ 44.54330834509373,
572
+ 44.82433862066802,
573
+ 45.10536889458269,
574
+ 45.38639916680486,
575
+ 45.66742943730089,
576
+ 45.94845970603621,
577
+ 46.22948997297545,
578
+ 46.51052023808231,
579
+ 46.79155050131955,
580
+ 47.07258076264900,
581
+ 47.35361102203147,
582
+ 47.63464127942677,
583
+ 47.91567153479365,
584
+ 48.19670178808972,
585
+ 48.47773203927152,
586
+ 48.75876228829437,
587
+ 49.03979253511243,
588
+ 49.32082277967856,
589
+ 49.60185302194436,
590
+ 49.88288326186004,
591
+ 50.16391349937449,
592
+ 50.44494373443509,
593
+ 50.72597396698776,
594
+ 51.00700419697692,
595
+ 51.28803442434530,
596
+ 51.56906464903404,
597
+ 51.85009487098255,
598
+ 52.13112509012841,
599
+ 52.41215530640741,
600
+ 52.69318551975338,
601
+ 52.97421573009819,
602
+ 53.25524593737158,
603
+ 53.53627614150120,
604
+ 53.81730634241245,
605
+ 54.09833654002838,
606
+ 54.37936673426967,
607
+ 54.66039692505446,
608
+ 54.94142711229829,
609
+ 55.22245729591398,
610
+ 55.50348747581155,
611
+ 55.78451765189804,
612
+ 56.06554782407743,
613
+ 56.34657799225056,
614
+ 56.62760815631488,
615
+ 56.90863831616438,
616
+ 57.18966847168948,
617
+ 57.47069862277679,
618
+ 57.75172876930898,
619
+ 58.03275891116461,
620
+ 58.31378904821798,
621
+ 58.59481918033887,
622
+ 58.87584930739236,
623
+ 59.15687942923870,
624
+ 59.43790954573291,
625
+ 59.71893965672474,
626
+ 59.99996976205827,
627
+ 60.28099986157171,
628
+ 60.56202995509710,
629
+ 60.84306004246005,
630
+ 61.12409012347936,
631
+ 61.40512019796673,
632
+ 61.68615026572643,
633
+ 61.96718032655483,
634
+ 62.24821038024017,
635
+ 62.52924042656195,
636
+ 62.81027046529061,
637
+ 63.09130049618697,
638
+ 63.37233051900186,
639
+ 63.65336053347541,
640
+ 63.93439053933660,
641
+ 64.21542053630260,
642
+ 64.49645052407814,
643
+ 64.77748050235478,
644
+ 65.05851047081022,
645
+ 65.33954042910749,
646
+ 65.62057037689407,
647
+ 65.90160031380103,
648
+ 66.18263023944205,
649
+ 66.46366015341239,
650
+ 66.74469005528775,
651
+ 67.02571994462305,
652
+ 67.30674982095123,
653
+ 67.58777968378180,
654
+ 67.86880953259940,
655
+ 68.14983936686214,
656
+ 68.43086918599992,
657
+ 68.71189898941257,
658
+ 68.99292877646779,
659
+ 69.27395854649907,
660
+ 69.55498829880318,
661
+ 69.83601803263780,
662
+ 70.11704774721858,
663
+ 70.39807744171628,
664
+ 70.67910711525340,
665
+ 70.96013676690066,
666
+ 71.24116639567315,
667
+ 71.52219600052597,
668
+ 71.80322558034980,
669
+ 72.08425513396567,
670
+ 72.36528466011954,
671
+ 72.64631415747613,
672
+ 72.92734362461226,
673
+ 73.20837306000952,
674
+ 73.48940246204617,
675
+ 73.77043182898812,
676
+ 74.05146115897912,
677
+ 74.33249045002979,
678
+ 74.61351970000541,
679
+ 74.89454890661246,
680
+ 75.17557806738355,
681
+ 75.45660717966057,
682
+ 75.73763624057599,
683
+ 76.01866524703182,
684
+ 76.29969419567588,
685
+ 76.58072308287524,
686
+ 76.86175190468626,
687
+ 77.14278065682046,
688
+ 77.42380933460623,
689
+ 77.70483793294494,
690
+ 77.98586644626094,
691
+ 78.26689486844451,
692
+ 78.54792319278644,
693
+ 78.82895141190238,
694
+ 79.10997951764607,
695
+ 79.39100750100822,
696
+ 79.67203535199914,
697
+ 79.95306305951186,
698
+ 80.23409061116114,
699
+ 80.51511799309434,
700
+ 80.79614518976737,
701
+ 81.07717218367863,
702
+ 81.35819895505040,
703
+ 81.63922548144693,
704
+ 81.92025173731213,
705
+ 82.20127769340762,
706
+ 82.48230331612486,
707
+ 82.76332856663693,
708
+ 83.04435339984514,
709
+ 83.32537776305915,
710
+ 83.60640159433007,
711
+ 83.88742482032309,
712
+ 84.16844735357665,
713
+ 84.44946908892904,
714
+ 84.73048989880277,
715
+ 85.01150962689766,
716
+ 85.29252807962695,
717
+ 85.57354501429673,
718
+ 85.85456012248531,
719
+ 86.13557300618399,
720
+ 86.41658314273641,
721
+ 86.69758983192202,
722
+ 86.97859211359663,
723
+ 87.25958863483953,
724
+ 87.54057742641116,
725
+ 87.82155550711056,
726
+ 88.10251813893724,
727
+ 88.38345731224797,
728
+ 88.66435834182293,
729
+ 88.94519111831644,
730
+ 89.22588284761157,
731
+ 89.50620273820637,
732
+ 89.78487690721863,
733
+ ][::-1]
734
+ return lats
735
+
736
+ def first_axis_vals(self):
737
+ if self._resolution == 320:
738
+ return self.get_precomputed_values_N320()
739
+ else:
740
+ logging.info("Calculating grid. Not using a pre-computed grid.")
741
+ precision = 1.0e-14
742
+ nval = self._resolution * 2
743
+ rad2deg = 180 / math.pi
744
+ convval = 1 - ((2 / math.pi) * (2 / math.pi)) * 0.25
745
+ vals = self.gauss_first_guess()
746
+ new_vals = [0] * nval
747
+ denom = math.sqrt(((nval + 0.5) * (nval + 0.5)) + convval)
748
+ for jval in range(self._resolution):
749
+ root = math.cos(vals[jval] / denom)
750
+ conv = 1
751
+ while abs(conv) >= precision:
752
+ mem2 = 1
753
+ mem1 = root
754
+ for legi in range(nval):
755
+ legfonc = ((2.0 * (legi + 1) - 1.0) * root * mem1 - legi * mem2) / (legi + 1)
756
+ mem2 = mem1
757
+ mem1 = legfonc
758
+ conv = legfonc / ((nval * (mem2 - root * legfonc)) / (1.0 - (root * root)))
759
+ root = root - conv
760
+ # add maybe a max iter here to make sure we converge at some point
761
+ new_vals[jval] = math.asin(root) * rad2deg
762
+ new_vals[nval - 1 - jval] = -new_vals[jval]
763
+ return new_vals
764
+
765
+ def map_first_axis(self, lower, upper):
766
+ axis_lines = self._first_axis_vals
767
+ end_idx = bisect_left_cmp(axis_lines, lower, cmp=lambda x, y: x > y) + 1
768
+ start_idx = bisect_right_cmp(axis_lines, upper, cmp=lambda x, y: x > y)
769
+ return_vals = axis_lines[start_idx:end_idx]
770
+ return return_vals
771
+
772
+ def lon_spacing(self):
773
+ if self._resolution == 320:
774
+ return [
775
+ 18,
776
+ 25,
777
+ 36,
778
+ 40,
779
+ 45,
780
+ 50,
781
+ 60,
782
+ 64,
783
+ 72,
784
+ 72,
785
+ 75,
786
+ 81,
787
+ 90,
788
+ 96,
789
+ 100,
790
+ 108,
791
+ 120,
792
+ 120,
793
+ 125,
794
+ 135,
795
+ 144,
796
+ 144,
797
+ 150,
798
+ 160,
799
+ 180,
800
+ 180,
801
+ 180,
802
+ 192,
803
+ 192,
804
+ 200,
805
+ 216,
806
+ 216,
807
+ 216,
808
+ 225,
809
+ 240,
810
+ 240,
811
+ 240,
812
+ 250,
813
+ 256,
814
+ 270,
815
+ 270,
816
+ 288,
817
+ 288,
818
+ 288,
819
+ 300,
820
+ 300,
821
+ 320,
822
+ 320,
823
+ 320,
824
+ 324,
825
+ 360,
826
+ 360,
827
+ 360,
828
+ 360,
829
+ 360,
830
+ 360,
831
+ 375,
832
+ 375,
833
+ 384,
834
+ 384,
835
+ 400,
836
+ 400,
837
+ 405,
838
+ 432,
839
+ 432,
840
+ 432,
841
+ 432,
842
+ 450,
843
+ 450,
844
+ 450,
845
+ 480,
846
+ 480,
847
+ 480,
848
+ 480,
849
+ 480,
850
+ 486,
851
+ 500,
852
+ 500,
853
+ 500,
854
+ 512,
855
+ 512,
856
+ 540,
857
+ 540,
858
+ 540,
859
+ 540,
860
+ 540,
861
+ 576,
862
+ 576,
863
+ 576,
864
+ 576,
865
+ 576,
866
+ 576,
867
+ 600,
868
+ 600,
869
+ 600,
870
+ 600,
871
+ 640,
872
+ 640,
873
+ 640,
874
+ 640,
875
+ 640,
876
+ 640,
877
+ 640,
878
+ 648,
879
+ 648,
880
+ 675,
881
+ 675,
882
+ 675,
883
+ 675,
884
+ 720,
885
+ 720,
886
+ 720,
887
+ 720,
888
+ 720,
889
+ 720,
890
+ 720,
891
+ 720,
892
+ 720,
893
+ 729,
894
+ 750,
895
+ 750,
896
+ 750,
897
+ 750,
898
+ 768,
899
+ 768,
900
+ 768,
901
+ 768,
902
+ 800,
903
+ 800,
904
+ 800,
905
+ 800,
906
+ 800,
907
+ 800,
908
+ 810,
909
+ 810,
910
+ 864,
911
+ 864,
912
+ 864,
913
+ 864,
914
+ 864,
915
+ 864,
916
+ 864,
917
+ 864,
918
+ 864,
919
+ 864,
920
+ 864,
921
+ 900,
922
+ 900,
923
+ 900,
924
+ 900,
925
+ 900,
926
+ 900,
927
+ 900,
928
+ 900,
929
+ 960,
930
+ 960,
931
+ 960,
932
+ 960,
933
+ 960,
934
+ 960,
935
+ 960,
936
+ 960,
937
+ 960,
938
+ 960,
939
+ 960,
940
+ 960,
941
+ 960,
942
+ 960,
943
+ 972,
944
+ 972,
945
+ 1000,
946
+ 1000,
947
+ 1000,
948
+ 1000,
949
+ 1000,
950
+ 1000,
951
+ 1000,
952
+ 1000,
953
+ 1024,
954
+ 1024,
955
+ 1024,
956
+ 1024,
957
+ 1024,
958
+ 1024,
959
+ 1080,
960
+ 1080,
961
+ 1080,
962
+ 1080,
963
+ 1080,
964
+ 1080,
965
+ 1080,
966
+ 1080,
967
+ 1080,
968
+ 1080,
969
+ 1080,
970
+ 1080,
971
+ 1080,
972
+ 1080,
973
+ 1125,
974
+ 1125,
975
+ 1125,
976
+ 1125,
977
+ 1125,
978
+ 1125,
979
+ 1125,
980
+ 1125,
981
+ 1125,
982
+ 1125,
983
+ 1125,
984
+ 1125,
985
+ 1125,
986
+ 1125,
987
+ 1152,
988
+ 1152,
989
+ 1152,
990
+ 1152,
991
+ 1152,
992
+ 1152,
993
+ 1152,
994
+ 1152,
995
+ 1152,
996
+ 1200,
997
+ 1200,
998
+ 1200,
999
+ 1200,
1000
+ 1200,
1001
+ 1200,
1002
+ 1200,
1003
+ 1200,
1004
+ 1200,
1005
+ 1200,
1006
+ 1200,
1007
+ 1200,
1008
+ 1200,
1009
+ 1200,
1010
+ 1200,
1011
+ 1200,
1012
+ 1200,
1013
+ 1200,
1014
+ 1215,
1015
+ 1215,
1016
+ 1215,
1017
+ 1215,
1018
+ 1215,
1019
+ 1215,
1020
+ 1215,
1021
+ 1280,
1022
+ 1280,
1023
+ 1280,
1024
+ 1280,
1025
+ 1280,
1026
+ 1280,
1027
+ 1280,
1028
+ 1280,
1029
+ 1280,
1030
+ 1280,
1031
+ 1280,
1032
+ 1280,
1033
+ 1280,
1034
+ 1280,
1035
+ 1280,
1036
+ 1280,
1037
+ 1280,
1038
+ 1280,
1039
+ 1280,
1040
+ 1280,
1041
+ 1280,
1042
+ 1280,
1043
+ 1280,
1044
+ 1280,
1045
+ 1280,
1046
+ 1280,
1047
+ 1280,
1048
+ 1280,
1049
+ 1280,
1050
+ 1280,
1051
+ 1280,
1052
+ 1280,
1053
+ 1280,
1054
+ 1280,
1055
+ 1280,
1056
+ 1280,
1057
+ 1280,
1058
+ 1280,
1059
+ 1280,
1060
+ 1280,
1061
+ 1280,
1062
+ 1280,
1063
+ 1280,
1064
+ 1280,
1065
+ 1280,
1066
+ 1280,
1067
+ 1280,
1068
+ 1280,
1069
+ 1280,
1070
+ 1280,
1071
+ 1280,
1072
+ 1280,
1073
+ 1280,
1074
+ 1280,
1075
+ 1280,
1076
+ 1280,
1077
+ 1280,
1078
+ 1280,
1079
+ 1280,
1080
+ 1280,
1081
+ 1280,
1082
+ 1280,
1083
+ 1280,
1084
+ 1280,
1085
+ 1280,
1086
+ 1280,
1087
+ 1280,
1088
+ 1280,
1089
+ 1280,
1090
+ 1280,
1091
+ 1280,
1092
+ 1280,
1093
+ 1280,
1094
+ 1280,
1095
+ 1280,
1096
+ 1280,
1097
+ 1280,
1098
+ 1280,
1099
+ 1280,
1100
+ 1280,
1101
+ 1280,
1102
+ 1280,
1103
+ 1280,
1104
+ 1280,
1105
+ 1280,
1106
+ 1280,
1107
+ 1280,
1108
+ 1280,
1109
+ 1280,
1110
+ 1280,
1111
+ 1280,
1112
+ 1280,
1113
+ 1280,
1114
+ 1280,
1115
+ 1280,
1116
+ 1280,
1117
+ 1280,
1118
+ 1280,
1119
+ 1280,
1120
+ 1280,
1121
+ 1280,
1122
+ 1280,
1123
+ 1280,
1124
+ 1280,
1125
+ 1280,
1126
+ 1280,
1127
+ 1280,
1128
+ 1280,
1129
+ 1280,
1130
+ 1280,
1131
+ 1280,
1132
+ 1280,
1133
+ 1280,
1134
+ 1280,
1135
+ 1280,
1136
+ 1280,
1137
+ 1280,
1138
+ 1280,
1139
+ 1280,
1140
+ 1280,
1141
+ 1280,
1142
+ 1280,
1143
+ 1280,
1144
+ 1280,
1145
+ 1280,
1146
+ 1280,
1147
+ 1280,
1148
+ 1280,
1149
+ 1280,
1150
+ 1280,
1151
+ 1280,
1152
+ 1280,
1153
+ 1280,
1154
+ 1280,
1155
+ 1280,
1156
+ 1280,
1157
+ 1280,
1158
+ 1280,
1159
+ 1280,
1160
+ 1280,
1161
+ 1280,
1162
+ 1280,
1163
+ 1280,
1164
+ 1280,
1165
+ 1280,
1166
+ 1280,
1167
+ 1280,
1168
+ 1280,
1169
+ 1215,
1170
+ 1215,
1171
+ 1215,
1172
+ 1215,
1173
+ 1215,
1174
+ 1215,
1175
+ 1215,
1176
+ 1200,
1177
+ 1200,
1178
+ 1200,
1179
+ 1200,
1180
+ 1200,
1181
+ 1200,
1182
+ 1200,
1183
+ 1200,
1184
+ 1200,
1185
+ 1200,
1186
+ 1200,
1187
+ 1200,
1188
+ 1200,
1189
+ 1200,
1190
+ 1200,
1191
+ 1200,
1192
+ 1200,
1193
+ 1200,
1194
+ 1152,
1195
+ 1152,
1196
+ 1152,
1197
+ 1152,
1198
+ 1152,
1199
+ 1152,
1200
+ 1152,
1201
+ 1152,
1202
+ 1152,
1203
+ 1125,
1204
+ 1125,
1205
+ 1125,
1206
+ 1125,
1207
+ 1125,
1208
+ 1125,
1209
+ 1125,
1210
+ 1125,
1211
+ 1125,
1212
+ 1125,
1213
+ 1125,
1214
+ 1125,
1215
+ 1125,
1216
+ 1125,
1217
+ 1080,
1218
+ 1080,
1219
+ 1080,
1220
+ 1080,
1221
+ 1080,
1222
+ 1080,
1223
+ 1080,
1224
+ 1080,
1225
+ 1080,
1226
+ 1080,
1227
+ 1080,
1228
+ 1080,
1229
+ 1080,
1230
+ 1080,
1231
+ 1024,
1232
+ 1024,
1233
+ 1024,
1234
+ 1024,
1235
+ 1024,
1236
+ 1024,
1237
+ 1000,
1238
+ 1000,
1239
+ 1000,
1240
+ 1000,
1241
+ 1000,
1242
+ 1000,
1243
+ 1000,
1244
+ 1000,
1245
+ 972,
1246
+ 972,
1247
+ 960,
1248
+ 960,
1249
+ 960,
1250
+ 960,
1251
+ 960,
1252
+ 960,
1253
+ 960,
1254
+ 960,
1255
+ 960,
1256
+ 960,
1257
+ 960,
1258
+ 960,
1259
+ 960,
1260
+ 960,
1261
+ 900,
1262
+ 900,
1263
+ 900,
1264
+ 900,
1265
+ 900,
1266
+ 900,
1267
+ 900,
1268
+ 900,
1269
+ 864,
1270
+ 864,
1271
+ 864,
1272
+ 864,
1273
+ 864,
1274
+ 864,
1275
+ 864,
1276
+ 864,
1277
+ 864,
1278
+ 864,
1279
+ 864,
1280
+ 810,
1281
+ 810,
1282
+ 800,
1283
+ 800,
1284
+ 800,
1285
+ 800,
1286
+ 800,
1287
+ 800,
1288
+ 768,
1289
+ 768,
1290
+ 768,
1291
+ 768,
1292
+ 750,
1293
+ 750,
1294
+ 750,
1295
+ 750,
1296
+ 729,
1297
+ 720,
1298
+ 720,
1299
+ 720,
1300
+ 720,
1301
+ 720,
1302
+ 720,
1303
+ 720,
1304
+ 720,
1305
+ 720,
1306
+ 675,
1307
+ 675,
1308
+ 675,
1309
+ 675,
1310
+ 648,
1311
+ 648,
1312
+ 640,
1313
+ 640,
1314
+ 640,
1315
+ 640,
1316
+ 640,
1317
+ 640,
1318
+ 640,
1319
+ 600,
1320
+ 600,
1321
+ 600,
1322
+ 600,
1323
+ 576,
1324
+ 576,
1325
+ 576,
1326
+ 576,
1327
+ 576,
1328
+ 576,
1329
+ 540,
1330
+ 540,
1331
+ 540,
1332
+ 540,
1333
+ 540,
1334
+ 512,
1335
+ 512,
1336
+ 500,
1337
+ 500,
1338
+ 500,
1339
+ 486,
1340
+ 480,
1341
+ 480,
1342
+ 480,
1343
+ 480,
1344
+ 480,
1345
+ 450,
1346
+ 450,
1347
+ 450,
1348
+ 432,
1349
+ 432,
1350
+ 432,
1351
+ 432,
1352
+ 405,
1353
+ 400,
1354
+ 400,
1355
+ 384,
1356
+ 384,
1357
+ 375,
1358
+ 375,
1359
+ 360,
1360
+ 360,
1361
+ 360,
1362
+ 360,
1363
+ 360,
1364
+ 360,
1365
+ 324,
1366
+ 320,
1367
+ 320,
1368
+ 320,
1369
+ 300,
1370
+ 300,
1371
+ 288,
1372
+ 288,
1373
+ 288,
1374
+ 270,
1375
+ 270,
1376
+ 256,
1377
+ 250,
1378
+ 240,
1379
+ 240,
1380
+ 240,
1381
+ 225,
1382
+ 216,
1383
+ 216,
1384
+ 216,
1385
+ 200,
1386
+ 192,
1387
+ 192,
1388
+ 180,
1389
+ 180,
1390
+ 180,
1391
+ 160,
1392
+ 150,
1393
+ 144,
1394
+ 144,
1395
+ 135,
1396
+ 125,
1397
+ 120,
1398
+ 120,
1399
+ 108,
1400
+ 100,
1401
+ 96,
1402
+ 90,
1403
+ 81,
1404
+ 75,
1405
+ 72,
1406
+ 72,
1407
+ 64,
1408
+ 60,
1409
+ 50,
1410
+ 45,
1411
+ 40,
1412
+ 36,
1413
+ 25,
1414
+ 18,
1415
+ ]
1416
+
1417
+ def second_axis_vals(self, first_val):
1418
+ tol = 1e-8
1419
+ first_value = [i for i in self._first_axis_vals if first_val[0] - tol <= i <= first_val[0] + tol][0]
1420
+ first_idx = self._first_axis_vals.index(first_value)
1421
+ Ny = self.lon_spacing()[first_idx]
1422
+ second_spacing = 360 / Ny
1423
+ return [i * second_spacing for i in range(Ny)]
1424
+
1425
+ def axes_idx_to_reduced_gaussian_idx(self, first_idx, second_idx):
1426
+ Ny_array = self.lon_spacing()
1427
+ idx = 0
1428
+ for i in range(len(Ny_array)):
1429
+ if i != first_idx:
1430
+ idx += Ny_array[i]
1431
+ else:
1432
+ idx += second_idx
1433
+ return idx
1434
+
1435
+ # def find_second_idx(self, first_val, second_val):
1436
+ # tol = 1e-10
1437
+ # second_axis_vals = self.second_axis_vals(first_val)
1438
+ # second_idx = bisect.bisect_left(second_axis_vals, second_val[0] - tol)
1439
+ # return second_idx
1440
+
1441
+ # def unmap(self, first_val, second_val):
1442
+ # (first_idx, second_idx) = self.find_second_idx(first_val, second_val)
1443
+ # octahedral_index = self.axes_idx_to_reduced_gaussian_idx(first_idx, second_idx)
1444
+ # return octahedral_index
1445
+
1446
+ def unmap(self, first_val, second_val):
1447
+ tol = 1e-8
1448
+ first_value = [i for i in self._first_axis_vals if first_val[0] - tol <= i <= first_val[0] + tol][0]
1449
+ first_idx = self._first_axis_vals.index(first_value)
1450
+ second_val = [i for i in self.second_axis_vals(first_val) if second_val[0] - tol <= i <= second_val[0] + tol][0]
1451
+ second_idx = self.second_axis_vals(first_val).index(second_val)
1452
+ reduced_gaussian_index = self.axes_idx_to_reduced_gaussian_idx(first_idx, second_idx)
1453
+ return reduced_gaussian_index
1454
+
1455
+
1456
+ # md5 grid hash in form {resolution : hash}
1457
+ _md5_hash = {
1458
+ 320: "00c7b107673deb45f968637b661ea25b",
1459
+ }