pygeodesy 25.5.25__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.
pygeodesy/internals.py CHANGED
@@ -132,7 +132,7 @@ class _MODS_Base(object):
132
132
  def name(self):
133
133
  '''Get this name (C{str}).
134
134
  '''
135
- return typename(self.__class__)
135
+ return typename(type(self))
136
136
 
137
137
  @_Property_RO
138
138
  def nix2(self): # PYCHOK no cover
@@ -686,7 +686,7 @@ def _versions(sep=_SPACE_):
686
686
 
687
687
 
688
688
  __all__ = tuple(map(typename, (machine, print_, printf, typename)))
689
- __version__ = '25.04.14'
689
+ __version__ = '25.05.26'
690
690
 
691
691
  if __name__ == _DMAIN_:
692
692
 
pygeodesy/interns.py CHANGED
@@ -443,15 +443,15 @@ _LR_PAIRS = {_LANGLE_: _RANGLE_,
443
443
 
444
444
  __all__ = (_NN_, # NOT MISSING!
445
445
  Str_.__name__) # classes
446
- __version__ = '25.04.12'
446
+ __version__ = '25.05.26'
447
447
 
448
448
  if __name__ == _DMAIN_:
449
449
 
450
- def _main():
450
+ def _main(globalocals):
451
451
  from pygeodesy import itemsorted, printf
452
452
 
453
453
  t = b = 0
454
- for n, v in itemsorted(locals(), asorted=False, reverse=True):
454
+ for n, v in itemsorted(globalocals, asorted=False, reverse=True):
455
455
  if n.endswith(_UNDER_) and n.startswith(_UNDER_) and \
456
456
  not n.startswith(_DUNDER_):
457
457
  t += 1
@@ -459,10 +459,10 @@ if __name__ == _DMAIN_:
459
459
  m = n[1:-1]
460
460
  if m != v and m.replace(_UNDER_, _SPACE_) != v:
461
461
  printf('%4d: %s = %r', t, n, v)
462
- n = len(locals())
462
+ n = len(globalocals)
463
463
  printf('%4d (%d) names, %s chars total, %.2f chars avg', t, n, b, float(b) / t, nl=1)
464
464
 
465
- _main()
465
+ _main(globals()) # or locals()
466
466
 
467
467
  # **) MIT License
468
468
  #
pygeodesy/karney.py CHANGED
@@ -166,7 +166,7 @@ from pygeodesy.utily import atan2d, sincos2d, tand, _unrollon, fabs
166
166
  # from math import fabs # from .utily
167
167
 
168
168
  __all__ = _ALL_LAZY.karney
169
- __version__ = '25.05.12'
169
+ __version__ = '25.05.28'
170
170
 
171
171
  _2_4_ = '2.4'
172
172
  _K_2_0 = _getenv(_PYGEODESY_ENV(typename(_xgeographiclib)[2:]), _2_)
@@ -240,6 +240,8 @@ class Caps(object):
240
240
 
241
241
  C{LONG_UNROLL} - unroll C{lon2} in method C{.Direct},
242
242
 
243
+ C{NONFINITONAN} - set all C{GDict} items to C{NAN} iff any argument is C{non-finite}.
244
+
243
245
  C{REDUCEDLENGTH} - compute the reduced length C{m12},
244
246
 
245
247
  C{REVERSE2} - reverse azimuth C{azi2} by 180 degrees,
@@ -274,7 +276,7 @@ class Caps(object):
274
276
 
275
277
  LINE_CAPS = STANDARD_LINE | REDUCEDLENGTH | GEODESICSCALE # .geodesici only
276
278
  LONG_UNROLL = 1 << 15 # unroll C{lon2} in .Direct and .Position
277
- # = 1 << 16 # unused
279
+ NONFINITONAN = 1 << 16 # see method GDict._toNAN
278
280
  LINE_OFF = 1 << 17 # Line without updates from parent geodesic or rhumb
279
281
  REVERSE2 = 1 << 18 # reverse C{azi2}
280
282
  ALL = 0x7F80 | _CAP_ALL # without LONG_UNROLL, LINE_OFF, REVERSE2 and _DEBUG_*
@@ -327,9 +329,12 @@ if _FOR_DOCS: # PYCHOK force ...
327
329
  else:
328
330
  Caps = Caps() # PYCHOK singleton
329
331
 
330
- _key2Caps = dict(a12 =Caps.DISTANCE, # in GDict._unCaps
332
+ _key2Caps = dict(a12 =Caps.DISTANCE, # in GDict._toNAN, -._unCaps
333
+ azi1=Caps.AZIMUTH,
331
334
  azi2=Caps.AZIMUTH,
335
+ lat1=Caps.LATITUDE,
332
336
  lat2=Caps.LATITUDE,
337
+ lon1=Caps.LONGITUDE,
333
338
  lon2=Caps.LONGITUDE,
334
339
  m12 =Caps.REDUCEDLENGTH,
335
340
  M12 =Caps.GEODESICSCALE,
@@ -353,6 +358,7 @@ class _CapsBase(_NamedBase): # in .auxilats, .geodesicx.gxbases
353
358
  LINE_OFF = Caps.LINE_OFF
354
359
  LONGITUDE = Caps.LONGITUDE
355
360
  LONG_UNROLL = Caps.LONG_UNROLL
361
+ NONFINITONAN = Caps.NONFINITONAN
356
362
  REDUCEDLENGTH = Caps.REDUCEDLENGTH
357
363
  STANDARD = Caps.STANDARD
358
364
  STANDARD_LINE = Caps.STANDARD_LINE # for geodesici
@@ -449,11 +455,14 @@ class GDict(ADict): # XXX _NamedDict
449
455
  '''
450
456
  return self._toTuple(Inverse10Tuple, dflt)
451
457
 
452
- def _toNAN(self, outmask): # .GeodesicLineExact._GenPosition
458
+ def _toNAN(self, outmask): # .GeodesicExact._GDistInverse, .GeodesicLineExact._GenPosition
453
459
  '''(INTERNAL) Convert this C{GDict} to all C{NAN}s.
454
460
  '''
455
- d = dict((n, NAN) for n in GeodSolve12Tuple._Names_)
456
- return self.set_(**d)._unCaps(outmask)
461
+ if (outmask & Caps.NONFINITONAN):
462
+ d = dict((k, NAN) for k, C in _key2Caps.items()
463
+ if (outmask & C) == C)
464
+ self.set_(**d)
465
+ return self
457
466
 
458
467
  @deprecated_method
459
468
  def toRhumb7Tuple(self, dflt=NAN): # PYCHOK no cover
@@ -543,7 +552,7 @@ class Inverse10Tuple(_GTuple):
543
552
  **updates) # PYCHOK indent
544
553
 
545
554
 
546
- class _kWrapped(object): # in .geodesicw
555
+ class _kWrapped(_CapsBase): # in .geodesicw
547
556
  '''(INTERNAL) Wrapper for some of I{Karney}'s U{geographiclib
548
557
  <https://PyPI.org/project/geographiclib>} classes.
549
558
  '''
@@ -554,13 +563,15 @@ class _kWrapped(object): # in .geodesicw
554
563
  <https://PyPI.org/project/geographiclib>} package is installed,
555
564
  otherwise raise a C{LazyImportError}.
556
565
  '''
557
- g = _xgeographiclib(type(self).__module__, 1, 49)
566
+ g = _xgeographiclib(type(self), 1, 49)
558
567
  from geographiclib.geodesic import Geodesic
559
568
  g.Geodesic = Geodesic
560
569
  from geographiclib.geodesicline import GeodesicLine
561
570
  g.GeodesicLine = GeodesicLine
562
571
  from geographiclib.geomath import Math
563
572
  g.Math = Math
573
+ # from geographiclib.polygonarea import PolygonArea
574
+ # g.PolygonArea = PolygonArea # see below
564
575
  return g
565
576
 
566
577
  @property_ROnce
@@ -586,6 +597,11 @@ class _kWrapped(object): # in .geodesicw
586
597
  return (_2_4_ if _K_2_4 else
587
598
  (_2_ if _K_2_0 else _1_)) if self.Math else NN
588
599
 
600
+ @property_ROnce
601
+ def _PolygonArea(self): # lazy import
602
+ from geographiclib.polygonarea import PolygonArea
603
+ return PolygonArea
604
+
589
605
  _wrapped = _kWrapped() # PYCHOK singleton, .datum, .test/base.py
590
606
 
591
607
 
@@ -830,7 +846,7 @@ def _norm180(deg): # mimick geomath.Math.AngNormalize
830
846
  return d
831
847
 
832
848
 
833
- def _polygon(geodesic, points, closed, line, wrap):
849
+ def _polygon(geodesic, points, closed, line, wrap, polar):
834
850
  '''(INTERNAL) Compute the area or perimeter of a polygon,
835
851
  using a L{GeodesicExact}, L{GeodesicSolve} or (if the
836
852
  C{geographiclib} package is installed) a C{Geodesic}
@@ -848,7 +864,7 @@ def _polygon(geodesic, points, closed, line, wrap):
848
864
  if not closed: # closed only
849
865
  raise _ValueError(closed=closed, points=_composite_)
850
866
 
851
- return points._sum1(_a_p, closed, line, wrap)
867
+ return points._sum1(_a_p, closed, line, wrap, polar)
852
868
 
853
869
  gP = geodesic.Polygon(line)
854
870
  _A = gP.AddPoint
@@ -867,7 +883,7 @@ def _polygon(geodesic, points, closed, line, wrap):
867
883
  _A(p0.lat, p0.lon)
868
884
 
869
885
  # gP.Compute returns (number_of_points, perimeter, signed area)
870
- return gP.Compute(False, True)[1 if line else 2]
886
+ return gP.Compute(reverse=False, sign=True, polar=polar)[1 if line else 2]
871
887
 
872
888
 
873
889
  try:
pygeodesy/lcc.py CHANGED
@@ -50,7 +50,7 @@ from pygeodesy.utily import atan1, degrees90, degrees180, sincos2, tanPI_2_2
50
50
  from math import atan, fabs, log, radians, sin, sqrt
51
51
 
52
52
  __all__ = _ALL_LAZY.lcc
53
- __version__ = '25.05.12'
53
+ __version__ = '25.05.26'
54
54
 
55
55
  _E0_ = 'E0'
56
56
  _N0_ = 'N0'
@@ -457,7 +457,7 @@ class Lcc(_NamedBase):
457
457
  # h=self.height, conic=self.conic,
458
458
  # name=self._name__(name))
459
459
  # args, kwds = _args_kwds(**kwds)
460
- # return self.__class__(*args, **kwds) # .classof
460
+ # return type(self)(*args, **kwds) # .classof
461
461
 
462
462
  @Property_RO
463
463
  def easting(self):
pygeodesy/props.py CHANGED
@@ -26,7 +26,7 @@ from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, \
26
26
  from functools import wraps as _wraps
27
27
 
28
28
  __all__ = _ALL_LAZY.props
29
- __version__ = '25.05.21'
29
+ __version__ = '25.05.26'
30
30
 
31
31
  _class_ = 'class'
32
32
  _DNL_ = _NL_ * 2 # PYCHOK used!
@@ -347,7 +347,7 @@ class property_RO(_PropertyBase):
347
347
  if Clas: # overrides inst.__class__
348
348
  d = Clas[0].__dict__.get(uname, MISSING)
349
349
  else:
350
- d = getattr(inst.__class__, uname, MISSING)
350
+ d = getattr(type(inst), uname, MISSING)
351
351
  # if d is MISSING: # XXX superfluous
352
352
  # for c in type(inst).__mro__[:-1]:
353
353
  # if uname in c.__dict__:
@@ -403,7 +403,7 @@ class property_ROver(_property_RO___):
403
403
  '''
404
404
  v = self.method(inst)
405
405
  n = self.name
406
- C = inst.__class__
406
+ C = type(inst)
407
407
  for c in C.__mro__: # [:-1]
408
408
  if getattr(c, n, None) is self:
409
409
  setattr(c, n, v) # overwrite property_ROver
@@ -40,7 +40,7 @@ from pygeodesy.utily import acos1, asin1, atan2b, atan2d, degrees90, \
40
40
  from math import cos, fabs, log, sin, sqrt
41
41
 
42
42
  __all__ = _ALL_LAZY.sphericalBase
43
- __version__ = '25.05.12'
43
+ __version__ = '25.05.26'
44
44
 
45
45
 
46
46
  class CartesianSphericalBase(CartesianBase):
@@ -592,7 +592,7 @@ def _intersecant2(c, r, p, b, radius=R_M, exact=False, height=None, wrap=False):
592
592
  p = _unrollon(c, p, wrap=wrap)
593
593
  nonexact = exact is None
594
594
 
595
- if not isinstanceof(r, c.__class__, p.__class__):
595
+ if not isinstanceof(r, type(c), type(p)):
596
596
  r = Radius_(circle=r)
597
597
  elif nonexact:
598
598
  r = c.distanceTo(r, radius=radius, wrap=wrap)
@@ -601,7 +601,7 @@ def _intersecant2(c, r, p, b, radius=R_M, exact=False, height=None, wrap=False):
601
601
  else:
602
602
  raise _ValueError(exact=exact)
603
603
 
604
- if not isinstanceof(b, c.__class__, p.__class__):
604
+ if not isinstanceof(b, type(c), type(p)):
605
605
  b = Bearing(b)
606
606
  elif nonexact:
607
607
  b = p.initialBearingTo(b, wrap=wrap)
@@ -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.05.12'
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):
@@ -57,7 +57,7 @@ from pygeodesy.vector3d import sumOf, Vector3d
57
57
  from math import asin, cos, degrees, fabs, radians, sin
58
58
 
59
59
  __all__ = _ALL_LAZY.sphericalTrigonometry
60
- __version__ = '25.05.12'
60
+ __version__ = '25.05.28'
61
61
 
62
62
  _PI_EPS4 = PI - EPS4
63
63
  if _PI_EPS4 >= PI:
@@ -758,20 +758,21 @@ class LatLon(LatLonSphericalBase):
758
758
  _T00 = LatLon(0, 0, name='T00') # reference instance (L{LatLon})
759
759
 
760
760
 
761
- def areaOf(points, radius=R_M, wrap=False): # was=True
762
- '''Calculate the area of a (spherical) polygon or composite (with the
763
- 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).
764
764
 
765
- @arg points: The polygon points or clips (L{LatLon}[], L{BooleanFHP}
766
- or L{BooleanGH}).
767
- @kwarg radius: Mean earth radius, ellipsoid or datum (C{meter},
768
- L{Ellipsoid}, L{Ellipsoid2}, L{Datum} or L{a_f2Tuple})
769
- or C{None}.
770
- @kwarg wrap: If C{True}, wrap or I{normalize} and unroll the B{C{points}}
771
- (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>}.
772
773
 
773
- @return: Polygon area (C{meter} I{quared}, same units as B{C{radius}}
774
- 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}).
775
776
 
776
777
  @raise PointsError: Insufficient number of B{C{points}}.
777
778
 
@@ -779,13 +780,11 @@ def areaOf(points, radius=R_M, wrap=False): # was=True
779
780
 
780
781
  @raise ValueError: Invalid B{C{radius}} or semi-circular polygon edge.
781
782
 
782
- @note: The area is based on I{Karney}'s U{'Area of a spherical
783
- polygon'<https://MathOverflow.net/questions/97711/
784
- 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.
785
785
 
786
- @see: Functions L{pygeodesy.areaOf}, L{sphericalNvector.areaOf},
787
- L{pygeodesy.excessKarney}, L{ellipsoidalExact.areaOf} and
788
- L{ellipsoidalKarney.areaOf}.
786
+ @see: Functions L{pygeodesy.areaOf}, L{sphericalNvector.areaOf}, L{pygeodesy.excessKarney},
787
+ L{ellipsoidalExact.areaOf} and L{ellipsoidalKarney.areaOf}.
789
788
  '''
790
789
  if _MODS.booleans.isBoolean(points):
791
790
  return points._sum2(LatLon, areaOf, radius=radius, wrap=wrap)
@@ -822,7 +821,7 @@ def areaOf(points, radius=R_M, wrap=False): # was=True
822
821
  p1, z1 = p2, z2
823
822
 
824
823
  R = abs(R * _2_0)
825
- if abs(D) < _90_0: # ispolar(points)
824
+ if abs(D) < _90_0 or polar: # ispolar(points)
826
825
  R = abs(R - PI2)
827
826
  if radius:
828
827
  a = degrees(A.fover(len(A))) # mean lat
pygeodesy/vector2d.py CHANGED
@@ -36,7 +36,7 @@ from contextlib import contextmanager
36
36
  # from math import fabs, sqrt # from .fmath
37
37
 
38
38
  __all__ = _ALL_LAZY.vector2d
39
- __version__ = '25.05.09'
39
+ __version__ = '25.05.26'
40
40
 
41
41
  _cA_ = 'cA'
42
42
  _cB_ = 'cB'
@@ -437,7 +437,7 @@ class _numpy(object): # see also .formy._idllmn6, .geodesicw._wargs, .latlonBas
437
437
  def np(self):
438
438
  '''Import numpy 1.10+ once.
439
439
  '''
440
- return _xnumpy(self.__class__, 1, 10)
440
+ return _xnumpy(type(self), 1, 10)
441
441
 
442
442
  def null_space2(self, A, rcond=None):
443
443
  '''Return the C{null_space} and C{rank} of matrix B{C{A}}.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pygeodesy
3
- Version: 25.5.25
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
@@ -164,7 +164,7 @@ PyCodeStyle_ (formerly Pep8) and McCabe_ using Python 2.7.18, both in 64-bit on
164
164
 
165
165
  For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
166
166
 
167
- *Last updated: May 25, 2025.*
167
+ *Last updated: May 28, 2025.*
168
168
 
169
169
  License
170
170
  =======
@@ -1,14 +1,14 @@
1
1
  pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
- pygeodesy/__init__.py,sha256=lJoIhQqDE5sqmoU2P-S8CbYP2AR1CEMSqZvNu9ulO4U,42290
3
- pygeodesy/__main__.py,sha256=B7CImXa4fm8lEqjTTp5AEalqIhldNpghdHtJkyMdyh0,5522
2
+ pygeodesy/__init__.py,sha256=C2E8VxEx5MOANjeIZ12lgXtsJSbJdYh1Ee05IkobA1w,42290
3
+ pygeodesy/__main__.py,sha256=HpOBmuhI7yVP1FIAEugvd9Lb54kzew-nM78be0r4SC4,5597
4
4
  pygeodesy/albers.py,sha256=mb3YbVvoBq8a7AytT0HeVxe8DGEvx1KFN2Usl2ksKwk,30908
5
5
  pygeodesy/azimuthal.py,sha256=acwIA1B7jmg1oDpJBuFitnOVHUWRUk7Y73yI8zqIGrc,49854
6
6
  pygeodesy/basics.py,sha256=ErpbLgHNerGPKiOIlWKdKzq6lO0dhoZjaywTnCn8PyE,32905
7
- pygeodesy/booleans.py,sha256=ncA4SV-2TX78CUsRKRgFh43g5NhkW_Iy1mnnudA3Nog,73683
7
+ pygeodesy/booleans.py,sha256=njAJlAoVZEcQ5jp8wwyuVo8-jFPE3PFpAF3k3dQihBM,73683
8
8
  pygeodesy/cartesianBase.py,sha256=tvb1pGUTvSkIAInNhrnHXjBCwnQrVn6a-H2fipoapKE,45365
9
9
  pygeodesy/clipy.py,sha256=a0azaK7YDmGDU8mVVKe2MvUiPEhqZ9XJ-9u0T1iHKbo,27779
10
- pygeodesy/constants.py,sha256=xU8_niBOG4VFdWEqCi4XARiNJEAmprSTPCNkUrG3Bec,19899
11
- pygeodesy/css.py,sha256=Vn4MSpCagj55L_SM47AVX6V5sPglG17X1JJiU1rW1yA,25797
10
+ pygeodesy/constants.py,sha256=usdHWtYiy8iaPXxXau2vsViL9zC8I4Jp2fziiEmp2g4,19947
11
+ pygeodesy/css.py,sha256=vdQax5m7BMSpr7PUyqedCSvx73ilWuhXQTp39i8FOfA,25793
12
12
  pygeodesy/datums.py,sha256=Vp1fP7sSV1EuRbuO2scnZ3qiTZD1CvL4O12KSRlf1SU,34068
13
13
  pygeodesy/dms.py,sha256=CKXt2EOYFBluQV5q6cFYppJl3dCvvEB_0E84J0ki6ws,42202
14
14
  pygeodesy/ecef.py,sha256=DcWNhnOZC7-Olns9c1XI9p4MmuC00KN5rZ5W1UQVUxw,59009
@@ -16,37 +16,37 @@ pygeodesy/ecefLocals.py,sha256=zoxGUJeYX2UXzR9r0jaByrvfrrpmrvAhjyQsz433RjA,7794
16
16
  pygeodesy/elevations.py,sha256=WrWPZNgkZX9Ys_1ij_gyE4jzdIv85JYAaR2cK3vc4gQ,10879
17
17
  pygeodesy/ellipsoidalBase.py,sha256=n6VHIaRZ6UvC1H36qolKxwlHJX5BZysvgE3iir-PunE,55743
18
18
  pygeodesy/ellipsoidalBaseDI.py,sha256=PbSJkUUHpRGYgnnciMD-sWqTCReZv_FAc8SUonF3ZbI,38544
19
- pygeodesy/ellipsoidalExact.py,sha256=YVGVUmBTYu4NuYZdIx2f6zCCXM6Tqbv2nlkXQBqhvus,16973
20
- pygeodesy/ellipsoidalGeodSolve.py,sha256=wHv9UHYqnoU_PH8zgRJ-kA1-o-7zZLs1-O_zZHSQb1U,16666
21
- pygeodesy/ellipsoidalKarney.py,sha256=5RfQzNJFq4VklDnr3TRo6kh29rcQ4D7XkXUr_2Zqf38,18721
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
22
  pygeodesy/ellipsoidalNvector.py,sha256=HLFjX6o26q2fzVCjLSL0PdEh96xhGtjfzo2V_k54j4A,30146
23
- pygeodesy/ellipsoidalVincenty.py,sha256=5syxUVS5RbTz9ZATU4ViegJPFBpdZWt6i8ZGVInype4,26122
23
+ pygeodesy/ellipsoidalVincenty.py,sha256=zeTvid09NGuYJ1WJ__a3ApCBGSzX0A-Rhs8-sQXMNQQ,26273
24
24
  pygeodesy/ellipsoids.py,sha256=v964yZIL2nCc8MJgt3nzV6pczaQsQubXmX_sAh_nrBw,107765
25
- pygeodesy/elliptic.py,sha256=JkZzRytShhZsLnS-t031UA49DZnKXjob6ocGQZKI-GA,45020
25
+ pygeodesy/elliptic.py,sha256=nob5Iby3RIj1tnsZJ1AzzxDLwPJm48M9Cf_kIAwU6l8,45035
26
26
  pygeodesy/epsg.py,sha256=VIBidzAEuoBF4LdlJ4r3WtpL0Ymhru8kf4fAgfFr5ok,8220
27
27
  pygeodesy/errors.py,sha256=OUEJ51M3c-JH1n0BBbRtPTCDX0I00rH_BQPYSRoKrqo,32043
28
28
  pygeodesy/etm.py,sha256=NDtpmbQmbGieV64iJ-EDIAvD9ryjrW0hiD3wBBtxULk,46744
29
29
  pygeodesy/fmath.py,sha256=sIN7mW2KOiK0yU93mvmHo1OOTkGxKvwRinvyr_Qdf6I,37689
30
30
  pygeodesy/formy.py,sha256=7-CdPiagdVrbDMjWieX_guN4RvFVCYKOM3yDKSFPRWU,69777
31
- pygeodesy/frechet.py,sha256=k-6pWb3WQAXXIUdAzG2AnFxvnmK7k-GHj4CoYdzDNbg,35592
31
+ pygeodesy/frechet.py,sha256=dBnQ5ePuaUdKv62-e9RfovFDxELsZPQEKMLww9NOf7Q,35588
32
32
  pygeodesy/fstats.py,sha256=M6UOrwmeGp6kjYuYfc6Iq9ibMJAFNm6D4C5GnvlJeuM,28348
33
33
  pygeodesy/fsums.py,sha256=3pXl8rfDPeKzXHEhtf9qNzBtUme4ckskDx3HWfJbfyg,103988
34
34
  pygeodesy/gars.py,sha256=AXioT4Lh1cwrd7fF6dHcVJw-9vu2oAnZrzo_ka2Y3Ts,11761
35
35
  pygeodesy/geodesici.py,sha256=wPUDlRPOcj3MvvWA0CtnZvC30t1onKyZYvR51iCjgks,74891
36
- pygeodesy/geodesicw.py,sha256=dafScZ4nVuC_vlHXuYlSan32CsIEiL9uNcJYfnY1NtQ,29004
36
+ pygeodesy/geodesicw.py,sha256=xDxxxr4HOT-8Mh85zD6QZzyO-mfqUavfwQMStYrsF8c,30029
37
37
  pygeodesy/geodsolve.py,sha256=fFlyNlkEOpkJaeddEuKwfhtqaZjmVs0egNGM5cwFFoc,29101
38
38
  pygeodesy/geohash.py,sha256=1P9-k9sMN-ZVFr2iWbQpFi1lg3uNmChHFCIfETkgFJU,40153
39
- pygeodesy/geoids.py,sha256=Uke9Lvb0QzMicWyE_H6dwYoCGhby3-1rCAQ-TIoCSgo,86129
40
- pygeodesy/hausdorff.py,sha256=3iDV4FetRrHcz2D1ddswx56XNi18zzCE2HMTDDoK6sI,32273
41
- pygeodesy/heights.py,sha256=FfBP1-Zw9XCjp3sBrTqtgZr_KKeejne2cizW0Lhkg_U,41014
42
- pygeodesy/internals.py,sha256=0jfelLhG50VY0hgy2qzqUvEFDJrcLDfpI_eNs4Go6BI,24028
43
- pygeodesy/interns.py,sha256=IBM_RuZDmP__4TUx9MLCU3L-Vx5uZz0VBi2eoH0hV44,23467
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
44
  pygeodesy/iters.py,sha256=nKVp_LUQyTqOz_OLzY25g6-_xlKG7lmAnjKKMXESmiM,20345
45
- pygeodesy/karney.py,sha256=xlkRlmg66XRdL1ale2sWHhxfostQU86II4qwNyk-ewM,40938
45
+ pygeodesy/karney.py,sha256=IzWyGwX0kRpwrVFBpCzogd2Q8PLvCdCwHheE-zbCQZE,41629
46
46
  pygeodesy/ktm.py,sha256=3CLwbRvk-sr4qs8R9fdJ_ejokgZEjKHULV7wzzuonHU,27259
47
47
  pygeodesy/latlonBase.py,sha256=B7wNE-IJf-Sm3NKhCXdrgwRbH_4dBGluZlQdxTJqp8s,75320
48
48
  pygeodesy/lazily.py,sha256=2FzJkIQK7LftAXXYxMbqTQUAWth7T3syIhqm8Z9bhuo,47609
49
- pygeodesy/lcc.py,sha256=N31gphU0nSrc-i2CeJYux7CgbHrTfHwAXajta-mV57s,25790
49
+ pygeodesy/lcc.py,sha256=7Di2Y5VIDL5drdSce4ABWGT3MtZSosaLKd68US6788s,25786
50
50
  pygeodesy/ltp.py,sha256=N3TMipTWKUOeZYzn3UeJJqe5J4Yk788390ohQM1ykAE,50893
51
51
  pygeodesy/ltpTuples.py,sha256=t-n7p9A3JCVasv8LKCV4PkOTmXJZi91BkBFm8pBZM5o,59101
52
52
  pygeodesy/mgrs.py,sha256=ZgCBH_M_YFxuFu5ukVOVetk-uftv-4GJP-QJrtoqtcU,29842
@@ -55,13 +55,13 @@ pygeodesy/namedTuples.py,sha256=JlO8uWmR65RkT7Rdgc9knfI0-bqJeA-tm2ZKsesztVU,3059
55
55
  pygeodesy/nvectorBase.py,sha256=XnA_DlqbgYPpF7y_BQHQVmntpI3M5fe0q8h3zX-PKbs,29930
56
56
  pygeodesy/osgr.py,sha256=4mFUcn1vMOju3PK1rKohPtIlJZrBGPJrcRjFl-CoxqE,30852
57
57
  pygeodesy/points.py,sha256=2vQpgqxJiC7Cgn03pqiezTM4I-CTquv9tQZi4uYWjpw,64497
58
- pygeodesy/props.py,sha256=ALaBNSPLpaDjFTtwdYeTVqMZhGqLLiERTCAmTrGrjd0,24608
58
+ pygeodesy/props.py,sha256=GCBqrkMfpbHuca2Sh68WSGDplIeZLvCDDXUewyvEiqI,24600
59
59
  pygeodesy/resections.py,sha256=vCbnEyNghGkblrPA58-MspaxkZcInnvRgS-oSBIe1hM,43796
60
60
  pygeodesy/simplify.py,sha256=O04NSb0ezXM8z3lCcajXbetZuum6PURAOPYTsJ27gxI,22068
61
61
  pygeodesy/solveBase.py,sha256=I2oW7zaPoVUkD7IB9Ro0paU-T1vie1lomg83f71twDY,18468
62
- pygeodesy/sphericalBase.py,sha256=T3vZJV7FSb7Y_cZJDZeIuBL_qh-YvRNBNOuQABwXPp4,32087
63
- pygeodesy/sphericalNvector.py,sha256=uS40EpEQfVaz3-fwFBNfHg4gOkk1CWcm1tHrvfpQbmc,54824
64
- pygeodesy/sphericalTrigonometry.py,sha256=fATw2WUWvY3smtg0vwIczIsl9GamsjwJ3zEwM-subv0,64110
62
+ pygeodesy/sphericalBase.py,sha256=hq6dyeeIHBy_T0Q6PIwSvmo1U70Ir5KBeMTwQplzqHQ,32071
63
+ pygeodesy/sphericalNvector.py,sha256=bu0yB4PEq1cs6BS8QFqtljWpVEw7ESwq2yILOzGDuAc,54948
64
+ pygeodesy/sphericalTrigonometry.py,sha256=8q3sevqdeJ-mOukkXLsXKAg06hDxaBhiPHhrdQn3UHY,64411
65
65
  pygeodesy/streprs.py,sha256=-4LErmfPLtGt1tLDBHhJam-zYq8p2Z2C5wDCMELEml4,23599
66
66
  pygeodesy/trf.py,sha256=gpsOJVER1KhITOtyiENQ4EnRONinLkzbujsfzzxHVv8,119209
67
67
  pygeodesy/triaxials.py,sha256=V0MSYJxRgYDhZcF7HXnu7oFzRyWJkhwc6scuNjc6VVg,64046
@@ -72,7 +72,7 @@ pygeodesy/utily.py,sha256=ZJKuwoo97K7GE56-cA8bGrvyz9mN9OoOMnSOEOw0mj0,40025
72
72
  pygeodesy/utm.py,sha256=kcXliftP9q0nTxviIOixVyvResK2Jydj-G52CXJiSuQ,31123
73
73
  pygeodesy/utmups.py,sha256=31RD8l7M-vcRXU9_wnkb_PNUcKjOr1HAmwjOndjkgXE,13176
74
74
  pygeodesy/utmupsBase.py,sha256=PptZ4Mm8BaDUCA8v1sK54o8idw_24kq6loAuYv0bejE,22730
75
- pygeodesy/vector2d.py,sha256=djVevQCHZWfzbwmPIZRpPFeKY6pkrOAsydrYAW4pqK8,40309
75
+ pygeodesy/vector2d.py,sha256=7R5ciPxXEX98LmMWNqwbds8Y6vpsHKEeCzcBVDRiq6g,40305
76
76
  pygeodesy/vector3d.py,sha256=sC7u9tgFFWoWHFxqtO-dvKVuiEzraw50TDU_QpdDbYw,43045
77
77
  pygeodesy/vector3dBase.py,sha256=BHenp3NGpfhVbJ6JMgdNLx6vAcwDWDJIxl9hAdp-AVw,36301
78
78
  pygeodesy/webmercator.py,sha256=z3Ft5TeHc9FoLA8zQhzTrSuShHSz0aHjanbvj53ohmo,15016
@@ -104,16 +104,16 @@ pygeodesy/geodesicx/_C4_27.py,sha256=grqtju94Nu9V_eQPqe_7aRbLCYflxRuK127pPOPwuDA
104
104
  pygeodesy/geodesicx/_C4_30.py,sha256=I4ZuTy64yOq1IVgRtc_kqOL0HnKzXeTea7kTFSolcJs,201921
105
105
  pygeodesy/geodesicx/__init__.py,sha256=KXnzEGNtOtOke01y72dkIgT6sAwOP3zd6wgXho1F3T4,2468
106
106
  pygeodesy/geodesicx/__main__.py,sha256=ugi6c-4y91WOMJIL0N-wgXhoGhV90QJIFji2MaIGLiA,4329
107
- pygeodesy/geodesicx/gx.py,sha256=nvErvXV6ELc5_B2qBffFMf_n6qbk_g4ewChEuzbgVKI,60791
108
- pygeodesy/geodesicx/gxarea.py,sha256=zedg2zYlQv4DK0gwr3JeQWdtWcFuLSjzls8ddrk4Av0,19461
109
- pygeodesy/geodesicx/gxbases.py,sha256=EF9IL_oQBSlF70_ROag-DRBoU-ASWKlX-l-wfrUEQYs,6130
110
- pygeodesy/geodesicx/gxline.py,sha256=WaptQVCDqdVoyhLOP2e0g5fq-UuDOjz86B1bEjLs1SY,27653
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
111
  pygeodesy/rhumb/__init__.py,sha256=DsE5a16CUYWE5YTuo1U8mnDCtykuWw7VeGx23Yny_VU,2207
112
112
  pygeodesy/rhumb/aux_.py,sha256=NeHkNLS2ULh3sTb3eBTtmRih9SZNyVJKMtJj7imKkuI,16117
113
113
  pygeodesy/rhumb/bases.py,sha256=P5AQyL-MTbJaO4oKH_Y7qcusQxaHoAii0hJVQ9mT7hU,54250
114
114
  pygeodesy/rhumb/ekx.py,sha256=GMY6ik4fgiRrjek-42cpZxU3U2bdoAcY6ZcbZRckpII,24026
115
115
  pygeodesy/rhumb/solve.py,sha256=z8z_XYObTgz7w1skNLNcLBpe-EO_r0H4sVcZGlBcWnc,24005
116
- pygeodesy-25.5.25.dist-info/METADATA,sha256=mvciPhcidpH1u2mDSmMdSRQykcl7CDCqanD46bFFzM0,20102
117
- pygeodesy-25.5.25.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
118
- pygeodesy-25.5.25.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
119
- pygeodesy-25.5.25.dist-info/RECORD,,
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,,