pygeodesy 24.5.8__py2.py3-none-any.whl → 24.5.24__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 (83) hide show
  1. {PyGeodesy-24.5.8.dist-info → PyGeodesy-24.5.24.dist-info}/METADATA +2 -2
  2. PyGeodesy-24.5.24.dist-info/RECORD +116 -0
  3. pygeodesy/__init__.py +16 -12
  4. pygeodesy/__main__.py +9 -10
  5. pygeodesy/albers.py +42 -42
  6. pygeodesy/auxilats/__init__.py +1 -1
  7. pygeodesy/auxilats/__main__.py +7 -10
  8. pygeodesy/auxilats/auxAngle.py +32 -31
  9. pygeodesy/auxilats/auxLat.py +81 -51
  10. pygeodesy/azimuthal.py +123 -124
  11. pygeodesy/basics.py +165 -176
  12. pygeodesy/booleans.py +14 -15
  13. pygeodesy/cartesianBase.py +25 -23
  14. pygeodesy/clipy.py +3 -3
  15. pygeodesy/constants.py +8 -6
  16. pygeodesy/css.py +50 -42
  17. pygeodesy/datums.py +50 -48
  18. pygeodesy/dms.py +6 -6
  19. pygeodesy/ecef.py +27 -27
  20. pygeodesy/elevations.py +2 -2
  21. pygeodesy/ellipsoidalBase.py +28 -27
  22. pygeodesy/ellipsoidalBaseDI.py +8 -7
  23. pygeodesy/ellipsoidalNvector.py +11 -12
  24. pygeodesy/ellipsoids.py +41 -35
  25. pygeodesy/elliptic.py +12 -10
  26. pygeodesy/epsg.py +4 -3
  27. pygeodesy/errors.py +35 -13
  28. pygeodesy/etm.py +62 -53
  29. pygeodesy/fmath.py +48 -41
  30. pygeodesy/formy.py +93 -65
  31. pygeodesy/frechet.py +117 -102
  32. pygeodesy/fstats.py +52 -46
  33. pygeodesy/fsums.py +169 -145
  34. pygeodesy/gars.py +10 -9
  35. pygeodesy/geodesicw.py +32 -30
  36. pygeodesy/geodesicx/__init__.py +1 -1
  37. pygeodesy/geodesicx/__main__.py +4 -4
  38. pygeodesy/geodesicx/gx.py +40 -32
  39. pygeodesy/geodesicx/gxarea.py +15 -12
  40. pygeodesy/geodesicx/gxbases.py +3 -4
  41. pygeodesy/geodesicx/gxline.py +6 -8
  42. pygeodesy/geodsolve.py +28 -26
  43. pygeodesy/geohash.py +47 -44
  44. pygeodesy/geoids.py +37 -35
  45. pygeodesy/hausdorff.py +112 -99
  46. pygeodesy/heights.py +136 -129
  47. pygeodesy/internals.py +576 -0
  48. pygeodesy/interns.py +6 -207
  49. pygeodesy/iters.py +22 -19
  50. pygeodesy/karney.py +18 -15
  51. pygeodesy/ktm.py +31 -24
  52. pygeodesy/latlonBase.py +12 -11
  53. pygeodesy/lazily.py +140 -218
  54. pygeodesy/lcc.py +24 -25
  55. pygeodesy/ltp.py +83 -71
  56. pygeodesy/ltpTuples.py +7 -5
  57. pygeodesy/mgrs.py +5 -4
  58. pygeodesy/named.py +136 -49
  59. pygeodesy/namedTuples.py +33 -25
  60. pygeodesy/nvectorBase.py +10 -9
  61. pygeodesy/osgr.py +14 -12
  62. pygeodesy/points.py +13 -13
  63. pygeodesy/props.py +7 -7
  64. pygeodesy/rhumb/__init__.py +1 -1
  65. pygeodesy/rhumb/bases.py +3 -2
  66. pygeodesy/rhumb/solve.py +2 -2
  67. pygeodesy/solveBase.py +8 -7
  68. pygeodesy/sphericalTrigonometry.py +5 -5
  69. pygeodesy/streprs.py +8 -7
  70. pygeodesy/trf.py +8 -8
  71. pygeodesy/triaxials.py +67 -63
  72. pygeodesy/units.py +48 -50
  73. pygeodesy/unitsBase.py +24 -11
  74. pygeodesy/ups.py +7 -6
  75. pygeodesy/utily.py +4 -4
  76. pygeodesy/utm.py +53 -52
  77. pygeodesy/utmupsBase.py +11 -8
  78. pygeodesy/vector2d.py +6 -7
  79. pygeodesy/vector3d.py +16 -17
  80. pygeodesy/vector3dBase.py +5 -5
  81. PyGeodesy-24.5.8.dist-info/RECORD +0 -115
  82. {PyGeodesy-24.5.8.dist-info → PyGeodesy-24.5.24.dist-info}/WHEEL +0 -0
  83. {PyGeodesy-24.5.8.dist-info → PyGeodesy-24.5.24.dist-info}/top_level.txt +0 -0
