pygeodesy 25.12.12__py2.py3-none-any.whl → 25.12.31__py2.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.
- pygeodesy/__init__.py +27 -19
- pygeodesy/constants.py +2 -0
- pygeodesy/ellipsoids.py +24 -12
- pygeodesy/fmath.py +5 -7
- pygeodesy/formy.py +243 -104
- pygeodesy/fsums.py +40 -28
- pygeodesy/geod3solve.py +10 -9
- pygeodesy/geodesici.py +5 -4
- pygeodesy/geodesicx/__init__.py +1 -1
- pygeodesy/geodesicx/gxarea.py +53 -23
- pygeodesy/geodsolve.py +4 -3
- pygeodesy/karney.py +21 -36
- pygeodesy/lazily.py +2 -2
- pygeodesy/named.py +2 -2
- pygeodesy/props.py +5 -3
- pygeodesy/trf.py +1 -3
- pygeodesy/triaxials/bases.py +51 -20
- pygeodesy/triaxials/triaxial3.py +12 -13
- {pygeodesy-25.12.12.dist-info → pygeodesy-25.12.31.dist-info}/METADATA +22 -15
- {pygeodesy-25.12.12.dist-info → pygeodesy-25.12.31.dist-info}/RECORD +22 -22
- {pygeodesy-25.12.12.dist-info → pygeodesy-25.12.31.dist-info}/WHEEL +0 -0
- {pygeodesy-25.12.12.dist-info → pygeodesy-25.12.31.dist-info}/top_level.txt +0 -0
pygeodesy/triaxials/bases.py
CHANGED
|
@@ -44,12 +44,14 @@ from pygeodesy.constants import EPS, EPS0, EPS02, EPS4, _EPS2e4, INT0, NAN, PI2,
|
|
|
44
44
|
from pygeodesy.fmath import fmean_, hypot, norm2, sqrt0, fabs, sqrt
|
|
45
45
|
from pygeodesy.formy import elliperim, _ValueError, _xkwds
|
|
46
46
|
from pygeodesy.fsums import _Fsumf_, fsumf_, fsum1f_
|
|
47
|
+
# from pygeodesy.internals import typename # _MODS
|
|
47
48
|
from pygeodesy.interns import _a_, _b_, _c_, _inside_, _not_, _NOTEQUAL_, _null_, \
|
|
48
49
|
_outside_, _scale_, _SPACE_, _spherical_, _x_, _y_, _z_
|
|
49
|
-
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
50
|
+
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS, _FOR_DOCS
|
|
50
51
|
from pygeodesy.named import _NamedEnumItem, _NamedTuple, _Pass
|
|
51
52
|
from pygeodesy.namedTuples import Vector4Tuple
|
|
52
53
|
from pygeodesy.props import Property_RO, property_doc_, property_RO, property_ROver
|
|
54
|
+
# from pygeodesy.streprs import Fmt # _MODS
|
|
53
55
|
from pygeodesy.units import Degrees, Easting, Float, Height, Height_, Meter2, Meter3, \
|
|
54
56
|
Northing, Radius_, Scalar
|
|
55
57
|
from pygeodesy.utily import asin1
|
|
@@ -58,7 +60,7 @@ from pygeodesy.vector3d import _otherV3d, Vector3d
|
|
|
58
60
|
# from math import fabs, sqrt # from .fmath
|
|
59
61
|
|
|
60
62
|
__all__ = _ALL_LAZY.triaxials_bases
|
|
61
|
-
__version__ = '25.12.
|
|
63
|
+
__version__ = '25.12.31'
|
|
62
64
|
|
|
63
65
|
_bet_ = 'bet' # PYCHOK shared
|
|
64
66
|
_llk_ = 'llk' # PYCHOK shared
|
|
@@ -112,21 +114,42 @@ class LLK(object):
|
|
|
112
114
|
_NOIDAL = (None, ELLIPSOIDAL)
|
|
113
115
|
# _XCLUDE = (CONFORMAL, GEOGRAPHIC, PLANETOCENTRIC, PLANETODETIC)
|
|
114
116
|
|
|
117
|
+
def __getitem__(self, name):
|
|
118
|
+
llk = self.get(name, None)
|
|
119
|
+
if llk is None:
|
|
120
|
+
t = _MODS.internals.typename(self)
|
|
121
|
+
t = _MODS.streprs.Fmt.SQUARE(t, name)
|
|
122
|
+
raise _ValueError(t, name)
|
|
123
|
+
return llk
|
|
124
|
+
|
|
125
|
+
def get(self, name, dflt=None):
|
|
126
|
+
'''Get an C{LLK} by C{name}.
|
|
127
|
+
'''
|
|
128
|
+
llk = getattr(self, name, None)
|
|
129
|
+
return llk if isinstance(llk, _LLK) else dflt
|
|
130
|
+
|
|
115
131
|
def items(self):
|
|
132
|
+
'''Yield all C{LLK (name, value)} pairs.
|
|
133
|
+
'''
|
|
116
134
|
for n, llk in LLK.__class__.__dict__.items():
|
|
117
135
|
if isinstance(llk, _LLK):
|
|
118
136
|
yield n, llk
|
|
119
137
|
|
|
120
138
|
def keys(self):
|
|
139
|
+
'''Yield all C{LLK} names.
|
|
140
|
+
'''
|
|
121
141
|
for n, _ in self.items():
|
|
122
142
|
yield n
|
|
123
143
|
|
|
124
144
|
def values(self):
|
|
145
|
+
'''Yield all C{LLK} values.
|
|
146
|
+
'''
|
|
125
147
|
for _, llk in self.items():
|
|
126
148
|
yield llk
|
|
127
149
|
|
|
128
|
-
|
|
129
|
-
#
|
|
150
|
+
if not _FOR_DOCS: # PYCHOK force epydoc
|
|
151
|
+
LLK = LLK() # singleton
|
|
152
|
+
del _FOR_DOCS
|
|
130
153
|
|
|
131
154
|
|
|
132
155
|
def _HeightINT0(h):
|
|
@@ -212,13 +235,6 @@ class _UnOrderedTriaxialBase(_NamedEnumItem):
|
|
|
212
235
|
a, b, c = self._abc3
|
|
213
236
|
return self.a2, self.b2, self.c2
|
|
214
237
|
|
|
215
|
-
@Property_RO
|
|
216
|
-
def _ab_elliperim(self):
|
|
217
|
-
'''(INTERNAL) Get C{ab} ellipse' perimeter.
|
|
218
|
-
'''
|
|
219
|
-
a, b, _ = self._abc3
|
|
220
|
-
return elliperim(a, b)
|
|
221
|
-
|
|
222
238
|
@Property_RO
|
|
223
239
|
def _a2c2(self):
|
|
224
240
|
'''(INTERNAL) Get C{a**2 - c**2} == E_sub_x**2.
|
|
@@ -279,13 +295,6 @@ class _UnOrderedTriaxialBase(_NamedEnumItem):
|
|
|
279
295
|
d = b - c
|
|
280
296
|
return (d * (b + c)) if d else _0_0
|
|
281
297
|
|
|
282
|
-
@Property_RO
|
|
283
|
-
def _bc_elliperim(self):
|
|
284
|
-
'''(INTERNAL) Get C{bc} ellipse' perimeter.
|
|
285
|
-
'''
|
|
286
|
-
_, b, c = self._abc3
|
|
287
|
-
return elliperim(b, c)
|
|
288
|
-
|
|
289
298
|
@Property_RO
|
|
290
299
|
def c(self):
|
|
291
300
|
'''Get the C{smallest, z} semi-axis (C{meter}, same units as B{C{a}}).
|
|
@@ -513,6 +522,27 @@ class _UnOrderedTriaxialBase(_NamedEnumItem):
|
|
|
513
522
|
'''
|
|
514
523
|
return self._kji if reverse else self._ijk
|
|
515
524
|
|
|
525
|
+
@Property_RO
|
|
526
|
+
def perimeter4ab(self):
|
|
527
|
+
'''Get the C{ab} ellipse' perimeter (C{scalar}).
|
|
528
|
+
'''
|
|
529
|
+
a, b, _ = self._abc3
|
|
530
|
+
return Float(perimeter4ab=elliperim(a, b))
|
|
531
|
+
|
|
532
|
+
@Property_RO
|
|
533
|
+
def perimeter4ac(self):
|
|
534
|
+
'''Get the C{ac} ellipse' perimeter (C{scalar}).
|
|
535
|
+
'''
|
|
536
|
+
a, _, c = self._abc3
|
|
537
|
+
return Float(perimeter4ac=elliperim(a, c))
|
|
538
|
+
|
|
539
|
+
@Property_RO
|
|
540
|
+
def perimeter4bc(self):
|
|
541
|
+
'''Get the C{bc} ellipse' perimeter (C{scalar}).
|
|
542
|
+
'''
|
|
543
|
+
_, b, c = self._abc3
|
|
544
|
+
return Float(perimeter4bc=elliperim(b, c))
|
|
545
|
+
|
|
516
546
|
def _radialTo3(self, sbeta, cbeta, somega, comega):
|
|
517
547
|
'''(INTERNAL) I{Unordered} helper for C{.height4}.
|
|
518
548
|
'''
|
|
@@ -827,7 +857,8 @@ class _Triaxial3Base(_OrderedTriaxialBase):
|
|
|
827
857
|
@property_doc_(" longitude of the I{earth}'s major semi-axis C{a}, (L{Ang}), Karney's C{Triaxial_Earth_lon0}.")
|
|
828
858
|
def Lon0(self):
|
|
829
859
|
if self._Lon0 is None:
|
|
830
|
-
|
|
860
|
+
WGS84_3 = self.name.startswith('WGS84_3')
|
|
861
|
+
self.Lon0 = -(1493 / 100) if WGS84_3 else 0
|
|
831
862
|
return self._Lon0
|
|
832
863
|
|
|
833
864
|
@Lon0.setter # PYCHOK setter!
|
|
@@ -863,7 +894,7 @@ class _Triaxial3Base(_OrderedTriaxialBase):
|
|
|
863
894
|
|
|
864
895
|
|
|
865
896
|
class TriaxialError(_ValueError):
|
|
866
|
-
'''Raised for any
|
|
897
|
+
'''Raised for any triaxial issue.
|
|
867
898
|
'''
|
|
868
899
|
pass # ...
|
|
869
900
|
|
pygeodesy/triaxials/triaxial3.py
CHANGED
|
@@ -18,10 +18,10 @@ from __future__ import division as _; del _ # noqa: E702 ;
|
|
|
18
18
|
|
|
19
19
|
from pygeodesy.angles import Ang, Ang_, _Ang3Tuple, atan2, sincos2, _SinCos2
|
|
20
20
|
from pygeodesy.basics import _copysign, map1
|
|
21
|
-
from pygeodesy.constants import EPS, EPS02, EPS8,
|
|
22
|
-
_copysign_0_0, _copysign_1_0,
|
|
23
|
-
_isfinite, _over, _1_over, _0_0,
|
|
24
|
-
|
|
21
|
+
from pygeodesy.constants import EPS, EPS_2, EPS02, EPS8, INT0, NAN, \
|
|
22
|
+
_EPSqrt, _copysign_0_0, _copysign_1_0, \
|
|
23
|
+
_flipsign, _isfinite, _over, _1_over, _0_0, \
|
|
24
|
+
_0_5, _N_1_0, _1_0, _2_0, _3_0, _4_0, _9_0
|
|
25
25
|
from pygeodesy.errors import _xattr, _xkwds, _xkwds_get, _xkwds_pop2
|
|
26
26
|
from pygeodesy.fmath import cbrt2, fdot, hypot, hypot2, norm2, fabs, sqrt
|
|
27
27
|
from pygeodesy.fsums import Fsum, fsumf_, Fmt
|
|
@@ -42,7 +42,7 @@ from pygeodesy.vector3d import Vector3d
|
|
|
42
42
|
from random import random
|
|
43
43
|
|
|
44
44
|
__all__ = _ALL_LAZY.triaxials_triaxial3
|
|
45
|
-
__version__ = '25.12.
|
|
45
|
+
__version__ = '25.12.14'
|
|
46
46
|
|
|
47
47
|
_alp_ = 'alp'
|
|
48
48
|
_NAN3d = Vector3d(NAN, NAN, NAN)
|
|
@@ -80,8 +80,6 @@ class Cartesian5Tuple(Vector4Tuple):
|
|
|
80
80
|
class _Fp2(object):
|
|
81
81
|
'''(INTERNAL) Function and derivate evaluation.
|
|
82
82
|
'''
|
|
83
|
-
_D = EPS * _0_5
|
|
84
|
-
|
|
85
83
|
def __init__(self, rs, ls, n=1):
|
|
86
84
|
# assert 0 < n <= 2
|
|
87
85
|
self._2 = n == 2
|
|
@@ -92,7 +90,7 @@ class _Fp2(object):
|
|
|
92
90
|
# k=0..2) - 1} and its derivative C{fp}.
|
|
93
91
|
f = _N_1_0
|
|
94
92
|
fc = fp = _0_0
|
|
95
|
-
_D =
|
|
93
|
+
_D = EPS_2
|
|
96
94
|
_2 = self._2
|
|
97
95
|
for g, q in self._rls:
|
|
98
96
|
q = _1_over(p + q)
|
|
@@ -647,8 +645,6 @@ class Triaxial3(_Triaxial3Base):
|
|
|
647
645
|
v = v._roty(True) # +1
|
|
648
646
|
phi = Ang_(v.z, hypot(v.x, v.y), **name)
|
|
649
647
|
lam = Ang_(v.y, v.x, **name) # Ang(0, 0) -> 0
|
|
650
|
-
if llk is LLK.GEODETIC_LON0:
|
|
651
|
-
lam += self.Lon0
|
|
652
648
|
|
|
653
649
|
if dir3d is None:
|
|
654
650
|
zet = None
|
|
@@ -658,6 +654,8 @@ class Triaxial3(_Triaxial3Base):
|
|
|
658
654
|
dir3d.dot(n), **name)
|
|
659
655
|
else:
|
|
660
656
|
raise TriaxialError(dir3d=dir3d)
|
|
657
|
+
if llk is LLK.GEODETIC_LON0:
|
|
658
|
+
lam += self.Lon0
|
|
661
659
|
return PhiLamZet5Tuple(phi, lam, zet, h, llk, **name)
|
|
662
660
|
|
|
663
661
|
def random2(self, llk=LLK.ELLIPSOIDAL, both=False, _rand=random):
|
|
@@ -769,7 +767,7 @@ class Triaxial3(_Triaxial3Base):
|
|
|
769
767
|
s = r.times_(*T._abc3)
|
|
770
768
|
p = max(fabs(s.z), hypot(s.x, s.y) - l1, s.length - l0)
|
|
771
769
|
h = _solve(_Fp2(s.xyz3, ls, n=2), p, T.b2)
|
|
772
|
-
v = r.times_(*(_over(
|
|
770
|
+
v = r.times_(*(_over(n, h + l_) for n, l_ in zip(T._a2b2c23, ls)))
|
|
773
771
|
if not h: # handle h == 0, v.y indeterminate
|
|
774
772
|
x = v.x if l0 else r.x # sphere
|
|
775
773
|
y = v.y if l1 else r.y # sphere or prolate
|
|
@@ -843,7 +841,7 @@ def _cubic(rs, rt, l0, l1): # Cartesian3.cubic
|
|
|
843
841
|
a = l0 + l1
|
|
844
842
|
b = l0 * l1
|
|
845
843
|
c = -b * rs[2] # z2
|
|
846
|
-
# cubic equation z
|
|
844
|
+
# cubic equation z**3 + a*z**2 + b*z + c = 0
|
|
847
845
|
b -= fdot(rs, l1, l0, a)
|
|
848
846
|
a -= rt
|
|
849
847
|
_r = b > 0
|
|
@@ -905,7 +903,8 @@ def _solve(_fp2, p, pscale, **n):
|
|
|
905
903
|
if not (fv > _TOL2):
|
|
906
904
|
break
|
|
907
905
|
p, d = _P2(-fv / fp) # d is positive
|
|
908
|
-
if i and d <= dt and (fv <= EPS8 or
|
|
906
|
+
if i and d <= dt and (fv <= EPS8 or
|
|
907
|
+
d <= (max(pt, p) * _TOL)):
|
|
909
908
|
break
|
|
910
909
|
dt = d
|
|
911
910
|
else:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pygeodesy
|
|
3
|
-
Version: 25.12.
|
|
3
|
+
Version: 25.12.31
|
|
4
4
|
Summary: Pure Python geodesy tools
|
|
5
5
|
Home-page: https://GitHub.com/mrJean1/PyGeodesy
|
|
6
6
|
Author: Jean M. Brouwers
|
|
@@ -8,7 +8,7 @@ Author-email: mrJean1@Gmail.com
|
|
|
8
8
|
Maintainer: Jean M. Brouwers
|
|
9
9
|
Maintainer-email: mrJean1@Gmail.com
|
|
10
10
|
License: MIT
|
|
11
|
-
Keywords: AER Albers altitude Andoyer annulus antipode area attitude Authalic auxiliary azimuth azimuthal azimuth-elevation-range bearing bank Barsky Barth beta bi-quadratic boolean cached Cagnoli cartesian Cassini Cassini-Soldner chord circle-intersections circumcenter circumcircle circumradius clip Cohen Cohen-Sutherland Collins composite conformal conformal-sphere conic constants contact-triangle Cook Correia cosines-law coverage curvature cylindrical datum deprecation deficit development discrete distance Douglas earth east-north-up eccentricity ECEF elevation ellipsoid ellipsoidal-latitude-beta ellipsoidal-longitude-omega elliptic ENU EPSG equal-area equidistant equirectangular ETM ETRF Euclidean even-odd-rule ExactTM excess Farrell Farrell-Barth Ferrari-solution Field-Of-View flattening fma fmath footpoint footprint Forster Forster-Hormann-Popa Forsythe FOV fractional Frechet Fréchet frustum Fsum fused-multiply-add GARS geocentric GeoConvert GeodesicExact geodesy geodetic GeodSolve GeodTest geographiclib Geohash geoid geoidHeight GeoidHeights georef Girard gnomonic gons grades gradians Greiner Greiner-Hormann Hartzell Hausdorff Haversine heading hectare height Heikkinen Heron Hodgman horizon Hormann Hubeny IDW incenter incirle infix_@_operator inradius intermediate interpolate intersect intersection intersection3d intersections IntersectTool Inverse-Distance-Weighting Isometric ITRF Jacobi Jacobi-Conformal Jarque-Bera Jekel Karney Krueger Krüger kurtosis Lambert latitude law-of-cosines least-squares Lesh L_Huilier LHuilier Liang Liang-Barsky linearize Line-Of-Sight LocalCartesian local-tangent-plane local-x-y-z longitude LOS loxodrome lstsq LTP lune LV03 LV95 mean memoize memoized Mercator Meeus MGRS nearest NED Niemeyer non-finite normalize Norrdine north-east-down numpy n-vector Nvector oblate omega orthographic orthometric-height OSGB OSGR overlap parallel parallel-of-latitude Parametric path-intersection perimeter Peucker Pierlot pitch plumb Point-Of-View polar Popa POV precision-cubic-root precision-hypotenuse precision-powers precision-running-summation precision-square-root precision-summation prolate Pseudo-Mercator pygeodesy PyInstaller PyPy quartic radical radii radius Ramer Ramer-Douglas-Peucker Rectifying Reduced resect resection Rey-Jer Reumann Reumann-Witkam rho-theta-phi rhumb RhumbSolve running-linear-regression running-statistics running-stats running-summation scipy secant semi-perimeter sexagecimal simplify skewness Snellius Snellius-Pothenot Snyder Soddy Soddy-circles Soldner sphere sphere-intersections spherical-deficit spherical-excess spherical-polar spherical-triangle squared-quartic standard-deviation stereographic Sudano surface-area Sutherland Sutherland-Hodgman tangent-circles Terrestrial-Reference-Frame Thomas Tienstra tilt TMcoords TMExact toise transverse TransverseMercatorExact TRF triangle triangulate triaxial triaxial-ellipsoid trigonometry trilaterate trilaterate-2d trilaterate-3d TwoProduct TwoSum umbilic-point unit unroll UPS UTM UTM/UPS variance velocities Veness Vermeille viewing-frustum Vincenty Visvalingam Visvalingam-Whyatt volume volumetric Web-Mercator Welford WGRS WGS Whyatt Wildberger Witkam winding-number XYZ yaw You zenzi-cubic zenzi-quartic
|
|
11
|
+
Keywords: AER AGM Albers altitude Andoyer annulus antipode area Arithmetic-Geometric-Mean attitude Authalic auxiliary azimuth azimuthal azimuth-elevation-range bearing bank Barsky Barth beta bi-quadratic boolean cached Cagnoli cartesian Cassini Cassini-Soldner chord circle-intersections circumcenter circumcircle circumradius clip Cohen Cohen-Sutherland Collins composite conformal conformal-sphere conic constants contact-triangle Cook Correia cosines-law coverage curvature cylindrical datum deprecation deficit development discrete distance Douglas earth east-north-up eccentricity ECEF elevation ellipsoid ellipsoidal-latitude-beta ellipsoidal-longitude-omega elliptic ENU EPSG equal-area equidistant equirectangular ETM ETRF Euclidean even-odd-rule ExactTM excess Farrell Farrell-Barth Ferrari-solution Field-Of-View flattening fma fmath footpoint footprint Forster Forster-Hormann-Popa Forsythe FOV fractional Frechet Fréchet frustum Fsum fused-multiply-add GARS Gauss-Kummer geocentric GeoConvert GeodesicExact geodesy geodetic GeodSolve Geod3Solve GeodTest geographiclib Geohash geoid geoidHeight GeoidHeights georef Girard gnomonic gons grades gradians Greiner Greiner-Hormann Hartzell Hausdorff Haversine heading hectare height Heikkinen Heron Hodgman horizon Hormann Hubeny IDW incenter incirle infix_@_operator inradius intermediate interpolate intersect intersection intersection3d intersections IntersectTool Inverse-Distance-Weighting Isometric ITRF Jacobi Jacobi-Conformal Jarque-Bera Jekel Karney Krueger Krüger kurtosis Lambert latitude law-of-cosines least-squares Lesh L_Huilier LHuilier Liang Liang-Barsky Linderholm-Segal linearize Line-Of-Sight LocalCartesian local-tangent-plane local-x-y-z longitude LOS loxodrome lstsq LTP lune LV03 LV95 mean memoize memoized Mercator Meeus MGRS nearest NED Niemeyer non-finite normalize Norrdine north-east-down numpy n-vector Nvector oblate omega orthographic orthometric-height OSGB OSGR overlap parallel parallel-of-latitude Parametric path-intersection perimeter Peucker Pierlot pitch plumb Point-Of-View polar Popa POV precision-cubic-root precision-hypotenuse precision-powers precision-running-summation precision-square-root precision-summation prolate Pseudo-Mercator pygeodesy PyInstaller PyPy quartic radical radii radius Ramanujan Ramer Ramer-Douglas-Peucker Rectifying Reduced resect resection Rey-Jer Reumann Reumann-Witkam rho-theta-phi rhumb RhumbSolve running-linear-regression running-statistics running-stats running-summation scipy secant semi-perimeter sexagecimal simplify skewness Snellius Snellius-Pothenot Snyder Soddy Soddy-circles Soldner sphere sphere-intersections spherical-deficit spherical-excess spherical-polar spherical-triangle squared-quartic standard-deviation stereographic Sudano surface-area Sutherland Sutherland-Hodgman tangent-circles Terrestrial-Reference-Frame Thomas Tienstra tilt TMcoords TMExact toise transverse TransverseMercatorExact TRF triangle triangulate triaxial triaxial-ellipsoid trigonometry trilaterate trilaterate-2d trilaterate-3d TwoProduct TwoSum umbilic-point unit unroll UPS UTM UTM/UPS variance velocities Veness Vermeille viewing-frustum Vincenty Visvalingam Visvalingam-Whyatt volume volumetric Web-Mercator Welford WGRS WGS Whyatt Wildberger Witkam winding-number XYZ yaw You zenzi-cubic zenzi-quartic
|
|
12
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
13
13
|
Classifier: Environment :: Console
|
|
14
14
|
Classifier: Intended Audience :: Developers
|
|
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.14
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
23
24
|
Classifier: Topic :: Software Development
|
|
24
25
|
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
25
26
|
|
|
@@ -33,8 +34,8 @@ models using precision exact, elliptic, trigonometric, vector-based, iterative a
|
|
|
33
34
|
methods for geodetic (lat-/longitude), geocentric (ECEF_ cartesian), local (LTP_) and certain
|
|
34
35
|
`triaxial ellipsoidal`_ coordinates.
|
|
35
36
|
|
|
36
|
-
Transcoded in part from `JavaScript originals`_ by *Chris Veness (C) 2005-
|
|
37
|
-
`C++ classes`_ by *Charles F.F. Karney (C) 2008-
|
|
37
|
+
Transcoded in part from `JavaScript originals`_ by *Chris Veness (C) 2005-2025* and from several
|
|
38
|
+
`C++ classes`_ by *Charles F.F. Karney (C) 2008-2025* and published under the same `MIT License`_.
|
|
38
39
|
|
|
39
40
|
There are four modules for ellipsoidal earth models, *ellipsoidalExact*, *-Karney*, *-Vincenty*
|
|
40
41
|
and *-Nvector* and two for spherical ones, *sphericalTrigonometry* and *-Nvector*. Each module
|
|
@@ -101,8 +102,13 @@ Modules ``ellipsoidalGeodSolve`` and ``geodsolve`` and ``azimuthal`` classes ``E
|
|
|
101
102
|
and ``GnomonicGeodSolve`` depend on *Karney*\'s C++ utility GeodSolve_ to be executable and set with
|
|
102
103
|
env variable ``PYGEODESY_GEODSOLVE`` or with property ``Ellipsoid.geodsolve``.
|
|
103
104
|
|
|
105
|
+
Triaxial geodesic classes ``Geodesic3Solve`` and ``GeodesicLine3Solve`` in module ``geod3solve`` need
|
|
106
|
+
*Karney*\'s C++ utility Geod3Solve_ to be executable and set with env variable ``PYGEODESY_GEOD3SOLVE``
|
|
107
|
+
or with property ``Geodesic3Solve.Geod3Solve``.
|
|
108
|
+
|
|
104
109
|
Class ``Intersectool`` in module ``geodesici`` needs *Karney*\'s C++ utility IntersectTool_ to be
|
|
105
|
-
executable and set with env variable ``PYGEODESY_INTERSECTTOOL
|
|
110
|
+
executable and set with env variable ``PYGEODESY_INTERSECTTOOL`` or with property
|
|
111
|
+
``Intersectool.IntersectTool``.
|
|
106
112
|
|
|
107
113
|
To compare ``MGRS`` results from modules ``mgrs`` and ``testMgrs`` with *Karney*\'s C++ utility
|
|
108
114
|
GeoConvert_, the latter must be executable and set with env variable ``PYGEODESY_GEOCONVERT``.
|
|
@@ -121,24 +127,24 @@ Tests
|
|
|
121
127
|
=====
|
|
122
128
|
|
|
123
129
|
The tests ran with Python 3.14.2 (with geographiclib_ 2.1), Python 3.13.9 (with geographiclib_ 2.1,
|
|
124
|
-
numpy_ 2.3.3, scipy_ 1.16.2, GeoConvert_ 2.
|
|
125
|
-
numpy_ 2.1.0, scipy_ 1.14.1, GeodSolve_ 2.
|
|
126
|
-
geographiclib_ 2.0, numpy_ 1.24.2 and scipy_ 1.10.1) and with
|
|
127
|
-
numpy_ 1.16.6, scipy_ 1.2.2, GeoConvert_ 2.
|
|
128
|
-
all on macOS 26.
|
|
130
|
+
numpy_ 2.3.3, scipy_ 1.16.2, GeoConvert_ 2.7, GeodSolve_ 2.7 and Geod3Solve_ 2.7), Python 3.12.7 (with
|
|
131
|
+
geographiclib_ 2.0, numpy_ 2.1.0, scipy_ 1.14.1, GeodSolve_ 2.7, Geod3Solve_ 2.7, IntersectTool_ 2.7
|
|
132
|
+
and RhumbSolve_ 2.7), Python 3.11.5 (with geographiclib_ 2.0, numpy_ 1.24.2 and scipy_ 1.10.1) and with
|
|
133
|
+
Python 2.7.18 (with geographiclib_ 1.50, numpy_ 1.16.6, scipy_ 1.2.2, GeoConvert_ 2.7, GeodSolve_ 2.7,
|
|
134
|
+
Geod3Solve_ 2.7, IntersectTool_ 2.7 and RhumbSolve_ 2.7), all on macOS 26.2 Tahoe in 64-bit.
|
|
129
135
|
|
|
130
136
|
All tests ran with and without ``lazy import`` for Python 3 and with command line option ``-W default``
|
|
131
137
|
and env variable ``PYGEODESY_WARNINGS=on`` for all Python versions. The results of those tests are
|
|
132
138
|
included in the distribution files.
|
|
133
139
|
|
|
134
|
-
Python 3.14.2, 3.13.9, 3.12.7 and 3.11.5 run on Apple Si
|
|
140
|
+
Python 3.14.2, 3.13.9, 3.12.7 and 3.11.5 run on Apple M4 Si (``arm64``), *natively*. Python 2.7.18 runs
|
|
135
141
|
on Intel (``x86_64``) or Intel *emulation* (\"``arm64_x86_64``\", see function `pygeodesy.machine`_).
|
|
136
142
|
|
|
137
143
|
Test coverage has been measured with coverage_ 7.10.7 using Python 3.14.2, 3.13.9 and 3.12.7. The
|
|
138
144
|
complete coverage report in HTML and a PDF summary are included in the distribution files.
|
|
139
145
|
|
|
140
|
-
The tests also ran with Python 3.
|
|
141
|
-
Python 3.
|
|
146
|
+
The tests also ran with Python 3.14.2 (and geographiclib_ 2.1) on `Debian 12`_ in 64-bit only and with
|
|
147
|
+
Python 3.13.8 (and geographiclib_ 2.0) on `Windows 2019Server`_ in 64-bit only and with Python 2.7.18
|
|
142
148
|
(and with geographiclib_ 1.52) on `Windows 10`_ in 64- and 32-bit.
|
|
143
149
|
|
|
144
150
|
A single-File and single-Directory application with ``pygeodesy`` has been bundled using PyInstaller_ 3.4
|
|
@@ -161,11 +167,11 @@ Notes
|
|
|
161
167
|
=====
|
|
162
168
|
|
|
163
169
|
All Python source code has been statically checked_ with Ruff_ using Python 3.13.9 and with PyChecker_, PyFlakes_,
|
|
164
|
-
PyCodeStyle_ (formerly Pep8) and McCabe_ using Python 2.7.18, both in 64-bit on macOS 26.
|
|
170
|
+
PyCodeStyle_ (formerly Pep8) and McCabe_ using Python 2.7.18, both in 64-bit on macOS 26.2 Tahoe only.
|
|
165
171
|
|
|
166
172
|
For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
|
|
167
173
|
|
|
168
|
-
*Last updated: Dec
|
|
174
|
+
*Last updated: Dec 31, 2025.*
|
|
169
175
|
|
|
170
176
|
License
|
|
171
177
|
=======
|
|
@@ -224,6 +230,7 @@ DEALINGS IN THE SOFTWARE.
|
|
|
224
230
|
.. _Garefs (GARS): https://WikiPedia.org/wiki/Global_Area_Reference_System
|
|
225
231
|
.. _GeoConvert: https://GeographicLib.SourceForge.io/C++/doc/utilities.html
|
|
226
232
|
.. _GeodSolve: https://GeographicLib.SourceForge.io/C++/doc/utilities.html
|
|
233
|
+
.. _Geod3Solve: https://GeographicLib.SourceForge.io/C++/doc/Geod3Solve.1.html
|
|
227
234
|
.. _geographiclib: https://PyPI.org/project/geographiclib
|
|
228
235
|
.. _GeographicLib.: https://GeographicLib.SourceForge.io/C++/doc/index.html
|
|
229
236
|
.. _Geohashes: https://www.Movable-Type.co.UK/scripts/geohash.html
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
-
pygeodesy/__init__.py,sha256=
|
|
2
|
+
pygeodesy/__init__.py,sha256=LJWArNEBwQusGv0qhNBOLJJjlAy-5oQqJ6wgce3p0wE,43782
|
|
3
3
|
pygeodesy/__main__.py,sha256=06sdpwiuTP1hPvKOdzjqhuuDqqpicErwnAYwioeiTNw,5597
|
|
4
4
|
pygeodesy/albers.py,sha256=1Jt-WWcawNw6Dj7wl6hPSLbYiGGZqFMCnRU8gyGvV7o,30908
|
|
5
5
|
pygeodesy/angles.py,sha256=68sNVXU3QKGZnIYyjWFcKhWlBKSmaduO--rjtoM2sqU,29996
|
|
@@ -8,7 +8,7 @@ pygeodesy/basics.py,sha256=bbQs7M1epOl7t8IF2xs5uA46rrdYdobSuiJJ6v5st0s,32988
|
|
|
8
8
|
pygeodesy/booleans.py,sha256=kEF7rFvQzUaGFdrDzOXo_GFauXmaDTnhd2LNDh69B28,72636
|
|
9
9
|
pygeodesy/cartesianBase.py,sha256=L6y0Mn3x25eLF0Wd6ntOLlyfvGqmIl15Akvs373lXhg,45382
|
|
10
10
|
pygeodesy/clipy.py,sha256=uLTbX6byZa6fi2Kir1WanfW47JSxAkmfngH3vD7TDfw,27481
|
|
11
|
-
pygeodesy/constants.py,sha256=
|
|
11
|
+
pygeodesy/constants.py,sha256=UsVlgLUwfvP-DPP5Fa51T-aJIe5cjLpwt0LVyQwMS70,21425
|
|
12
12
|
pygeodesy/css.py,sha256=Fb_z5nvu5j4To1WgXGPOaEaME71IZW747FdpL4YBczc,25793
|
|
13
13
|
pygeodesy/datums.py,sha256=3uB7cuFdhNNMxKq96J3FjdklwaKOcdshBrGMf1Osbms,34068
|
|
14
14
|
pygeodesy/dms.py,sha256=2jesqmjWy-Pze5VWtgbiyC8CbjeIFbPP1qt2nYriubw,42202
|
|
@@ -22,21 +22,21 @@ pygeodesy/ellipsoidalGeodSolve.py,sha256=wuA-veOYC95vcEnbr4zT0ZzDN7s6kSuMRHpd4V1
|
|
|
22
22
|
pygeodesy/ellipsoidalKarney.py,sha256=CxPB91CKA0q5E97TOcErTTQdufdB2dT4KF84QZtfnGM,18839
|
|
23
23
|
pygeodesy/ellipsoidalNvector.py,sha256=48N-KtVUn0wi9kXZe12hg0jABWNeaiNXyY__oS-x5I4,30146
|
|
24
24
|
pygeodesy/ellipsoidalVincenty.py,sha256=X4OpMPtoretveNjHlEXKL4ifmAARTRY0yxbIOlR26J8,26273
|
|
25
|
-
pygeodesy/ellipsoids.py,sha256=
|
|
25
|
+
pygeodesy/ellipsoids.py,sha256=u4jeDSP9smTzK5Y2PWTa4eGI5dxUdcHxSBL9sVVvzQs,109316
|
|
26
26
|
pygeodesy/elliptic.py,sha256=914gDJmHVu_zlyQJy4tfqTJmq2Buqq5w3Jt-7wrXpEo,45515
|
|
27
27
|
pygeodesy/epsg.py,sha256=wS8Mzzk70Fzry6c0fBA16VVez3ghKG2Dhgpo2eN_Ik8,8220
|
|
28
28
|
pygeodesy/errors.py,sha256=76wVrhxev-n-kBOHv3MicHell3ifA2whUp4SRCrqUx4,32633
|
|
29
29
|
pygeodesy/etm.py,sha256=3pQmpjsrnI0mgLwhkLOCOFq_44bkhHwXExf-Keyky2w,46796
|
|
30
|
-
pygeodesy/fmath.py,sha256
|
|
31
|
-
pygeodesy/formy.py,sha256=
|
|
30
|
+
pygeodesy/fmath.py,sha256=buLhJkanh06PU-CIzdT8V8nLeQdn7D4olI6E124NA6s,37984
|
|
31
|
+
pygeodesy/formy.py,sha256=0PLwO2coxgCIyGDMHM9T4EBqLUAlEYOFhdxYszmUzPU,78285
|
|
32
32
|
pygeodesy/frechet.py,sha256=FySLdZgLb_NXd81AILx4G2C9J6dxwI5uYW1MEHuEocg,35588
|
|
33
33
|
pygeodesy/fstats.py,sha256=EuyC9UrJ5K0IlZqM7h3C8C7tYDrTujqoBp9-V1ICPx0,28348
|
|
34
|
-
pygeodesy/fsums.py,sha256=
|
|
34
|
+
pygeodesy/fsums.py,sha256=EmjY74uPwCMxXVC3pOu2F5rqc42rsvXGWPGtvbDaG3c,105304
|
|
35
35
|
pygeodesy/gars.py,sha256=z7yvE6dRAjtXUAB9yakH8duwF2gBKbcjXUIznNnr8_w,11761
|
|
36
|
-
pygeodesy/geod3solve.py,sha256=
|
|
37
|
-
pygeodesy/geodesici.py,sha256=
|
|
36
|
+
pygeodesy/geod3solve.py,sha256=nWYPBilw5j1T-uWk_cDV7TdBpIVNP5SM2jjUsXn7y8s,21595
|
|
37
|
+
pygeodesy/geodesici.py,sha256=eHkXKDQzeFfJ6lVkGANqnEk5hQR-MkYXQlgXCLzbG3Y,74933
|
|
38
38
|
pygeodesy/geodesicw.py,sha256=bhwSBtHAaNAl487uAgifS42cKvcYTe-8O8M5S44u9_k,30029
|
|
39
|
-
pygeodesy/geodsolve.py,sha256=
|
|
39
|
+
pygeodesy/geodsolve.py,sha256=GqMn4PjXAT7jK0VjxeMv7FgNx-_T_LeAfeMda7wUSqM,25032
|
|
40
40
|
pygeodesy/geohash.py,sha256=LmjvzgrzD0Cj-xPCZNJp3LbVOQ7llaE2sAO0V0SxNOo,40124
|
|
41
41
|
pygeodesy/geoids.py,sha256=Fn3pOCokzQJuEY2UE11Ah5XuiT24WRmmoc3FeNhfpsg,86129
|
|
42
42
|
pygeodesy/hausdorff.py,sha256=_zfkZ4pzUE_6LwFD77RU9NC58aN8imglI7TfapM82Wc,32269
|
|
@@ -44,20 +44,20 @@ pygeodesy/heights.py,sha256=T_5ZhtFAskQf-1BHL2Nm5bTYQIMJj-d1UKhW11YPWvs,41011
|
|
|
44
44
|
pygeodesy/internals.py,sha256=_KTAnSPlLWYBEXaUxiDpE-nN-JbexcN5h_szyJwzgWE,24712
|
|
45
45
|
pygeodesy/interns.py,sha256=h7LupB9eEhwgW8mq3R4VMFI3i-49ObgXAEvV2JJmmpM,23521
|
|
46
46
|
pygeodesy/iters.py,sha256=xH719oFB-0z4jCAHeC6uLqyfWPtpQoSBF6Pgnoz5weQ,20345
|
|
47
|
-
pygeodesy/karney.py,sha256=
|
|
47
|
+
pygeodesy/karney.py,sha256=_HLXxYtoh8eIMfsvsH7f4irb0L1xHljnvgLf7_e3ixc,42115
|
|
48
48
|
pygeodesy/ktm.py,sha256=262-FbXSHpQnlpHKyqzMO4Uuf7DflDINSSSOEmRXyRc,27270
|
|
49
49
|
pygeodesy/latlonBase.py,sha256=as2BBvogFBANmyixQNgVWVfXuBSvcDtb200XzSMKzE4,75317
|
|
50
|
-
pygeodesy/lazily.py,sha256=
|
|
50
|
+
pygeodesy/lazily.py,sha256=yfdUlY0H2t-h627-oKijSRNJtilu9J9m4PcLguoL9F8,48640
|
|
51
51
|
pygeodesy/lcc.py,sha256=BXWEHDRgNOzAOM5dVBfpETWVdJ7Me378Wv93n2oR_UI,25785
|
|
52
52
|
pygeodesy/ltp.py,sha256=-dokXawH_nvyjYaQzPQ0pguB0yAlvybnFnokEwLE488,50893
|
|
53
53
|
pygeodesy/ltpTuples.py,sha256=6BcsN1rjshV1w80EtXR14TzDmZLl-YReFJ4UFL-DBt0,59101
|
|
54
54
|
pygeodesy/mgrs.py,sha256=ZUsW0ixGlS0YOuzXFoGj3N0XrI1PbuSVYldZuqKS3g8,29842
|
|
55
|
-
pygeodesy/named.py,sha256=
|
|
55
|
+
pygeodesy/named.py,sha256=CfOdOZrMTCPWtHju158dJl8Yc8OimWW7i6uZ0LMVFjs,52988
|
|
56
56
|
pygeodesy/namedTuples.py,sha256=mIwqxjSRqmJ7D4_BMYhQkSoAaaP3-rwnToNenu1k3yU,30598
|
|
57
57
|
pygeodesy/nvectorBase.py,sha256=hDLrOOBuxz0n5zNH3nyg5FlElUD2Yusd91PRL7QLooA,29927
|
|
58
58
|
pygeodesy/osgr.py,sha256=afrHMVQ6wrdCaKDXMuhXcDy0MTI-8HKQccSlKGUNwps,30852
|
|
59
59
|
pygeodesy/points.py,sha256=Fcz220qrQqLCI9b442sOb1wR0w12EsE1LDbLFwwXWhA,64497
|
|
60
|
-
pygeodesy/props.py,sha256=
|
|
60
|
+
pygeodesy/props.py,sha256=90WNv8voJGF_X4zEL_luSmZi3XNzA6gvLDAX9Sv6tCk,24658
|
|
61
61
|
pygeodesy/resections.py,sha256=47twtGa_PQ71QUwReECkRpVFyuRSuYhsCecS3cThEiA,43796
|
|
62
62
|
pygeodesy/simplify.py,sha256=8OJj7jkxJFVE5jQRvbpm14_Oxrv4Oju7atIGFRg3zUE,22068
|
|
63
63
|
pygeodesy/solveBase.py,sha256=4lKwoWCiDjQjaS_iMUZ7m8nkLL92yNHBcNsmNsulOdc,19631
|
|
@@ -65,7 +65,7 @@ pygeodesy/sphericalBase.py,sha256=54na1mQCuyZ1dYzpt801AC2B7PStLNmt3CRwAC2A03A,32
|
|
|
65
65
|
pygeodesy/sphericalNvector.py,sha256=N_qB3ziZMf0spE0fqd-GVW9omAy5YT3HdsE2DB2Td9Y,54948
|
|
66
66
|
pygeodesy/sphericalTrigonometry.py,sha256=YN-Gv2m1rWg2rzAXpuAFPu2WL-ARt3u1zKNWJLZ8JAk,64398
|
|
67
67
|
pygeodesy/streprs.py,sha256=tS21sthUtj06Jmh9rdyAbiczwjNjvZTMWvUmJwD9ODs,23728
|
|
68
|
-
pygeodesy/trf.py,sha256=
|
|
68
|
+
pygeodesy/trf.py,sha256=DPfcjdSEOz7xlhdRgfQVCnX5j9jUTkfK4sYGP4EbolI,119215
|
|
69
69
|
pygeodesy/units.py,sha256=9zAnu28f0c7pELZviZDukxz6hjeAwhBvH5wq8F2-cww,35561
|
|
70
70
|
pygeodesy/unitsBase.py,sha256=9AHGuUuGWmKUYHNZt6tVxUkLDvSAyr2gitikME75eZg,14141
|
|
71
71
|
pygeodesy/ups.py,sha256=_Qyp1cBhAGOGPya09zZQYO468H2Nc8jxKYw-HgOMa8o,23288
|
|
@@ -103,10 +103,10 @@ pygeodesy/deprecated/rhumbx.py,sha256=SdCzJgaSMBxZUQpT3vu52eE1neZTMkddz1Vuu4KsGx
|
|
|
103
103
|
pygeodesy/geodesicx/_C4_24.py,sha256=qkKFpXNPBo2RRfCjNV_AjNO4nZm_wsUux4IZuyfZJt8,90707
|
|
104
104
|
pygeodesy/geodesicx/_C4_27.py,sha256=rrcq4FeTQThu4vmYqLK0cmjpCLkPTCQbS728AbDjPRw,134215
|
|
105
105
|
pygeodesy/geodesicx/_C4_30.py,sha256=A6Keryy3a4iF6chjf1RMFG-Fb9M49_QQaI-4T-2NXx0,201921
|
|
106
|
-
pygeodesy/geodesicx/__init__.py,sha256=
|
|
106
|
+
pygeodesy/geodesicx/__init__.py,sha256=9zxci6ekoDGhyq7wAED3xPCD3-bJ_-Vx8vteCHvUOeI,2468
|
|
107
107
|
pygeodesy/geodesicx/__main__.py,sha256=834PZqoetW0V3xeIvCSbh6TPMCv8wq2-mUIm8cLkv-w,4330
|
|
108
108
|
pygeodesy/geodesicx/gx.py,sha256=qXz-YWiIjJhg2ytyFKFvjXAkVqTqQ26TzzGU3bncbfE,60438
|
|
109
|
-
pygeodesy/geodesicx/gxarea.py,sha256=
|
|
109
|
+
pygeodesy/geodesicx/gxarea.py,sha256=dyoAZsCeytAUBCHG4Nxjll8AWcXmBHKzkxzIztj9X-g,20520
|
|
110
110
|
pygeodesy/geodesicx/gxbases.py,sha256=FC9oZLaKy-uf8o5Bmmr7MK4jBBvhzgaETzb5Qdixa04,6319
|
|
111
111
|
pygeodesy/geodesicx/gxline.py,sha256=PoPa_Qz9KSmP6Pb3LZgQg-9FcLpvMuVBRwxAkAtrYOw,28284
|
|
112
112
|
pygeodesy/rhumb/__init__.py,sha256=wetV7OwO6z-_D0FVTphwu6u0bA7h-sG3pfZa3WGAvfk,2296
|
|
@@ -115,11 +115,11 @@ pygeodesy/rhumb/bases.py,sha256=RBWGVBogfZAT7azFe-46mF_hUoI-bIvWCxwoiE8-Pvo,5421
|
|
|
115
115
|
pygeodesy/rhumb/ekx.py,sha256=L__f41hdrU8cVcqbWolEvdLAXtQdULlYhxsbccoYwok,24058
|
|
116
116
|
pygeodesy/rhumb/solve.py,sha256=85GonvF3qsp8I--XA2DUuwR0J7BU4S3O9BjnLEStcMw,24910
|
|
117
117
|
pygeodesy/triaxials/__init__.py,sha256=dZ3zXLWIIGhjMBYE6-8gJSfokNw4x5wg7eaTGSZH2Hw,3894
|
|
118
|
-
pygeodesy/triaxials/bases.py,sha256=
|
|
118
|
+
pygeodesy/triaxials/bases.py,sha256=Fv_sPyC5Mp_LouFbuOywK7BRcR0I2XmLeKCIOtlvX5w,34945
|
|
119
119
|
pygeodesy/triaxials/conformal3.py,sha256=FrJLQ0m58YvP_heh9jFH5TkhR46kSTzCIgtmtRPMErQ,23883
|
|
120
|
-
pygeodesy/triaxials/triaxial3.py,sha256=
|
|
120
|
+
pygeodesy/triaxials/triaxial3.py,sha256=jCPAHwofXTZKpAN8xNtNlT2f5R0COzn46E1y_5mKnyU,40581
|
|
121
121
|
pygeodesy/triaxials/triaxial5.py,sha256=C38E8Atkxfiu8J6HOfkUUVU5lRn2kIjdSh5opkMep-s,53028
|
|
122
|
-
pygeodesy-25.12.
|
|
123
|
-
pygeodesy-25.12.
|
|
124
|
-
pygeodesy-25.12.
|
|
125
|
-
pygeodesy-25.12.
|
|
122
|
+
pygeodesy-25.12.31.dist-info/METADATA,sha256=cCh8F1b6GYHz1DBtBYPlSOdW5tM0JAMq7ATtdgU0yYg,20710
|
|
123
|
+
pygeodesy-25.12.31.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
|
|
124
|
+
pygeodesy-25.12.31.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
125
|
+
pygeodesy-25.12.31.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|