jerlov 0.5.2__tar.gz → 0.6.0__tar.gz

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 (45) hide show
  1. {jerlov-0.5.2/jerlov.egg-info → jerlov-0.6.0}/PKG-INFO +23 -4
  2. {jerlov-0.5.2 → jerlov-0.6.0}/README.md +22 -3
  3. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/__init__.py +7 -1
  4. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/_data.py +4 -0
  5. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/backscattering.py +16 -4
  6. jerlov-0.6.0/jerlov/data/williamson2022_aw.csv +502 -0
  7. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/scene.py +11 -3
  8. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/water.py +286 -14
  9. {jerlov-0.5.2 → jerlov-0.6.0/jerlov.egg-info}/PKG-INFO +23 -4
  10. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov.egg-info/SOURCES.txt +1 -0
  11. {jerlov-0.5.2 → jerlov-0.6.0}/pyproject.toml +1 -1
  12. {jerlov-0.5.2 → jerlov-0.6.0}/tests/test_api.py +115 -0
  13. {jerlov-0.5.2 → jerlov-0.6.0}/tests/test_backscattering.py +12 -0
  14. {jerlov-0.5.2 → jerlov-0.6.0}/tests/test_depth.py +62 -0
  15. {jerlov-0.5.2 → jerlov-0.6.0}/tests/test_quoted_figures.py +30 -0
  16. {jerlov-0.5.2 → jerlov-0.6.0}/tests/test_scene.py +9 -0
  17. {jerlov-0.5.2 → jerlov-0.6.0}/LICENSE +0 -0
  18. {jerlov-0.5.2 → jerlov-0.6.0}/NOTICE +0 -0
  19. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/colour.py +0 -0
  20. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/__init__.py +0 -0
  21. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/austin1986_kd.csv +0 -0
  22. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/austin1986_model.csv +0 -0
  23. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/boss2001_chi.csv +0 -0
  24. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/cie1931_2deg_cmf.csv +0 -0
  25. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/cie_d65.csv +0 -0
  26. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/jerlov1968_kd.csv +0 -0
  27. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/jerlov1968_total_irradiance.csv +0 -0
  28. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/jerlov1976_kd.csv +0 -0
  29. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/paulson1977_shortwave.csv +0 -0
  30. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/smart2007_b_from_c.csv +0 -0
  31. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/solonenko2015_iop.csv +0 -0
  32. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/williamson2022_iop.csv +0 -0
  33. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/williamson2022_measured.csv +0 -0
  34. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/data/williamson2023_depth.csv +0 -0
  35. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/py.typed +0 -0
  36. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/shortwave.py +0 -0
  37. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov/sources.py +0 -0
  38. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov.egg-info/dependency_links.txt +0 -0
  39. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov.egg-info/requires.txt +0 -0
  40. {jerlov-0.5.2 → jerlov-0.6.0}/jerlov.egg-info/top_level.txt +0 -0
  41. {jerlov-0.5.2 → jerlov-0.6.0}/setup.cfg +0 -0
  42. {jerlov-0.5.2 → jerlov-0.6.0}/tests/test_colour.py +0 -0
  43. {jerlov-0.5.2 → jerlov-0.6.0}/tests/test_packaging.py +0 -0
  44. {jerlov-0.5.2 → jerlov-0.6.0}/tests/test_reproduces_papers.py +0 -0
  45. {jerlov-0.5.2 → jerlov-0.6.0}/tests/test_shortwave.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jerlov
3
- Version: 0.5.2
3
+ Version: 0.6.0
4
4
  Summary: Inherent optical properties of Jerlov water types, with provenance
5
5
  Author: T. Ishibashi
6
6
  License-Expression: Apache-2.0
@@ -244,6 +244,18 @@ jerlov.water_type_at_depth("9C", 15.0) # None: the paper declined to say
244
244
  nothing is asserted. This is a lookup, not a correction applied on your
245
245
  behalf.
246
246
 
247
+ To carry the downwelling irradiance down through that profile, with each 10 m
248
+ layer attenuating by the Kd of its own type:
249
+
250
+ ```python
251
+ d = jerlov.descend("1C", 45.0, wl) # source="jerlov1976" by default
252
+ d.layers # ((0, 10, '1C'), (10, 20, '1C'), (20, 30, 'III'), ..., (40, 45, 'II'))
253
+ scene = jerlov.Scene(jerlov.water("II"), surface * d.transmittance, wl, depth_m=45.0)
254
+ ```
255
+
256
+ It refuses to go through a layer the paper declared nothing for, rather than
257
+ carrying the last type on: 3C stops at 70 m, 9C at 10 m.
258
+
247
259
  ## Other entry points
248
260
 
