pygeodesy 25.5.5__py2.py3-none-any.whl → 25.5.28__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 (88) hide show
  1. pygeodesy/__init__.py +186 -186
  2. pygeodesy/__main__.py +4 -3
  3. pygeodesy/albers.py +4 -4
  4. pygeodesy/auxilats/_CX_Rs.py +3 -3
  5. pygeodesy/auxilats/auxAngle.py +2 -2
  6. pygeodesy/auxilats/auxDLat.py +2 -2
  7. pygeodesy/auxilats/auxDST.py +2 -2
  8. pygeodesy/auxilats/auxLat.py +2 -2
  9. pygeodesy/auxilats/auxily.py +2 -2
  10. pygeodesy/azimuthal.py +2 -2
  11. pygeodesy/booleans.py +11 -11
  12. pygeodesy/cartesianBase.py +2 -2
  13. pygeodesy/clipy.py +2 -2
  14. pygeodesy/constants.py +7 -7
  15. pygeodesy/css.py +1 -1
  16. pygeodesy/datums.py +2 -2
  17. pygeodesy/deprecated/__init__.py +8 -8
  18. pygeodesy/deprecated/bases.py +2 -2
  19. pygeodesy/deprecated/rhumbBase.py +2 -2
  20. pygeodesy/deprecated/rhumbaux.py +2 -2
  21. pygeodesy/deprecated/rhumbsolve.py +2 -2
  22. pygeodesy/deprecated/rhumbx.py +2 -2
  23. pygeodesy/ecef.py +3 -4
  24. pygeodesy/ellipsoidalBase.py +2 -2
  25. pygeodesy/ellipsoidalBaseDI.py +7 -6
  26. pygeodesy/ellipsoidalExact.py +24 -29
  27. pygeodesy/ellipsoidalGeodSolve.py +19 -19
  28. pygeodesy/ellipsoidalKarney.py +22 -27
  29. pygeodesy/ellipsoidalNvector.py +4 -4
  30. pygeodesy/ellipsoidalVincenty.py +17 -15
  31. pygeodesy/ellipsoids.py +4 -4
  32. pygeodesy/elliptic.py +16 -11
  33. pygeodesy/errors.py +1 -1
  34. pygeodesy/etm.py +2 -2
  35. pygeodesy/fmath.py +9 -9
  36. pygeodesy/formy.py +2 -2
  37. pygeodesy/frechet.py +6 -6
  38. pygeodesy/fstats.py +2 -2
  39. pygeodesy/fsums.py +37 -28
  40. pygeodesy/gars.py +2 -3
  41. pygeodesy/geodesici.py +4 -4
  42. pygeodesy/geodesicw.py +27 -8
  43. pygeodesy/geodesicx/__init__.py +3 -3
  44. pygeodesy/geodesicx/gx.py +52 -48
  45. pygeodesy/geodesicx/gxarea.py +54 -65
  46. pygeodesy/geodesicx/gxbases.py +12 -2
  47. pygeodesy/geodesicx/gxline.py +10 -7
  48. pygeodesy/geoids.py +6 -6
  49. pygeodesy/hausdorff.py +5 -5
  50. pygeodesy/heights.py +5 -5
  51. pygeodesy/internals.py +2 -2
  52. pygeodesy/interns.py +5 -5
  53. pygeodesy/iters.py +1 -1
  54. pygeodesy/karney.py +28 -12
  55. pygeodesy/ktm.py +2 -2
  56. pygeodesy/latlonBase.py +3 -4
  57. pygeodesy/lazily.py +1 -1
  58. pygeodesy/lcc.py +3 -3
  59. pygeodesy/ltp.py +5 -5
  60. pygeodesy/mgrs.py +3 -3
  61. pygeodesy/namedTuples.py +3 -3
  62. pygeodesy/nvectorBase.py +2 -2
  63. pygeodesy/osgr.py +2 -2
  64. pygeodesy/points.py +2 -3
  65. pygeodesy/props.py +18 -18
  66. pygeodesy/resections.py +30 -24
  67. pygeodesy/rhumb/aux_.py +2 -2
  68. pygeodesy/rhumb/bases.py +3 -3
  69. pygeodesy/rhumb/ekx.py +3 -4
  70. pygeodesy/rhumb/solve.py +2 -2
  71. pygeodesy/simplify.py +2 -2
  72. pygeodesy/solveBase.py +2 -2
  73. pygeodesy/sphericalBase.py +8 -8
  74. pygeodesy/sphericalNvector.py +19 -16
  75. pygeodesy/sphericalTrigonometry.py +24 -24
  76. pygeodesy/trf.py +4 -4
  77. pygeodesy/triaxials.py +2 -2
  78. pygeodesy/units.py +7 -8
  79. pygeodesy/utily.py +2 -2
  80. pygeodesy/utmupsBase.py +2 -2
  81. pygeodesy/vector2d.py +14 -8
  82. pygeodesy/vector3d.py +3 -3
  83. pygeodesy/webmercator.py +2 -2
  84. {pygeodesy-25.5.5.dist-info → pygeodesy-25.5.28.dist-info}/METADATA +16 -16
  85. pygeodesy-25.5.28.dist-info/RECORD +119 -0
  86. pygeodesy-25.5.5.dist-info/RECORD +0 -119
  87. {pygeodesy-25.5.5.dist-info → pygeodesy-25.5.28.dist-info}/WHEEL +0 -0
  88. {pygeodesy-25.5.5.dist-info → pygeodesy-25.5.28.dist-info}/top_level.txt +0 -0
@@ -31,7 +31,7 @@ Also note that on a spherical earth model, an n-vector is equivalent
31
31
  to a normalised version of an (ECEF) cartesian coordinate.
32
32
  '''
33
33
  # make sure int/int division yields float quosient, see .basics
34
- from __future__ import division as _; del _ # PYCHOK semicolon
34
+ from __future__ import division as _; del _ # noqa: E702 ;
35
35
 
36
36
  from pygeodesy.basics import _isin, _xinstanceof, typename
37
37
  from pygeodesy.constants import EPS, EPS0, PI, PI2, PI_2, R_M, \
@@ -62,7 +62,7 @@ from pygeodesy.utily import atan2, degrees360, sincos2, sincos2_, sincos2d, \
62
62
  # from math import fabs # from utily
63
63
 
64
64
  __all__ = _ALL_LAZY.sphericalNvector
65
- __version__ = '25.04.14'
65
+ __version__ = '25.05.27'
66
66
 
67
67
  _lines_ = 'lines'
68
68
 
@@ -782,18 +782,19 @@ class Nvector(NvectorBase):
782
782
  _Nv00 = LatLon(_0_0, _0_0, name=_Nv00_) # reference instance (L{LatLon})
783
783
 
784
784
 
785
- def areaOf(points, radius=R_M, wrap=False):
785
+ def areaOf(points, radius=R_M, wrap=False, polar=False):
786
786
  '''Calculate the area of a (spherical) polygon or composite (with
787
787
  great circle arcs joining consecutive points).
788
788
 
789
- @arg points: The polygon points or clips (C{LatLon}[],
790
- L{BooleanFHP} or L{BooleanGH}).
789
+ @arg points: The polygon points or clips (C{LatLon}[], L{BooleanFHP}
790
+ or L{BooleanGH}).
791
791
  @kwarg radius: Mean earth radius (C{meter}) or C{None}.
