goad-py 0.4.1__cp38-abi3-musllinux_1_2_x86_64.whl → 0.5.1__cp38-abi3-musllinux_1_2_x86_64.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.
Potentially problematic release.
This version of goad-py might be problematic. Click here for more details.
- goad_py/_goad_py.abi3.so +0 -0
- goad_py/goad_py.pyi +80 -80
- {goad_py-0.4.1.dist-info → goad_py-0.5.1.dist-info}/METADATA +1 -1
- goad_py-0.5.1.dist-info/RECORD +9 -0
- {goad_py-0.4.1.dist-info → goad_py-0.5.1.dist-info}/WHEEL +1 -1
- goad_py.libs/{libgcc_s-1e52349c.so.1 → libgcc_s-98a1ef30.so.1} +0 -0
- goad_py.libs/{libstdc++-e3b7606c.so.6 → libstdc++-25756182.so.6} +0 -0
- goad_py-0.4.1.dist-info/RECORD +0 -9
goad_py/_goad_py.abi3.so
CHANGED
|
Binary file
|
goad_py/goad_py.pyi
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"""
|
|
2
2
|
GOAD Python API Type Definitions
|
|
3
3
|
|
|
4
|
-
This file provides comprehensive type hints for the GOAD (Geometric Optics
|
|
5
|
-
Approximation for Diffraction) Python bindings. GOAD simulates light scattering
|
|
4
|
+
This file provides comprehensive type hints for the GOAD (Geometric Optics
|
|
5
|
+
Approximation for Diffraction) Python bindings. GOAD simulates light scattering
|
|
6
6
|
by arbitrary 3D geometries using geometric optics with diffraction corrections.
|
|
7
7
|
|
|
8
8
|
The main workflow is:
|
|
9
9
|
1. Create Settings with geometry path (all other parameters have sensible defaults)
|
|
10
|
-
2. Use Problem for single-orientation or MultiProblem for multi-orientation simulations
|
|
10
|
+
2. Use Problem for single-orientation or MultiProblem for multi-orientation simulations
|
|
11
11
|
3. Call py_solve() to run the computation
|
|
12
12
|
4. Access results through the .results property
|
|
13
13
|
|
|
@@ -19,18 +19,18 @@ Default behavior (minimal setup):
|
|
|
19
19
|
|
|
20
20
|
Example (minimal setup):
|
|
21
21
|
import goad_py as goad
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
settings = goad.Settings("particle.obj")
|
|
24
24
|
mp = goad.MultiProblem(settings)
|
|
25
25
|
mp.py_solve()
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
results = mp.results
|
|
28
28
|
print(f"Scattering cross-section: {results.scat_cross}")
|
|
29
29
|
print(f"Extinction cross-section: {results.ext_cross}")
|
|
30
30
|
print(f"Asymmetry parameter: {results.asymmetry}")
|
|
31
31
|
"""
|
|
32
32
|
|
|
33
|
-
from typing import Optional, List, Dict,
|
|
33
|
+
from typing import Optional, List, Dict, Tuple
|
|
34
34
|
import numpy as np
|
|
35
35
|
|
|
36
36
|
class Euler:
|
|
@@ -38,7 +38,7 @@ class Euler:
|
|
|
38
38
|
alpha: float
|
|
39
39
|
beta: float
|
|
40
40
|
gamma: float
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
def __init__(self, alpha: float, beta: float, gamma: float) -> None: ...
|
|
43
43
|
def __repr__(self) -> str: ...
|
|
44
44
|
|
|
@@ -65,7 +65,7 @@ class Orientation:
|
|
|
65
65
|
"""Full orientation specification."""
|
|
66
66
|
scheme: Scheme
|
|
67
67
|
euler_convention: EulerConvention
|
|
68
|
-
|
|
68
|
+
|
|
69
69
|
def __init__(self, scheme: Scheme, euler_convention: Optional[EulerConvention] = None) -> None: ...
|
|
70
70
|
def __repr__(self) -> str: ...
|
|
71
71
|
|
|
@@ -79,102 +79,102 @@ class Shape:
|
|
|
79
79
|
|
|
80
80
|
class Results:
|
|
81
81
|
"""Results from problem solving."""
|
|
82
|
-
|
|
82
|
+
|
|
83
83
|
@property
|
|
84
84
|
def bins(self) -> List[tuple[float, float]]: ...
|
|
85
|
-
|
|
86
|
-
@property
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
87
|
def bins_1d(self) -> Optional[List[float]]: ...
|
|
88
|
-
|
|
88
|
+
|
|
89
89
|
@property
|
|
90
90
|
def mueller(self) -> List[List[float]]: ...
|
|
91
|
-
|
|
91
|
+
|
|
92
92
|
@property
|
|
93
93
|
def mueller_beam(self) -> List[List[float]]: ...
|
|
94
|
-
|
|
94
|
+
|
|
95
95
|
@property
|
|
96
96
|
def mueller_ext(self) -> List[List[float]]: ...
|
|
97
|
-
|
|
97
|
+
|
|
98
98
|
@property
|
|
99
99
|
def mueller_1d(self) -> List[List[float]]: ...
|
|
100
|
-
|
|
100
|
+
|
|
101
101
|
@property
|
|
102
102
|
def mueller_1d_beam(self) -> List[List[float]]: ...
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
@property
|
|
105
105
|
def mueller_1d_ext(self) -> List[List[float]]: ...
|
|
106
|
-
|
|
106
|
+
|
|
107
107
|
@property
|
|
108
108
|
def asymmetry(self) -> Optional[float]: ...
|
|
109
|
-
|
|
109
|
+
|
|
110
110
|
@property
|
|
111
111
|
def scat_cross(self) -> Optional[float]: ...
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
@property
|
|
114
114
|
def ext_cross(self) -> Optional[float]: ...
|
|
115
|
-
|
|
115
|
+
|
|
116
116
|
@property
|
|
117
117
|
def albedo(self) -> Optional[float]: ...
|
|
118
|
-
|
|
118
|
+
|
|
119
119
|
@property
|
|
120
120
|
def params(self) -> Dict[str, Optional[float]]: ...
|
|
121
|
-
|
|
121
|
+
|
|
122
122
|
@property
|
|
123
123
|
def powers(self) -> Dict[str, float]: ...
|
|
124
124
|
|
|
125
125
|
class BinningScheme:
|
|
126
126
|
"""Angular binning scheme for scattering calculations.
|
|
127
|
-
|
|
127
|
+
|
|
128
128
|
Defines how to discretize the scattering sphere into angular bins
|
|
129
129
|
for Mueller matrix and amplitude computations. Supports simple
|
|
130
130
|
regular grids, custom intervals, and arbitrary bin arrangements.
|
|
131
131
|
"""
|
|
132
|
-
|
|
132
|
+
|
|
133
133
|
def __init__(self, bins: List[tuple[float, float]]) -> None: ...
|
|
134
|
-
|
|
134
|
+
|
|
135
135
|
@staticmethod
|
|
136
136
|
def simple(num_theta: int, num_phi: int) -> 'BinningScheme':
|
|
137
137
|
"""Create a simple regular grid binning scheme.
|
|
138
|
-
|
|
138
|
+
|
|
139
139
|
Args:
|
|
140
140
|
num_theta: Number of bins in theta direction (0 to 180 degrees)
|
|
141
141
|
num_phi: Number of bins in phi direction (0 to 360 degrees)
|
|
142
|
-
|
|
142
|
+
|
|
143
143
|
Returns:
|
|
144
144
|
BinningScheme with regular angular grid
|
|
145
|
-
|
|
145
|
+
|
|
146
146
|
Raises:
|
|
147
147
|
ValueError: If num_theta or num_phi is zero or negative
|
|
148
148
|
"""
|
|
149
149
|
...
|
|
150
|
-
|
|
150
|
+
|
|
151
151
|
@staticmethod
|
|
152
152
|
def interval(
|
|
153
153
|
thetas: List[float],
|
|
154
|
-
theta_spacings: List[float],
|
|
154
|
+
theta_spacings: List[float],
|
|
155
155
|
phis: List[float],
|
|
156
156
|
phi_spacings: List[float]
|
|
157
157
|
) -> 'BinningScheme':
|
|
158
158
|
"""Create binning scheme with custom intervals.
|
|
159
|
-
|
|
159
|
+
|
|
160
160
|
Args:
|
|
161
161
|
thetas: Key theta angles in degrees
|
|
162
162
|
theta_spacings: Spacing around each theta value
|
|
163
|
-
phis: Key phi angles in degrees
|
|
163
|
+
phis: Key phi angles in degrees
|
|
164
164
|
phi_spacings: Spacing around each phi value
|
|
165
|
-
|
|
165
|
+
|
|
166
166
|
Returns:
|
|
167
167
|
BinningScheme with custom intervals
|
|
168
168
|
"""
|
|
169
169
|
...
|
|
170
|
-
|
|
170
|
+
|
|
171
171
|
@staticmethod
|
|
172
172
|
def custom(bins: List[tuple[float, float]]) -> 'BinningScheme':
|
|
173
173
|
"""Create binning scheme from explicit (theta, phi) pairs.
|
|
174
|
-
|
|
174
|
+
|
|
175
175
|
Args:
|
|
176
176
|
bins: List of (theta, phi) angle pairs in degrees
|
|
177
|
-
|
|
177
|
+
|
|
178
178
|
Returns:
|
|
179
179
|
BinningScheme with custom bin locations
|
|
180
180
|
"""
|
|
@@ -182,12 +182,12 @@ class BinningScheme:
|
|
|
182
182
|
|
|
183
183
|
class Settings:
|
|
184
184
|
"""Simulation parameters and physical properties.
|
|
185
|
-
|
|
185
|
+
|
|
186
186
|
Contains all parameters needed for a GOAD simulation including
|
|
187
187
|
geometry path, optical properties, orientation scheme, and
|
|
188
188
|
numerical settings. Most parameters have sensible defaults.
|
|
189
189
|
"""
|
|
190
|
-
|
|
190
|
+
|
|
191
191
|
def __init__(
|
|
192
192
|
self,
|
|
193
193
|
geom_path: str,
|
|
@@ -207,7 +207,7 @@ class Settings:
|
|
|
207
207
|
directory: str = "goad_run"
|
|
208
208
|
) -> None:
|
|
209
209
|
"""Initialize simulation settings.
|
|
210
|
-
|
|
210
|
+
|
|
211
211
|
Args:
|
|
212
212
|
geom_path: Path to geometry file (.obj format)
|
|
213
213
|
wavelength: Incident wavelength in geometry units (default: 0.532)
|
|
@@ -224,45 +224,45 @@ class Settings:
|
|
|
224
224
|
max_tir: Maximum total internal reflections (default: 10)
|
|
225
225
|
scale: Geometry scaling factor (default: 1.0)
|
|
226
226
|
directory: Output directory for results (default: "goad_run")
|
|
227
|
-
|
|
227
|
+
|
|
228
228
|
Raises:
|
|
229
229
|
ValueError: If wavelength <= 0 or cutoff not in [0,1]
|
|
230
230
|
FileNotFoundError: If geometry file doesn't exist
|
|
231
231
|
"""
|
|
232
232
|
...
|
|
233
|
-
|
|
233
|
+
|
|
234
234
|
@property
|
|
235
235
|
def euler(self) -> List[float]: ...
|
|
236
|
-
|
|
236
|
+
|
|
237
237
|
@euler.setter
|
|
238
238
|
def euler(self, value: List[float]) -> None: ...
|
|
239
|
-
|
|
239
|
+
|
|
240
240
|
@property
|
|
241
241
|
def orientation(self) -> Orientation: ...
|
|
242
|
-
|
|
242
|
+
|
|
243
243
|
@orientation.setter
|
|
244
244
|
def orientation(self, value: Orientation) -> None: ...
|
|
245
245
|
|
|
246
246
|
class Problem:
|
|
247
247
|
"""Single orientation problem."""
|
|
248
|
-
|
|
248
|
+
|
|
249
249
|
def __init__(self, settings: Optional[Settings] = None, geom: Optional[Geom] = None) -> None: ...
|
|
250
|
-
|
|
250
|
+
|
|
251
251
|
def py_solve(self) -> None: ...
|
|
252
|
-
|
|
252
|
+
|
|
253
253
|
def py_print_stats(self) -> None: ...
|
|
254
|
-
|
|
254
|
+
|
|
255
255
|
@property
|
|
256
256
|
def results(self) -> Results: ...
|
|
257
257
|
|
|
258
258
|
class MultiProblem:
|
|
259
259
|
"""Multi-orientation light scattering simulation for a single geometry.
|
|
260
|
-
|
|
260
|
+
|
|
261
261
|
Computes orientation-averaged scattering properties by running multiple
|
|
262
262
|
single-orientation simulations and averaging the results. Supports both
|
|
263
263
|
random and systematic orientation sampling schemes. Results include
|
|
264
264
|
Mueller matrices, cross-sections, and derived optical parameters.
|
|
265
|
-
|
|
265
|
+
|
|
266
266
|
Example:
|
|
267
267
|
orientations = goad.create_uniform_orientation(100)
|
|
268
268
|
settings = goad.Settings("particle.obj", orientation=orientations)
|
|
@@ -270,53 +270,53 @@ class MultiProblem:
|
|
|
270
270
|
mp.py_solve()
|
|
271
271
|
print(f"Scattering cross-section: {mp.results.scat_cross}")
|
|
272
272
|
"""
|
|
273
|
-
|
|
273
|
+
|
|
274
274
|
def __init__(self, settings: Settings, geom: Optional[Geom] = None) -> None:
|
|
275
275
|
"""Initialize multi-orientation problem.
|
|
276
|
-
|
|
276
|
+
|
|
277
277
|
Args:
|
|
278
278
|
settings: Simulation parameters including orientation scheme
|
|
279
279
|
geom: Geometry object (loaded from settings.geom_path if None)
|
|
280
|
-
|
|
280
|
+
|
|
281
281
|
Raises:
|
|
282
282
|
FileNotFoundError: If geometry file cannot be loaded
|
|
283
283
|
"""
|
|
284
284
|
...
|
|
285
|
-
|
|
285
|
+
|
|
286
286
|
def py_solve(self) -> None:
|
|
287
287
|
"""Solve the multi-orientation scattering problem.
|
|
288
|
-
|
|
288
|
+
|
|
289
289
|
Computes scattering properties averaged over all orientations using
|
|
290
290
|
parallel processing. The Global Interpreter Lock (GIL) is released
|
|
291
291
|
during computation to allow concurrent Python operations.
|
|
292
|
-
|
|
292
|
+
|
|
293
293
|
Raises:
|
|
294
294
|
RuntimeError: If computation fails
|
|
295
295
|
"""
|
|
296
296
|
...
|
|
297
|
-
|
|
297
|
+
|
|
298
298
|
def py_writeup(self) -> None:
|
|
299
299
|
"""Write results to output files in the specified directory."""
|
|
300
300
|
...
|
|
301
|
-
|
|
301
|
+
|
|
302
302
|
def py_reset(self) -> None:
|
|
303
303
|
"""Reset problem to initial state and regenerate orientations."""
|
|
304
304
|
...
|
|
305
|
-
|
|
305
|
+
|
|
306
306
|
def py_regenerate_orientations(self) -> None:
|
|
307
307
|
"""Regenerate random orientations (useful for statistical sampling)."""
|
|
308
308
|
...
|
|
309
|
-
|
|
309
|
+
|
|
310
310
|
@property
|
|
311
311
|
def results(self) -> Results:
|
|
312
312
|
"""Access orientation-averaged simulation results.
|
|
313
|
-
|
|
313
|
+
|
|
314
314
|
Returns the complete Results object containing Mueller matrices,
|
|
315
315
|
amplitude matrices, power distributions, and derived parameters
|
|
316
316
|
averaged over all orientations.
|
|
317
317
|
"""
|
|
318
318
|
...
|
|
319
|
-
|
|
319
|
+
|
|
320
320
|
@property
|
|
321
321
|
def num_orientations(self) -> int:
|
|
322
322
|
"""Number of orientations in the current simulation."""
|
|
@@ -339,16 +339,16 @@ def goad_py_add() -> None: ...
|
|
|
339
339
|
|
|
340
340
|
class Convergable:
|
|
341
341
|
"""Represents a variable to monitor for convergence.
|
|
342
|
-
|
|
342
|
+
|
|
343
343
|
Defines convergence criteria for integrated scattering parameters
|
|
344
344
|
including asymmetry parameter, scattering cross-section, extinction
|
|
345
345
|
cross-section, and single-scattering albedo.
|
|
346
346
|
"""
|
|
347
|
-
|
|
347
|
+
|
|
348
348
|
variable: str
|
|
349
349
|
tolerance_type: str
|
|
350
350
|
tolerance: float
|
|
351
|
-
|
|
351
|
+
|
|
352
352
|
def __init__(
|
|
353
353
|
self,
|
|
354
354
|
variable: str,
|
|
@@ -356,12 +356,12 @@ class Convergable:
|
|
|
356
356
|
tolerance: float = 0.01
|
|
357
357
|
) -> None:
|
|
358
358
|
"""Initialize convergence criterion.
|
|
359
|
-
|
|
359
|
+
|
|
360
360
|
Args:
|
|
361
361
|
variable: Variable to monitor ('asymmetry', 'scatt', 'ext', 'albedo')
|
|
362
362
|
tolerance_type: 'relative' or 'absolute' tolerance
|
|
363
363
|
tolerance: Tolerance value (relative as fraction, absolute as value)
|
|
364
|
-
|
|
364
|
+
|
|
365
365
|
Raises:
|
|
366
366
|
ValueError: If variable name or tolerance_type is invalid
|
|
367
367
|
"""
|
|
@@ -369,11 +369,11 @@ class Convergable:
|
|
|
369
369
|
|
|
370
370
|
class ConvergenceResults:
|
|
371
371
|
"""Results from a convergence study.
|
|
372
|
-
|
|
372
|
+
|
|
373
373
|
Contains final convergence status, parameter values with uncertainties,
|
|
374
374
|
and complete convergence history for analysis.
|
|
375
375
|
"""
|
|
376
|
-
|
|
376
|
+
|
|
377
377
|
converged: bool
|
|
378
378
|
n_orientations: int
|
|
379
379
|
values: Dict[str, float]
|
|
@@ -382,7 +382,7 @@ class ConvergenceResults:
|
|
|
382
382
|
mueller_2d: Optional[np.ndarray]
|
|
383
383
|
convergence_history: List[Tuple[int, str, float]]
|
|
384
384
|
warning: Optional[str]
|
|
385
|
-
|
|
385
|
+
|
|
386
386
|
def __init__(
|
|
387
387
|
self,
|
|
388
388
|
converged: bool,
|
|
@@ -397,11 +397,11 @@ class ConvergenceResults:
|
|
|
397
397
|
|
|
398
398
|
class Convergence:
|
|
399
399
|
"""Runs multiple MultiProblems until convergence criteria are met.
|
|
400
|
-
|
|
400
|
+
|
|
401
401
|
Implements statistical convergence analysis for scattering parameters
|
|
402
402
|
using batch-based standard error estimation. Monitors multiple variables
|
|
403
403
|
simultaneously and stops when all meet their convergence criteria.
|
|
404
|
-
|
|
404
|
+
|
|
405
405
|
Example:
|
|
406
406
|
convergence = Convergence(
|
|
407
407
|
settings=goad.Settings("particle.obj"),
|
|
@@ -413,7 +413,7 @@ class Convergence:
|
|
|
413
413
|
)
|
|
414
414
|
results = convergence.run()
|
|
415
415
|
"""
|
|
416
|
-
|
|
416
|
+
|
|
417
417
|
def __init__(
|
|
418
418
|
self,
|
|
419
419
|
settings: Settings,
|
|
@@ -425,7 +425,7 @@ class Convergence:
|
|
|
425
425
|
mueller_2d: bool = False
|
|
426
426
|
) -> None:
|
|
427
427
|
"""Initialize convergence study.
|
|
428
|
-
|
|
428
|
+
|
|
429
429
|
Args:
|
|
430
430
|
settings: GOAD settings for the simulation
|
|
431
431
|
convergables: List of variables to monitor for convergence
|
|
@@ -434,20 +434,20 @@ class Convergence:
|
|
|
434
434
|
min_batches: Minimum number of batches before allowing convergence
|
|
435
435
|
mueller_1d: Whether to collect 1D Mueller matrices
|
|
436
436
|
mueller_2d: Whether to collect 2D Mueller matrices
|
|
437
|
-
|
|
437
|
+
|
|
438
438
|
Raises:
|
|
439
439
|
ValueError: If parameters are invalid or no convergables specified
|
|
440
440
|
"""
|
|
441
441
|
...
|
|
442
|
-
|
|
442
|
+
|
|
443
443
|
def run(self) -> ConvergenceResults:
|
|
444
444
|
"""Run the convergence study.
|
|
445
|
-
|
|
445
|
+
|
|
446
446
|
Executes batches of orientations until all convergence criteria
|
|
447
447
|
are met or maximum orientations reached. Provides progress updates
|
|
448
448
|
and rigorous statistical analysis.
|
|
449
|
-
|
|
449
|
+
|
|
450
450
|
Returns:
|
|
451
451
|
ConvergenceResults containing final values and convergence status
|
|
452
452
|
"""
|
|
453
|
-
...
|
|
453
|
+
...
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
goad_py-0.5.1.dist-info/METADATA,sha256=K7tRbZ6OB21i5UXKQIQo12P2nhgD12d6QSi_D_ntNdw,3181
|
|
2
|
+
goad_py-0.5.1.dist-info/WHEEL,sha256=Y-XoD5BXFXbl1oL2pSk_D17tiXoT-Jq8mjjLLKU_QmM,105
|
|
3
|
+
goad_py.libs/libgcc_s-98a1ef30.so.1,sha256=XOVRhHznCIpbSdhFoozhla-OfRqBtXftKPQ4cSMKjrs,433441
|
|
4
|
+
goad_py.libs/libstdc++-25756182.so.6,sha256=rqmv3cdlW48F3_LjOuNDrMaEr5iuwKfeB5d5Y6bLHEc,18039817
|
|
5
|
+
goad_py/__init__.py,sha256=vZn5zZZdTgm1qTQFYCqgNKBKDAoheMo5OvwdLIIl3Dk,242
|
|
6
|
+
goad_py/_goad_py.abi3.so,sha256=s69qDrShjtppuz57PDWt5_CVDImnsO-dvhkMB5_oNP4,2252721
|
|
7
|
+
goad_py/convergence.py,sha256=8HTlrpv3RLD8FfmZuT_2mySVtnpHaPLKx6Rcw-jDgB0,14930
|
|
8
|
+
goad_py/goad_py.pyi,sha256=7Y79-TV-NjEN8DWPEqSRGQ7alCrkylL6y1ZK8d6FYSg,14502
|
|
9
|
+
goad_py-0.5.1.dist-info/RECORD,,
|
|
Binary file
|
|
Binary file
|
goad_py-0.4.1.dist-info/RECORD
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
goad_py-0.4.1.dist-info/METADATA,sha256=weu904gJ_ghV0hXUdpIPRnB0e9Mm7ZvPMAcVIhux_LI,3181
|
|
2
|
-
goad_py-0.4.1.dist-info/WHEEL,sha256=yEGuUI9QILZteA9citfSGdI2Y8tgD4khiTETnnbYWzA,105
|
|
3
|
-
goad_py.libs/libgcc_s-1e52349c.so.1,sha256=Ani0u_W_tB8ESsFePO4D2mn2lrgWLhyFdw6RETxBTYM,437537
|
|
4
|
-
goad_py.libs/libstdc++-e3b7606c.so.6,sha256=0od4MdFOKqq1GTnbD4qV7uMNWb0Hte3YHycydGf5nOU,18138121
|
|
5
|
-
goad_py/__init__.py,sha256=vZn5zZZdTgm1qTQFYCqgNKBKDAoheMo5OvwdLIIl3Dk,242
|
|
6
|
-
goad_py/_goad_py.abi3.so,sha256=Zig7zrPmYkBLaFeZ9PNBCad0QXsYACbmEsvGyWy4EtE,2359185
|
|
7
|
-
goad_py/convergence.py,sha256=8HTlrpv3RLD8FfmZuT_2mySVtnpHaPLKx6Rcw-jDgB0,14930
|
|
8
|
-
goad_py/goad_py.pyi,sha256=Ue33wS-DLeI2JTwpKyPXNk4D-Trt9S5MBQSO8qW5XGc,14922
|
|
9
|
-
goad_py-0.4.1.dist-info/RECORD,,
|