pygeodesy 25.1.9__py2.py3-none-any.whl → 25.4.25__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.
Files changed (96) hide show
  1. pygeodesy/__init__.py +35 -31
  2. pygeodesy/__main__.py +3 -3
  3. pygeodesy/albers.py +29 -36
  4. pygeodesy/auxilats/_CX_4.py +2 -2
  5. pygeodesy/auxilats/_CX_6.py +2 -2
  6. pygeodesy/auxilats/_CX_8.py +2 -2
  7. pygeodesy/auxilats/_CX_Rs.py +59 -40
  8. pygeodesy/auxilats/__init__.py +3 -3
  9. pygeodesy/auxilats/__main__.py +9 -7
  10. pygeodesy/auxilats/auxAngle.py +2 -2
  11. pygeodesy/auxilats/auxLat.py +13 -13
  12. pygeodesy/auxilats/auxily.py +13 -9
  13. pygeodesy/azimuthal.py +7 -6
  14. pygeodesy/basics.py +65 -22
  15. pygeodesy/booleans.py +12 -10
  16. pygeodesy/cartesianBase.py +21 -20
  17. pygeodesy/clipy.py +11 -10
  18. pygeodesy/constants.py +11 -10
  19. pygeodesy/css.py +14 -11
  20. pygeodesy/datums.py +8 -8
  21. pygeodesy/deprecated/bases.py +2 -2
  22. pygeodesy/deprecated/classes.py +2 -2
  23. pygeodesy/deprecated/consterns.py +4 -4
  24. pygeodesy/dms.py +8 -8
  25. pygeodesy/ecef.py +10 -7
  26. pygeodesy/elevations.py +9 -8
  27. pygeodesy/ellipsoidalBase.py +19 -8
  28. pygeodesy/ellipsoidalBaseDI.py +17 -15
  29. pygeodesy/ellipsoidalNvector.py +6 -3
  30. pygeodesy/ellipsoidalVincenty.py +4 -1
  31. pygeodesy/ellipsoids.py +167 -138
  32. pygeodesy/elliptic.py +9 -9
  33. pygeodesy/errors.py +44 -43
  34. pygeodesy/etm.py +9 -9
  35. pygeodesy/fmath.py +10 -9
  36. pygeodesy/formy.py +11 -12
  37. pygeodesy/frechet.py +216 -109
  38. pygeodesy/fstats.py +5 -4
  39. pygeodesy/fsums.py +107 -122
  40. pygeodesy/gars.py +7 -7
  41. pygeodesy/geodesici.py +15 -14
  42. pygeodesy/geodesicw.py +34 -32
  43. pygeodesy/geodesicx/__init__.py +1 -1
  44. pygeodesy/geodesicx/__main__.py +12 -10
  45. pygeodesy/geodesicx/gx.py +30 -33
  46. pygeodesy/geodesicx/gxarea.py +2 -2
  47. pygeodesy/geodesicx/gxline.py +5 -5
  48. pygeodesy/geodsolve.py +18 -17
  49. pygeodesy/geohash.py +7 -8
  50. pygeodesy/geoids.py +35 -34
  51. pygeodesy/hausdorff.py +17 -13
  52. pygeodesy/heights.py +2 -4
  53. pygeodesy/internals.py +31 -46
  54. pygeodesy/interns.py +12 -9
  55. pygeodesy/iters.py +8 -8
  56. pygeodesy/karney.py +73 -66
  57. pygeodesy/ktm.py +5 -5
  58. pygeodesy/latlonBase.py +14 -18
  59. pygeodesy/lazily.py +73 -74
  60. pygeodesy/lcc.py +11 -9
  61. pygeodesy/ltp.py +8 -7
  62. pygeodesy/ltpTuples.py +2 -2
  63. pygeodesy/mgrs.py +7 -6
  64. pygeodesy/named.py +47 -31
  65. pygeodesy/nvectorBase.py +7 -7
  66. pygeodesy/osgr.py +9 -8
  67. pygeodesy/points.py +12 -10
  68. pygeodesy/props.py +25 -25
  69. pygeodesy/resections.py +11 -10
  70. pygeodesy/rhumb/__init__.py +1 -1
  71. pygeodesy/rhumb/aux_.py +14 -14
  72. pygeodesy/rhumb/bases.py +22 -20
  73. pygeodesy/rhumb/ekx.py +6 -6
  74. pygeodesy/rhumb/solve.py +15 -15
  75. pygeodesy/solveBase.py +3 -3
  76. pygeodesy/sphericalBase.py +6 -6
  77. pygeodesy/sphericalNvector.py +6 -5
  78. pygeodesy/sphericalTrigonometry.py +8 -7
  79. pygeodesy/streprs.py +14 -14
  80. pygeodesy/trf.py +14 -12
  81. pygeodesy/triaxials.py +29 -26
  82. pygeodesy/units.py +5 -4
  83. pygeodesy/unitsBase.py +5 -4
  84. pygeodesy/ups.py +3 -3
  85. pygeodesy/utily.py +4 -4
  86. pygeodesy/utmups.py +4 -4
  87. pygeodesy/utmupsBase.py +88 -18
  88. pygeodesy/vector2d.py +18 -11
  89. pygeodesy/vector3d.py +7 -6
  90. pygeodesy/webmercator.py +6 -5
  91. pygeodesy/wgrs.py +6 -5
  92. {pygeodesy-25.1.9.dist-info → pygeodesy-25.4.25.dist-info}/METADATA +35 -31
  93. pygeodesy-25.4.25.dist-info/RECORD +118 -0
  94. pygeodesy-25.1.9.dist-info/RECORD +0 -118
  95. {pygeodesy-25.1.9.dist-info → pygeodesy-25.4.25.dist-info}/WHEEL +0 -0
  96. {pygeodesy-25.1.9.dist-info → pygeodesy-25.4.25.dist-info}/top_level.txt +0 -0
pygeodesy/vector2d.py CHANGED
@@ -2,11 +2,15 @@
2
2
  # -*- coding: utf-8 -*-
3
3
 
4
4
  u'''2- or 3-D vectorial functions L{circin6}, L{circum3}, L{circum4_},
5
- L{iscolinearWith}, L{meeus2}, L{nearestOn}, L{radii11}, L{soddy4} and
6
- L{trilaterate2d2}.
5
+ L{iscolinearWith}, L{meeus2}, L{nearestOn}, L{radii11}, L{soddy4},
6
+ L{triaxum5} and L{trilaterate2d2}.
7
+
8
+ @note: Functions L{circin6}, L{circum3}, L{circum4_}, L{soddy4} and
9
+ L{triaxum5} require U{numpyhttps://PyPI.org/project/numpy>}
10
+ version 1.10 or newer to be installed.
7
11
  '''
8
12
 
9
- from pygeodesy.basics import len2, map2, _xnumpy
13
+ from pygeodesy.basics import len2, map2, _xnumpy, typename
10
14
  from pygeodesy.constants import EPS, EPS0, EPS02, EPS4, INF, INT0, \
11
15
  _EPS4e8, isnear0, _0_0, _0_25, _0_5, _N_0_5, \