792
- @kwarg wrap: If C{True}, wrap or I{normalize} and unroll the
793
- B{C{points}} (C{bool}).
792
+ @kwarg wrap: If C{True}, wrap or I{normalize} and unroll the B{C{points}}
793
+ (C{bool}).
794
+ @kwarg polar: Use of C{B{polar}=True} not implemented (C{bool}).
794
795
 
795
- @return: Polygon area (C{meter} I{squared}, same units as
796
- B{C{radius}}, or C{radians} if C{B{radius} is None}).
796
+ @return: Polygon area (C{meter} I{squared}, same units as B{C{radius}},
797
+ or C{radians} if C{B{radius} is None}).
797
798
 
798
799
  @raise PointsError: Insufficient number of B{C{points}}.
799
800
 
@@ -802,6 +803,9 @@ def areaOf(points, radius=R_M, wrap=False):
802
803
  @see: Functions L{pygeodesy.areaOf}, L{sphericalTrigonometry.areaOf}
803
804
  and L{ellipsoidalKarney.areaOf}.
804
805
  '''
806
+ if polar:
807
+ notImplemented(None, polar=polar, up=2)
808
+
805
809
  def _interangles(ps, w): # like .karney._polygon
806
810
  Ps = _Nv00.PointsIter(ps, loop=2, wrap=w)
807
811
  # use vector to 1st point as plane normal for sign of α
@@ -824,15 +828,14 @@ def areaOf(points, radius=R_M, wrap=False):
824
828
  if _MODS.booleans.isBoolean(points):
825
829
  r = points._sum2(LatLon, areaOf, radius=None, wrap=wrap)
826
830
  else:
827
- # sum interior angles: depending on whether polygon is cw or ccw,
828
- # angle between edges is π−α or π+α, where α is angle between
829
- # great-circle vectors; so sum α, then take n·π − |Σα| (cannot
830
- # use Σ(π−|α|) as concave polygons would fail)
831
+ # sum interior angles: depending on whether polygon is cw or
832
+ # ccw, angle between edges is π−α or π+α, where α is angle
833
+ # between great-circle vectors; so sum α, then take n·π − |Σα|
834
+ # (cannot use Σ(π−|α|) as concave polygons would fail)
831
835
  s = fsum(_interangles(points, wrap))
832
836
  # using Girard’s theorem: A = [Σθᵢ − (n−2)·π]·R²
833
- # (PI2 - abs(s) == (n*PI - abs(s)) - (n-2)*PI)
834
- r = fabs(PI2 - fabs(s))
835
- return r if radius is None else (r * Radius(radius)**2)
837
+ r = fabs(PI2 - fabs(s)) # == n*PI - abs(s) - (n-2)*PI
838
+ return r if radius is None else (Radius(radius)**2 * r)
836
839
 
837
840
 
838
841
  def intersecant2(center, circle, point, other, **radius_exact_height_wrap):
@@ -14,7 +14,7 @@ I{(C) Chris Veness 2011-2024} published under the same MIT Licence**, see
14
14
  U{Latitude/Longitude<https://www.Movable-Type.co.UK/scripts/latlong.html>}.
15
15
  '''
16
16
  # make sure int/int division yields float quotient, see .basics
17
- from __future__ import division as _; del _ # PYCHOK semicolon
17
+ from __future__ import division as _; del _ # noqa: E702 ;
18
18
 
19
19
  from pygeodesy.basics import copysign0, _isin, map1, signOf, typename
20
20
  from pygeodesy.constants import EPS, EPS1, EPS4, PI, PI2, PI_2, PI_4, R_M, \
@@ -34,8 +34,9 @@ from pygeodesy.interns import _1_, _2_, _coincident_, _composite_, _colinear_, \
34
34
  _concentric_, _convex_, _end_, _infinite_, \
35
35
  _invalid_, _line_, _near_, _null_, _parallel_, \
36
36
  _point_, _SPACE_, _too_
37
+ from pygeodesy.latlonBase import _trilaterate5
37
38
  from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _ALL_OTHER
38
- # from pygeodesy.nvectorBase import NvectorBase, sumOf # _MODE
39
+ # from pygeodesy.nvectorBase import NvectorBase, sumOf # _MODS
39
40
  from pygeodesy.namedTuples import LatLon2Tuple, LatLon3Tuple, NearestOn3Tuple, \
40
41
  Triangle7Tuple, Triangle8Tuple
41
42
  from pygeodesy.points import ispolar, nearestOn5 as _nearestOn5, \
@@ -43,10 +44,10 @@ from pygeodesy.points import ispolar, nearestOn5 as _nearestOn5, \
43
44
  from pygeodesy.props import deprecated_function, deprecated_method
44
45
  from pygeodesy.sphericalBase import _m2radians, CartesianSphericalBase, \
45
46
  _intersecant2, LatLonSphericalBase, \
46
- _rads3, _radians2m, _trilaterate5
47
+ _rads3, _radians2m
47
48
  # from pygeodesy.streprs import Fmt as _Fmt # from .points XXX shadowed
48
49
  from pygeodesy.units import Bearing_, Height, _isDegrees, _isRadius, Lamd, \
49
- Phid, Radius_, Scalar
50
+ Phid, Radius_, Scalar
50
51
  from pygeodesy.utily import acos1, asin1, atan1d, atan2, atan2d, degrees90, \
51
52
  degrees180, degrees2m, m2radians, radiansPI2, \
52
53
  sincos2_, tan_2, unrollPI, _unrollon, _unrollon3, \
@@ -56,7 +57,7 @@ from pygeodesy.vector3d import sumOf, Vector3d
56
57
  from math import asin, cos, degrees, fabs, radians, sin
57
58
 
58
59
  __all__ = _ALL_LAZY.sphericalTrigonometry
59
- __version__ = '25.04.14'
60
+ __version__ = '25.05.28'
60
61
 
61
62
  _PI_EPS4 = PI - EPS4
62
63
  if _PI_EPS4 >= PI:
@@ -757,20 +758,21 @@ class LatLon(LatLonSphericalBase):
757
758
  _T00 = LatLon(0, 0, name='T00') # reference instance (L{LatLon})
758
759
 
759
760
 
760
- def areaOf(points, radius=R_M, wrap=False): # was=True
761
- '''Calculate the area of a (spherical) polygon or composite (with the
762
- points joined by great circle arcs).
761
+ def areaOf(points, radius=R_M, wrap=False, polar=False): # was wrap=True
762
+ '''Calculate the area of a (spherical) polygon or composite (with the points joined by
763
+ great circle arcs).
763
764
 