pygeodesy/utm.py CHANGED
@@ -35,16 +35,17 @@ and Henrik Seidel U{'Die Mathematik der Gauß-Krueger-Abbildung'
35
35
 
36
36
  from pygeodesy.basics import len2, map2, neg # splice
37
37
  from pygeodesy.constants import EPS, EPS0, _K0_UTM, _0_0, _0_0001
38
- from pygeodesy.datums import _ellipsoidal_datum, _WGS84
38
+ from pygeodesy.datums import _ellipsoidal_datum, _WGS84, _under
39
39
  from pygeodesy.dms import degDMS, parseDMS2
40
40
  from pygeodesy.errors import MGRSError, RangeError, _ValueError, \
41
- _xkwds_get
41
+ _xkwds_get, _xkwds_pop2
42
42
  from pygeodesy.fmath import fdot3, hypot, hypot1, _operator
43
+ # from pygeodesy.internals import _under # from .datums
43
44
  from pygeodesy.interns import MISSING, NN, _by_, _COMMASPACE_, _N_, \
44
45
  _NS_, _outside_, _range_, _S_, _scale0_, \
45
- _SPACE_, _UTM_, _V_, _X_, _zone_, _under
46
- from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS
47
- # from pygeodesy.named import _xnamed # from .utmupsBase
46
+ _SPACE_, _UTM_, _V_, _X_, _zone_
47
+ # from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS # from .named
48
+ from pygeodesy.named import _name__, _name2__, _ALL_LAZY, _MODS
48
49
  from pygeodesy.namedTuples import EasNor2Tuple, UtmUps5Tuple, \
49
50
  UtmUps8Tuple, UtmUpsLatLon5Tuple
50
51
  from pygeodesy.props import deprecated_method, property_doc_, \
@@ -56,14 +57,14 @@ from pygeodesy.utmupsBase import _hemi, _LLEB, _parseUTMUPS5, _to4lldn, \
56
57
  _to3zBhp, _to3zll, _UPS_LATS, _UPS_ZONE, \
57
58
  _UTM_LAT_MAX, _UTM_ZONE_MAX, \
58
59
  _UTM_LAT_MIN, _UTM_ZONE_MIN, \
59
- _UTM_ZONE_OFF_MAX, UtmUpsBase, _xnamed
60
+ _UTM_ZONE_OFF_MAX, UtmUpsBase
60
61
 
61
62
  from math import asinh, atanh, atan2, cos, cosh, degrees, fabs, \
62
63
  radians, sin, sinh, tan, tanh
63
64
  # import operator as _operator # from .fmath
64
65
 
65
66
  __all__ = _ALL_LAZY.utm
66
- __version__ = '24.02.29'
67
+ __version__ = '24.05.21'
67
68
 
68
69
  _Bands = 'CDEFGHJKLMNPQRSTUVWXX' # UTM latitude bands C..X (no
69
70
  # I|O) 8° each, covering 80°S to 84°N and X repeated for 80-84°N
@@ -229,12 +230,13 @@ def _to4zBll(lat, lon, cmoff=True, strict=True, Error=RangeError):
229
230
  return Zone(z), (Band(B) if B else None), Lat(lat), Lon(lon)
230
231
 
231
232
 
232
- def _to7zBlldfn(latlon, lon, datum, falsed, name, zone, strict, Error, **cmoff):
233
+ def _to7zBlldfn(latlon, lon, datum, falsed, zone, strict, Error, **name_cmoff):
233
234
  '''(INTERNAL) Determine 7-tuple (zone, band, lat, lon, datum,
234
235
  falsed, name) for methods L{toEtm8} and L{toUtm8}.
235
236
  '''
236
- f = falsed and _xkwds_get(cmoff, cmoff=True) # DEPRECATED
237
- lat, lon, d, name = _to4lldn(latlon, lon, datum, name)
237
+ f, n = _xkwds_pop2(name_cmoff, cmoff=falsed) # DEPRECATED
238
+ n = _name__(**n) # _UnexpectedError
239
+ lat, lon, d, n = _to4lldn(latlon, lon, datum, n)
238
240
  z, B, lat, lon = _to4zBll(lat, lon, cmoff=f, strict=strict)
239
241
  if zone: # re-zone for ETM/UTM
240
242
  r, _, _ = _to3zBhp(zone, B)
@@ -244,7 +246,7 @@ def _to7zBlldfn(latlon, lon, datum, falsed, name, zone, strict, Error, **cmoff):
244
246
  if f: # re-offset from central meridian
245
247
  lon += _cmlon(z) - _cmlon(r)
246
248
  z = r
247
- return z, B, lat, lon, d, f, name
249
+ return z, B, lat, lon, d, f, n
248
250
 
249
251
 
250
252
  class Utm(UtmUpsBase):
@@ -259,7 +261,7 @@ class Utm(UtmUpsBase):
259
261
 
260
262
  def __init__(self, zone=31, hemisphere=_N_, easting=166022, # PYCHOK expected
261
263
  northing=0, band=NN, datum=_WGS84, falsed=True,
262
- gamma=None, scale=None, name=NN, **convergence):
264
+ gamma=None, scale=None, **name_convergence):
263
265
  '''New L{Utm} UTM coordinate.
264
266
 
265
267
  @kwarg zone: Longitudinal UTM zone (C{int}, 1..60) or zone with/-out
@@ -276,8 +278,8 @@ class Utm(UtmUpsBase):
276
278
  @kwarg gamma: Optional meridian convergence, bearing off grid North,
277
279
  clockwise from true North (C{degrees}) or C{None}.
278
280
  @kwarg scale: Optional grid scale factor (C{scalar}) or C{None}.
279
- @kwarg name: Optional name (C{str}).
280
- @kwarg convergence: DEPRECATED, use keyword argument C{B{gamma}=None}.
281
+ @kwarg name_convergence: Optional C{B{name}=NN} (C{str}) and DEPRECATED
282
+ C{B{convergence}=None}, instead use C{B{gamma}=None}.
281
283
 
282
284
  @raise TypeError: Invalid or near-spherical B{C{datum}}.
283
285
 
@@ -285,8 +287,11 @@ class Utm(UtmUpsBase):
285
287
  B{C{northing}}, B{C{band}}, B{C{convergence}} or
286
288
  B{C{scale}}.
287
289
  '''
288
- if name:
289
- self.name = name
290
+ c = name_convergence
291
+ if c:
292
+ n, c = _name2__(**c)
293
+ if n:
294
+ self.name = n
290
295
 
291
296
  self._zone, B, _ = _to3zBlat(zone, band)
292
297
 
@@ -308,7 +313,7 @@ class Utm(UtmUpsBase):
308
313
 
309
314
  self._hemisphere = h
310
315
  UtmUpsBase.__init__(self, e, n, band=B, datum=datum, falsed=falsed,
311
- gamma=gamma, scale=scale, **convergence)
316
+ gamma=gamma, scale=scale, **c)
312
317
 
313
318
  def __eq__(self, other):
314
319
  return isinstance(other, Utm) and other.zone == self.zone \
@@ -324,7 +329,7 @@ class Utm(UtmUpsBase):
324
329
  def __str__(self):
325
330
  return self.toStr()
326
331
 
327
- def _xcopy2(self, Xtm, name=NN):
332
+ def _xcopy2(self, Xtm, **name):
328
333
  '''(INTERNAL) Make copy as an B{C{Xtm}} instance.
329
334
 
330
335
  @arg Xtm: Class to return the copy (C{Xtm=Etm}, C{Xtm=Utm} or
@@ -332,7 +337,7 @@ class Utm(UtmUpsBase):
332
337
  '''
333
338
  return Xtm(self.zone, self.hemisphere, self.easting, self.northing,
334
339
  band=self.band, datum=self.datum, falsed=self.falsed,
335
- gamma=self.gamma, scale=self.scale, name=name or self.name)
340
+ gamma=self.gamma, scale=self.scale, name=self._name__(name))
336
341
 
337
342
  @property_doc_(''' the I{latitudinal} band.''')
338
343
  def band(self):
@@ -370,7 +375,7 @@ class Utm(UtmUpsBase):
370
375
  n = _FalseNorthing
371
376
  return EasNor2Tuple(e, n)
372
377
 
373
- def parse(self, strUTM, name=NN):
378
+ def parse(self, strUTM, **name):
374
379
  '''Parse a string to a similar L{Utm} instance.
375
380
 
376
381
  @arg strUTM: The UTM coordinate (C{str}),
@@ -385,7 +390,7 @@ class Utm(UtmUpsBase):
385
390
  @see: Functions L{pygeodesy.parseUPS5} and L{pygeodesy.parseUTMUPS5}.
386
391
  '''
387
392
  return parseUTM5(strUTM, datum=self.datum, Utm=self.classof,
388
- name=name or self.name)
393
+ name=self._name__(name))
389
394
 
390
395
  @deprecated_method
391
396
  def parseUTM(self, strUTM): # PYCHOK no cover
@@ -575,7 +580,7 @@ class Utm(UtmUpsBase):
575
580
  return self._zone
576
581
 
577
582
 