249
261
  ```python
@@ -257,8 +269,15 @@ jerlov.pure_water_scattering(555) # Morel's bw, if that is what c was correcte
257
269
  # The measured points behind the williamson2022 spectra, with their spread.
258
270
  m = jerlov.measured_points("III", "a") # m.wavelengths, m.values, m.std_dev
259
271
 
260
- # Use your own measurements; they take exactly the same path.
261
- jerlov.Water.from_measurements(wavelengths, a=..., b=...)
272
+ # The pure water absorption williamson2022 built its a on (300-800 nm).
273
+ jerlov.pure_water_absorption(440) # 0.0104; other sources say why they have none
274
+
275
+ # Use your own measurements; they take exactly the same path, flags included.
276
+ w = jerlov.Water.from_measurements(
277
+ wavelengths, a=..., b=...,
278
+ flags={"a": statuses}, # "ok", "suspect", ...: as in DATA.md; flagged ones warn
279
+ uncertainty={"a": sigma_a}, # 1/m; w.uncertainty("a", 532)
280
+ )
262
281
  ```
263
282
 
264
283
  ## Solar heating of the upper ocean
@@ -302,7 +321,7 @@ made.
302
321
  ## Provenance and design
303
322
 
304
323
  `DATA.md` records, for every shipped table, where it came from, what was
305
- verified, and what is known to be wrong with it. Nineteen entries are
324
+ verified, and what is known to be wrong with it. Twenty entries are
306
325
  documented there: eight confirmed defects in the source literature, three
307
326
  questions the first edition of Jerlov settled, and the rest notes.
308
327
 
@@ -219,6 +219,18 @@ jerlov.water_type_at_depth("9C", 15.0) # None: the paper declined to say
219
219
  nothing is asserted. This is a lookup, not a correction applied on your
220
220
  behalf.
221
221
 
222
+ To carry the downwelling irradiance down through that profile, with each 10 m
223
+ layer attenuating by the Kd of its own type:
224
+
225
+ ```python
226
+ d = jerlov.descend("1C", 45.0, wl) # source="jerlov1976" by default
227
+ d.layers # ((0, 10, '1C'), (10, 20, '1C'), (20, 30, 'III'), ..., (40, 45, 'II'))
228
+ scene = jerlov.Scene(jerlov.water("II"), surface * d.transmittance, wl, depth_m=45.0)
229
+ ```
230
+
231
+ It refuses to go through a layer the paper declared nothing for, rather than
232
+ carrying the last type on: 3C stops at 70 m, 9C at 10 m.
233
+
222
234
  ## Other entry points
223
235
 
224
236
  ```python
@@ -232,8 +244,15 @@ jerlov.pure_water_scattering(555) # Morel's bw, if that is what c was correcte
232
244
  # The measured points behind the williamson2022 spectra, with their spread.
233
245
  m = jerlov.measured_points("III", "a") # m.wavelengths, m.values, m.std_dev
234
246
 
235
- # Use your own measurements; they take exactly the same path.
236
- jerlov.Water.from_measurements(wavelengths, a=..., b=...)
247
+ # The pure water absorption williamson2022 built its a on (300-800 nm).
248
+ jerlov.pure_water_absorption(440) # 0.0104; other sources say why they have none
249
+
250
+ # Use your own measurements; they take exactly the same path, flags included.
251
+ w = jerlov.Water.from_measurements(
252
+ wavelengths, a=..., b=...,
253
+ flags={"a": statuses}, # "ok", "suspect", ...: as in DATA.md; flagged ones warn
254
+ uncertainty={"a": sigma_a}, # 1/m; w.uncertainty("a", 532)
255
+ )
237
256
  ```
238
257
 
239
258
  ## Solar heating of the upper ocean
@@ -277,7 +296,7 @@ made.
277
296
  ## Provenance and design
278
297
 
279
298
  `DATA.md` records, for every shipped table, where it came from, what was
280
- verified, and what is known to be wrong with it. Nineteen entries are
299
+ verified, and what is known to be wrong with it. Twenty entries are
281
300
  documented there: eight confirmed defects in the source literature, three
282
301
  questions the first edition of Jerlov settled, and the rest notes.
283
302
 
@@ -37,13 +37,16 @@ from .shortwave import (
37
37
  )
38
38
  from .sources import SOURCES, Source, get_source
39
39
  from .water import (
40
+ Descent,
40
41
  MeasuredPoints,
41
42
  MissingQuantityError,
42
43
  ProvenanceWarning,
43
44
  Water,
44
45
  b_from_c,
46
+ descend,
45
47
  kd_spectrum,
46
48
  measured_points,
49
+ pure_water_absorption,
47
50
  water,
48
51
  water_type_at_depth,
49
52
  )