764
- @arg points: The polygon points or clips (L{LatLon}[], L{BooleanFHP}
765
- or L{BooleanGH}).
766
- @kwarg radius: Mean earth radius, ellipsoid or datum (C{meter},
767
- L{Ellipsoid}, L{Ellipsoid2}, L{Datum} or L{a_f2Tuple})
768
- or C{None}.
769
- @kwarg wrap: If C{True}, wrap or I{normalize} and unroll the B{C{points}}
770
- (C{bool}).
765
+ @arg points: The polygon points or clips (L{LatLon}[], L{BooleanFHP} or L{BooleanGH}).
766
+ @kwarg radius: Mean earth radius, ellipsoid or datum (C{meter}, L{Ellipsoid},
767
+ L{Ellipsoid2}, L{Datum} or L{a_f2Tuple}) or C{None}.
768
+ @kwarg wrap: If C{True}, wrap or I{normalize} and unroll the B{C{points}} (C{bool}).
769
+ @kwarg polar: Use C{B{polar}=True} if the polygon encloses a pole (C{bool}), see
770
+ function L{ispolar<pygeodesy.points.ispolar>} and U{area of a polygon
771
+ enclosing a pole<https://GeographicLib.SourceForge.io/C++/doc/
772
+ classGeographicLib_1_1GeodesicExact.html#a3d7a9155e838a09a48dc14d0c3fac525>}.
771
773
 
772
- @return: Polygon area (C{meter} I{quared}, same units as B{C{radius}}
773
- or C{radians} if C{B{radius} is None}).
774
+ @return: Polygon area (C{meter} I{quared}, same units as B{C{radius}} or C{radians} if
775
+ C{B{radius} is None}).
774
776
 
775
777
  @raise PointsError: Insufficient number of B{C{points}}.
776
778
 
@@ -778,13 +780,11 @@ def areaOf(points, radius=R_M, wrap=False): # was=True
778
780
 
779
781
  @raise ValueError: Invalid B{C{radius}} or semi-circular polygon edge.
780
782
 
781
- @note: The area is based on I{Karney}'s U{'Area of a spherical
782
- polygon'<https://MathOverflow.net/questions/97711/
783
- the-area-of-spherical-polygons>}, 3rd Answer.
783
+ @note: The area is based on I{Karney}'s U{'Area of a spherical polygon'
784
+ <https://MathOverflow.net/questions/97711/ the-area-of-spherical-polygons>}, 3rd Answer.
784
785
 
785
- @see: Functions L{pygeodesy.areaOf}, L{sphericalNvector.areaOf},
786
- L{pygeodesy.excessKarney}, L{ellipsoidalExact.areaOf} and
787
- L{ellipsoidalKarney.areaOf}.
786
+ @see: Functions L{pygeodesy.areaOf}, L{sphericalNvector.areaOf}, L{pygeodesy.excessKarney},
787
+ L{ellipsoidalExact.areaOf} and L{ellipsoidalKarney.areaOf}.
788
788
  '''
789
789
  if _MODS.booleans.isBoolean(points):
790
790
  return points._sum2(LatLon, areaOf, radius=radius, wrap=wrap)
@@ -821,7 +821,7 @@ def areaOf(points, radius=R_M, wrap=False): # was=True
821
821
  p1, z1 = p2, z2
822
822
 
823
823
  R = abs(R * _2_0)
824
- if abs(D) < _90_0: # ispolar(points)
824
+ if abs(D) < _90_0 or polar: # ispolar(points)
825
825
  R = abs(R - PI2)
826
826
  if radius:
827
827
  a = degrees(A.fover(len(A))) # mean lat
pygeodesy/trf.py CHANGED
@@ -93,7 +93,7 @@ from math import ceil as _ceil, fabs
93
93
  # import operator as _operator # from .datums
94
94
 
95
95
  __all__ = _ALL_LAZY.trf
96
- __version__ = '25.04.14'
96
+ __version__ = '25.05.12'
97
97
 
98
98
  _EP0CH = Epoch(0, low=0)
99
99
  _Es = {_EP0CH: _EP0CH} # L{Epoch}s, deleted below
@@ -148,7 +148,7 @@ def _E(epoch): # deleted below
148
148
  '''(INTERNAL) De-dup L{Epochs}s.
149
149
  '''
150
150
  e = Epoch(_F(epoch))
151
- return _Es.setdefault(e, e) # PYCHOK del
151
+ return _Es.setdefault(e, e) # noqa: F821 del
152
152
 
153
153
 
154
154
  def _P(ps, name, _Ps): # deleted below
@@ -1299,11 +1299,11 @@ def _trfX(n1, n2, raiser=True, **epoch_xform_rates):
1299
1299
 
1300
1300
 
1301
1301
  def _X(*ps): # deleted below
1302
- return _P(ps, _xform_, _Xs) # PYCHOK del
1302
+ return _P(ps, _xform_, _Xs) # noqa: F821 del
1303
1303
 
1304
1304
 
1305
1305
  def _R(*ps): # deleted below
1306
- return _P(ps, _rates_, _Rs) # PYCHOK del
1306
+ return _P(ps, _rates_, _Rs) # noqa: F821 del
1307
1307
 
1308
1308
 
1309
1309
  _P_0_0s = TRFXform7Tuple(_0_0s(len(_Names7)), name='unity')
pygeodesy/triaxials.py CHANGED
@@ -28,7 +28,7 @@ see the U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
28
28
  @var Triaxials.WGS84_35: Triaxial(name='WGS84_35', a=6378172, b=6378102, c=6356752.314245179, e2ab=0.00002195, e2bc=0.006683478, e2ac=0.006705281, volume=1083207319768789942272, area=510065621722018.125, area_p=510065626587483.3125)
29
29
  '''
30
30
  # make sure int/int division yields float quotient, see .basics
31
- from __future__ import division as _; del _ # PYCHOK semicolon
31
+ from __future__ import division as _; del _ # noqa: E702 ;
32
32
 
33
33
  from pygeodesy.basics import _isin, isLatLon, isscalar
34
34
  from pygeodesy.constants import EPS, EPS0, EPS02, EPS4, INT0, PI2, PI_3, PI4, \
@@ -59,7 +59,7 @@ from pygeodesy.vector3d import _otherV3d, Vector3d, _ALL_LAZY, _MODS
59
59
  from math import fabs, sqrt
60
60
 
61
61
  __all__ = _ALL_LAZY.triaxials
62
- __version__ = '25.04.14'
62
+ __version__ = '25.05.12'
63
63
 
64
64
  _not_ordered_ = _not_('ordered')
65
65
  _omega_ = 'omega'
pygeodesy/units.py CHANGED
@@ -7,18 +7,17 @@ L{Feet}, L{Meter}, L{Radians}, etc.
7
7
  '''
8
8
 
9
9
  from pygeodesy.basics import isscalar, issubclassof, signOf, typename
10
- from pygeodesy.constants import EPS, EPS1, PI, PI2, PI_2, _umod_360, _0_0, \
11
- _0_001, _0_5, INT0 # PYCHOK for .mgrs, .namedTuples
10
+ from pygeodesy.constants import EPS, EPS1, PI, PI2, PI_2, _umod_360, _0_0, _0_001
12
11
  from pygeodesy.dms import F__F, F__F_, S_NUL, S_SEP, parseDMS, parseRad, _toDMS
13
12
  from pygeodesy.errors import _AssertionError, TRFError, UnitError, _xattr, _xcallable
14
13
  # from pygeodesy.internals import typename # from .basics
15
14
  from pygeodesy.interns import NN, _azimuth_, _band_, _bearing_, _COMMASPACE_, \
16
15
  _degrees_, _degrees2_, _distance_, _E_, _easting_, \
17
- _epoch_, _EW_, _feet_, _height_, _lam_, _lat_, _LatLon_, \
18
- _lon_, _meter_, _meter2_, _N_, _negative_, _northing_, \
16
+ _epoch_, _EW_, _feet_, _height_, _lam_, _lat_, _lon_, \
17
+ _meter_, _meter2_, _N_, _negative_, _northing_, _radians_, \
19
18
  _NS_, _NSEW_, _number_, _PERCENT_, _phi_, _precision_, \
20
- _radians_, _radians2_, _radius_, _S_, _scalar_, \
21
- _units_, _W_, _zone_, _std_ # PYCHOK used!
19
+ _radians2_, _radius_, _S_, _scalar_, \
20
+ _W_, _zone_, _std_ # PYCHOK used!
22
21
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
23
22
  # from pygeodesy.named import _name__ # _MODS
24
23
  from pygeodesy.props import Property_RO
@@ -28,7 +27,7 @@ from pygeodesy.unitsBase import Float, Int, _NamedUnit, Radius, Str, Fmt, fstr
28
27
  from math import degrees, isnan, radians
29
28
 
30
29
  __all__ = _ALL_LAZY.units
31
- __version__ = '25.04.14'
30
+ __version__ = '25.05.12'
32
31
 
33
32
 
34
33
  class Float_(Float):
@@ -861,7 +860,7 @@ def _std_repr(*Classes):
861
860
  '''