578
- def _parseUTM5(strUTM, datum, Xtm, falsed, Error=UTMError, name=NN): # imported by .etm
583
+ def _parseUTM5(strUTM, datum, Xtm, falsed, Error=UTMError, **name): # imported by .etm
579
584
  '''(INTERNAL) Parse a string representing a UTM coordinate,
580
585
  consisting of C{"zone[band] hemisphere easting northing"},
581
586
  see L{pygeodesy.parseETM5} and L{parseUTM5}.
@@ -584,16 +589,11 @@ def _parseUTM5(strUTM, datum, Xtm, falsed, Error=UTMError, name=NN): # imported
584
589
  if _UTM_ZONE_MIN > z or z > _UTM_ZONE_MAX or (B and B not in _Bands):
585
590
  raise Error(strUTM=strUTM, zone=z, band=B)
586
591
 
587
- if Xtm is None:
588
- r = UtmUps5Tuple(z, h, e, n, B, Error=Error, name=name)
589
- else:
590
- r = Xtm(z, h, e, n, band=B, datum=datum, falsed=falsed)
591
- if name:
592
- r = _xnamed(r, name, force=True)
593
- return r
592
+ return UtmUps5Tuple(z, h, e, n, B, Error=Error, **name) if Xtm is None else \
593
+ Xtm(z, h, e, n, band=B, datum=datum, falsed=falsed, **name)
594
594
 
595
595
 
596
- def parseUTM5(strUTM, datum=_WGS84, Utm=Utm, falsed=True, name=NN):
596
+ def parseUTM5(strUTM, datum=_WGS84, Utm=Utm, falsed=True, **name):
597
597
  '''Parse a string representing a UTM coordinate, consisting
598
598
  of C{"zone[band] hemisphere easting northing"}.
599
599
 
@@ -614,28 +614,29 @@ def parseUTM5(strUTM, datum=_WGS84, Utm=Utm, falsed=True, name=NN):
614
614
 
615
615
  @raise TypeError: Invalid B{C{datum}}.
616
616
  '''
617
- return _parseUTM5(strUTM, datum, Utm, falsed, name=name)
617
+ return _parseUTM5(strUTM, datum, Utm, falsed, **name)
618
618
 
619
619
 
620
620
  def toUtm8(latlon, lon=None, datum=None, Utm=Utm, falsed=True,
621
- name=NN, strict=True,
622
- zone=None, **cmoff):
621
+ strict=True, zone=None, **name_cmoff):
623
622
  '''Convert a lat-/longitude point to a UTM coordinate.
624
623
 
625
624
  @arg latlon: Latitude (C{degrees}) or an (ellipsoidal)
626
625
  geodetic C{LatLon} point.
627
- @kwarg lon: Optional longitude (C{degrees}) or C{None}.
626
+ @kwarg lon: Optional longitude (C{degrees}), required
627
+ if B{C{latlon}} is in C{degrees}.
628
628
  @kwarg datum: Optional datum for this UTM coordinate,
629
629
  overriding B{C{latlon}}'s datum (L{Datum},
630
630
  L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}).
631
631
  @kwarg Utm: Optional class to return the UTM coordinate
632
632
  (L{Utm}) or C{None}.
633
633
  @kwarg falsed: False both easting and northing (C{bool}).
634
- @kwarg name: Optional B{C{Utm}} name (C{str}).
635
634
  @kwarg strict: Restrict B{C{lat}} to UTM ranges (C{bool}).
636
635
  @kwarg zone: Optional UTM zone to enforce (C{int} or C{str}).
637
- @kwarg cmoff: DEPRECATED, use B{C{falsed}}. Offset longitude
638
- from the zone's central meridian (C{bool}).
636
+ @kwarg name_cmoff: Optional B{C{Utm}} C{B{name}=NN} (C{str})
637
+ and DEPRECATED C{B{cmoff}=True} to offset longitude
638
+ from the zone's central meridian (C{bool}), instead
639
+ use C{B{falsed}=True}.
639
640
 
640
641
  @return: The UTM coordinate (B{C{Utm}}) or if B{C{Utm}} is