@@ -67,6 +70,9 @@ __all__ = [
67
70
  "Water",
68
71
  "water",
69
72
  "water_type_at_depth",
73
+ "descend",
74
+ "Descent",
75
+ "pure_water_absorption",
70
76
  "shortwave_parameters",
71
77
  "solar_fraction",
72
78
  "jerlov1968_solar_fraction",
@@ -86,4 +92,4 @@ __all__ = [
86
92
  "MissingQuantityError",
87
93
  ]
88
94
 
89
- __version__ = "0.5.2"
95
+ __version__ = "0.6.0"
@@ -59,6 +59,10 @@ QUESTIONABLE = frozenset({"suspect", "missing", "extrapolated",
59
59
  "model_extrapolation", "reconstructed",
60
60
  "extrapolated_by_dataset"})
61
61
 
62
+ #: Every status a spectrum can carry: the table in DATA.md, "The status
63
+ #: column". A caller's own flags must be one of these.
64
+ STATUSES = QUESTIONABLE | {"ok", "interpolated"}
65
+
62
66
 
63
67
  def _read(name: str) -> list[dict[str, str]]:
64
68
  path = resources.files("jerlov.data").joinpath(name)
@@ -57,6 +57,20 @@ class AngleWarning(UserWarning):
57
57
  """
58
58
 
59
59
 
60
+ def _amplitude(wavelength_nm, salinity_psu) -> np.ndarray:
61
+ """Morel's A(lambda, S), Boss & Pegau Eq. (4), in 1/(m sr)."""
62
+ salinity = np.asarray(salinity_psu, dtype=float)
63
+ if not np.all(np.isfinite(salinity)) or np.any(salinity < 0):
64
+ # A negative salinity made pure water scatter less than fresh water,
65
+ # without complaint.
66
+ raise ValueError(
67
+ f"salinity_psu must be a finite number, 0 or more, not "
68
+ f"{salinity_psu!r}"
69
+ )
70
+ return (1.38 * (np.asarray(wavelength_nm, dtype=float) / 500.0) ** -4.32
71
+ * (1 + 0.3 * salinity / 37.0) * 1e-4)
72
+
73
+
60
74
  def _ratio() -> float:
61
75
  return (1 - DEPOLARISATION_RATIO) / (1 + DEPOLARISATION_RATIO)
62
76
 
@@ -73,8 +87,7 @@ def pure_water_vsf(angle_deg, wavelength_nm, salinity_psu: float = 37.0):
73
87
  as the agreement between measurement and theory.
74
88
  """
75
89
  angle = np.asarray(angle_deg, dtype=float)
76
- amplitude = (1.38 * (np.asarray(wavelength_nm, dtype=float) / 500.0) ** -4.32
77
- * (1 + 0.3 * salinity_psu / 37.0) * 1e-4)
90
+ amplitude = _amplitude(wavelength_nm, salinity_psu)
78
91
  out = amplitude * (1 + _ratio() * np.cos(np.radians(angle)) ** 2)
79
92
  # Angle and wavelength broadcast against each other; the answer is a
80
93
  # float only when neither of them was an array.
@@ -90,8 +103,7 @@ def pure_water_backscattering(wavelength_nm, salinity_psu: float = 37.0):
90
103
  hemisphere, which for this angular shape is analytic.
91
104
  """
92
105
  r = _ratio()
93
- amplitude = (1.38 * (np.asarray(wavelength_nm, dtype=float) / 500.0) ** -4.32
94
- * (1 + 0.3 * salinity_psu / 37.0) * 1e-4)
106
+ amplitude = _amplitude(wavelength_nm, salinity_psu)
95
107
  # integral of (1 + r cos^2) sin over 90..180 degrees is 1 + r/3
96
108
  out = 2.0 * math.pi * amplitude * (1 + r / 3.0)
97
109
  return _like_input(np.atleast_1d(out), wavelength_nm)
@@ -0,0 +1,502 @@
1
+ wavelength_nm,aw_per_m,unit,status,note
2
+ 300,0.0382,1/m,ok,
3
+ 301,0.03715,1/m,ok,
4
+ 302,0.0361,1/m,ok,
5
+ 303,0.0351,1/m,ok,
6
+ 304,0.0341,1/m,ok,
7
+ 305,0.0332,1/m,ok,
8
+ 306,0.0323,1/m,ok,
9
+ 307,0.0314,1/m,ok,
10
+ 308,0.0305,1/m,ok,
11
+ 309,0.02965,1/m,ok,
12
+ 310,0.0288,1/m,ok,
13
+ 311,0.028,1/m,ok,
14
+ 312,0.0272,1/m,ok,
15
+ 313,0.02645,1/m,ok,
16
+ 314,0.0257,1/m,ok,
17
+ 315,0.02495,1/m,ok,
18
+ 316,0.0242,1/m,ok,
19
+ 317,0.0235,1/m,ok,
20
+ 318,0.0228,1/m,ok,
21
+ 319,0.02215,1/m,ok,
22
+ 320,0.0215,1/m,ok,
23
+ 321,0.0209,1/m,ok,
24
+ 322,0.0203,1/m,ok,
25
+ 323,0.0197,1/m,ok,
26
+ 324,0.0191,1/m,ok,
27
+ 325,0.01855,1/m,ok,
28
+ 326,0.018,1/m,ok,
29
+ 327,0.0175,1/m,ok,
30
+ 328,0.017,1/m,ok,
31
+ 329,0.0165,1/m,ok,
32
+ 330,0.016,1/m,ok,
33
+ 331,0.01555,1/m,ok,
34
+ 332,0.0151,1/m,ok,
35
+ 333,0.01465,1/m,ok,
36
+ 334,0.0142,1/m,ok,
37
+ 335,0.0138,1/m,ok,
38
+ 336,0.0134,1/m,ok,
39
+ 337,0.01305,1/m,ok,
40
+ 338,0.0127,1/m,ok,
41
+ 339,0.0123,1/m,ok,
42
+ 340,0.0119,1/m,ok,
43
+ 341,0.0116,1/m,ok,
44
+ 342,0.0113,1/m,ok,
45
+ 343,0.011,1/m,ok,
46
+ 344,0.0107,1/m,ok,
47
+ 345,0.0104,1/m,ok,
48
+ 346,0.0101,1/m,ok,
49
+ 347,0.00985,1/m,ok,
50
+ 348,0.0096,1/m,ok,
51
+ 349,0.00935,1/m,ok,
52
+ 350,0.0091,1/m,ok,
53
+ 351,0.00885,1/m,ok,
54
+ 352,0.0086,1/m,ok,
55
+ 353,0.0084,1/m,ok,
56
+ 354,0.0082,1/m,ok,
57
+ 355,0.008,1/m,ok,
58
+ 356,0.0078,1/m,ok,
59
+ 357,0.00765,1/m,ok,
60
+ 358,0.0075,1/m,ok,
61
+ 359,0.0073,1/m,ok,
62
+ 360,0.0071,1/m,ok,
63
+ 361,0.007,1/m,ok,
64
+ 362,0.0069,1/m,ok,
65
+ 363,0.00675,1/m,ok,
66
+ 364,0.0066,1/m,ok,
67
+ 365,0.0065,1/m,ok,
68
+ 366,0.0064,1/m,ok,
69
+ 367,0.0063,1/m,ok,
70
+ 368,0.0062,1/m,ok,
71
+ 369,0.0061,1/m,ok,
72
+ 370,0.006,1/m,ok,
73
+ 371,0.0059,1/m,ok,
74
+ 372,0.0058,1/m,ok,
75
+ 373,0.00575,1/m,ok,
76
+ 374,0.0057,1/m,ok,
77
+ 375,0.00565,1/m,ok,
78
+ 376,0.0056,1/m,ok,
79
+ 377,0.00555,1/m,ok,
80
+ 378,0.0055,1/m,ok,
81
+ 379,0.00545,1/m,ok,
82
+ 380,0.0054,1/m,ok,
83
+ 381,0.0054,1/m,ok,
84
+ 382,0.0054,1/m,ok,
85
+ 383,0.00535,1/m,ok,
86
+ 384,0.0053,1/m,ok,
87
+ 385,0.0053,1/m,ok,
88
+ 386,0.0053,1/m,ok,
89
+ 387,0.0053,1/m,ok,
90
+ 388,0.0053,1/m,ok,
91
+ 389,0.00535,1/m,ok,
92
+ 390,0.0054,1/m,ok,
93
+ 391,0.0054,1/m,ok,
94
+ 392,0.0054,1/m,ok,
95
+ 393,0.0054,1/m,ok,
96
+ 394,0.0054,1/m,ok,
97
+ 395,0.00545,1/m,ok,
98
+ 396,0.0055,1/m,ok,
99
+ 397,0.00555,1/m,ok,
100
+ 398,0.0056,1/m,ok,
101
+ 399,0.0057,1/m,ok,
102
+ 400,0.0058,1/m,ok,
103
+ 401,0.00585,1/m,ok,
104
+ 402,0.0059,1/m,ok,
105
+ 403,0.006,1/m,ok,
106
+ 404,0.0061,1/m,ok,
107
+ 405,0.0062,1/m,ok,
108
+ 406,0.0063,1/m,ok,
109
+ 407,0.0064,1/m,ok,
110
+ 408,0.0065,1/m,ok,
111
+ 409,0.0066,1/m,ok,
112
+ 410,0.0067,1/m,ok,
113
+ 411,0.0068,1/m,ok,
114
+ 412,0.0069,1/m,ok,
115
+ 413,0.00705,1/m,ok,
116
+ 414,0.0072,1/m,ok,
117
+ 415,0.0073,1/m,ok,
118
+ 416,0.0074,1/m,ok,
119
+ 417,0.0075,1/m,ok,
120
+ 418,0.0076,1/m,ok,
121
+ 419,0.00775,1/m,ok,
122
+ 420,0.0079,1/m,ok,
123
+ 421,0.00805,1/m,ok,
124
+ 422,0.0082,1/m,ok,
125
+ 423,0.0083,1/m,ok,
126
+ 424,0.0084,1/m,ok,
127
+ 425,0.00855,1/m,ok,
128
+ 426,0.0087,1/m,ok,
129
+ 427,0.0088,1/m,ok,
130
+ 428,0.0089,1/m,ok,
131
+ 429,0.00905,1/m,ok,
132
+ 430,0.0092,1/m,ok,
133
+ 431,0.0093,1/m,ok,
134
+ 432,0.0094,1/m,ok,
135
+ 433,0.00955,1/m,ok,
136
+ 434,0.0097,1/m,ok,
137
+ 435,0.0098,1/m,ok,
138
+ 436,0.0099,1/m,ok,
139
+ 437,0.01005,1/m,ok,
140
+ 438,0.0102,1/m,ok,
141
+ 439,0.0103,1/m,ok,
142
+ 440,0.0104,1/m,ok,
143
+ 441,0.0105,1/m,ok,
144
+ 442,0.0106,1/m,ok,
145
+ 443,0.0107,1/m,ok,
146
+ 444,0.0108,1/m,ok,
147
+ 445,0.0109,1/m,ok,
148
+ 446,0.011,1/m,ok,
149
+ 447,0.0111,1/m,ok,
150
+ 448,0.0112,1/m,ok,
151
+ 449,0.0113,1/m,ok,
152
+ 450,0.0114,1/m,ok,
153
+ 451,0.0115,1/m,ok,
154
+ 452,0.0116,1/m,ok,
155
+ 453,0.0117,1/m,ok,
156
+ 454,0.0118,1/m,ok,
157
+ 455,0.0119,1/m,ok,
158
+ 456,0.012,1/m,ok,
159
+ 457,0.0121,1/m,ok,
160
+ 458,0.0122,1/m,ok,
161
+ 459,0.0123,1/m,ok,
162
+ 460,0.0124,1/m,ok,
163
+ 461,0.0125,1/m,ok,
164
+ 462,0.0126,1/m,ok,
165
+ 463,0.0127,1/m,ok,
166
+ 464,0.0128,1/m,ok,
167
+ 465,0.0129,1/m,ok,
168
+ 466,0.013,1/m,ok,
169
+ 467,0.01315,1/m,ok,
170
+ 468,0.0133,1/m,ok,
171
+ 469,0.0134,1/m,ok,
172
+ 470,0.0135,1/m,ok,
173
+ 471,0.01365,1/m,ok,
174
+ 472,0.0138,1/m,ok,
175
+ 473,0.01395,1/m,ok,
176
+ 474,0.0141,1/m,ok,
177
+ 475,0.01425,1/m,ok,
178
+ 476,0.0144,1/m,ok,
179
+ 477,0.0146,1/m,ok,
180
+ 478,0.0148,1/m,ok,
181
+ 479,0.015,1/m,ok,
182
+ 480,0.0152,1/m,ok,
183
+ 481,0.01545,1/m,ok,
184
+ 482,0.0157,1/m,ok,
185
+ 483,0.01595,1/m,ok,
186
+ 484,0.0162,1/m,ok,
187
+ 485,0.01645,1/m,ok,
188
+ 486,0.0167,1/m,ok,
189
+ 487,0.01705,1/m,ok,
190
+ 488,0.0174,1/m,ok,
191
+ 489,0.01775,1/m,ok,
192
+ 490,0.0181,1/m,ok,
193
+ 491,0.0185,1/m,ok,
194
+ 492,0.0189,1/m,ok,
195
+ 493,0.01935,1/m,ok,
196
+ 494,0.0198,1/m,ok,
197
+ 495,0.02035,1/m,ok,
198
+ 496,0.0209,1/m,ok,
199
+ 497,0.0216,1/m,ok,
200
+ 498,0.0223,1/m,ok,
201
+ 499,0.02305,1/m,ok,
202
+ 500,0.0238,1/m,ok,
203
+ 501,0.02465,1/m,ok,
204
+ 502,0.0255,1/m,ok,
205
+ 503,0.0264,1/m,ok,
206
+ 504,0.0273,1/m,ok,
207
+ 505,0.0282,1/m,ok,
208
+ 506,0.0291,1/m,ok,
209
+ 507,0.03005,1/m,ok,
210
+ 508,0.031,1/m,ok,
211
+ 509,0.03195,1/m,ok,
212
+ 510,0.0329,1/m,ok,
213
+ 511,0.0339,1/m,ok,
214
+ 512,0.0349,1/m,ok,
215
+ 513,0.03585,1/m,ok,
216
+ 514,0.0368,1/m,ok,
217
+ 515,0.0377,1/m,ok,
218
+ 516,0.0386,1/m,ok,
219
+ 517,0.0395,1/m,ok,
220
+ 518,0.0404,1/m,ok,
221
+ 519,0.04065,1/m,ok,
222
+ 520,0.0409,1/m,ok,
223
+ 521,0.04125,1/m,ok,
224
+ 522,0.0416,1/m,ok,
225
+ 523,0.04125,1/m,ok,
226
+ 524,0.0409,1/m,ok,
227
+ 525,0.0418,1/m,ok,
228
+ 526,0.0427,1/m,ok,
229
+ 527,0.0425,1/m,ok,
230
+ 528,0.0423,1/m,ok,
231
+ 529,0.0426,1/m,ok,
232
+ 530,0.0429,1/m,ok,
233
+ 531,0.0437,1/m,ok,
234
+ 532,0.0445,1/m,ok,
235
+ 533,0.04505,1/m,ok,
236
+ 534,0.0456,1/m,ok,
237
+ 535,0.0463,1/m,ok,
238
+ 536,0.047,1/m,ok,
239
+ 537,0.0475,1/m,ok,
240
+ 538,0.048,1/m,ok,
241
+ 539,0.04875,1/m,ok,
242
+ 540,0.0495,1/m,ok,
243
+ 541,0.0499,1/m,ok,
244
+ 542,0.0503,1/m,ok,
245
+ 543,0.0515,1/m,ok,
246
+ 544,0.0527,1/m,ok,
247
+ 545,0.05355,1/m,ok,
248
+ 546,0.0544,1/m,ok,
249
+ 547,0.0554,1/m,ok,
250
+ 548,0.0564,1/m,ok,
251
+ 549,0.0576,1/m,ok,
252
+ 550,0.0588,1/m,ok,
253
+ 551,0.05995,1/m,ok,
254
+ 552,0.0611,1/m,ok,
255
+ 553,0.0621,1/m,ok,
256
+ 554,0.0631,1/m,ok,
257
+ 555,0.06385,1/m,ok,
258
+ 556,0.0646,1/m,ok,
259
+ 557,0.0652,1/m,ok,
260
+ 558,0.0658,1/m,ok,
261
+ 559,0.0665,1/m,ok,
262
+ 560,0.0672,1/m,ok,
263
+ 561,0.0679,1/m,ok,
264
+ 562,0.0686,1/m,ok,
265
+ 563,0.06925,1/m,ok,
266
+ 564,0.0699,1/m,ok,
267
+ 565,0.07085,1/m,ok,
268
+ 566,0.0718,1/m,ok,
269
+ 567,0.0726,1/m,ok,
270
+ 568,0.0734,1/m,ok,
271
+ 569,0.07465,1/m,ok,
272
+ 570,0.0759,1/m,ok,
273
+ 571,0.0773,1/m,ok,
274
+ 572,0.0787,1/m,ok,
275
+ 573,0.0803,1/m,ok,
276
+ 574,0.0819,1/m,ok,
277
+ 575,0.08385,1/m,ok,
278
+ 576,0.0858,1/m,ok,
279
+ 577,0.0877,1/m,ok,
280
+ 578,0.0896,1/m,ok,
281
+ 579,0.0924,1/m,ok,
282
+ 580,0.0952,1/m,ok,
283
+ 581,0.0976,1/m,ok,
284
+ 582,0.1,1/m,ok,
285
+ 583,0.10395,1/m,ok,
286
+ 584,0.1079,1/m,ok,
287
+ 585,0.1119,1/m,ok,
288
+ 586,0.1159,1/m,ok,
289
+ 587,0.1206,1/m,ok,
290
+ 588,0.1253,1/m,ok,
291
+ 589,0.13045,1/m,ok,
292
+ 590,0.1356,1/m,ok,
293
+ 591,0.14075,1/m,ok,
294
+ 592,0.1459,1/m,ok,
295
+ 593,0.1513,1/m,ok,
296
+ 594,0.1567,1/m,ok,
297
+ 595,0.16335,1/m,ok,
298
+ 596,0.17,1/m,ok,
299
+ 597,0.178,1/m,ok,
300
+ 598,0.186,1/m,ok,
301
+ 599,0.2042,1/m,ok,
302
+ 600,0.2224,1/m,ok,
303
+ 601,0.2295,1/m,ok,
304
+ 602,0.2366,1/m,ok,
305
+ 603,0.2407,1/m,ok,
306
+ 604,0.2448,1/m,ok,
307
+ 605,0.25175,1/m,ok,
308
+ 606,0.2587,1/m,ok,
309
+ 607,0.262,1/m,ok,
310
+ 608,0.2653,1/m,ok,
311
+ 609,0.2672,1/m,ok,
312
+ 610,0.2691,1/m,ok,
313
+ 611,0.2703,1/m,ok,
314
+ 612,0.2715,1/m,ok,
315
+ 613,0.27275,1/m,ok,
316
+ 614,0.274,1/m,ok,
317
+ 615,0.2752,1/m,ok,
318
+ 616,0.2764,1/m,ok,
319
+ 617,0.27745,1/m,ok,
320
+ 618,0.2785,1/m,ok,
321
+ 619,0.27975,1/m,ok,
322
+ 620,0.281,1/m,ok,
323
+ 621,0.28245,1/m,ok,
324
+ 622,0.2839,1/m,ok,
325
+ 623,0.28535,1/m,ok,
326
+ 624,0.2868,1/m,ok,
327
+ 625,0.28805,1/m,ok,
328
+ 626,0.2893,1/m,ok,
329
+ 627,0.29075,1/m,ok,
330
+ 628,0.2922,1/m,ok,
331
+ 629,0.29385,1/m,ok,
332
+ 630,0.2955,1/m,ok,
333
+ 631,0.29715,1/m,ok,
334
+ 632,0.2988,1/m,ok,
335
+ 633,0.29995,1/m,ok,
336
+ 634,0.3011,1/m,ok,
337
+ 635,0.30245,1/m,ok,
338
+ 636,0.3038,1/m,ok,
339
+ 637,0.3057,1/m,ok,
340
+ 638,0.3076,1/m,ok,
341
+ 639,0.30935,1/m,ok,
342
+ 640,0.3111,1/m,ok,
343
+ 641,0.31275,1/m,ok,
344
+ 642,0.3144,1/m,ok,
345
+ 643,0.31625,1/m,ok,
346
+ 644,0.3181,1/m,ok,
347
+ 645,0.3202,1/m,ok,
348
+ 646,0.3223,1/m,ok,
349
+ 647,0.3243,1/m,ok,
350
+ 648,0.3263,1/m,ok,
351
+ 649,0.3289,1/m,ok,
352
+ 650,0.3315,1/m,ok,
353
+ 651,0.33385,1/m,ok,
354
+ 652,0.3362,1/m,ok,
355
+ 653,0.33925,1/m,ok,
356
+ 654,0.3423,1/m,ok,
357
+ 655,0.34655,1/m,ok,
358
+ 656,0.3508,1/m,ok,
359
+ 657,0.3572,1/m,ok,
360
+ 658,0.3636,1/m,ok,
361
+ 659,0.37135,1/m,ok,
362
+ 660,0.3791,1/m,ok,
363
+ 661,0.3861,1/m,ok,
364
+ 662,0.3931,1/m,ok,
365
+ 663,0.3975,1/m,ok,
366
+ 664,0.4019,1/m,ok,
367
+ 665,0.40455,1/m,ok,
368
+ 666,0.4072,1/m,ok,
369
+ 667,0.4085,1/m,ok,
370
+ 668,0.4098,1/m,ok,
371
+ 669,0.411,1/m,ok,
372
+ 670,0.4122,1/m,ok,
373
+ 671,0.4136,1/m,ok,
374
+ 672,0.415,1/m,ok,
375
+ 673,0.41615,1/m,ok,
376
+ 674,0.4173,1/m,ok,
377
+ 675,0.4198,1/m,ok,
378
+ 676,0.4223,1/m,ok,
379
+ 677,0.42465,1/m,ok,
380
+ 678,0.427,1/m,ok,
381
+ 679,0.4294,1/m,ok,
382
+ 680,0.4318,1/m,ok,
383
+ 681,0.43495,1/m,ok,
384
+ 682,0.4381,1/m,ok,
385
+ 683,0.44195,1/m,ok,
386
+ 684,0.4458,1/m,ok,
387
+ 685,0.45015,1/m,ok,
388
+ 686,0.4545,1/m,ok,
389
+ 687,0.45955,1/m,ok,
390
+ 688,0.4646,1/m,ok,
391
+ 689,0.4703,1/m,ok,
392
+ 690,0.476,1/m,ok,
393
+ 691,0.48315,1/m,ok,
394
+ 692,0.4903,1/m,ok,
395
+ 693,0.4987,1/m,ok,
396
+ 694,0.5071,1/m,ok,
397
+ 695,0.51575,1/m,ok,
398
+ 696,0.5244,1/m,ok,
399
+ 697,0.5357,1/m,ok,
400
+ 698,0.547,1/m,ok,
401
+ 699,0.5596,1/m,ok,
402
+ 700,0.5722,1/m,ok,
403
+ 701,0.58585,1/m,ok,
404
+ 702,0.5995,1/m,ok,
405
+ 703,0.6149,1/m,ok,
406
+ 704,0.6303,1/m,ok,
407
+ 705,0.64655,1/m,ok,
408
+ 706,0.6628,1/m,ok,
409
+ 707,0.68105,1/m,ok,
410
+ 708,0.6993,1/m,ok,
411
+ 709,0.7204,1/m,ok,
412
+ 710,0.7415,1/m,ok,
413
+ 711,0.7654,1/m,ok,
414
+ 712,0.7893,1/m,ok,
415
+ 713,0.8169,1/m,ok,
416
+ 714,0.8445,1/m,ok,
417
+ 715,0.8777,1/m,ok,
418
+ 716,0.9109,1/m,ok,
419
+ 717,0.949,1/m,ok,
420
+ 718,0.9871,1/m,ok,
421
+ 719,1.02975,1/m,ok,
422
+ 720,1.0724,1/m,ok,
423
+ 721,1.12015,1/m,ok,
424
+ 722,1.1679,1/m,ok,
425
+ 723,1.21815,1/m,ok,
426
+ 724,1.2684,1/m,ok,
427
+ 725,1.32015,1/m,ok,
428
+ 726,1.3719,1/m,ok,
429
+ 727,1.42945,1/m,ok,
430
+ 728,1.487,1/m,ok,
431
+ 729,1.55405,1/m,ok,
432
+ 730,1.6211,1/m,ok,
433
+ 731,1.70415,1/m,ok,
434
+ 732,1.7872,1/m,ok,
435
+ 733,1.88945,1/m,ok,
436
+ 734,1.9917,1/m,ok,
437
+ 735,2.09955,1/m,ok,
438
+ 736,2.2074,1/m,ok,
439
+ 737,2.3008,1/m,ok,
440
+ 738,2.3942,1/m,ok,
441
+ 739,2.46305,1/m,ok,
442
+ 740,2.5319,1/m,ok,
443
+ 741,2.5775,1/m,ok,
444
+ 742,2.6231,1/m,ok,
445
+ 743,2.6477,1/m,ok,
446
+ 744,2.6723,1/m,ok,
447
+ 745,2.6872,1/m,ok,
448
+ 746,2.7021,1/m,ok,
449
+ 747,2.71185,1/m,ok,
450
+ 748,2.7216,1/m,ok,
451
+ 749,2.7275,1/m,ok,
452
+ 750,2.7334,1/m,ok,
453
+ 751,2.73735,1/m,ok,
454
+ 752,2.7413,1/m,ok,
455
+ 753,2.74455,1/m,ok,
456
+ 754,2.7478,1/m,ok,
457
+ 755,2.751,1/m,ok,
458
+ 756,2.7542,1/m,ok,
459
+ 757,2.7585,1/m,ok,
460
+ 758,2.7628,1/m,ok,
461
+ 759,2.7669,1/m,ok,
462
+ 760,2.771,1/m,ok,
463
+ 761,2.77215,1/m,ok,
464
+ 762,2.7733,1/m,ok,
465
+ 763,2.77375,1/m,ok,
466
+ 764,2.7742,1/m,ok,
467
+ 765,2.77215,1/m,ok,
468
+ 766,2.7701,1/m,ok,
469
+ 767,2.76555,1/m,ok,
470
+ 768,2.761,1/m,ok,
471
+ 769,2.7576,1/m,ok,
472
+ 770,2.7542,1/m,ok,
473
+ 771,2.7512,1/m,ok,
474
+ 772,2.7482,1/m,ok,
475
+ 773,2.73935,1/m,ok,
476
+ 774,2.7305,1/m,ok,
477
+ 775,2.7201,1/m,ok,
478
+ 776,2.7097,1/m,ok,
479
+ 777,2.69965,1/m,ok,
480
+ 778,2.6896,1/m,ok,
481
+ 779,2.6743,1/m,ok,
482
+ 780,2.659,1/m,ok,
483
+ 781,2.6461,1/m,ok,
484
+ 782,2.6332,1/m,ok,
485
+ 783,2.6197,1/m,ok,
486
+ 784,2.6062,1/m,ok,
487
+ 785,2.5882,1/m,ok,
488
+ 786,2.5702,1/m,ok,
489
+ 787,2.55185,1/m,ok,
490
+ 788,2.5335,1/m,ok,
491
+ 789,2.51295,1/m,ok,
492
+ 790,2.4924,1/m,ok,
493
+ 791,2.47025,1/m,ok,
494
+ 792,2.4481,1/m,ok,
495
+ 793,2.4282,1/m,ok,
496
+ 794,2.4083,1/m,ok,
497
+ 795,2.39125,1/m,ok,
498
+ 796,2.3742,1/m,ok,
499
+ 797,2.3537,1/m,ok,
500
+ 798,2.3332,1/m,ok,
501
+ 799,2.3132,1/m,ok,
502
+ 800,2.2932,1/m,ok,