862
861
  from pygeodesy.internals import _getenv
863
862
  for C in Classes:
864
- if hasattr(C, typename(_std_repr)): # PYCHOK del _std_repr
863
+ if hasattr(C, typename(_std_repr)): # noqa: F821 del
865
864
  env = 'PYGEODESY_%s_STD_REPR' % (typename(C).upper(),)
866
865
  if _getenv(env, _std_).lower() != _std_:
867
866
  C._std_repr = False
pygeodesy/utily.py CHANGED
@@ -9,7 +9,7 @@ and U{Vector-based geodesy<https://www.Movable-Type.co.UK/scripts/latlong-vector
9
9
  and published under the same MIT Licence**.
10
10
  '''
11
11
  # make sure int/int division yields float quotient, see .basics
12
- from __future__ import division as _; del _ # PYCHOK semicolon
12
+ from __future__ import division as _; del _ # noqa: E702 ;
13
13
 
14
14
  from pygeodesy.basics import _copysign, isinstanceof, isint, isstr
15
15
  from pygeodesy.constants import EPS, EPS0, INF, NAN, PI, PI2, PI_2, R_M, \
@@ -28,7 +28,7 @@ from math import acos, asin, atan2 as _atan2, cos, degrees, fabs, radians, \
28
28
  sin, tan as _tan # pow
29
29
 
30
30
  __all__ = _ALL_LAZY.utily
31
- __version__ = '25.04.14'
31
+ __version__ = '25.05.12'
32
32
 
33
33
  _G_DEG = _float( 400.0 / _360_0) # grades per degree
34
34
  _G_RAD = _float( 400.0 / PI2) # grades per radian
pygeodesy/utmupsBase.py CHANGED
@@ -5,7 +5,7 @@ u'''(INTERNAL) Private class C{UtmUpsBase}, functions and constants
5
5
  for modules L{epsg}, L{etm}, L{mgrs}, L{ups} and L{utm}.
6
6
  '''
7
7
  # make sure int/int division yields float quotient, see .basics
8
- from __future__ import division as _; del _ # PYCHOK semicolon
8
+ from __future__ import division as _; del _ # noqa: E702 ;
9
9
 
10
10
  from pygeodesy.basics import _copysign, _isin, isint, isscalar, isstr, \
11
11
  neg_, _xinstanceof, _xsubclassof
@@ -32,7 +32,7 @@ from pygeodesy.utily import atan1, _Wrap, wrap360
32
32
  from math import cos, degrees, fabs, sin, tan # copysign as _copysign
33
33
 
34
34
  __all__ = _ALL_LAZY.utmupsBase
35
- __version__ = '25.04.26'
35
+ __version__ = '25.05.12'
36
36
 
37
37
  _UPS_BANDS = _A_, _B_, _Y_, _Z_ # UPS polar bands SE, SW, NE, NW
38
38
  # _UTM_BANDS = _MODS.utm._Bands
pygeodesy/vector2d.py CHANGED
@@ -2,8 +2,8 @@
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},
6
- L{triaxum5} and L{trilaterate2d2}.
5
+ L{iscolinearWith}, L{meeus2}, L{radii11}, L{soddy4}, L{triaxum5} and
6
+ L{trilaterate2d2}.
7
7
 
8
8
  @note: Functions L{circin6}, L{circum3}, L{circum4_}, L{soddy4} and
9
9
  L{triaxum5} require U{numpyhttps://PyPI.org/project/numpy>}
@@ -24,19 +24,19 @@ from pygeodesy.interns import NN, _a_, _and_, _b_, _c_, _center_, _coincident_,
24
24
  _intersection_, _invalid_, _near_, _no_, _of_, \
25
25
  _radius_, _rIn_, _s_, _SPACE_, _too_, _with_
26
26
  # from pygeodesy.lazily import _ALL_LAZY # from .named
27
- from pygeodesy.named import _ALL_LAZY, _NamedTuple, _Pass, Property_RO
27
+ from pygeodesy.named import _ALL_LAZY, _NamedTuple, _Pass
28
28
  from pygeodesy.namedTuples import LatLon3Tuple, Vector2Tuple
29
- # from pygeodesy.props import Property_RO # from .named
29
+ from pygeodesy.props import deprecated_function, Property_RO
30
30
  from pygeodesy.streprs import Fmt, unstr
31
31
  from pygeodesy.units import Float, Int, Meter, Radius, Radius_
32
- from pygeodesy.vector3d import iscolinearWith, nearestOn, _nearestOn2, _nVc, \
33
- _otherV3d, trilaterate3d2, Vector3d # PYCHOK unused
32
+ from pygeodesy.vector3d import _nearestOn2, _nVc, _otherV3d, trilaterate3d2, \
33
+ Vector3d, nearestOn as _nearestOn3d # DEPRECATED
34
34
 
35
35
  from contextlib import contextmanager
36
36
  # from math import fabs, sqrt # from .fmath
37
37
 
38
38
  __all__ = _ALL_LAZY.vector2d
39
- __version__ = '25.04.30'
39
+ __version__ = '25.05.26'
40
40
 
41
41
  _cA_ = 'cA'
42
42
  _cB_ = 'cB'
@@ -395,6 +395,12 @@ def _meeus4(A, point2, point3, circum=False, useZ=True, clas=None, **clas_kwds):
395
395
  return r, t, p2, p3
396
396
 
397
397
 
398
+ @deprecated_function
399
+ def nearestOn(point, point1, point2, **within_useZ_Vector_and_kwds):
400
+ '''DEPRECATED on 2025.05.06, use L{pygeodesy.nearestOn<pygeodesy.vector3d.nearestOn>}.'''
401
+ return _nearestOn3d(point, point1, point2, **within_useZ_Vector_and_kwds)
402
+
403
+
398
404
  class _numpy(object): # see also .formy._idllmn6, .geodesicw._wargs, .latlonBase._toCartesian3
399
405
  '''(INTERNAL) Partial C{NumPy} wrapper.
400
406
  '''
@@ -431,7 +437,7 @@ class _numpy(object): # see also .formy._idllmn6, .geodesicw._wargs, .latlonBas
431
437
  def np(self):
432
438
  '''Import numpy 1.10+ once.
433
439
  '''
434
- return _xnumpy(self.__class__, 1, 10)
440
+ return _xnumpy(type(self), 1, 10)
435
441
 
436
442
  def null_space2(self, A, rcond=None):
437
443
  '''Return the C{null_space} and C{rank} of matrix B{C{A}}.
pygeodesy/vector3d.py CHANGED
@@ -3,8 +3,8 @@
3
3
 
4
4
  u'''Extended 3-D vector class L{Vector3d} and functions.
5
5
 
6
- Function L{intersection3d3}, L{intersections2}, L{parse3d}, L{sumOf} and
7
- L{trilaterate3d2}.
6
+ Functions L{intersection3d3}, L{intersections2}, L{nearestOn}, L{parse3d},
7
+ L{sumOf} and L{trilaterate3d2}.
8
8
  '''
9
9
 
10
10
  from pygeodesy.constants import EPS, EPS0, EPS1, EPS4, INT0, isnear0, \
@@ -32,7 +32,7 @@ from pygeodesy.vector3dBase import Vector3dBase
32
32
  # from math import fabs, sqrt # from .fmath
33
33
 
34
34
  __all__ = _ALL_LAZY.vector3d
35
- __version__ = '25.04.21'
35
+ __version__ = '25.05.07'
36
36
 
37
37
  _vector2d = _MODS.into(vector2d=__name__)
38
38
 
pygeodesy/webmercator.py CHANGED
@@ -16,7 +16,7 @@ and U{Implementation Practice Web Mercator Map Projection<https://Web.Archive.or
16
16
  http://earth-info.nga.mil/GandG/wgs84/web_mercator/(U)%20NGA_SIG_0011_1.0.0_WEBMERC.pdf>}.
17
17
  '''
18
18
  # make sure int/int division yields float quotient, see .basics
19
- from __future__ import division as _; del _ # PYCHOK semicolon
19
+ from __future__ import division as _; del _ # noqa: E702 ;
20
20
 
21
21
  from pygeodesy.basics import _isin, _splituple, _xinstanceof, typename
22
22
  from pygeodesy.constants import PI_2, R_MA, _2_0
@@ -37,7 +37,7 @@ from pygeodesy.utily import degrees90, degrees180
37
37
  from math import atan, atanh, exp, radians, sin, tanh
38
38
 
39
39
  __all__ = _ALL_LAZY.webmercator
40
- __version__ = '25.04.14'
40
+ __version__ = '25.05.12'
41
41
 
42
42
  # _FalseEasting = 0 # false Easting (C{meter})
43
43
  # _FalseNorthing = 0 # false Northing (C{meter})
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pygeodesy
3
- Version: 25.5.5
3
+ Version: 25.5.28
4
4
  Summary: Pure Python geodesy tools
5
5
  Home-page: https://GitHub.com/mrJean1/PyGeodesy
6
6
  Author: Jean M. Brouwers
@@ -120,10 +120,10 @@ Tests
120
120
  =====
121
121
 
122
122
  The tests ran with Python 3.13.3 (with geographiclib_ 2.0), 3.12.7 (with geographiclib_ 2.0, numpy_ 2.1.0,
123
- scipy_ 1.14.1, GeodSolve_ 2.3, IntersectTool_ 2.3 and RhumbSolve_ 2.3), 3.11.5 (with geographiclib_ 2.0,
123
+ scipy_ 1.14.1, GeodSolve_ 2.5, IntersectTool_ 2.5 and RhumbSolve_ 2.5), 3.11.5 (with geographiclib_ 2.0,
124
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,
125
- GeoConvert_ 2.3, GeodSolve_ 2.3), Python 3.9.6 and Python 2.7.18 (with geographiclib_ 1.50, numpy_ 1.16.6,
126
- scipy_ 1.2.2, GeoConvert_ 2.3, GeodSolve_ 2.3, IntersectTool_ 2.3 and RhumbSolve_ 2.3), all on macOS 15.4.1
125
+ GeoConvert_ 2.5, GeodSolve_ 2.5), Python 3.9.6 and Python 2.7.18 (with geographiclib_ 1.50, numpy_ 1.16.6,
126
+ scipy_ 1.2.2, GeoConvert_ 2.5, GeodSolve_ 2.5, IntersectTool_ 2.5 and RhumbSolve_ 2.5), all on macOS 15.5
127
127
  Sequoia in 64-bit.
128
128
 
129
129
  All tests ran with and without ``lazy import`` for Python 3 and with command line option ``-W default``
@@ -133,11 +133,11 @@ included in the distribution files.
133
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
134
  on Intel (``x86_64``) or Intel *emulation* (\"``arm64_x86_64``\", see function `pygeodesy.machine`_).
135
135
 
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
136
+ Test coverage has been measured with coverage_ 7.6.1 using Python 3.13.3, 3.12.7, 3.11.5 and 3.10.8. The
137
137
  complete coverage report in HTML and a PDF summary are included in the distribution files.
138
138
 
139
139
  The tests also ran with Python 3.13.3 (and geographiclib_ 2.0) on `Debian 12`_ in 64-bit only and with
140
- Python 3.12.5 (and geographiclib_ 2.0) on `Windows 2019Server`_ in 64-bit only and with Python 2.7.18
140
+ Python 3.12.8 (and geographiclib_ 2.0) on `Windows 2019Server`_ in 64-bit only and with Python 2.7.18
141
141
  (and with geographiclib_ 1.52) on `Windows 10`_ in 64- and 32-bit.
142
142
 
143
143
  A single-File and single-Directory application with ``pygeodesy`` has been bundled using PyInstaller_ 3.4
@@ -149,22 +149,22 @@ 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
149
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
150
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),
151
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
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),
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
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
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
- 11.0.3, 11.1.2 and 11.3 on iPad4, all in 64-bit only and with 32-bit Python 2.7.14 on Windows Server 2012R2,
157
- Windows 10 Pro and 32-bit Python 2.6.6 on Windows XP SP3.
152
+ numpy_ 1.11.3) on macOS 15.0-4 Sequoia, 14.0-6.1 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1 Big
153
+ Sur (aka 10.16), 10.15.3, 10.15.5-7 Catalina, 10.14 Mojave, 10.13.6 High Sierra and 10.12 Sierra, MacOS X
154
+ 10.11 El Capitan and/or MacOS X 10.10 Yosemite, with Pythonista_ 3.2 (with geographiclib 1.50 or 1.49 and
155
+ numpy 1.8.0) on iOS 14.4.2, 11.4.1, 12.0-3 on iPad4, iPhone6, iPhone10 and/or iPhone12, with Pythonista_ 3.1
156
+ on iOS 10.3.3, 11.0.3, 11.1.2 and 11.3 on iPad4, all in 64-bit only and with 32-bit Python 2.7.14 on Windows
157
+ Server 2012R2, Windows 10 Pro and 32-bit Python 2.6.6 on Windows XP SP3.
158
158
 
159
159
  Notes
160
160
  =====
161
161
 
162
- All Python source code has been statically checked_ with PyChecker_, PyFlakes_, PyCodeStyle_ (formerly Pep8)
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.
162
+ All Python source code has been statically checked_ with Ruff_ using Python 3.13.3 and with PyChecker_, PyFlakes_,
163
+ PyCodeStyle_ (formerly Pep8) and McCabe_ using Python 2.7.18, both in 64-bit on macOS 15.5 Sequoia only.
164
164
 
165
165
  For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
166
166
 
167
- *Last updated: May 05, 2025.*
167
+ *Last updated: May 28, 2025.*
168
168
 
169
169
  License
170
170
  =======
@@ -218,7 +218,6 @@ DEALINGS IN THE SOFTWARE.
218
218
  .. _Epydoc: https://PyPI.org/project/epydoc
219
219
  .. _equidistant: https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1AzimuthalEquidistant.html
220
220
  .. _Exact: https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1GeodesicExact.html
221
- .. _Flake8: https://PyPI.org/project/flake8
222
221
  .. _Forster-Hormann-Popa: https://www.ScienceDirect.com/science/article/pii/S259014861930007X
223
222
  .. _Fréchet: https://WikiPedia.org/wiki/Frechet_distance
224
223
  .. _Garefs (GARS): https://WikiPedia.org/wiki/Global_Area_Reference_System
@@ -265,6 +264,7 @@ DEALINGS IN THE SOFTWARE.
265
264
  .. _Ramer-Douglas-Peucker: https://WikiPedia.org/wiki/Ramer-Douglas-Peucker_algorithm
266
265
  .. _Reumann-Witkam: https://psimpl.SourceForge.net/reumann-witkam.html
267
266
  .. _RhumbSolve: https://GeographicLib.SourceForge.io/C++/doc/utilities.html
267
+ .. _Ruff: https://GitHub.com/astral-sh/ruff
268
268
  .. _scipy: https://PyPI.org/project/scipy
269
269
  .. _simplify: https://Bost.Ocks.org/mike/simplify
270
270
  .. _Sutherland-Hodgman: https://WikiPedia.org/wiki/Sutherland-Hodgman_algorithm
@@ -0,0 +1,119 @@
1
+ pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
+ pygeodesy/__init__.py,sha256=C2E8VxEx5MOANjeIZ12lgXtsJSbJdYh1Ee05IkobA1w,42290
3
+ pygeodesy/__main__.py,sha256=HpOBmuhI7yVP1FIAEugvd9Lb54kzew-nM78be0r4SC4,5597
4
+ pygeodesy/albers.py,sha256=mb3YbVvoBq8a7AytT0HeVxe8DGEvx1KFN2Usl2ksKwk,30908
5
+ pygeodesy/azimuthal.py,sha256=acwIA1B7jmg1oDpJBuFitnOVHUWRUk7Y73yI8zqIGrc,49854
6
+ pygeodesy/basics.py,sha256=ErpbLgHNerGPKiOIlWKdKzq6lO0dhoZjaywTnCn8PyE,32905
7
+ pygeodesy/booleans.py,sha256=njAJlAoVZEcQ5jp8wwyuVo8-jFPE3PFpAF3k3dQihBM,73683
8
+ pygeodesy/cartesianBase.py,sha256=tvb1pGUTvSkIAInNhrnHXjBCwnQrVn6a-H2fipoapKE,45365
9
+ pygeodesy/clipy.py,sha256=a0azaK7YDmGDU8mVVKe2MvUiPEhqZ9XJ-9u0T1iHKbo,27779
10
+ pygeodesy/constants.py,sha256=usdHWtYiy8iaPXxXau2vsViL9zC8I4Jp2fziiEmp2g4,19947
11
+ pygeodesy/css.py,sha256=vdQax5m7BMSpr7PUyqedCSvx73ilWuhXQTp39i8FOfA,25793
12
+ pygeodesy/datums.py,sha256=Vp1fP7sSV1EuRbuO2scnZ3qiTZD1CvL4O12KSRlf1SU,34068
13
+ pygeodesy/dms.py,sha256=CKXt2EOYFBluQV5q6cFYppJl3dCvvEB_0E84J0ki6ws,42202
14
+ pygeodesy/ecef.py,sha256=DcWNhnOZC7-Olns9c1XI9p4MmuC00KN5rZ5W1UQVUxw,59009
15
+ pygeodesy/ecefLocals.py,sha256=zoxGUJeYX2UXzR9r0jaByrvfrrpmrvAhjyQsz433RjA,7794
16
+ pygeodesy/elevations.py,sha256=WrWPZNgkZX9Ys_1ij_gyE4jzdIv85JYAaR2cK3vc4gQ,10879
17
+ pygeodesy/ellipsoidalBase.py,sha256=n6VHIaRZ6UvC1H36qolKxwlHJX5BZysvgE3iir-PunE,55743
18
+ pygeodesy/ellipsoidalBaseDI.py,sha256=PbSJkUUHpRGYgnnciMD-sWqTCReZv_FAc8SUonF3ZbI,38544
19
+ pygeodesy/ellipsoidalExact.py,sha256=kKnQV3gz293dPowsRx5aI0CJ05a2TWGpEcWoJCxut30,17111
20
+ pygeodesy/ellipsoidalGeodSolve.py,sha256=w5TubUdqYwvrtxfIwP2Scr1FzISq2szx1HX88TUa42E,17107
21
+ pygeodesy/ellipsoidalKarney.py,sha256=W_Liw5MxTqJJGsxMi50ui8grRSPKwkG2HH-Mv_mXQYk,18839
22
+ pygeodesy/ellipsoidalNvector.py,sha256=HLFjX6o26q2fzVCjLSL0PdEh96xhGtjfzo2V_k54j4A,30146
23
+ pygeodesy/ellipsoidalVincenty.py,sha256=zeTvid09NGuYJ1WJ__a3ApCBGSzX0A-Rhs8-sQXMNQQ,26273
24
+ pygeodesy/ellipsoids.py,sha256=v964yZIL2nCc8MJgt3nzV6pczaQsQubXmX_sAh_nrBw,107765
25
+ pygeodesy/elliptic.py,sha256=nob5Iby3RIj1tnsZJ1AzzxDLwPJm48M9Cf_kIAwU6l8,45035
26
+ pygeodesy/epsg.py,sha256=VIBidzAEuoBF4LdlJ4r3WtpL0Ymhru8kf4fAgfFr5ok,8220
27
+ pygeodesy/errors.py,sha256=OUEJ51M3c-JH1n0BBbRtPTCDX0I00rH_BQPYSRoKrqo,32043
28
+ pygeodesy/etm.py,sha256=NDtpmbQmbGieV64iJ-EDIAvD9ryjrW0hiD3wBBtxULk,46744
29
+ pygeodesy/fmath.py,sha256=sIN7mW2KOiK0yU93mvmHo1OOTkGxKvwRinvyr_Qdf6I,37689
30
+ pygeodesy/formy.py,sha256=7-CdPiagdVrbDMjWieX_guN4RvFVCYKOM3yDKSFPRWU,69777
31
+ pygeodesy/frechet.py,sha256=dBnQ5ePuaUdKv62-e9RfovFDxELsZPQEKMLww9NOf7Q,35588
32
+ pygeodesy/fstats.py,sha256=M6UOrwmeGp6kjYuYfc6Iq9ibMJAFNm6D4C5GnvlJeuM,28348
33
+ pygeodesy/fsums.py,sha256=3pXl8rfDPeKzXHEhtf9qNzBtUme4ckskDx3HWfJbfyg,103988
34
+ pygeodesy/gars.py,sha256=AXioT4Lh1cwrd7fF6dHcVJw-9vu2oAnZrzo_ka2Y3Ts,11761
35
+ pygeodesy/geodesici.py,sha256=wPUDlRPOcj3MvvWA0CtnZvC30t1onKyZYvR51iCjgks,74891
36
+ pygeodesy/geodesicw.py,sha256=xDxxxr4HOT-8Mh85zD6QZzyO-mfqUavfwQMStYrsF8c,30029
37
+ pygeodesy/geodsolve.py,sha256=fFlyNlkEOpkJaeddEuKwfhtqaZjmVs0egNGM5cwFFoc,29101
38
+ pygeodesy/geohash.py,sha256=1P9-k9sMN-ZVFr2iWbQpFi1lg3uNmChHFCIfETkgFJU,40153
39
+ pygeodesy/geoids.py,sha256=OQvOVutr8R1CalStgxmNu2Mk3oMl4zpCY_OKh0KHpI8,86125
40
+ pygeodesy/hausdorff.py,sha256=KGB0CIeNkBqR0sXIbRJvcgXPrM-4Mpi2aBOqDeZjqZ0,32269
41
+ pygeodesy/heights.py,sha256=_Pn-6w4gGzdXCoA6m72rJm4hb-Fe2vxc8RiRRjq5iTI,41002
42
+ pygeodesy/internals.py,sha256=y3qT-ZbNDc-7md_T87qtVk1x2rDVtJbP5G0P-HgBlVA,24024
43
+ pygeodesy/interns.py,sha256=QTP_6rStQ283DE-rL7rCAcfEffuiAXustBGkCY_DHJ0,23508
44
+ pygeodesy/iters.py,sha256=nKVp_LUQyTqOz_OLzY25g6-_xlKG7lmAnjKKMXESmiM,20345
45
+ pygeodesy/karney.py,sha256=IzWyGwX0kRpwrVFBpCzogd2Q8PLvCdCwHheE-zbCQZE,41629
46
+ pygeodesy/ktm.py,sha256=3CLwbRvk-sr4qs8R9fdJ_ejokgZEjKHULV7wzzuonHU,27259
47
+ pygeodesy/latlonBase.py,sha256=B7wNE-IJf-Sm3NKhCXdrgwRbH_4dBGluZlQdxTJqp8s,75320
48
+ pygeodesy/lazily.py,sha256=2FzJkIQK7LftAXXYxMbqTQUAWth7T3syIhqm8Z9bhuo,47609
49
+ pygeodesy/lcc.py,sha256=7Di2Y5VIDL5drdSce4ABWGT3MtZSosaLKd68US6788s,25786
50
+ pygeodesy/ltp.py,sha256=N3TMipTWKUOeZYzn3UeJJqe5J4Yk788390ohQM1ykAE,50893
51
+ pygeodesy/ltpTuples.py,sha256=t-n7p9A3JCVasv8LKCV4PkOTmXJZi91BkBFm8pBZM5o,59101
52
+ pygeodesy/mgrs.py,sha256=ZgCBH_M_YFxuFu5ukVOVetk-uftv-4GJP-QJrtoqtcU,29842
53
+ pygeodesy/named.py,sha256=NjRLzk0bNSJbPBaqFPjG0UagZj6MarF9O4ZQVQsyV7o,52898
54
+ pygeodesy/namedTuples.py,sha256=JlO8uWmR65RkT7Rdgc9knfI0-bqJeA-tm2ZKsesztVU,30598
55
+ pygeodesy/nvectorBase.py,sha256=XnA_DlqbgYPpF7y_BQHQVmntpI3M5fe0q8h3zX-PKbs,29930
56
+ pygeodesy/osgr.py,sha256=4mFUcn1vMOju3PK1rKohPtIlJZrBGPJrcRjFl-CoxqE,30852
57
+ pygeodesy/points.py,sha256=2vQpgqxJiC7Cgn03pqiezTM4I-CTquv9tQZi4uYWjpw,64497
58
+ pygeodesy/props.py,sha256=GCBqrkMfpbHuca2Sh68WSGDplIeZLvCDDXUewyvEiqI,24600
59
+ pygeodesy/resections.py,sha256=vCbnEyNghGkblrPA58-MspaxkZcInnvRgS-oSBIe1hM,43796
60
+ pygeodesy/simplify.py,sha256=O04NSb0ezXM8z3lCcajXbetZuum6PURAOPYTsJ27gxI,22068
61
+ pygeodesy/solveBase.py,sha256=I2oW7zaPoVUkD7IB9Ro0paU-T1vie1lomg83f71twDY,18468
62
+ pygeodesy/sphericalBase.py,sha256=hq6dyeeIHBy_T0Q6PIwSvmo1U70Ir5KBeMTwQplzqHQ,32071
63
+ pygeodesy/sphericalNvector.py,sha256=bu0yB4PEq1cs6BS8QFqtljWpVEw7ESwq2yILOzGDuAc,54948
64
+ pygeodesy/sphericalTrigonometry.py,sha256=8q3sevqdeJ-mOukkXLsXKAg06hDxaBhiPHhrdQn3UHY,64411
65
+ pygeodesy/streprs.py,sha256=-4LErmfPLtGt1tLDBHhJam-zYq8p2Z2C5wDCMELEml4,23599
66
+ pygeodesy/trf.py,sha256=gpsOJVER1KhITOtyiENQ4EnRONinLkzbujsfzzxHVv8,119209
67
+ pygeodesy/triaxials.py,sha256=V0MSYJxRgYDhZcF7HXnu7oFzRyWJkhwc6scuNjc6VVg,64046
68
+ pygeodesy/units.py,sha256=nH6uNqtaILtGRXqCcHVYBTfhGrv-WFt3w1aso6PA0kM,35419
69
+ pygeodesy/unitsBase.py,sha256=cVNKG24Fov73gLFPGwGdjvXmM-8fd3MDufVubABAMeE,14141
70
+ pygeodesy/ups.py,sha256=k7MDyq_aKO70m8sEeOCvpFb3nyrBmBdbdPST-UgxgeA,23349
71
+ pygeodesy/utily.py,sha256=ZJKuwoo97K7GE56-cA8bGrvyz9mN9OoOMnSOEOw0mj0,40025
72
+ pygeodesy/utm.py,sha256=kcXliftP9q0nTxviIOixVyvResK2Jydj-G52CXJiSuQ,31123
73
+ pygeodesy/utmups.py,sha256=31RD8l7M-vcRXU9_wnkb_PNUcKjOr1HAmwjOndjkgXE,13176
74
+ pygeodesy/utmupsBase.py,sha256=PptZ4Mm8BaDUCA8v1sK54o8idw_24kq6loAuYv0bejE,22730
75
+ pygeodesy/vector2d.py,sha256=7R5ciPxXEX98LmMWNqwbds8Y6vpsHKEeCzcBVDRiq6g,40305
76
+ pygeodesy/vector3d.py,sha256=sC7u9tgFFWoWHFxqtO-dvKVuiEzraw50TDU_QpdDbYw,43045
77
+ pygeodesy/vector3dBase.py,sha256=BHenp3NGpfhVbJ6JMgdNLx6vAcwDWDJIxl9hAdp-AVw,36301
78
+ pygeodesy/webmercator.py,sha256=z3Ft5TeHc9FoLA8zQhzTrSuShHSz0aHjanbvj53ohmo,15016
79
+ pygeodesy/wgrs.py,sha256=1MK72g3HsfdsvChM6rBy_auxzSvWHSoer8fEuT4LinI,15503
80
+ pygeodesy/auxilats/_CX_4.py,sha256=DX67nZ1E4nOis8d_wQ8tn5T-SAVNDBJH3kp9IuQc8lM,6830
81
+ pygeodesy/auxilats/_CX_6.py,sha256=T89kMuUijlLZzmqoI8XiTGTOzj4A4SKhCyt_rOroCq4,11278
82
+ pygeodesy/auxilats/_CX_8.py,sha256=Ff_VTStb-dZkGz7-RL1tzymPgPbTwtl_6EzPquPMamc,18900
83
+ pygeodesy/auxilats/_CX_Rs.py,sha256=hMPcfAQbkD1DzwrRTB9pecfoytxHilPp5__n6UYUNlE,8679
84
+ pygeodesy/auxilats/__init__.py,sha256=g3x06SdwuCPcerCHZRyvwY8xaKR5IxZ1YV3AwTnONNg,2883
85
+ pygeodesy/auxilats/__main__.py,sha256=jH0ShJaDR8zWfoLPXuut37BJbVWVDsAm9rb4xc25XOY,3340
86
+ pygeodesy/auxilats/auxAngle.py,sha256=yptBTS1bVjUBkHSq1XV28b-TKJaYAtib_xqRJvECZmA,16734
87
+ pygeodesy/auxilats/auxDLat.py,sha256=lvffZo8DdVWWEHusPNXRYQeoCFfZcG5rNhgEooL5Xu0,10956
88
+ pygeodesy/auxilats/auxDST.py,sha256=ab8ByHMmX1dWBmGgOGxYUlmkZqTKKpawg5maLYYrG7M,10464
89
+ pygeodesy/auxilats/auxLat.py,sha256=2d6uliIVfxOHp8qibom-8l5T7bLONSyTr6LRTt4OwRs,31972
90
+ pygeodesy/auxilats/auxily.py,sha256=2pXzqlOb1Jy8RKcpKFaqy0yFrzhhc7WK666PD3T-_MI,8085
91
+ pygeodesy/deprecated/__init__.py,sha256=QkeQNBFL8OukeYlea0F0PGVUffqs8ZMAN8jDOuHVNvI,2823
92
+ pygeodesy/deprecated/bases.py,sha256=pL4fEW7PTrDc_coggRCcnrs3izp-MWUEyvr6yBNzgMw,1649
93
+ pygeodesy/deprecated/classes.py,sha256=_H9-QnSVA4iLRKwN16FO8WOE51Qin0zNMNb_kSWgnjU,16388
94
+ pygeodesy/deprecated/consterns.py,sha256=RC-YvqQXAEVoIaLnaLrIrA1Mr3oXLk3HT9n1HLvGCSs,1917
95
+ pygeodesy/deprecated/datum.py,sha256=aeY-POZBZrKKiTnrhqOImV5AfiXu2-9Vz8xu_d4ze2g,1910
96
+ pygeodesy/deprecated/functions.py,sha256=mpgYzx_ynbIrfy9WBDfjhNtI-sRx7nKwucyGaxqE10k,15792
97
+ pygeodesy/deprecated/nvector.py,sha256=rttz-znpX2Tm1ttoJt8_E8V_9n_ZciKi_CvvbwFmZQM,2117
98
+ pygeodesy/deprecated/rhumbBase.py,sha256=y1DcGwGBfIbbTK5upm1XgkbCVIlpGc5MLDn5WxcuLp8,1370
99
+ pygeodesy/deprecated/rhumbaux.py,sha256=pikSwb5cIE-MVwHPFjwGd-JYau_Of-Lf6wgghjNWS98,1423
100
+ pygeodesy/deprecated/rhumbsolve.py,sha256=GRyrxUTT19gjSe8BohUswxXRBjoNWrzQryPbqTH2XhE,1426
101
+ pygeodesy/deprecated/rhumbx.py,sha256=YSzTywlDLfVYZmJjAEi_gLtWbsf4eGxZembaL3wOTuk,1420
102
+ pygeodesy/geodesicx/_C4_24.py,sha256=3OkzOxf0DdO1QL4N9CVYjpOgFCm8FcYjCyvcTLpL2wc,90707
103
+ pygeodesy/geodesicx/_C4_27.py,sha256=grqtju94Nu9V_eQPqe_7aRbLCYflxRuK127pPOPwuDA,134215
104
+ pygeodesy/geodesicx/_C4_30.py,sha256=I4ZuTy64yOq1IVgRtc_kqOL0HnKzXeTea7kTFSolcJs,201921
105
+ pygeodesy/geodesicx/__init__.py,sha256=KXnzEGNtOtOke01y72dkIgT6sAwOP3zd6wgXho1F3T4,2468
106
+ pygeodesy/geodesicx/__main__.py,sha256=ugi6c-4y91WOMJIL0N-wgXhoGhV90QJIFji2MaIGLiA,4329
107
+ pygeodesy/geodesicx/gx.py,sha256=MdnQat0Q4b6h9jlsOCsJLpmpiDSU84vgip7Gny9nBlw,60971
108
+ pygeodesy/geodesicx/gxarea.py,sha256=1z-CQzi3vEls9Rs-okn003cdR9o_fWtO3lORbk_jpu8,19506
109
+ pygeodesy/geodesicx/gxbases.py,sha256=R9IQXwCK6KOPPcxI6qvdDbVcyuqfYJiZy5jcmrfkJ5A,6390
110
+ pygeodesy/geodesicx/gxline.py,sha256=JbFzLraITpW4xoOx8qCEzkF_5z8AgDSywZj0tcSexsg,27873
111
+ pygeodesy/rhumb/__init__.py,sha256=DsE5a16CUYWE5YTuo1U8mnDCtykuWw7VeGx23Yny_VU,2207
112
+ pygeodesy/rhumb/aux_.py,sha256=NeHkNLS2ULh3sTb3eBTtmRih9SZNyVJKMtJj7imKkuI,16117
113
+ pygeodesy/rhumb/bases.py,sha256=P5AQyL-MTbJaO4oKH_Y7qcusQxaHoAii0hJVQ9mT7hU,54250
114
+ pygeodesy/rhumb/ekx.py,sha256=GMY6ik4fgiRrjek-42cpZxU3U2bdoAcY6ZcbZRckpII,24026
115
+ pygeodesy/rhumb/solve.py,sha256=z8z_XYObTgz7w1skNLNcLBpe-EO_r0H4sVcZGlBcWnc,24005
116
+ pygeodesy-25.5.28.dist-info/METADATA,sha256=fowmWp0l0feRG1MkGeJGcJxfcyDdvoKZu6TrePRyaNY,20102
117
+ pygeodesy-25.5.28.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
118
+ pygeodesy-25.5.28.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
119
+ pygeodesy-25.5.28.dist-info/RECORD,,