641
642
  C{None} or not B{C{falsed}}, a L{UtmUps8Tuple}C{(zone,
@@ -650,17 +651,17 @@ def toUtm8(latlon, lon=None, datum=None, Utm=Utm, falsed=True,
650
651
 
651
652
  @raise UTMError: Invalid B{C{zone}}.
652
653
 
653
- @raise ValueError: If B{C{lon}} value is missing or if
654
- B{C{latlon}} is invalid.
654
+ @raise ValueError: If B{C{lon}} value is missing or B{C{latlon}}
655
+ is invalid.
655
656
 
656
657
  @note: Implements Karney’s method, using 8-th order Krüger series,
657
658
  giving results accurate to 5 nm (or better) for distances
658
659
  up to 3,900 Km from the central meridian.
659
660
  '''
660
- z, B, lat, lon, d, f, name = _to7zBlldfn(latlon, lon, datum,
661
- falsed, name, zone,
662
- strict, UTMError, **cmoff)
663
- d = _ellipsoidal_datum(d, name=name)
661
+ z, B, lat, lon, d, f, n = _to7zBlldfn(latlon, lon, datum,
662
+ falsed, zone, strict,
663
+ UTMError, **name_cmoff)
664
+ d = _ellipsoidal_datum(d, name=n)
664
665
  E = d.ellipsoid
665
666
 
666
667
  a, b = radians(lat), radians(lon)
@@ -680,8 +681,8 @@ def toUtm8(latlon, lon=None, datum=None, Utm=Utm, falsed=True,
680
681
  A0 = E.A * getattr(Utm, _under(_scale0_), _K0_UTM) # Utm is class or None
681
682
 
682
683
  K = _Kseries(E.AlphaKs, x, y) # Krüger series
683
- y = K.ys(y) * A0 # ξ
684
- x = K.xs(x) * A0 # η
684
+ y = K.ys(y) * A0 # ξ
685
+ x = K.xs(x) * A0 # η
685
686
 
686
687
  # convergence: Karney 2011 Eq 23, 24
687
688
  p_ = K.ps(1)
@@ -691,21 +692,21 @@ def toUtm8(latlon, lon=None, datum=None, Utm=Utm, falsed=True,
691
692
  k = E.e2s(sin(a)) * T12 / H * (A0 / E.a * hypot(p_, q_))
692
693
 
693
694
  return _toXtm8(Utm, z, lat, x, y,
694
- B, d, g, k, f, name, latlon, EPS)
695
+ B, d, g, k, f, n, latlon, EPS)
695
696
 
696
697
 
697
698
  def _toXtm8(Xtm, z, lat, x, y, B, d, g, k, f, # PYCHOK 13+ args
698
- name, latlon, eps, Error=UTMError):
699
+ n, latlon, eps, Error=UTMError):
699
700
  '''(INTERNAL) Helper for methods L{toEtm8} and L{toUtm8}.
700
701
  '''
701
702
  h = _hemi(lat)
702
703
  if f:
703
704
  x, y = _false2(x, y, h)
704
705
  if Xtm is None: # DEPRECATED
705
- r = UtmUps8Tuple(z, h, x, y, B, d, g, k, Error=Error, name=name)
706
+ r = UtmUps8Tuple(z, h, x, y, B, d, g, k, Error=Error, name=n)
706
707
  else:
707
- r = _xnamed(Xtm(z, h, x, y, band=B, datum=d, falsed=f,
708
- gamma=g, scale=k), name)
708
+ r = Xtm(z, h, x, y, band=B, datum=d, falsed=f,
709
+ gamma=g, scale=k, name=n)
709
710
  if isinstance(latlon, _LLEB) and d is latlon.datum: # see ups.toUtm8
710
711
  r._latlon5args(latlon, _toBand, f, eps) # XXX weakref(latlon)?
711
712
  latlon._gamma = g
@@ -715,7 +716,7 @@ def _toXtm8(Xtm, z, lat, x, y, B, d, g, k, f, # PYCHOK 13+ args
715
716
  return r
716
717
 
717
718
 
718
- def utmZoneBand5(lat, lon, cmoff=False, name=NN):
719
+ def utmZoneBand5(lat, lon, cmoff=False, **name):
719
720
  '''Return the UTM zone number, Band letter, hemisphere and
720
721
  (clipped) lat- and longitude for a given location.
721
722
 
@@ -737,7 +738,7 @@ def utmZoneBand5(lat, lon, cmoff=False, name=NN):
737
738
  '''
738
739
  lat, lon = parseDMS2(lat, lon)
739
740
  z, B, lat, lon = _to4zBll(lat, lon, cmoff=cmoff)
740
- return UtmUpsLatLon5Tuple(z, B, _hemi(lat), lat, lon, name=name)
741
+ return UtmUpsLatLon5Tuple(z, B, _hemi(lat), lat, lon, **name)
741
742
 
742
743
  # **) MIT License
743
744
  #
pygeodesy/utmupsBase.py CHANGED
@@ -11,13 +11,14 @@ from pygeodesy.constants import _float, _0_0, _0_5, _N_90_0, _180_0
11
11
  from pygeodesy.datums import _ellipsoidal_datum, _WGS84
12
12
  from pygeodesy.dms import degDMS, parseDMS2
13
13
  from pygeodesy.ellipsoidalBase import LatLonEllipsoidalBase as _LLEB
14
- from pygeodesy.errors import _or, ParseError, _parseX, _ValueError, \
15
- _xkwds, _xkwds_get, _xkwds_not
14
+ from pygeodesy.errors import _or, ParseError, _parseX, _UnexpectedError, \
15
+ _ValueError, _xkwds, _xkwds_not, _xkwds_pop2
16
+ # from pygeodesy.internals import _name__, _under # from .named
16
17
  from pygeodesy.interns import NN, _A_, _B_, _COMMA_, _Error_, \
17
18
  _gamma_, _n_a_, _not_, _N_, _NS_, _PLUS_, \
18
- _scale_, _SPACE_, _Y_, _Z_, _under
19
+ _scale_, _SPACE_, _Y_, _Z_
19
20
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
20
- from pygeodesy.named import _NamedBase, nameof, _xnamed
21
+ from pygeodesy.named import _NamedBase, _xnamed, _name__, _under
21
22
  from pygeodesy.namedTuples import EasNor2Tuple, LatLonDatum5Tuple
22
23
  from pygeodesy.props import deprecated_method, property_doc_, _update_all, \
23
24
  deprecated_property_RO, Property_RO, property_RO
@@ -26,7 +27,7 @@ from pygeodesy.units import Band, Easting, Northing, Scalar, Zone
26
27
  from pygeodesy.utily import _Wrap, wrap360
27
28
 
28
29
  __all__ = _ALL_LAZY.utmupsBase
29
- __version__ = '24.04.07'
30
+ __version__ = '24.05.19'
30
31
 
31
32
  _UPS_BANDS = _A_, _B_, _Y_, _Z_ # UPS polar bands SE, SW, NE, NW
32
33
  # _UTM_BANDS = _MODS.utm._Bands
@@ -84,7 +85,7 @@ def _to4lldn(latlon, lon, datum, name, wrap=False):
84
85
  lat, lon = _Wrap.latlonDMS2(latlon, lon) if wrap else \
85
86
  parseDMS2(latlon, lon) # clipped
86
87
  d = datum or _WGS84
87
- return lat, lon, d, (name or nameof(latlon))
88
+ return lat, lon, d, _name__(name, _or_nameof=latlon)
88
89
 
89
90
 
90
91
  def _to3zBhp(zone, band, hemipole=NN, Error=_ValueError): # imported by .epsg, .ups, .utm, .utmups
@@ -185,7 +186,9 @@ class UtmUpsBase(_NamedBase):
185
186
  self._falsed = False
186
187
 
187
188
  if convergence: # for backward compatibility
188
- gamma = _xkwds_get(convergence, convergence=gamma)
189
+ gamma, kwds = _xkwds_pop2(convergence, convergence=gamma)
190
+ if kwds:
191
+ raise _UnexpectedError(**kwds)
189
192
  if gamma is not self._gamma:
190
193
  self._gamma = Scalar(gamma=gamma, Error=E)
191
194
  if scale is not self._scale:
@@ -206,7 +209,7 @@ class UtmUpsBase(_NamedBase):
206
209
  # self._notOverloaded(callername=_under('Bands'))
207
210
  if band not in self._Bands:
208
211
  t = _or(*sorted(set(map(repr, self._Bands))))
209
- raise self._Error(band=band, txt=_not_(t))
212
+ raise self._Error(band=band, txt_not_=t)
210
213
  self._band = band
211
214
  elif self._band: # reset
212
215
  self._band = NN
pygeodesy/vector2d.py CHANGED
@@ -30,7 +30,7 @@ from contextlib import contextmanager
30
30
  # from math import fabs, sqrt # from .fmath
31
31
 
32
32
  __all__ = _ALL_LAZY.vector2d
33
- __version__ = '24.05.04'
33
+ __version__ = '24.05.17'
34
34
 
35
35
  _cA_ = 'cA'
36
36
  _cB_ = 'cB'
@@ -282,11 +282,10 @@ def circum4_(*points, **useZ_Vector_and_kwds):
282
282
  C = map2(float, C)
283
283
  R = map2(float, R) # empty if rk < 4 or n <= 4
284
284
 
285
- n = circum4_.__name__
286
- c = Vector3d(*C[:3], name=n)
287
- r = Radius(sqrt(fsumf_(C[3], *c.x2y2z2)), name=n)
285
+ c = Vector3d(*C[:3], name__=circum4_) # .__name__
286
+ r = Radius(sqrt(fsumf_(C[3], *c.x2y2z2)), name=c.name)
288
287
 
289
- c = _nVc(c, **_xkwds(kwds, clas=ps[0].classof, name=n))
288
+ c = _nVc(c, **_xkwds(kwds, clas=ps[0].classof, name=c.name))
290
289
  return Circum4Tuple(r, c, rk, R)
291
290
 
292
291
 
@@ -416,8 +415,8 @@ class _numpy(object): # see also .formy._idllmn6, .geodesicw._wargs, .latlonBas
416
415
  <https://StackOverflow.com/questions/2992947>} and U{here
417
416
  <https://StackOverflow.com/questions/5889142>}.
418
417
  '''
419
- def _Error(txt=self.null_space2.__name__, **kwds):
420
- return _AssertionError(txt=txt, **kwds)
418
+ def _Error(**kwds):
419
+ return _AssertionError(txt__=self.null_space2, **kwds)
421
420
 
422
421
  np = self.np
423
422
  A = np.array(A)
pygeodesy/vector3d.py CHANGED
@@ -14,11 +14,11 @@ from pygeodesy.errors import IntersectionError, _ValueError, VectorError, \
14
14
  from pygeodesy.fmath import euclid, fabs, fdot, hypot, sqrt, fsum1_
15
15
  # from pygeodesy.fsums import fsum1_ # from .fmath
16
16
  # from pygeodesy.formy import _radical2 # in _intersects2 below
17
- from pygeodesy.interns import NN, _COMMA_, _concentric_, _intersection_, \
18
- _near_, _negative_, _no_, _too_
17
+ from pygeodesy.interns import _COMMA_, _concentric_, _intersection_, \
18
+ _near_, _negative_, _no_, _too_
19
19
  from pygeodesy.iters import PointsIter, Fmt
20
20
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
21
- from pygeodesy.named import _xnamed, _xotherError
21
+ from pygeodesy.named import _name__, _name2__, _xnamed, _xotherError
22
22
  from pygeodesy.namedTuples import Intersection3Tuple, NearestOn2Tuple, \
23
23
  NearestOn6Tuple, Vector3Tuple # Vector4Tuple
24
24
  # from pygeodesy.nvectorBase import _nsumOf # _MODS
@@ -31,7 +31,7 @@ from pygeodesy.vector3dBase import Vector3dBase
31
31
  # from math import fabs, sqrt # from .fmath
32
32
 
33
33
  __all__ = _ALL_LAZY.vector3d
34
- __version__ = '24.02.20'
34
+ __version__ = '24.05.21'
35
35
 
36
36
 
37
37
  class Vector3d(Vector3dBase):
@@ -236,18 +236,18 @@ class Vector3d(Vector3dBase):
236
236
  '''
237
237
  return nearestOn6(self, points, closed=closed, useZ=useZ) # Vector=self.classof
238
238
 
239
- def parse(self, str3d, sep=_COMMA_, name=NN):
239
+ def parse(self, str3d, sep=_COMMA_, **name):
240
240
  '''Parse an C{"x, y, z"} string to a L{Vector3d} instance.
241
241
 
242
242
  @arg str3d: X, y and z string (C{str}), see function L{parse3d}.
243
243
  @kwarg sep: Optional separator (C{str}).
244
- @kwarg name: Optional instance name (C{str}), overriding this name.
244
+ @kwarg name: Optional instance C{B{name}=NN} (C{str}), overriding this name.
245
245
 
246
246
  @return: The instance (L{Vector3d}).
247
247
 
248
248
  @raise VectorError: Invalid B{C{str3d}}.
249
249
  '''
250
- return parse3d(str3d, sep=sep, Vector=self.classof, name=name or self.name)
250
+ return parse3d(str3d, sep=sep, Vector=self.classof, name=self._name__(name))
251
251
 
252
252
  def radii11(self, point2, point3):
253
253
  '''Return the radii of the C{Circum-}, C{In-}, I{Soddy} and C{Tangent}
@@ -677,16 +677,15 @@ def nearestOn(point, point1, point2, within=True, useZ=True, Vector=None, **Vect
677
677
  p1 = _otherV3d(useZ=useZ, point1=point1)
678
678
  p2 = _otherV3d(useZ=useZ, point2=point2)
679
679
 
680
- n = nearestOn.__name__
681
680
  p, _ = _nearestOn2(p0, p1, p2, within=within)
682
681
  if Vector is not None:
683
- p = Vector(p.x, p.y, **_xkwds(Vector_kwds, z=p.z, name=n))
682
+ p = Vector(p.x, p.y, **_xkwds(Vector_kwds, z=p.z, name__=nearestOn))
684
683
  elif p is p1:
685
684
  p = point1
686
685
  elif p is p2:
687
686
  p = point2
688
687
  else: # ignore Vector_kwds
689
- p = point.classof(p.x, p.y, _xkwds_get(Vector_kwds, z=p.z), name=n)
688
+ p = point.classof(p.x, p.y, _xkwds_get(Vector_kwds, z=p.z), name__=nearestOn)
690
689
  return p
691
690
 
692
691
 
@@ -765,8 +764,9 @@ def nearestOn6(point, points, closed=False, useZ=True, **Vector_and_kwds): # ep
765
764
  return NearestOn6Tuple(v, sqrt(c2), f, j, s, e)
766
765
 
767
766
 
768
- def _nVc(v, clas=None, name=NN, Vector=None, **Vector_kwds): # in .vector2d
767
+ def _nVc(v, clas=None, Vector=None, **Vector_kwds_name): # in .vector2d
769
768
  # return a named C{Vector} or C{clas} instance
769
+ name, Vector_kwds = _name2__(**Vector_kwds_name)
770
770
  if Vector is not None:
771
771
  v = Vector(v.x, v.y, v.z, **Vector_kwds)
772
772
  elif clas is not None:
@@ -810,7 +810,7 @@ def parse3d(str3d, sep=_COMMA_, Vector=Vector3d, **Vector_kwds):
810
810
  except (TypeError, ValueError) as x:
811
811
  raise VectorError(str3d=str3d, cause=x)
812
812
  return _xnamed((Vector3Tuple(v) if Vector is None else # *v
813
- Vector(*v, **Vector_kwds)), parse3d.__name__)
813
+ Vector(*v, **Vector_kwds)), name__=parse3d) # .__name__
814
814
 
815
815
 
816
816
  def sumOf(vectors, Vector=Vector3d, **Vector_kwds):
@@ -831,9 +831,8 @@ def sumOf(vectors, Vector=Vector3d, **Vector_kwds):
831
831
  except (TypeError, ValueError) as x:
832
832
  raise VectorError(vectors=vectors, Vector=Vector, cause=x)
833
833
  x, y, z = t[:3]
834
- n = sumOf.__name__
835
- return Vector3Tuple(x, y, z, name=n) if Vector is None else \
836
- Vector(x, y, z, **_xkwds(Vector_kwds, name=n))
834
+ return Vector3Tuple(x, y, z, name__=sumOf) if Vector is None else \
835
+ Vector(x, y, z, **_xkwds(Vector_kwds, name__=sumOf)) # .__name__
837
836
 
838
837
 
839
838
  def trilaterate2d2(x1, y1, radius1, x2, y2, radius2, x3, y3, radius3,
@@ -930,7 +929,7 @@ def trilaterate3d2(center1, radius1, center2, radius2, center3, radius3,
930
929
  center3=center3, radius3=radius3)
931
930
 
932
931
 
933
- def _xyzhdn3(xyz, height, datum, ll): # in .cartesianBase, .nvectorBase
932
+ def _xyzhdn3(xyz, height, datum, ll, **name): # in .cartesianBase, .nvectorBase
934
933
  '''(INTERNAL) Get a C{(h, d, name)} 3-tuple.
935
934
  '''
936
935
  h = height or _xattr(xyz, height=None) \
@@ -940,7 +939,7 @@ def _xyzhdn3(xyz, height, datum, ll): # in .cartesianBase, .nvectorBase
940
939
  d = datum or _xattr(xyz, datum=None) \
941
940
  or _xattr(ll, datum=None)
942
941
 
943
- return h, d, _xattr(xyz, name=NN)
942
+ return h, d, _name__(name, _or_nameof=xyz)
944
943
 
945
944
 
946
945
  __all__ += _ALL_DOCS(intersections2, sumOf, Vector3dBase)
pygeodesy/vector3dBase.py CHANGED
@@ -15,8 +15,7 @@ from pygeodesy.constants import EPS, EPS0, INT0, PI, PI2, _copysignINF, \
15
15
  _pos_self, _0_0, _1_0
16
16
  from pygeodesy.errors import CrossError, VectorError, _xcallable, _xError
17
17
  from pygeodesy.fmath import euclid_, fdot, hypot_, hypot2_
18
- from pygeodesy.interns import NN, _coincident_, _colinear_, \
19
- _COMMASPACE_, _xyz_
18
+ from pygeodesy.interns import _coincident_, _colinear_, _COMMASPACE_, _xyz_
20
19
  from pygeodesy.lazily import _ALL_LAZY, _ALL_DOCS, _ALL_MODS as _MODS, \
21
20
  _sys_version_info2
22
21
  from pygeodesy.named import _NamedBase, _NotImplemented, _xother3
@@ -27,10 +26,11 @@ from pygeodesy.streprs import Fmt, strs, unstr
27
26
  from pygeodesy.units import Float, Scalar
28
27
  # from pygeodesy.utily import sincos2 # _MODS
29
28
 
29
+ # from builtints import hash, int, isinstance, map, max, round, type, zip
30
30
  from math import atan2, ceil, fabs, floor, trunc
31
31
 
32
32
  __all__ = _ALL_LAZY.vector3dBase
33
- __version__ = '24.03.24'
33
+ __version__ = '24.05.19'
34
34
 
35
35
 
36
36
  class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
@@ -43,7 +43,7 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
43
43
  # _y = INT0 # Y component
44
44
  # _z = INT0 # Z component
45
45
 
46
- def __init__(self, x_xyz, y=INT0, z=INT0, ll=None, name=NN):
46
+ def __init__(self, x_xyz, y=INT0, z=INT0, ll=None, **name):
47
47
  '''New L{Vector3d} or C{Vector3dBase} instance.
48
48
 
49
49
  The vector may be normalised or use x, y, z for position and
@@ -59,7 +59,7 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
59
59
  @kwarg z: Z component of vector (C{scalar}), ignored if B{C{x_xyz}}
60
60
  is not C{scalar}, otherwise same units as B{C{x_xyz}}.
61
61
  @kwarg ll: Optional latlon reference (C{LatLon}).
62
- @kwarg name: Optional name (C{str}).
62
+ @kwarg name: Optional C{B{name}=NN} (C{str}).
63
63
 
64
64
  @raise VectorError: Invalid B{C{x_xyz}}.
65
65
  '''
@@ -1,115 +0,0 @@
1
- pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
- pygeodesy/__init__.py,sha256=aWftpUqOeH1Uul8uN_kDAXbFL0TqLXDhynBhCmgpxoQ,40733
3
- pygeodesy/__main__.py,sha256=qMFG3caY8ZXWu6uGiemzyT4OqTFZnsFtlxcGCAgkVJw,4637
4
- pygeodesy/albers.py,sha256=g2AVlpV8JO2AYFCthoIbRC2h1OJqjb9P3hpwF0C3TI8,30994
5
- pygeodesy/azimuthal.py,sha256=tc4JxgLi-0jzU08m4Bvi-t-kzHXYPeGuzL3j_tyVFUA,50125
6
- pygeodesy/basics.py,sha256=GWsiv-Zl2qOZoW7wPwIG7yLd2FwYLUvsq8c6hZdgsFE,28453
7
- pygeodesy/booleans.py,sha256=HZbwoL-S7Ww9d4C2D1BVqXfmcuqqVpEVSU9_S0uyUyo,74204
8
- pygeodesy/cartesianBase.py,sha256=I3q29mRdBB3NCDmPoJsJ0QOFfLzkdMWc8X9zG4IwJyA,47264
9
- pygeodesy/clipy.py,sha256=VU3ynQ1IZ0v5hJlicqD48oW0imRgiL5_ZzRPrIjpfPw,27683
10
- pygeodesy/constants.py,sha256=RxO8dMe_3AEfmZyKaRIy_44QnOTdEpzgYwimN0_w9Qs,19113
11
- pygeodesy/css.py,sha256=sKXsahUiyruDcUk-tGjA6mxq-xzwBoBKxKo9_b2uBmY,25394
12
- pygeodesy/datums.py,sha256=gJZPgV4bELZvZ8Sj2zE3MBysVtsLxqsN8zm0xjOKvpo,33851
13
- pygeodesy/dms.py,sha256=op3MU-59CoJQRdybnu21aVM9wtocd_-XFNAZFqmozSo,44439
14
- pygeodesy/ecef.py,sha256=47zX9rr7MdWY0K9shMqLbxGIb13MkNEUDDxtGigFwHE,59682
15
- pygeodesy/elevations.py,sha256=ZTxzLWHLUrghFI9Fkl0ZGHzdiLDe0y3ImGUsfxFg6Qc,10814
16
- pygeodesy/ellipsoidalBase.py,sha256=dqEmBFguS_Q0K95VaBN7oZOVEaxHuicLCrqIuj1QM7w,56639
17
- pygeodesy/ellipsoidalBaseDI.py,sha256=MSuQI3PlJAHL7gtVy4t0qkm1QP3zeHqbkG4tnMDWDIg,38510
18
- pygeodesy/ellipsoidalExact.py,sha256=a_2C6S6hGRumavy5giRoC9QAhnjqpujiXyu92od6nKo,16951
19
- pygeodesy/ellipsoidalGeodSolve.py,sha256=xfNcb70AuPbIiJUqhisIfg6pCQBqXyQffBNuESEGCfU,16833
20
- pygeodesy/ellipsoidalKarney.py,sha256=FoOsfNf96oHuGa9k4AB42y_UUBuOkh4xMW7PFGF63SA,19246
21
- pygeodesy/ellipsoidalNvector.py,sha256=vHVKSfR86LnIapGlwl5_uCaEuQGdm0e89mwE6Ay-394,30323
22
- pygeodesy/ellipsoidalVincenty.py,sha256=Uk93B8GFcMnWiwKUOA84TlLwbBlvzVnsAXAx0cU7cn4,26004
23
- pygeodesy/ellipsoids.py,sha256=SxMsivNnE9ibUjQGd0d24H0SzoSjh6jfhLWjasOWpao,119946
24
- pygeodesy/elliptic.py,sha256=XRVpmpdm3hbztM4P-qhWKQizbgsXDUxWujgmOrIpgiQ,42428
25
- pygeodesy/epsg.py,sha256=ldHoLWqJWR4FUiBVnDTtrI_e7TNjjtr9OkxDlri1g5E,8165
26
- pygeodesy/errors.py,sha256=RHZ_f1zcOIyLQYProiQznaAOhojbDPDR4XbblXJMuS0,27232
27
- pygeodesy/etm.py,sha256=joEhU2lw9ehRv101nRpZvXq8hOYAEzdcYFpif9_obfk,44585
28
- pygeodesy/fmath.py,sha256=MylYc4nkVtDWI6U-R4hGmXcq-9tUUBmnlM795weezec,33477
29
- pygeodesy/formy.py,sha256=Rces4Q5ecED0WVfuI9mQzeyHE54LDowYfI6faBHpyeA,74536
30
- pygeodesy/frechet.py,sha256=qgee-ISBtT7Ov3rJkcd_t-WeXTbeNoMSQuMa0j3MyQc,33512
31
- pygeodesy/fstats.py,sha256=23XqQRoegfeE4xEbbcgcsuw4JGEAe0OPvR8Jn2W8U-8,28414
32
- pygeodesy/fsums.py,sha256=M9btYPykj5JHvO4gg6wkKPGKlg9R4ZfdoFFKcgmQVno,78284
33
- pygeodesy/gars.py,sha256=fCiWBJ4kOJxPfNOxadX-OzBGDXj7C9g02NuGHiZa_88,11342
34
- pygeodesy/geodesicw.py,sha256=5yjJ2rLekSsjT7e-Km6v592ZcFlA41flQP_E42jU9Sw,26901
35
- pygeodesy/geodsolve.py,sha256=3GLI2_4gglzTpZwKchNzAv-XhWFBzWRKjcWsjCC3dvI,21900
36
- pygeodesy/geohash.py,sha256=HwukecfkWvyfz9LHKfoA-WddQHYot_mB04o0lyWrKyU,32382
37
- pygeodesy/geoids.py,sha256=EwZJ50qRXeZb1591N99hnamM_EC2NP6MIhLb5swVHf4,80605
38
- pygeodesy/hausdorff.py,sha256=LJULGbDop4xqiWeRH5-Uayvk5WVCZQpxK4PCYu4kqSs,34192
39
- pygeodesy/heights.py,sha256=tjr-5eb8UXn2MAp6-157sb6qxPREFk5dtDjHtBgIgZ8,42528
40
- pygeodesy/interns.py,sha256=WuQe08kItPIwSJ9J1bUxI5yVOX_eNfpGIMpKHzoCqAw,30245
41
- pygeodesy/iters.py,sha256=CfU365eE9F4oWZbBx0qTEvfodMhpa8rGOepLIv67xF8,20181
42
- pygeodesy/karney.py,sha256=lYdsSHis8xQJVS1V0F3cphx6Dhgd77xTlMOdVR8MN8I,34994
43
- pygeodesy/ktm.py,sha256=sCvbLvJItavlruilAyjeZ0sOZx2yJumzGe_UiIVbGi4,27315
44
- pygeodesy/latlonBase.py,sha256=LimCMj91J3Q4D_rTu7VN7c63cLL_KzxXagFQfedobmc,77730
45
- pygeodesy/lazily.py,sha256=YeOQQ2Tu0LTD-AMDABc0bemeLRKTteTEJXJDl3_7vZU,48645
46
- pygeodesy/lcc.py,sha256=yNpmAdOwv3HNh2ZLopF5QtvDokeQYCmnxSc8UFUPHO4,25737
47
- pygeodesy/ltp.py,sha256=8se8dYG7LG__Ru0FoK939DJBF9GCQGeJik_Un1Im8Xw,48609
48
- pygeodesy/ltpTuples.py,sha256=iKzvDfv33HfmEevjNISUS4c9KXIkiISEkVlQopyKgfY,55769
49
- pygeodesy/mgrs.py,sha256=GJ-vG54E2zSLtROyqJ_kj8fHH-8jWGf3kVe7gb8993o,28978
50
- pygeodesy/named.py,sha256=MzYSWAckYfwJKIdG7duN-6pt1byb9_ZZ7772czjma50,48269
51
- pygeodesy/namedTuples.py,sha256=msEYvQKj4oCW35Kx80RpeQXY85A1G0O3GEqsysLaV2M,27288
52
- pygeodesy/nvectorBase.py,sha256=WJY5ylZ_HCeM1wGL7ryEecJphEYibp-EAWL0piKlMG8,28766
53
- pygeodesy/osgr.py,sha256=voC1rbOe4dnS_EjaDaRDRUQ4MoG7puMBEMV6lcAuIBI,31029
54
- pygeodesy/points.py,sha256=QNAAF0r7iqSXFr_6aQm-wW7f6vU3KusWVhXEMVeVo58,64442
55
- pygeodesy/props.py,sha256=rPVqHSnowuDeQR95zFKGwmY0356X2WGW-yRsL2fODCo,21500
56
- pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
57
- pygeodesy/simplify.py,sha256=FT3AzXiFjFfvwJ-X2q8iA9cQOUVdBT1vD_BIskM3gK8,25223
58
- pygeodesy/solveBase.py,sha256=cBe3QQWEaJlPWUlXoiYo1eFMh4z6GDZbQyt8ZiwMfos,16687
59
- pygeodesy/sphericalBase.py,sha256=sH2WwmY_RL0STyr1OhtCDKvGhO0Ks7o3V-MHLddpiHQ,31944
60
- pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
61
- pygeodesy/sphericalTrigonometry.py,sha256=Q9qsqzIK43xBken2G8uP9snPXPuBoZ20pMHqbT_IjG0,64216
62
- pygeodesy/streprs.py,sha256=8t10NwrS3DmuX6Qig0TDIR7bEWRFmnQUwV1_ItL9zd0,23940
63
- pygeodesy/trf.py,sha256=4gVtF780EEZEqWwMBDe4x1AEkIz3hB8h4l0_0NXWM5U,118903
64
- pygeodesy/triaxials.py,sha256=nYFQcLimivcxpeXMj9a83iWuENDU1gI-2zNgCkZzL0U,61549
65
- pygeodesy/units.py,sha256=ofFTYc7mF9wOpfvpYHN83dGszMM18rTdsxfEXVzaIko,38705
66
- pygeodesy/unitsBase.py,sha256=xRZlNlO7S47Mwy0FGBg_cefvB4fEtWFM5dAE-Nlw-NE,13111
67
- pygeodesy/ups.py,sha256=07AG-Rb1D4EvmN3g-xk3ZxKzyaNYvOzztcyYbx7t8jc,23229
68
- pygeodesy/utily.py,sha256=jP82RmCPCVghxTQv4ZRuIS89afmsD-roz2iafHfyHXA,36128
69
- pygeodesy/utm.py,sha256=0qF5Kjw8Wf9zxGWOaCF-LSweibat-EkHvvmy7dFO_KE,30981
70
- pygeodesy/utmups.py,sha256=u2hlWSnmZKwR-ApgKw16R9p75sW_yaqQAmbcBUE8Zfg,13007
71
- pygeodesy/utmupsBase.py,sha256=KetB8R0uRYU6X8nLG3JkBHUr1OfNlChKa0isgvm8Yq8,18807
72
- pygeodesy/vector2d.py,sha256=pSvfpFoSa5R37o9tSmRma7KsjNnN9GwTDG9rhFOEmfA,35004
73
- pygeodesy/vector3d.py,sha256=6ZLYLhZJoOM6UVJlbV8segkVXcFt38HA-SywCdWsynM,44972
74
- pygeodesy/vector3dBase.py,sha256=wJpEcgHlJ5Qu0Us7CKuNDepZQzo6a-RvqZbA2-O4-ko,35583
75
- pygeodesy/webmercator.py,sha256=1IXiAHBXTm5kMCp5gEI67oBJeRXD7BiPVI7bcRRX1U4,14918
76
- pygeodesy/wgrs.py,sha256=AKUrYRCC67lOeJ6vUDAiGb_mY6R3ZwflXpOaP3wauOg,14774
77
- pygeodesy/auxilats/_CX_4.py,sha256=U41njj8Pu8cHMGuoUUVA20QIvRJAq-VGCnyoKJl0Ylo,8662
78
- pygeodesy/auxilats/_CX_6.py,sha256=x4hrHxunjqqkEsZbVW1dyn3R5mR8EWYOuX77RzDEyh4,14856
79
- pygeodesy/auxilats/_CX_8.py,sha256=t-OO48t4cCOsOgMi1FoyPw2DQqybVZFsgQMqAYP-jKY,25304
80
- pygeodesy/auxilats/__init__.py,sha256=yOa5RDYOOed9Z4dvcKlatH0JBgohAJ8ADXjU9mZGTfQ,2881
81
- pygeodesy/auxilats/__main__.py,sha256=TVN8evCKEzBKdANU5-Ucps8bZySqBTQmEGU4hy_U1cw,2980
82
- pygeodesy/auxilats/auxAngle.py,sha256=LEa1GVR1EOYnTxR-mBLUj4mGoLO6jRrpsyG4v7N8W_0,16727
83
- pygeodesy/auxilats/auxDLat.py,sha256=U3BHF6AkW5--nrwH9whL5wZVIZLH_keRLfUz6c6KBx4,10950
84
- pygeodesy/auxilats/auxDST.py,sha256=bdNEh3TdABWH7qW6ngZx5SnzDM3B5rtPLvYhvCnFsKc,10497
85
- pygeodesy/auxilats/auxLat.py,sha256=U6thEwMEoUm4OFb2_JviEtEn2-nqyVjNbII7oyMf0hM,31282
86
- pygeodesy/auxilats/auxily.py,sha256=ZiCFedYcr32O6TWQ_dcnwMrc9TgogyuhNSbR77WMDpg,8240
87
- pygeodesy/deprecated/__init__.py,sha256=ZRGqgwSdvtKSYZdw09-LPuGa_i0jMHWKIwrPG3r1hHs,2815
88
- pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8,1655
89
- pygeodesy/deprecated/classes.py,sha256=PXgss-2kEu3bzaxvSeVZJGdcRqsdi_6_aRqsESyUQKQ,11662
90
- pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
91
- pygeodesy/deprecated/datum.py,sha256=KfuMA64LYGMj1voW2uai2RGcugtWdpvlOL6UHJvpTeQ,1875
92
- pygeodesy/deprecated/functions.py,sha256=-Ckor43KBiCDa7rbwY5kHvrs5xwuixTlw1TZpNSBgrU,13647
93
- pygeodesy/deprecated/nvector.py,sha256=_dZf84RdmPr7e7i8Yi683R-8Mqn0ipTqIsDhNl29hGo,2117
94
- pygeodesy/deprecated/rhumbBase.py,sha256=d7YKW--dnRpobB2CSvhFsntWF0B5-HYJqID2pv5lD5k,1375
95
- pygeodesy/deprecated/rhumbaux.py,sha256=n29xazYMbVG4MJkLjAGu8B88bbcFF5xnvuj9xSxjfIk,1428
96
- pygeodesy/deprecated/rhumbsolve.py,sha256=QprjRfo5T1_C4ovaa1cffAcmNczzkhGIfmybAup9a9w,1431
97
- pygeodesy/deprecated/rhumbx.py,sha256=OS0p_meaoVrpZe5UhK6qZljjlrGpL0pCHWw8gofw7ks,1425
98
- pygeodesy/geodesicx/_C4_24.py,sha256=kS4XMR9m7iBs01V8K0Oz9qTYmjN-icIQGpc_8iwVhig,90750
99
- pygeodesy/geodesicx/_C4_27.py,sha256=bPbj2Ckrn9WJglm3SNTXyMkULNwANM0tCQ-LKxP1L58,134258
100
- pygeodesy/geodesicx/_C4_30.py,sha256=QZO8p971ztJwDGLOaJYgIhklztz9GlqbtS-xRP_E7o4,201964
101
- pygeodesy/geodesicx/__init__.py,sha256=GmuEpkVmz5GagH10fSHCH0QWdh9y-xojuGRmWJ6TKAw,2446
102
- pygeodesy/geodesicx/__main__.py,sha256=xn4URUZ8Dois3gp6_JaCThTfhVmBJBPx70LvWyZhSIQ,3168
103
- pygeodesy/geodesicx/gx.py,sha256=E1WTVXsOC1jhc1xDmhCW-IEzqF0oOu74jAsIFt9YwRI,61304
104
- pygeodesy/geodesicx/gxarea.py,sha256=J-osK7YMZTMUQUtkf-sBMdGABOmLlxcnjTYkacFobkQ,19251
105
- pygeodesy/geodesicx/gxbases.py,sha256=vmqPnZGh_k7Fwev9oYoIzAZKdFFOydAXa372pHrzfMI,5279
106
- pygeodesy/geodesicx/gxline.py,sha256=gy0RT7DbcAvnSPqNl0FiqYpN00LBuJM-P9KcyasQvhU,27465
107
- pygeodesy/rhumb/__init__.py,sha256=MbwdmdduXd3fOWuS1mFdgyKBPBf7Ju1DzRf5D8w0Rok,2207
108
- pygeodesy/rhumb/aux_.py,sha256=W4HkgoHAQz_aWaysfsmOA5010nCGvBfUs2Q-bymnHYU,16660
109
- pygeodesy/rhumb/bases.py,sha256=kzU_Dgt4FNPMgTg5rqbw-HiNpflDPKpmq9jhPbQmR4U,53851
110
- pygeodesy/rhumb/ekx.py,sha256=lF3tZ-ZY9fPJV8y1kgHW-7EOZCyb3gJr-kR-jj5Fbf8,23871
111
- pygeodesy/rhumb/solve.py,sha256=NZfwx7xv5UriQs7A0c7ZhoxxVUeAT15UwXK_jtwEXQw,27802
112
- PyGeodesy-24.5.8.dist-info/METADATA,sha256=iiCbD7PToGDSIyOreeEG4YnJO2j2TZRnNvKeQdOVLQQ,19363
113
- PyGeodesy-24.5.8.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
114
- PyGeodesy-24.5.8.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
115
- PyGeodesy-24.5.8.dist-info/RECORD,,