12
16
  _1_0, _1_0_1T, _N_1_0, _2_0, _N_2_0, _4_0
@@ -14,6 +18,7 @@ from pygeodesy.errors import _and, _AssertionError, IntersectionError, NumPyErro
14
18
  PointsError, TriangleError, _xError, _xkwds
15
19
  from pygeodesy.fmath import fabs, fdot, fdot_, hypot, hypot2_, sqrt
16
20
  from pygeodesy.fsums import _Fsumf_, fsumf_, fsum1f_
21
+ # from pygeodesy.internals import typename # from .basics
17
22
  from pygeodesy.interns import NN, _a_, _and_, _b_, _c_, _center_, _coincident_, \
18
23
  _colinear_, _COMMASPACE_, _concentric_, _few_, \
19
24
  _intersection_, _invalid_, _near_, _no_, _of_, \
@@ -31,7 +36,7 @@ from contextlib import contextmanager
31
36
  # from math import fabs, sqrt # from .fmath
32
37
 
33
38
  __all__ = _ALL_LAZY.vector2d
34
- __version__ = '24.11.21'
39
+ __version__ = '25.04.16'
35
40
 
36
41
  _cA_ = 'cA'
37
42
  _cB_ = 'cB'
@@ -184,7 +189,7 @@ def _circin6(point1, point2, point3, eps=EPS4, useZ=True, dLL3=False, **Vector_k
184
189
 
185
190
  r = t.rIn
186
191
  c, d = _tricenter3d2(c1, r, c2, r, c3, r, eps=eps, useZ=useZ, dLL3=dLL3,
187
- **_xkwds(Vector_kwds, Vector=V, name=circin6.__name__))
192
+ **_xkwds(Vector_kwds, Vector=V, name=typename(circin6)))
188
193
  return Circin6Tuple(r, c, d, cA, cB, cC)
189
194
 
190
195
 
@@ -236,7 +241,7 @@ def _circum3(p1, point2, point3, circum=True, eps=EPS4, useZ=True, dLL3=False,
236
241
  r, d, p2, p3 = _meeus4(p1, point2, point3, circum=circum, useZ=useZ,
237
242
  clas=clas, **clas_kwds)
238
243
  if d is None: # Meeus' Type II or circum=True
239
- kwds = _xkwds(clas_kwds, eps=eps, Vector=clas, name=circum3.__name__)
244
+ kwds = _xkwds(clas_kwds, eps=eps, Vector=clas, name=typename(circum3))
240
245
  c, d = _tricenter3d2(p1, r, p2, r, p3, r, useZ=useZ, dLL3=dLL3, **kwds)
241
246
  else: # Meeus' Type I
242
247
  c, d = d, None
@@ -386,7 +391,7 @@ def _meeus4(A, point2, point3, circum=False, useZ=True, clas=None, **clas_kwds):
386
391
  r = sqrt(a * _0_25) if a > EPS02 else INT0
387
392
  t = B.plus(C).times(_0_5) # Meeus' Type I
388
393
  if clas is not None:
389
- t = clas(t.x, t.y, t.z, **_xkwds(clas_kwds, name=meeus2.__name__))
394
+ t = clas(t.x, t.y, t.z, **_xkwds(clas_kwds, name=typename(meeus2)))
390
395
  return r, t, p2, p3
391
396
 
392
397
 
@@ -410,6 +415,8 @@ class _numpy(object): # see also .formy._idllmn6, .geodesicw._wargs, .latlonBas
410
415
 
411
416
  @Property_RO
412
417
  def array(self):
418
+ '''Get U{numpy.array<https://NumPy.org/doc/2.2/reference/generated/numpy.array.html#numpy.array>}.
419
+ '''
413
420
  return self.np.array
414
421
 
415
422
  def least_squares3(self, A, b):
@@ -595,7 +602,7 @@ def soddy4(point1, point2, point3, eps=EPS4, useZ=True):
595
602
  c, d = _tricenter3d2(p1, t.rA + r,
596
603
  p2, t.rB + r,
597
604
  p3, t.rC + r, eps=eps, useZ=useZ,
598
- Vector=point1.classof, name=soddy4.__name__)
605
+ Vector=point1.classof, name=typename(soddy4))
599
606
  return Soddy4Tuple(r, c, d, t.roS)
600
607
 
601
608
 
@@ -749,7 +756,7 @@ def _trilaterate2d2(x1, y1, radius1, x2, y2, radius2, x3, y3, radius3,
749
756
  _astr(x2=x2, y2=y2, radius2=r2),
750
757
  _astr(x3=x3, y3=y3, radius3=r3)), txt=t)
751
758
  t = Vector2Tuple(fdot_(c, e, -b, f) / q,
752
- fdot_(a, f, -c, d) / q, name=trilaterate2d2.__name__)
759
+ fdot_(a, f, -c, d) / q, name=typename(trilaterate2d2))
753
760
 
754
761
  if eps and eps > 0: # check distances to center vs radius
755
762
  for x, y, r in ((x1, y1, r1), (x2, y2, r2), (x3, y3, r3)):
@@ -784,7 +791,7 @@ def _trilaterate3d2(c1, r1, c2, r2, c3, r3, eps=EPS4, coin=False, # MCCABE 13
784
791
  def _N3(t01, x, z):
785
792
  # compute x, y and z and return as B{C{clas}} or B{C{Vector}}
786
793
  v = x.plus(z.times(t01))
787
- n = trilaterate3d2.__name__
794
+ n = typename(trilaterate3d2)
788
795
  return _nVc(v, **_xkwds(clas_Vector_and_kwds, name=n))
789
796
 
790
797
  c2 = _otherV3d(center2=c2, NN_OK=False)
@@ -828,7 +835,7 @@ def _trilaterate3d2(c1, r1, c2, r2, c3, r3, eps=EPS4, coin=False, # MCCABE 13
828
835
  r = repr(r1) if r1 == r2 == r3 else _reprs(r1, r2, r3)
829
836
  t = _SPACE_(t, _of_, _reprs(c1, c2, c3), _with_, _radius_, r)
830
837
  elif Z is None:
831
- t = _COMMASPACE_(t, _no_(_numpy.null_space2.__name__))
838
+ t = _COMMASPACE_(t, _no_(typename(_numpy.null_space2)))
832
839
  return t
833
840
 
834
841
  # coincident, concentric, colinear, too distant, no intersection:
pygeodesy/vector3d.py CHANGED
@@ -8,12 +8,13 @@ L{trilaterate3d2}.
8
8
  '''
9
9
 
10
10
  from pygeodesy.constants import EPS, EPS0, EPS1, EPS4, INT0, isnear0, \
11
- _0_0, _1_0
11
+ _0_0, _1_0, typename
12
12
  from pygeodesy.errors import IntersectionError, _ValueError, VectorError, \
13
13
  _xattr, _xError, _xkwds, _xkwds_get, _xkwds_item2
14
14
  from pygeodesy.fmath import euclid, fabs, fdot, hypot, sqrt
15
15
  # from pygeodesy.fsums import fsum1_ # from _MODS
16
16
  # from pygeodesy.formy import _radical2 # _MODS
17
+ # from pygeodesy.internals import typename # from .constants
17
18
  from pygeodesy.interns import _COMMA_, _concentric_, _intersection_, \
18
19
  _near_, _negative_, _no_, _too_
19
20
  from pygeodesy.iters import PointsIter, Fmt
@@ -25,13 +26,13 @@ from pygeodesy.namedTuples import Intersection3Tuple, NearestOn2Tuple, \
25
26
  # from pygeodesy.streprs import Fmt # from .iters
26
27
  from pygeodesy.units import _fi_j2, _isDegrees, Radius, Radius_
27
28
  from pygeodesy.utily import atan2b, sincos2d
28
- # import pygeodesy.vector2d as _vector2d # _MODS.into
29
+ # from pygeodesy import vector2d as _vector2d # _MODS.into
29
30
  from pygeodesy.vector3dBase import Vector3dBase
30
31
 
31
32
  # from math import fabs, sqrt # from .fmath
32
33
 
33
34
  __all__ = _ALL_LAZY.vector3d
34
- __version__ = '24.11.22'
35
+ __version__ = '25.04.21'
35
36
 
36
37
  _vector2d = _MODS.into(vector2d=__name__)
37
38
 
@@ -529,7 +530,7 @@ def intersection3d3(start1, end1, start2, end2, eps=EPS, useZ=True,
529
530
  except (TypeError, ValueError) as x:
530
531
  raise _xError(x, start1=start1, end1=end1, start2=start2, end2=end2)
531
532
  v = _nVc(v, **_xkwds(Vector_and_kwds, clas=start1.classof,
532
- name=intersection3d3.__name__))
533
+ name=typename(intersection3d3)))
533
534
  return Intersection3Tuple(v, o1, o2)
534
535
 
535
536
 
@@ -585,7 +586,7 @@ def _intersects2(center1, r1, center2, r2, sphere=True, too_d=None, # in Cartes
585
586
 
586
587
  def _nV3(x, y, z):
587
588
  v = Vector3d(x, y, z)
588
- n = intersections2.__name__
589
+ n = typename(intersections2)
589
590
  return _nVc(v, **_xkwds(clas_Vector_and_kwds, name=n))
590
591
 
591
592
  def _xV3(c1, u, x, y):
@@ -754,7 +755,7 @@ def nearestOn6(point, points, closed=False, useZ=True, **Vector_and_kwds): # ep
754
755
  r = _otherV3d(useZ=useZ, point=point)
755
756
  D2 = r.equirectangular # distance squared
756
757
 
757
- Ps = PointsIter(points, loop=1, name=nearestOn6.__name__)
758
+ Ps = PointsIter(points, loop=1, name=typename(nearestOn6))
758
759
  p1 = c = s = e = _otherV3d(useZ=useZ, i=0, points=Ps[0])
759
760
  c2 = D2(c) # == r.minus(c).length2
760
761
 
pygeodesy/webmercator.py CHANGED
@@ -18,11 +18,12 @@ http://earth-info.nga.mil/GandG/wgs84/web_mercator/(U)%20NGA_SIG_0011_1.0.0_WEBM
18
18
  # make sure int/int division yields float quotient, see .basics
19
19
  from __future__ import division as _; del _ # PYCHOK semicolon
20
20
 
21
- from pygeodesy.basics import _splituple, _xinstanceof
21
+ from pygeodesy.basics import _isin, _splituple, _xinstanceof, typename
22
22
  from pygeodesy.constants import PI_2, R_MA, _2_0
23
23
  from pygeodesy.datums import Datum, _spherical_datum
24
24
  from pygeodesy.dms import clipDegrees, parseDMS2
25
25
  from pygeodesy.errors import _parseX, _ValueError, _xattr, _xkwds, _xkwds_pop2
26
+ # from pygeodesy.internals import typename # from .basics
26
27
  from pygeodesy.interns import NN, _COMMASPACE_, _datum_, _earth_, _easting_, \
27
28
  _northing_, _radius_, _SPACE_, _x_, _y_
28
29
  # from pygeodesy.lazily import _ALL_LAZY from .named
@@ -36,7 +37,7 @@ from pygeodesy.utily import degrees90, degrees180
36
37
  from math import atan, atanh, exp, radians, sin, tanh
37
38
 
38
39
  __all__ = _ALL_LAZY.webmercator
39
- __version__ = '24.11.06'
40
+ __version__ = '25.04.14'
40
41
 
41
42
  # _FalseEasting = 0 # false Easting (C{meter})
42
43
  # _FalseNorthing = 0 # false Northing (C{meter})
@@ -126,7 +127,7 @@ class Wm(_NamedBase):
126
127
 
127
128
  @see: Method C{toLatLon} for other return types.
128
129
  '''
129
- d = self.datum if datum in (None, self.datum, self.radius) else _datum(datum)
130
+ d = self.datum if _isin(datum, None, self.datum, self.radius) else _datum(datum)
130
131
  E = d.ellipsoid
131
132
  R = self.radius
132
133
  x = self.x / R
@@ -240,7 +241,7 @@ class Wm(_NamedBase):
240
241
  fs += (radius,)
241
242
  elif radius: # is True:
242
243
  fs += (self.radius,)
243
- elif radius not in (None, False):
244
+ elif not _isin(radius, None, False):
244
245
  raise WebMercatorError(radius=radius)
245
246
  t = strs(fs, prec=prec)
246
247
  return t if sep is None else sep.join(t)
@@ -257,7 +258,7 @@ class Wm(_NamedBase):
257
258
  '''
258
259
  return self._y
259
260
 
260
- Wm._datum = _spherical_datum(Wm._radius, name=Wm.__name__, raiser=_radius_) # PYCHOK defaults
261
+ Wm._datum = _spherical_datum(Wm._radius, name=typename(Wm), raiser=_radius_) # PYCHOK defaults
261
262
  Wm._earths = (Wm._radius, Wm._datum, Wm._datum.ellipsoid)
262
263
 
263
264
 
pygeodesy/wgrs.py CHANGED
@@ -13,15 +13,16 @@ but with modified C{precision} and extended with C{height} and C{radius}.
13
13
  @see: U{World Geographic Reference System
14
14
  <https://WikiPedia.org/wiki/World_Geographic_Reference_System>}.
15
15
  '''
16
- # from pygeodesy.basics import isstr # from .named
16
+ from pygeodesy.basics import isstr, typename
17
17
  from pygeodesy.constants import INT0, _float, _off90, _0_001, \
18
18
  _0_5, _1_0, _2_0, _60_0, _1000_0
19
19
  from pygeodesy.dms import parse3llh
20
20
  from pygeodesy.errors import _ValueError, _xattr, _xStrError
21
+ # from pygeodesy.internals import typename # from .basics
21
22
  from pygeodesy.interns import NN, _0to9_, _AtoZnoIO_, _COMMA_, \
22
23
  _height_, _INV_, _radius_, _SPACE_
23
24
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY
24
- from pygeodesy.named import _name2__, nameof, isstr, Property_RO
25
+ from pygeodesy.named import _name2__, nameof, Property_RO
25
26
  from pygeodesy.namedTuples import LatLon2Tuple, LatLonPrec3Tuple
26
27
  # from pygeodesy.props import Property_RO # from .named
27
28
  from pygeodesy.streprs import Fmt, _0wd
@@ -32,7 +33,7 @@ from pygeodesy.utily import ft2m, m2ft, m2NM
32
33
  from math import floor
33
34
 
34
35
  __all__ = _ALL_LAZY.wgrs
35
- __version__ = '24.11.06'
36
+ __version__ = '25.04.14'
36
37
 
37
38
  _Base = 10
38
39
  _BaseLen = 4
@@ -86,7 +87,7 @@ def _2geostr2(georef):
86
87
  return g, _2Precision(p - 1)
87
88
 
88
89
  except (AttributeError, TypeError, ValueError) as x:
89
- raise WGRSError(Georef.__name__, georef, cause=x)
90
+ raise WGRSError(typename(Georef), georef, cause=x)
90
91
 
91
92
 
92
93
  def _2Precision(precision):
@@ -300,7 +301,7 @@ def decode5(georef, center=True):
300
301
  return Radius(NM / m2NM(1), name=g_n, Error=WGRSError)
301
302
 
302
303
  def _split2(g, Unit, _2m):
303
- n = Unit.__name__
304
+ n = typename(Unit)
304
305
  i = max(g.find(n[0]), g.rfind(n[0]))
305
306
  if i > _BaseLen:
306
307
  return g[:i], _2m(int(g[i+1:]), _SPACE_(georef, n))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pygeodesy
3
- Version: 25.1.9
3
+ Version: 25.4.25
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 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 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 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-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 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 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 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-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
@@ -29,7 +29,7 @@ PyGeodesy
29
29
  =========
30
30
 
31
31
  A pure Python implementation of ``geodesy`` tools for various ellipsoidal and spherical
32
- earth models using precision trigonometric, vector-based, exact, elliptic, iterative and
32
+ earth models using precision exact, elliptic, trigonometric, vector-based, iterative and
33
33
  approximate methods for geodetic (lat-/longitude), geocentric (ECEF_ cartesian) and certain
34
34
  `triaxial ellipsoidal`_ coordinates.
35
35
 
@@ -42,9 +42,7 @@ provides a geodetic LatLon_ and a geocentric Cartesian_ class with methods and f
42
42
  distance, surface area, perimeter, forward and reverse azimuth, initial and final bearing, intermediate
43
43
  and nearest points, intersections of geodesic, great circle and rhumb lines, circle intersections and
44
44
  secants, `3-point resections`_, triangulation, trilateration (by intersection, by overlap and in
45
- 3d), conversions and unrolling, among other things. For more information and further details see the
46
- documentation_, the descriptions of `Latitude/Longitude`_, Vincenty_ and `Vector-based`_ geodesy, the
47
- original `JavaScript source`_ or docs_ and *Karney*\'s Python geographiclib_ and C++ `GeographicLib.`_
45
+ 3d), conversions and unrolling, among other things.
48
46
 
49
47
  Also included are modules for conversions to and from `Cassini-Soldner`_, ECEF_ (Earth-Centered,
50
48
  Earth-Fixed cartesian), UTM_ (Universal Transverse Mercator and Exact_), UPS_ (Universal Polar
@@ -59,14 +57,19 @@ polygons of *LatLon* points using the `Cohen-Sutherland`_, `Forster-Hormann-Popa
59
57
  `Greiner-Hormann`_, `Liang-Barsky`_ and `Sutherland-Hodgman`_ methods or to perform *boolean*
60
58
  operations between (composite) polygons, functions to simplify_ or linearize a path of *LatLon*
61
59
  points (or a `numpy array`_), including implementations of the `Ramer-Douglas-Peucker`_,
62
- `Visvalingam-Whyatt`_ and `Reumann-Witkam`_ algorithms and modified versions of the former. Other
63
- classes interpolate_ the Height_ of *LatLon* points and Geoid_ models or compute various Fréchet_
64
- or Hausdorff_ distances.
60
+ `Visvalingam-Whyatt`_ and `Reumann-Witkam`_ algorithms and modified versions of the former.
61
+
62
+ Plus modules and classes to interpolate_ the Height_ of *LatLon* points and Geoid_ models, compute
63
+ various Fréchet_ or Hausdorff_ distances or perform *boolean* operations between (composite) polygons.
64
+
65
+ For further details see the documentation_, the descriptions of `Latitude/Longitude`_, Vincenty_ and
66
+ `Vector-based`_ geodesy, the original `JavaScript source`_ or docs_ and *Karney*\'s Python geographiclib_
67
+ and C++ `GeographicLib.`_
65
68
 
66
69
  Installation
67
70
  ============
68
71
 
69
- To install PyGeodesy, type ``python[3] -m pip install pygeodesy`` or ``python[3] -m easy_install pygeodesy``
72
+ To install ``pygeodesy``, type ``python[3] -m pip install pygeodesy`` or ``python[3] -m easy_install pygeodesy``
70
73
  in a terminal or command window.
71
74
 
72
75
  If the wheel ``pygeodesy-yy.m.d-py2.py3-none-any.whl`` is missing in `PyPI Download files`_, download
@@ -76,21 +79,22 @@ and verify with ``python[3] -m pygeodesy``.
76
79
  Alternatively, download ``pygeodesy-yy.m.d.tar.gz`` from PyPI_ or GitHub_, ``unzip`` the downloaded file,
77
80
  ``cd`` to directory ``pygeodesy-yy.m.d`` and type ``python[3] setup.py install``.
78
81
 
79
- To run all PyGeodesy tests, type ``python[3] test/run.py`` or type ``python[3] test/unitTestSuite.py``
82
+ To run all ``pygeodesy`` tests, type ``python[3] test/run.py`` or type ``python[3] test/unitTestSuite.py``
80
83
  before or after installation.
81
84
 
82
85
  Dependencies
83
86
  ============
84
87
 
85
- Installation of *Karney*\'s Python package geographiclib_ is optional, but required to use modules
86
- ``ellipsoidalKarney`` and ``css``, ``azimuthal`` classes ``EquidistantKarney`` and ``GnomonicKarney``
87
- and the ``HeightIDWkarney`` interpolator.
88
+ Installation of *Karney*\'s Python package geographiclib_ is optional, but required for module
89
+ ``ellipsoidalKarney``, ``azimuthal`` classes ``EquidistantKarney`` and ``GnomonicKarney`` and the
90
+ ``HeightIDWkarney`` interpolator.
88
91
 
89
92
  Both numpy_ and scipy_ must be installed for most Geoid_ and Height_ interpolators, except ``GeoidKarney``
90
93
  and the ``HeigthIDW...`` ones.
91
94
 
92
- Functions and ``LatLon`` methods ``circin6``, ``circum3``, ``circum4_``, ``soddy4``, ``trilaterate3d2``
93
- and ``trilaterate5`` do and modules ``auxilats`` and ``rhumb`` may require numpy_.
95
+ Functions and ``LatLon`` methods ``circin6``, ``circum3``, ``circum4_`` and ``soddy4`` and functions
96
+ ``triaxum5`` and ``trilaterate3d2`` require numpy_ to be installed, modules ``auxilats`` and ``rhumb``
97
+ may need numpy_.
94
98
 
95
99
  Modules ``ellipsoidalGeodSolve`` and ``geodsolve`` and ``azimuthal`` classes ``EquidistantGeodSolve``
96
100
  and ``GnomonicGeodSolve`` depend on *Karney*\'s C++ utility GeodSolve_ to be executable and set with
@@ -108,44 +112,44 @@ variable ``PYGEODESY_RHUMBSOLVE`` or with property ``Ellipsoid.rhumbsolve``.
108
112
  Documentation
109
113
  =============
110
114
 
111
- In addition to the ``pygeodesy`` package, the PyGeodesy_ `distribution files`_ contain the tests, the
115
+ In addition to the ``pygeodesy`` package, the pygeodesy_ `distribution files`_ contain the tests, the
112
116
  test results (on macOS only) and the complete documentation_ generated by Epydoc_ using command line:
113
- `epydoc --html --no-private --no-source --name=pygeodesy --url=... -v pygeodesy``.
117
+ ``epydoc --html --no-private --no-source --name=pygeodesy --url=... -v pygeodesy``.
114
118
 
115
119
  Tests
116
120
  =====
117
121
 
118
- The tests ran with Python 3.13.1 (with geographiclib_ 2.0), 3.12.7 (with geographiclib_ 2.0, numpy_ 2.1.0,
122
+ The tests ran with Python 3.13.3 (with geographiclib_ 2.0), 3.12.7 (with geographiclib_ 2.0, numpy_ 2.1.0,
119
123
  scipy_ 1.14.1, GeodSolve_ 2.3, IntersectTool_ 2.3 and RhumbSolve_ 2.3), 3.11.5 (with geographiclib_ 2.0,
120
124
  numpy_ 1.24.2 and scipy_ 1.10.1), Python 3.10.8 (with geographiclib_ 2.0, numpy_ 1.23.3, scipy_ 1.9.1,
121
125
  GeoConvert_ 2.3, GeodSolve_ 2.3), Python 3.9.6 and Python 2.7.18 (with geographiclib_ 1.50, numpy_ 1.16.6,
122
- scipy_ 1.2.2, GeoConvert_ 2.3, GeodSolve_ 2.3, IntersectTool_ 2.3 and RhumbSolve_ 2.3), all on macOS 14.6.1
123
- Sonoma in 64-bit.
126
+ scipy_ 1.2.2, GeoConvert_ 2.3, GeodSolve_ 2.3, IntersectTool_ 2.3 and RhumbSolve_ 2.3), all on macOS 15.4.1
127
+ Sequoia in 64-bit.
124
128
 
125
129
  All tests ran with and without ``lazy import`` for Python 3 and with command line option ``-W default``
126
130
  and env variable ``PYGEODESY_WARNINGS=on`` for all Python versions. The results of those tests are
127
131
  included in the distribution files.
128
132
 
129
- Python 3.13.1, 3.12.7, 3.11.5 and 3.10.8 run on Apple M1 Silicon (``arm64``), *natively*. Python 2.7.18
130
- runs on Intel (``x86_64``) or Intel *emulation* (\"``arm64_x86_64``\", see function `pygeodesy.machine`_).
133
+ Python 3.13.3, 3.12.7, 3.11.5 and 3.10.8 run on Apple M4 Si (``arm64``), *natively*. Python 2.7.18 runs
134
+ on Intel (``x86_64``) or Intel *emulation* (\"``arm64_x86_64``\", see function `pygeodesy.machine`_).
131
135
 
132
136
  Test coverage has been measured with coverage_ 7.6.1 using Python 3.13.1, 3.12.7, 3.11.5 and 3.10.8. The
133
137
  complete coverage report in HTML and a PDF summary are included in the distribution files.
134
138
 
135
- The tests also ran with Python 3.13.1 (and geographiclib_ 2.0) on `Debian 12`_ in 64-bit only and with
139
+ The tests also ran with Python 3.13.3 (and geographiclib_ 2.0) on `Debian 12`_ in 64-bit only and with
136
140
  Python 3.12.5 (and geographiclib_ 2.0) on `Windows 2019Server`_ in 64-bit only and with Python 2.7.18
137
141
  (and with geographiclib_ 1.52) on `Windows 10`_ in 64- and 32-bit.
138
142
 
139
143
  A single-File and single-Directory application with ``pygeodesy`` has been bundled using PyInstaller_ 3.4
140
144
  and 64-bit Python 3.7.4 and 3.7.3 on macOS 10.13.6 High Sierra.
141
145
 
142
- Previously, the tests were run with Python 3.13.0, 3.12.0-6, 3.11.2-4, 3.10.1-7, 3.9.1, 3.8.7, 3.7.1, 2.7.15,
146
+ Previously, the tests were run with Python 3.13.0-2, 3.12.0-6, 3.11.2-4, 3.10.1-7, 3.9.1, 3.8.7, 3.7.1, 2.7.15,
143
147
  PyPy_ 7.3.12 (Python 3.10.12), 7.3.1 (Python 3.6.9) and PyPy_ 7.1.1 (Python 2.7.13) (and geographiclib_ 1.52,
144
148
  numpy_ 1.16.3, 1.16.4, 1.16.6, 1.19.0, 1.19.4, 1.19.5 or 1.22.4 and scipy_ 1.2.1, 1.4.1, 1.5.2 or 1.8.1) on
145
149
  Ubuntu 16.04, with Python 3.10.0-1, 3.9.0-5, 3.8.0-6, 3.7.2-6, 3.7.0, 3.6.2-5, 3.5.3, 2.7.13-17, 2.7.10
146
150
  and 2.6.9 (and numpy_ 1.19.0, 1.16.5, 1.16.2, 1.15.2, 1.14.0, 1.13.1, 1.8.0rc1 or 1.6.2 and scipy_ 1.5.0),
147
151
  PyPy_ 7.3.0 (Python 2.7.13 and 3.6.9), PyPy_ 6.0.0 (Python 2.7.13 and 3.5.3) and `Intel-Python`_ 3.5.3 (and
148
- numpy_ 1.11.3) on macOS 14.0-5 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1 Big Sur (aka 10.16),
152
+ numpy_ 1.11.3) on macOS 14.0-6.1 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1 Big Sur (aka 10.16),
149
153
  10.15.3, 10.15.5-7 Catalina, 10.14 Mojave, 10.13.6 High Sierra and 10.12 Sierra, MacOS X 10.11 El Capitan
150
154
  and/or MacOS X 10.10 Yosemite, with Pythonista_ 3.2 (with geographiclib 1.50 or 1.49 and numpy 1.8.0) on
151
155
  iOS 14.4.2, 11.4.1, 12.0-3 on iPad4, iPhone6, iPhone10 and/or iPhone12, with Pythonista_ 3.1 on iOS 10.3.3,
@@ -156,16 +160,16 @@ Notes
156
160
  =====
157
161
 
158
162
  All Python source code has been statically checked_ with PyChecker_, PyFlakes_, PyCodeStyle_ (formerly Pep8)
159
- and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64-bit on macOS 14.6.1 Sonoma.
163
+ and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64-bit on macOS 15.4.1 Sequoia.
160
164
 
161
165
  For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
162
166
 
163
- *Last updated: Jan 09, 2025.*
167
+ *Last updated: Apr 25, 2025.*
164
168
 
165
169
  License
166
170
  =======
167
171
 
168
- Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
172
+ **Copyright (C) 2016-2025 -\- mrJean1 at Gmail -\- All Rights Reserved.**
169
173
 
170
174
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
171
175
  documentation files (the "Software"), to deal in the Software without restriction, including without limitation
@@ -175,7 +179,7 @@ to permit persons to whom the Software is furnished to do so, subject to the fol
175
179
  The above copyright notice and this permission notice shall be included in all copies or substantial portions
176
180
  of the Software.
177
181
 
178
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
182
+ THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
179
183
  TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
180
184
  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
181
185
  CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
@@ -250,7 +254,7 @@ DEALINGS IN THE SOFTWARE.
250
254
  .. _PyChecker: https://PyPI.org/project/pychecker
251
255
  .. _PyCodeStyle: https://PyPI.org/project/pycodestyle
252
256
  .. _PyFlakes: https://PyPI.org/project/pyflakes
253
- .. _PyGeodesy: https://PyPI.org/project/pygeodesy
257
+ .. _pygeodesy: https://PyPI.org/project/pygeodesy
254
258
  .. _pygeodesy.machine: https://mrJean1.GitHub.io/PyGeodesy/docs/pygeodesy.internals-module.html#machine
255
259
  .. _PyInstaller: https://PyPI.org/project/pyinstaller
256
260
  .. _PyPI: https://PyPI.org/project/pygeodesy
@@ -0,0 +1,118 @@
1
+ pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
+ pygeodesy/__init__.py,sha256=aOldDh1CtFDOsPeV2WdEhIl-RhvRqUhSli-Ubv1hH7Q,42691
3
+ pygeodesy/__main__.py,sha256=BnU1KifWJNBfUQIWMlvusw9CGz1WrsFSj1Q5zsgPxYw,5436
4
+ pygeodesy/albers.py,sha256=w3Sa6ZYL32Y7ZVzlio0MR-uhxH7fWFaGZQLjpYxCy2E,30904
5
+ pygeodesy/azimuthal.py,sha256=BCsgYdN6ipByPBpHbHcjAPDCV4etgT_HOOx5GneirFo,49858
6
+ pygeodesy/basics.py,sha256=Of985_FBbrHOZphlyzWzoEToawOfOzoORFrcEk8c5Mg,32869
7
+ pygeodesy/booleans.py,sha256=L0R69JX2qnUsjZD5vsvbO0ku4eaY5lUp09QP8c6Qul0,73655
8
+ pygeodesy/cartesianBase.py,sha256=MaBqmqxT2iseYeL-PgPbQpt8pRkSVrIr0RB18Pw6mNA,45338
9
+ pygeodesy/clipy.py,sha256=jKv4X36S_-Q6ZFqi87jjd34qGftj7IKgc1shfubk_AM,27783
10
+ pygeodesy/constants.py,sha256=E-hoZug4mJ_b48Nt1E15us2_01mz0XCvDTvNYc8qvRs,19903
11
+ pygeodesy/css.py,sha256=Vn4MSpCagj55L_SM47AVX6V5sPglG17X1JJiU1rW1yA,25797
12
+ pygeodesy/datums.py,sha256=t1hse3wcsZtlt3DA2lBxUN60qq7fT3oDKMp3zNZZ2Sw,34072
13
+ pygeodesy/dms.py,sha256=CKXt2EOYFBluQV5q6cFYppJl3dCvvEB_0E84J0ki6ws,42202
14
+ pygeodesy/ecef.py,sha256=DPeWFAcyQto7ltdhs1lDtcTK6krc3FGqT42xqvLgD54,59497
15
+ pygeodesy/elevations.py,sha256=WrWPZNgkZX9Ys_1ij_gyE4jzdIv85JYAaR2cK3vc4gQ,10879
16
+ pygeodesy/ellipsoidalBase.py,sha256=MEbLpAp_ad8RVLGHGILrZWYH47-3luXlq5tbLYwIfrE,55747
17
+ pygeodesy/ellipsoidalBaseDI.py,sha256=Zqp9csSDea31QkpDAK5TRdJb_Y-WqPwzJwnyOdnHkIc,38511
18
+ pygeodesy/ellipsoidalExact.py,sha256=-f-6kbE-hnO8aNUuSVnvaawwwKp1x76hT2aWCZq7jwo,16972
19
+ pygeodesy/ellipsoidalGeodSolve.py,sha256=wHv9UHYqnoU_PH8zgRJ-kA1-o-7zZLs1-O_zZHSQb1U,16666
20
+ pygeodesy/ellipsoidalKarney.py,sha256=5RfQzNJFq4VklDnr3TRo6kh29rcQ4D7XkXUr_2Zqf38,18721
21
+ pygeodesy/ellipsoidalNvector.py,sha256=8jZu0BdsMFZJOvjWmGMyX9J6ojB3LUsIGdMdmUdmlQY,30179
22
+ pygeodesy/ellipsoidalVincenty.py,sha256=DX7ybwAO9sA-AvQmMhczKlaH0PWPnOOaFVq5a4hCQuY,26175
23
+ pygeodesy/ellipsoids.py,sha256=6O9ErqdbfCqNBTeLXe5tXuNmlJO4d-HuAk76fscT174,108032
24
+ pygeodesy/elliptic.py,sha256=f96i7sGSE4JES97ELnP9kOW1n2sPeOrMoIoonXfBH_I,45024
25
+ pygeodesy/epsg.py,sha256=VIBidzAEuoBF4LdlJ4r3WtpL0Ymhru8kf4fAgfFr5ok,8220
26
+ pygeodesy/errors.py,sha256=stTg7s72LOa9mQYsacnCEUPXPMqeps8EqCwOar5loLg,32043
27
+ pygeodesy/etm.py,sha256=F0E1h5jbvevmodv209KscWpMkaKFFWgKHTkHczYgLcM,46748
28
+ pygeodesy/fmath.py,sha256=rD7oauttd_ss0H1wkJqVZvTlFb7qCk1iPBTPsEdsG2g,37101
29
+ pygeodesy/formy.py,sha256=SrNeyIBgxHqvuAkMGvJ1aLgRdakI_aZE18xCCMyEBBw,69781
30
+ pygeodesy/frechet.py,sha256=vlZFgM6Sy0C-KWatJrFVbhy2duRub4Ul_iN0JdegM7g,35625
31
+ pygeodesy/fstats.py,sha256=DU8IptDKWgxX7ZvSPsDg7Yl1ytgyLqJdJwJrKzEtTIk,28352
32
+ pygeodesy/fsums.py,sha256=ztbuhwgB-mXxh3OJ4W6vt_f-cj3qenPRQp1TTeQihwI,103659
33
+ pygeodesy/gars.py,sha256=rz781bNzRCouCDoozona4-v5o3R8lAePyVkfJIUaHig,11817
34
+ pygeodesy/geodesici.py,sha256=LRCSxoWfq1y1ZvCNWAwCohNUTBpQqn5a-xekm4mKNKo,74873
35
+ pygeodesy/geodesicw.py,sha256=dafScZ4nVuC_vlHXuYlSan32CsIEiL9uNcJYfnY1NtQ,29004
36
+ pygeodesy/geodsolve.py,sha256=fFlyNlkEOpkJaeddEuKwfhtqaZjmVs0egNGM5cwFFoc,29101
37
+ pygeodesy/geohash.py,sha256=1P9-k9sMN-ZVFr2iWbQpFi1lg3uNmChHFCIfETkgFJU,40153
38
+ pygeodesy/geoids.py,sha256=gJRL7yB0LOyk7zEI6HVhg-s8xSPkzQeV6e51FbwzXp8,86143
39
+ pygeodesy/hausdorff.py,sha256=NkLbM4CAvWfhh8047aDEwL7xSBze6A5-Fc46NSNY6IM,32305
40
+ pygeodesy/heights.py,sha256=O__MvCbThyUcKGbIhBrnZsxzAvOchni3rcjx-bjuxwE,41018
41
+ pygeodesy/internals.py,sha256=0jfelLhG50VY0hgy2qzqUvEFDJrcLDfpI_eNs4Go6BI,24028
42
+ pygeodesy/interns.py,sha256=IBM_RuZDmP__4TUx9MLCU3L-Vx5uZz0VBi2eoH0hV44,23467
43
+ pygeodesy/iters.py,sha256=CTWDfdcmqX_wcnz7tnduo1DP9492WtC8gcStyWA4zT8,20345
44
+ pygeodesy/karney.py,sha256=S2h3Tu7QHkxisAvqRkMm2BPfC4MLUTbQXkRohYSokEE,40942
45
+ pygeodesy/ktm.py,sha256=TlWEy6vZ7mGmguELb9-avGCDsYMqAwsMeRxTY4kW-2I,27263
46
+ pygeodesy/latlonBase.py,sha256=AHH_mDqcAZ5eb6sLaAAkd9pdwduRtz90L9qmciWqjJU,75297
47
+ pygeodesy/lazily.py,sha256=yUHsS45kbcAIDmOzK7Ft0ze_G04u2ZRlRjfZPDG0a1o,46985
48
+ pygeodesy/lcc.py,sha256=nNriqYMVQJS37FqIttnBUtF6gg4F3gapEoyN3VQGaVE,25794
49
+ pygeodesy/ltp.py,sha256=Gr2pYxuI7p_VhkcR4PwilSt0PirgkXSvTdg7heURUMQ,50657
50
+ pygeodesy/ltpTuples.py,sha256=b2-luntHWAS6L1HITaTPhBh4c2Rxem2_4-TdScPz0qI,59008
51
+ pygeodesy/mgrs.py,sha256=oHkNh1Y2pfhUbrMBjMy9_Uo7s6gu7RJMwAoI8ftpIUI,29866
52
+ pygeodesy/named.py,sha256=xPb0JgoGgmD911RCcAzkuGKZ2rkFT15hvbLHTpaeH8k,58849
53
+ pygeodesy/namedTuples.py,sha256=dBM93PadrJHkdqe3yinW_Pc7M_5ACYeU6rat5Dwp3Mk,30622
54
+ pygeodesy/nvectorBase.py,sha256=JmUEpcux8RWTFYEHCE4OuKGQN4S3xJvZsCDVFFfCb0c,29958
55
+ pygeodesy/osgr.py,sha256=K7Lg06bBplwUzRMAg0bb0kJxlOcxBPQA3QMXFWRQW7E,30856
56
+ pygeodesy/points.py,sha256=4ip9a84mBxIfiZG-dCLhw1Gno2uvJpQDurYyK-s5C9A,64565
57
+ pygeodesy/props.py,sha256=GrRMnvjiCceap_YEgtPVjc4YKbVRLavZLZTOh0JGlRw,24573
58
+ pygeodesy/resections.py,sha256=wtIbqNdJBu46YzrRKEzM-vLNGVkZUruEIlT4T6Dc88I,43680
59
+ pygeodesy/simplify.py,sha256=DRXzd7r5YwEq-6TzbbruZ8SIrrRD8E8G0Iv0B1Jcwlg,22072
60
+ pygeodesy/solveBase.py,sha256=8ss_jPMHf5deMZUILYuulYfG69sj_3UGo1FJTaZpo-k,18495
61
+ pygeodesy/sphericalBase.py,sha256=m28qq9LnhZOyAoWt4-LesWvh6LV_yJlfJ5yUybFYgns,32136
62
+ pygeodesy/sphericalNvector.py,sha256=O6ybbZx6XR6Tz4Pe1uCjWdBgkqmMsCcTH7FaZdY4l3Q,54828
63
+ pygeodesy/sphericalTrigonometry.py,sha256=00sci4AcGUSCmYtJ3hv9d0sXV0cvq6T2AyNzTd41RZ4,64084
64
+ pygeodesy/streprs.py,sha256=-4LErmfPLtGt1tLDBHhJam-zYq8p2Z2C5wDCMELEml4,23599
65
+ pygeodesy/trf.py,sha256=9YTM8JOYx3a3A9JLIReGSu2-Yt7X9buFiMdRkVjneOI,119197
66
+ pygeodesy/triaxials.py,sha256=TX0tTID718T54BGS5a9Z-nZ21FS-uAEQsndr0XK9PCM,64050
67
+ pygeodesy/units.py,sha256=ELmEusLUY70rYteI45OBgrDTp8t5-BUydzLqlDExxPc,35524
68
+ pygeodesy/unitsBase.py,sha256=cVNKG24Fov73gLFPGwGdjvXmM-8fd3MDufVubABAMeE,14141
69
+ pygeodesy/ups.py,sha256=k7MDyq_aKO70m8sEeOCvpFb3nyrBmBdbdPST-UgxgeA,23349
70
+ pygeodesy/utily.py,sha256=SOCnqzXyaGfXDnNnt72uRfE0hYecsTqHoEnK4F8ZBaM,40029
71
+ pygeodesy/utm.py,sha256=kcXliftP9q0nTxviIOixVyvResK2Jydj-G52CXJiSuQ,31123
72
+ pygeodesy/utmups.py,sha256=31RD8l7M-vcRXU9_wnkb_PNUcKjOr1HAmwjOndjkgXE,13176
73
+ pygeodesy/utmupsBase.py,sha256=AWevano4q2eR15mcfFcd7Xd6hufQy4M1BAC6qT7g18A,21667
74
+ pygeodesy/vector2d.py,sha256=wCg0fGXBk4RtxSRrduteY7Yoz0Ss3ritgMfaFGrpT14,40051
75
+ pygeodesy/vector3d.py,sha256=JpT51Ui1pY6ZSg2I9l1SDdHHXZRZp8ayZtvLRmqIG9w,43030
76
+ pygeodesy/vector3dBase.py,sha256=BHenp3NGpfhVbJ6JMgdNLx6vAcwDWDJIxl9hAdp-AVw,36301
77
+ pygeodesy/webmercator.py,sha256=zveWOHvCJgmfT4xDCYRynB4lC_5YI7xODpJQ59aPzA8,15020
78
+ pygeodesy/wgrs.py,sha256=1MK72g3HsfdsvChM6rBy_auxzSvWHSoer8fEuT4LinI,15503
79
+ pygeodesy/auxilats/_CX_4.py,sha256=DX67nZ1E4nOis8d_wQ8tn5T-SAVNDBJH3kp9IuQc8lM,6830
80
+ pygeodesy/auxilats/_CX_6.py,sha256=T89kMuUijlLZzmqoI8XiTGTOzj4A4SKhCyt_rOroCq4,11278
81
+ pygeodesy/auxilats/_CX_8.py,sha256=Ff_VTStb-dZkGz7-RL1tzymPgPbTwtl_6EzPquPMamc,18900
82
+ pygeodesy/auxilats/_CX_Rs.py,sha256=ltZG0HLRcPImzfto873iUBva4ph5q0McaH0rEyqwLp0,8692
83
+ pygeodesy/auxilats/__init__.py,sha256=g3x06SdwuCPcerCHZRyvwY8xaKR5IxZ1YV3AwTnONNg,2883
84
+ pygeodesy/auxilats/__main__.py,sha256=jH0ShJaDR8zWfoLPXuut37BJbVWVDsAm9rb4xc25XOY,3340
85
+ pygeodesy/auxilats/auxAngle.py,sha256=W-ehCMzmgoEa2FVKAQ8R9iSt6BcqLesE1ZRGKJ7Z-S0,16738
86
+ pygeodesy/auxilats/auxDLat.py,sha256=GnnvcKZY1jG4SWjYOlDqhGemooQmxDXX-jGr5yg89NM,10960
87
+ pygeodesy/auxilats/auxDST.py,sha256=3maal46InF3sRgbh-iQrTm4L11qzfe4gr_S8rh1-faU,10468
88
+ pygeodesy/auxilats/auxLat.py,sha256=koFT_V3SUyxADOvOFSgrXtJqpK71b061bDPUrk2640s,31976
89
+ pygeodesy/auxilats/auxily.py,sha256=UfuTh1gilPCgPIbWjPTl3Xfj_P4f5hvpl6fKgImjxLk,8089
90
+ pygeodesy/deprecated/__init__.py,sha256=ndsBPtmorXG2F4nMuC-wKvR9zIu8GI2WWU3-lkMsTsQ,2815
91
+ pygeodesy/deprecated/bases.py,sha256=f0sgeE4a9yStidTLhaqugv-sbMFjEF7zrlhHbWXN7Dg,1654
92
+ pygeodesy/deprecated/classes.py,sha256=_H9-QnSVA4iLRKwN16FO8WOE51Qin0zNMNb_kSWgnjU,16388
93
+ pygeodesy/deprecated/consterns.py,sha256=RC-YvqQXAEVoIaLnaLrIrA1Mr3oXLk3HT9n1HLvGCSs,1917
94
+ pygeodesy/deprecated/datum.py,sha256=aeY-POZBZrKKiTnrhqOImV5AfiXu2-9Vz8xu_d4ze2g,1910
95
+ pygeodesy/deprecated/functions.py,sha256=mpgYzx_ynbIrfy9WBDfjhNtI-sRx7nKwucyGaxqE10k,15792
96
+ pygeodesy/deprecated/nvector.py,sha256=rttz-znpX2Tm1ttoJt8_E8V_9n_ZciKi_CvvbwFmZQM,2117
97
+ pygeodesy/deprecated/rhumbBase.py,sha256=ptcQnDYAaXZqlVtevRnU5m8xsviqLYzPt6wEfXa-LEE,1375
98
+ pygeodesy/deprecated/rhumbaux.py,sha256=x3d5BsrVRKkNeGxHjVbcuQ74zy5lvJsgvpIdPEOOnQ0,1428
99
+ pygeodesy/deprecated/rhumbsolve.py,sha256=ojLzYUAPra9IXo_-TrnQlbUmkvyI8wa_Fh0VvtQ86ZM,1431
100
+ pygeodesy/deprecated/rhumbx.py,sha256=9GTE8CbsD_vRiAnR13gyquPHRpyiHOhPvCUzs5hfWx8,1425
101
+ pygeodesy/geodesicx/_C4_24.py,sha256=3OkzOxf0DdO1QL4N9CVYjpOgFCm8FcYjCyvcTLpL2wc,90707
102
+ pygeodesy/geodesicx/_C4_27.py,sha256=grqtju94Nu9V_eQPqe_7aRbLCYflxRuK127pPOPwuDA,134215
103
+ pygeodesy/geodesicx/_C4_30.py,sha256=I4ZuTy64yOq1IVgRtc_kqOL0HnKzXeTea7kTFSolcJs,201921
104
+ pygeodesy/geodesicx/__init__.py,sha256=FicWSRbvkBq7sna2Bx2ucSxXZuiPy8H6q16iqjtLSrA,2478
105
+ pygeodesy/geodesicx/__main__.py,sha256=ugi6c-4y91WOMJIL0N-wgXhoGhV90QJIFji2MaIGLiA,4329
106
+ pygeodesy/geodesicx/gx.py,sha256=PsvJ7ozEfZ4OFwG5k48DZeGMmPIF9MeM7EwP-N6Dv1Y,60795
107
+ pygeodesy/geodesicx/gxarea.py,sha256=l0AnshThR0vMwM5Dv4n06d4xvoKo52-wKAjLFm6MK3Q,19465
108
+ pygeodesy/geodesicx/gxbases.py,sha256=EF9IL_oQBSlF70_ROag-DRBoU-ASWKlX-l-wfrUEQYs,6130
109
+ pygeodesy/geodesicx/gxline.py,sha256=9XygwUNt0YQg0FerbW4ySj4K8jO2kFMP1445Au3jRyI,27657
110
+ pygeodesy/rhumb/__init__.py,sha256=DsE5a16CUYWE5YTuo1U8mnDCtykuWw7VeGx23Yny_VU,2207
111
+ pygeodesy/rhumb/aux_.py,sha256=pfCWdJF1NC2YgldbZJV8yKbH8PG-LwJBidEWtV--NV0,16121
112
+ pygeodesy/rhumb/bases.py,sha256=L79xT4njF7YzmndbYi97FdNYQL9bGHvDO2EN3mgnhHc,54277
113
+ pygeodesy/rhumb/ekx.py,sha256=FS9Ex9takqAtUvzXFEwDyEbm5KX2-frNBUD0eDKfu5I,24078
114
+ pygeodesy/rhumb/solve.py,sha256=-kFsue46uXlxb8cTqlKI9OJxo7zFo8zjkwe2BcKtuFY,24012
115
+ pygeodesy-25.4.25.dist-info/METADATA,sha256=0M14xa_L0P1eXnRow7QTNPuDbCAWoYNsIcA2AH2aQkc,20005
116
+ pygeodesy-25.4.25.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
117
+ pygeodesy-25.4.25.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
118
+ pygeodesy-25.4.25.dist-info/RECORD,,