pygeodesy 24.6.9__py2.py3-none-any.whl → 24.7.7__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 (87) hide show
  1. {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/METADATA +2 -2
  2. PyGeodesy-24.7.7.dist-info/RECORD +117 -0
  3. pygeodesy/__init__.py +39 -32
  4. pygeodesy/__main__.py +6 -1
  5. pygeodesy/albers.py +2 -2
  6. pygeodesy/auxilats/__init__.py +1 -1
  7. pygeodesy/auxilats/auxAngle.py +40 -39
  8. pygeodesy/auxilats/auxDLat.py +3 -2
  9. pygeodesy/auxilats/auxLat.py +16 -18
  10. pygeodesy/auxilats/auxily.py +1 -1
  11. pygeodesy/azimuthal.py +10 -10
  12. pygeodesy/basics.py +16 -4
  13. pygeodesy/booleans.py +4 -4
  14. pygeodesy/cartesianBase.py +11 -14
  15. pygeodesy/css.py +14 -18
  16. pygeodesy/datums.py +6 -6
  17. pygeodesy/deprecated/__init__.py +1 -1
  18. pygeodesy/deprecated/classes.py +25 -4
  19. pygeodesy/deprecated/datum.py +3 -3
  20. pygeodesy/deprecated/functions.py +6 -8
  21. pygeodesy/dms.py +23 -27
  22. pygeodesy/ecef.py +4 -4
  23. pygeodesy/elevations.py +4 -4
  24. pygeodesy/ellipsoidalBase.py +23 -28
  25. pygeodesy/ellipsoidalBaseDI.py +19 -23
  26. pygeodesy/ellipsoidalExact.py +3 -3
  27. pygeodesy/ellipsoidalGeodSolve.py +15 -23
  28. pygeodesy/ellipsoidalKarney.py +37 -60
  29. pygeodesy/ellipsoidalNvector.py +38 -44
  30. pygeodesy/ellipsoidalVincenty.py +11 -14
  31. pygeodesy/ellipsoids.py +107 -101
  32. pygeodesy/errors.py +109 -48
  33. pygeodesy/etm.py +32 -44
  34. pygeodesy/formy.py +55 -58
  35. pygeodesy/frechet.py +18 -20
  36. pygeodesy/fsums.py +3 -3
  37. pygeodesy/gars.py +3 -4
  38. pygeodesy/geodesici.py +1696 -0
  39. pygeodesy/geodesicw.py +15 -15
  40. pygeodesy/geodesicx/__init__.py +4 -4
  41. pygeodesy/geodesicx/gx.py +34 -55
  42. pygeodesy/geodesicx/gxbases.py +20 -8
  43. pygeodesy/geodesicx/gxline.py +93 -88
  44. pygeodesy/geodsolve.py +108 -59
  45. pygeodesy/geohash.py +26 -34
  46. pygeodesy/geoids.py +28 -37
  47. pygeodesy/hausdorff.py +17 -18
  48. pygeodesy/heights.py +2 -2
  49. pygeodesy/internals.py +46 -13
  50. pygeodesy/interns.py +2 -2
  51. pygeodesy/karney.py +78 -15
  52. pygeodesy/ktm.py +13 -16
  53. pygeodesy/latlonBase.py +17 -19
  54. pygeodesy/lazily.py +28 -25
  55. pygeodesy/lcc.py +28 -31
  56. pygeodesy/ltp.py +7 -8
  57. pygeodesy/ltpTuples.py +71 -73
  58. pygeodesy/mgrs.py +8 -9
  59. pygeodesy/named.py +19 -10
  60. pygeodesy/nvectorBase.py +9 -10
  61. pygeodesy/osgr.py +9 -9
  62. pygeodesy/points.py +6 -6
  63. pygeodesy/rhumb/__init__.py +1 -1
  64. pygeodesy/rhumb/aux_.py +5 -5
  65. pygeodesy/rhumb/bases.py +30 -31
  66. pygeodesy/rhumb/ekx.py +3 -4
  67. pygeodesy/rhumb/solve.py +21 -22
  68. pygeodesy/solveBase.py +177 -123
  69. pygeodesy/sphericalBase.py +10 -11
  70. pygeodesy/sphericalNvector.py +13 -13
  71. pygeodesy/sphericalTrigonometry.py +86 -97
  72. pygeodesy/streprs.py +4 -34
  73. pygeodesy/triaxials.py +48 -43
  74. pygeodesy/units.py +208 -275
  75. pygeodesy/unitsBase.py +115 -107
  76. pygeodesy/ups.py +26 -31
  77. pygeodesy/utily.py +8 -8
  78. pygeodesy/utm.py +35 -40
  79. pygeodesy/utmups.py +43 -46
  80. pygeodesy/utmupsBase.py +8 -9
  81. pygeodesy/vector3d.py +26 -27
  82. pygeodesy/vector3dBase.py +6 -7
  83. pygeodesy/webmercator.py +19 -21
  84. pygeodesy/wgrs.py +18 -20
  85. PyGeodesy-24.6.9.dist-info/RECORD +0 -116
  86. {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/WHEEL +0 -0
  87. {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/top_level.txt +0 -0
pygeodesy/utmups.py CHANGED
@@ -31,7 +31,7 @@ from pygeodesy.utmupsBase import Fmt, _to4lldn, _to3zBhp, _UPS_ZONE, \
31
31
  _UTMUPS_ZONE_MAX, _WGS84
32
32
 
33
33
  __all__ = _ALL_LAZY.utmups
34
- __version__ = '24.05.30'
34
+ __version__ = '24.06.11'
35
35
 
36
36
  _MGRS_TILE = _100km # in .mgrs.Mgrs.tile
37
37
 
@@ -111,32 +111,31 @@ def toUtmUps8(latlon, lon=None, datum=None, falsed=True, Utm=Utm, Ups=Ups,
111
111
 
112
112
  @arg latlon: Latitude (C{degrees}) or an (ellipsoidal)
113
113
  geodetic C{LatLon} point.
114
- @kwarg lon: Optional longitude (C{degrees}) or C{None}.
115
- @kwarg datum: Optional datum to use this UTM coordinate,
116
- overriding B{C{latlon}}'s datum (C{Datum}).
117
- @kwarg falsed: False both easting and northing (C{bool}).
118
- @kwarg Utm: Optional class to return the UTM coordinate (L{Utm})
119
- or C{None}.
120
- @kwarg Ups: Optional class to return the UPS coordinate (L{Ups})
121
- or C{None}.
122
- @kwarg pole: Optional top/center of UPS (stereographic)
123
- projection (C{str}, C{'N[orth]'} or C{'S[outh]'}).
124
- @kwarg name_cmoff: Optional B{C{Utm}} or B{C{Ups}} C{B{name}=NN}
125
- (C{str}) and DEPRECATED keyword argument C{B{cmoff}=True}
126
- to offset the longitude from the zone's central meridian
127
- (C{bool}), use B{C{falsed}} instead and I{for UTM only}.
128
-
129
- @return: The UTM or UPS coordinate (B{C{Utm}} respectively B{C{Ups}})
130
- or a L{UtmUps8Tuple}C{(zone, hemipole, easting, northing,
131
- band, datum, gamma, scale)} if B{C{Utm}} respectively
132
- B{C{Ups}} is C{None} or B{C{cmoff}} is C{False}.
133
-
134
- @raise RangeError: If B{C{lat}} outside the valid UTM or UPS bands
135
- or if B{C{lat}} or B{C{lon}} outside the valid
136
- range and L{pygeodesy.rangerrors} set to C{True}.
137
-
138
- @raise TypeError: If B{C{latlon}} is not ellipsoidal or B{C{lon}}
139
- value is missing of B{C{datum}} is invalid.
114
+ @kwarg lon: Longitude (C{degrees}), required if B{C{latlon}} is C{degrees},
115
+ ignored otherwise.
116
+ @kwarg datum: Optional datum to use this UTM coordinate, overriding the
117
+ B{C{latlon}}'s datum (C{Datum}).
118
+ @kwarg falsed: If C{True}, false both easting and northing (C{bool}).
119
+ @kwarg Utm: Optional class to return the UTM coordinate (L{Utm}) or C{None}.
120
+ @kwarg Ups: Optional class to return the UPS coordinate (L{Ups}) or C{None}.
121
+ @kwarg pole: Optional top/center of UPS (stereographic) projection (C{str},
122
+ C{'N[orth]'} or C{'S[outh]'}).
123
+ @kwarg name_cmoff: Optional C{B{name}=NN} (C{str}) and DEPRECATED keyword
124
+ argument C{B{cmoff}=True} to offset the longitude from the zone's
125
+ central meridian (C{bool}), use B{C{falsed}} instead and I{for
126
+ UTM only}.
127
+
128
+ @return: The UTM or UPS coordinate (B{C{Utm}} respectively B{C{Ups}}) or a
129
+ L{UtmUps8Tuple}C{(zone, hemipole, easting, northing, band, datum,
130
+ gamma, scale)} if B{C{Utm}} respectively C{B{Ups} is None} or if
131
+ C{B{falsed} is False}.
132
+
133
+ @raise RangeError: If B{C{lat}} outside the valid UTM or UPS bands or if
134
+ B{C{lat}} or B{C{lon}} outside the valid range and
135
+ L{rangerrors<pygeodesy.rangerrors>} is C{True}.
136
+
137
+ @raise TypeError: If B{C{latlon}} is not ellipsoidal or B{C{lon}} is missing
138
+ or B{C{datum}} is invalid.
140
139
 
141
140
  @raise UTMUPSError: UTM or UPS validation failed.
142
141
 
@@ -154,21 +153,20 @@ def toUtmUps8(latlon, lon=None, datum=None, falsed=True, Utm=Utm, Ups=Ups,
154
153
  return u
155
154
 
156
155
 
157
- def UtmUps(zone, hemipole, easting, northing, band=NN, datum=_WGS84,
158
- falsed=True, **name):
156
+ def UtmUps(zone, hemipole, easting, northing, band=NN, datum=_WGS84, falsed=True, **name):
159
157
  '''Class-like function to create a UTM/UPS coordinate.
160
158
 
161
159
  @kwarg zone: The UTM zone with/-out I{longitudinal} Band or UPS zone C{0}
162
160
  or C{"00"} with/-out I{polar} Band (C{str} or C{int}).
163
- @kwarg hemipole: UTM hemisphere or UPS top/center of projection
164
- (C{str}, C{'N[orth]'} or C{'S[outh]'}).
161
+ @kwarg hemipole: UTM hemisphere or UPS top/center of projection (C{str},
162
+ C{'N[orth]'} or C{'S[outh]'}).
165
163
  @arg easting: Easting, see B{C{falsed}} (C{meter}).
166
164
  @arg northing: Northing, see B{C{falsed}} (C{meter}).
167
165
  @kwarg band: Optional, UTM I{latitudinal} C{'C'|'D'|..|'W'|'X'} or UPS
168
166
  I{polar} Band letter C{'A'|'B'|'Y'|'Z'} Band letter (C{str}).
169
167
  @kwarg datum: The coordinate's datum (L{Datum}).
170
- @kwarg falsed: If C{True}, both B{C{easting}} and B{C{northing}} are
171
- falsed (C{bool}).
168
+ @kwarg falsed: If C{True}, both B{C{easting}} and B{C{northing}} are falsed
169
+ (C{bool}).
172
170
  @kwarg name: Optional L{Utm} or L{Ups} C{B{name}=NN} (C{str}).
173
171
 
174
172
  @return: New UTM or UPS instance (L{Utm} or L{Ups}).
@@ -182,17 +180,16 @@ def UtmUps(zone, hemipole, easting, northing, band=NN, datum=_WGS84,
182
180
  '''
183
181
  z, B, hp = _to3zBhp(zone, band, hemipole=hemipole)
184
182
  U = Ups if z in (_UPS_ZONE, _UPS_ZONE_STR) else Utm
185
- return U(z, hp, easting, northing, band=B, datum=datum,
186
- falsed=falsed, **name)
183
+ return U(z, hp, easting, northing, band=B, datum=datum, falsed=falsed, **name)
187
184
 
188
185
 
189
186
  def utmupsValidate(coord, falsed=False, MGRS=False, Error=UTMUPSError):
190
187
  '''Check a UTM or UPS coordinate.
191
188
 
192
- @arg coord: The UTM or UPS coordinate (L{Utm}, L{Etm}, L{Ups}
193
- or C{5+Tuple}).
194
- @kwarg falsed: C{5+Tuple} easting and northing are falsed
195
- (C{bool}), ignored otherwise.
189
+ @arg coord: The UTM or UPS coordinate (L{Utm}, L{Etm}, L{Ups} or
190
+ C{5+Tuple}).
191
+ @kwarg falsed: If C{True}, easting and northing are falsed in the
192
+ C{B{coord} 5+Tuple} (C{bool}), ignored otherwise.
196
193
  @kwarg MGRS: Increase easting and northing ranges (C{bool}).
197
194
  @kwarg Error: Optional error to raise, overriding the default
198
195
  (L{UTMUPSError}).
@@ -253,8 +250,8 @@ def utmupsValidateOK(coord, falsed=False, ok=True):
253
250
  '''Check a UTM or UPS coordinate.
254
251
 
255
252
  @arg coord: The UTM or UPS coordinate (L{Utm}, L{Ups} or C{5+Tuple}).
256
- @kwarg falsed: Use C{B{falsed}=True} if the C{5+Tuple} easting and
257
- northing are falsed (C{bool}).
253
+ @kwarg falsed: If C{True}, easting and northing are falsed in the
254
+ C{B{coord} 5+Tuple} (C{bool}), ignored otherwise.
258
255
  @kwarg ok: Result to return if validation passed (B{C{ok}}).
259
256
 
260
257
  @return: B{C{ok}} if validation passed, otherwise the L{UTMUPSError}.
@@ -263,9 +260,9 @@ def utmupsValidateOK(coord, falsed=False, ok=True):
263
260
  '''
264
261
  try:
265
262
  utmupsValidate(coord, falsed=falsed)
266
- return ok
267
263
  except UTMUPSError as x:
268
264
  return x
265
+ return ok
269
266
 
270
267
 
271
268
  def utmupsZoneBand5(lat, lon, cmoff=False, **name):
@@ -280,11 +277,11 @@ def utmupsZoneBand5(lat, lon, cmoff=False, **name):
280
277
 
281
278
  @return: A L{UtmUpsLatLon5Tuple}C{(zone, band, hemipole, lat, lon)}
282
279
  where C{hemipole} is C{'N'|'S'}, the UTM hemisphere or UPS
283
- pole, the UPS projection top/center.
280
+ pole, projection top/center.
284
281
 
285
- @raise RangeError: If B{C{lat}} outside the valid UTM or UPS bands
286
- or if B{C{lat}} or B{C{lon}} outside the valid
287
- range and L{pygeodesy.rangerrors} set to C{True}.
282
+ @raise RangeError: If B{C{lat}} outside the valid UTM or UPS bands or
283
+ if B{C{lat}} or B{C{lon}} outside the valid range
284
+ and L{rangerrors<pygeodesy.rangerrors>} is C{True}.
288
285
 
289
286
  @raise ValueError: Invalid B{C{lat}} or B{C{lon}}.
290
287
 
pygeodesy/utmupsBase.py CHANGED
@@ -12,22 +12,22 @@ 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
14
  from pygeodesy.errors import _or, ParseError, _parseX, _ValueError, \
15
- _xkwds, _xkwds_not
15
+ _xattrs, _xkwds, _xkwds_not
16
16
  # from pygeodesy.internals import _name__, _under # from .named
17
17
  from pygeodesy.interns import NN, _A_, _B_, _COMMA_, _Error_, \
18
18
  _gamma_, _n_a_, _not_, _N_, _NS_, _PLUS_, \
19
19
  _S_, _scale_, _SPACE_, _Y_, _Z_
20
20
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
21
- from pygeodesy.named import _NamedBase, _xnamed, _name__, _under
21
+ from pygeodesy.named import _name__, _NamedBase, _under
22
22
  from pygeodesy.namedTuples import EasNor2Tuple, LatLonDatum5Tuple
23
23
  from pygeodesy.props import deprecated_method, property_doc_, _update_all, \
24
24
  deprecated_property_RO, Property_RO, property_RO
25
- from pygeodesy.streprs import Fmt, fstr, _fstrENH2, _xattrs, _xzipairs
25
+ from pygeodesy.streprs import Fmt, fstr, _fstrENH2, _xzipairs
26
26
  from pygeodesy.units import Band, Easting, Northing, Scalar, Zone
27
27
  from pygeodesy.utily import _Wrap, wrap360
28
28
 
29
29
  __all__ = _ALL_LAZY.utmupsBase
30
- __version__ = '24.06.09'
30
+ __version__ = '24.06.12'
31
31
 
32
32
  _UPS_BANDS = _A_, _B_, _Y_, _Z_ # UPS polar bands SE, SW, NE, NW
33
33
  # _UTM_BANDS = _MODS.utm._Bands
@@ -210,13 +210,12 @@ class UtmUpsBase(_NamedBase):
210
210
  ll = self._latlon
211
211
  if LatLon is None:
212
212
  r = LatLonDatum5Tuple(ll.lat, ll.lon, ll.datum,
213
- ll.gamma, ll.scale)
213
+ ll.gamma, ll.scale, name=ll.name)
214
214
  else:
215
215
  _xsubclassof(_LLEB, LatLon=LatLon)
216
- kwds = _xkwds(LatLon_kwds, datum=ll.datum)
217
- r = _xattrs(LatLon(ll.lat, ll.lon, **kwds),
218
- ll, _under(_gamma_), _under(_scale_))
219
- return _xnamed(r, ll.name)
216
+ r = LatLon(ll.lat, ll.lon, **_xkwds(LatLon_kwds, datum=ll.datum, name=ll.name))
217
+ r = _xattrs(r, ll, _under(_gamma_), _under(_scale_))
218
+ return r
220
219
 
221
220
  def _latlon5args(self, ll, g, k, _toBand, unfalse, *other):
222
221
  '''(INTERNAL) See C{._toLLEB} methods, functions C{ups.toUps8} and C{utm._toXtm8}
pygeodesy/vector3d.py CHANGED
@@ -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.06.06'
34
+ __version__ = '24.06.18'
35
35
 
36
36
  _vector2d = _MODS.into(vector2d=__name__)
37
37
 
@@ -475,7 +475,8 @@ def _intersect3d3(start1, end1, start2, end2, eps=EPS, useZ=False): # MCCABE 16
475
475
  t = cb.dot(ab)
476
476
  o1 = 0 if b1 else _outside(t, ab2, 1)
477
477
  v = s1.plus(a.times(t / ab2))
478
- o2 = 0 if b2 else _outside(v.minus(s2).dot(b), b.length2, 2)
478
+ t = v.minus(s2).dot(b)
479
+ o2 = 0 if b2 else _outside(t, b.length2, 2)
479
480
  return v, o1, o2
480
481
 
481
482
 
@@ -541,16 +542,15 @@ def intersections2(center1, radius1, center2, radius2, sphere=True, **Vector_and
541
542
  intersection points and optional, additional B{C{Vector}}
542
543
  keyword arguments, otherwise B{C{center1}}'s (sub-)class.
543
544
 
544
- @return: If B{C{sphere}} is C{True}, a 2-tuple of the C{center} and C{radius}
545
- of the intersection of the I{spheres}. The C{radius} is C{0.0} for
546
- abutting spheres (and the C{center} is aka the I{radical center}).
545
+ @return: If C{B{sphere} is True}, a 2-tuple of the C{center} and C{radius} of the
546
+ intersection of the I{spheres}. For abutting circles, C{radius} is C{0.0}
547
+ and C{center} is the I{radical center}.
547
548
 
548
- If B{C{sphere}} is C{False}, a 2-tuple with the two intersection
549
- points of the I{circles}. For abutting circles, both points are
550
- the same instance, aka the I{radical center}.
549
+ If C{B{sphere} is False}, a 2-tuple with the two intersection points of the
550
+ I{circles}. For abutting circles, both points are the same instance, aka
551
+ the I{radical center}.
551
552
 
552
- @raise IntersectionError: Concentric, invalid or non-intersecting spheres
553
- or circles.
553
+ @raise IntersectionError: Concentric, invalid or non-intersecting spheres or circles.
554
554
 
555
555
  @raise TypeError: Invalid B{C{center1}} or B{C{center2}}.
556
556
 
@@ -637,8 +637,8 @@ def iscolinearWith(point, point1, point2, eps=EPS, useZ=True):
637
637
  @kwarg eps: Tolerance (C{scalar}), same units as C{x}, C{y} and C{z}.
638
638
  @kwarg useZ: If C{True}, use the Z components, otherwise force C{z=INT0} (C{bool}).
639
639
 
640
- @return: C{True} if B{C{point}} is colinear B{C{point1}} and B{C{point2}},
641
- C{False} otherwise.
640
+ @return: C{True} if B{C{point}} is colinear B{C{point1}} and B{C{point2}}, C{False}
641
+ otherwise.
642
642
 
643
643
  @raise TypeError: Invalid B{C{point}}, B{C{point1}} or B{C{point2}}.
644
644
 
@@ -661,8 +661,8 @@ def nearestOn(point, point1, point2, within=True, useZ=True, Vector=None, **Vect
661
661
  points, otherwise the closest point on the extended line
662
662
  through both points (C{bool}).
663
663
  @kwarg useZ: If C{True}, use the Z components, otherwise force C{z=INT0} (C{bool}).
664
- @kwarg Vector: Class to return closest point (C{Cartesian}, L{Vector3d}
665
- or C{Vector3Tuple}) or C{None}.
664
+ @kwarg Vector: Class to return closest point (C{Cartesian}, L{Vector3d} or
665
+ C{Vector3Tuple}) or C{None}.
666
666
  @kwarg Vector_kwds: Optional, additional B{C{Vector}} keyword arguments,
667
667
  ignored if C{B{Vector} is None}.
668
668
 
@@ -766,23 +766,22 @@ def nearestOn6(point, points, closed=False, useZ=True, **Vector_and_kwds): # ep
766
766
  return NearestOn6Tuple(v, sqrt(c2), f, j, s, e)
767
767
 
768
768
 
769
- def _nVc(v, clas=None, Vector=None, **Vector_kwds_name): # in .vector2d
769
+ def _nVc(v, clas=None, Vector=None, **name_Vector_kwds): # in .vector2d
770
770
  # return a named C{Vector} or C{clas} instance
771
- name, Vector_kwds = _name2__(**Vector_kwds_name)
771
+ name, kwds = _name2__(**name_Vector_kwds)
772
772
  if Vector is not None:
773
- v = Vector(v.x, v.y, v.z, **Vector_kwds)
773
+ v = Vector(v.x, v.y, v.z, **kwds)
774
774
  elif clas is not None:
775
775
  v = clas(v.x, v.y, v.z) # ignore Vector_kwds
776
776
  return _xnamed(v, name) if name else v
777
777
 
778
778
 
779
- def _otherV3d(useZ=True, NN_OK=True, i=None, **name_v):
779
+ def _otherV3d(useZ=True, NN_OK=True, i=None, **name_vector):
780
780
  # check named vector instance, return Vector3d
781
- n, v = _xkwds_item2(name_v)
781
+ n, v = _xkwds_item2(name_vector)
782
+ n = Fmt.INDEX(n, i)
782
783
  if useZ and isinstance(v, Vector3dBase):
783
- return v if NN_OK or v.name else v.copy(name=Fmt.INDEX(n, i))
784
-
785
- n = Fmt.INDEX(n, i)
784
+ return v if NN_OK or v.name else v.copy(name=n)
786
785
  try:
787
786
  return Vector3d(v.x, v.y, (v.z if useZ else INT0), name=n)
788
787
  except AttributeError: # no .x, .y or .z attr
@@ -799,7 +798,7 @@ def parse3d(str3d, sep=_COMMA_, Vector=Vector3d, **Vector_kwds):
799
798
  @kwarg Vector_kwds: Optional B{C{Vector}} keyword arguments,
800
799
  ignored if C{B{Vector} is None}.
801
800
 
802
- @return: A B{C{Vector}} instance or if B{C{Vector}} is C{None},
801
+ @return: A B{C{Vector}} instance or if C{B{Vector} is None},
803
802
  a named L{Vector3Tuple}C{(x, y, z)}.
804
803
 
805
804
  @raise VectorError: Invalid B{C{str3d}}.
@@ -820,11 +819,11 @@ def sumOf(vectors, Vector=Vector3d, **Vector_kwds):
820
819
 
821
820
  @arg vectors: Vectors to be added (L{Vector3d}[]).
822
821
  @kwarg Vector: Optional class for the vectorial sum (L{Vector3d}).
823
- @kwarg Vector_kwds: Optional B{C{Vector}} keyword arguments,
824
- ignored if C{B{Vector} is None}.
822
+ @kwarg Vector_kwds: Optional B{C{Vector}} keyword arguments, ignored
823
+ if C{B{Vector} is None}.
825
824
 
826
- @return: Vectorial sum as B{C{Vector}} or if B{C{Vector}} is
827
- C{None}, a named L{Vector3Tuple}C{(x, y, z)}.
825
+ @return: Vectorial sum as B{C{Vector}} or if B{C{Vector} is None},
826
+ a named L{Vector3Tuple}C{(x, y, z)}.
828
827
 
829
828
  @raise VectorError: No B{C{vectors}}.
830
829
  '''
pygeodesy/vector3dBase.py CHANGED
@@ -30,7 +30,7 @@ from pygeodesy.units import Float, Scalar
30
30
  from math import atan2, ceil, fabs, floor, trunc
31
31
 
32
32
  __all__ = _ALL_LAZY.vector3dBase
33
- __version__ = '24.06.07'
33
+ __version__ = '24.06.11'
34
34
 
35
35
 
36
36
  class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
@@ -491,15 +491,14 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
491
491
  '''Compute the cross product of this and an other vector.
492
492
 
493
493
  @arg other: The other vector (L{Vector3d}).
494
- @kwarg raiser: Optional, L{CrossError} label if raised (C{str},
495
- non-L{NN}).
496
- @kwarg eps0: Near-zero tolerance (C{scalar}), same units as
497
- C{x}, C{y}, and C{z}.
494
+ @kwarg raiser: Optional, L{CrossError} label if raised (C{str}, non-L{NN}).
495
+ @kwarg eps0: Near-zero tolerance (C{scalar}), same units as C{x}, C{y} and
496
+ C{z}.
498
497
 
499
498
  @return: Cross product (L{Vector3d}).
500
499
 
501
- @raise CrossError: Zero or near-zero cross product and both
502
- B{C{raiser}} and L{pygeodesy.crosserrors} set.
500
+ @raise CrossError: Zero or near-zero cross product and if B{C{raiser}} and
501
+ L{crosserrors<pygeodesy.crosserrors>} are both C{True}.
503
502
 
504
503
  @raise TypeError: Incompatible B{C{other}} C{type}.
505
504
  '''
pygeodesy/webmercator.py CHANGED
@@ -36,7 +36,7 @@ from pygeodesy.utily import degrees90, degrees180
36
36
  from math import atan, atanh, exp, radians, sin, tanh
37
37
 
38
38
  __all__ = _ALL_LAZY.webmercator
39
- __version__ = '24.05.31'
39
+ __version__ = '24.06.11'
40
40
 
41
41
  # _FalseEasting = 0 # false Easting (C{meter})
42
42
  # _FalseNorthing = 0 # false Northing (C{meter})
@@ -283,8 +283,8 @@ def parseWM(strWM, radius=R_MA, Wm=Wm, **name):
283
283
  or C{None}.
284
284
  @kwarg name: Optional C{B{name}=NN} (C{str}).
285
285
 
286
- @return: The WM coordinate (B{C{Wm}}) or if B{C{Wm}} is C{None}
287
- an L{EasNorRadius3Tuple}C{(easting, northing, radius)}.
286
+ @return: The WM coordinate (B{C{Wm}}) or if C{B{Wm} is None}, an
287
+ L{EasNorRadius3Tuple}C{(easting, northing, radius)}.
288
288
 
289
289
  @raise WebMercatorError: Invalid B{C{strWM}}.
290
290
  '''
@@ -307,27 +307,25 @@ def parseWM(strWM, radius=R_MA, Wm=Wm, **name):
307
307
  def toWm(latlon, lon=None, earth=R_MA, Wm=Wm, **name_Wm_kwds_radius):
308
308
  '''Convert a lat-/longitude point to a WM coordinate.
309
309
 
310
- @arg latlon: Latitude (C{degrees}) or an (ellipsoidal or
311
- spherical) geodetic C{LatLon} point.
310
+ @arg latlon: Latitude (C{degrees}) or an (ellipsoidal or spherical)
311
+ geodetic C{LatLon} point.
312
312
  @kwarg lon: Optional longitude (C{degrees} or C{None}).
313
- @kwarg earth: Earth radius (C{meter}), datum or ellipsoid
314
- (L{Datum}, L{a_f2Tuple}, L{Ellipsoid} or
315
- L{Ellipsoid2}), overridden by B{C{latlon}}'s
316
- datum if present.
317
- @kwarg Wm: Optional class to return the WM coordinate (L{Wm})
318
- or C{None}.
319
- @kwarg name_Wm_kwds_radius: Optional C{B{name}=NN} (C{str}),
320
- optional, additional B{C{Wm}} keyword arguments,
321
- ignored if C{B{Wm} is None} and DEPRECATED keyword
322
- argument C{B{radius}=earth}, use B{C{earth}}.
323
-
324
- @return: The WM coordinate (B{C{Wm}}) or if B{C{Wm}} is C{None} an
313
+ @kwarg earth: Earth radius (C{meter}), datum or ellipsoid (L{Datum},
314
+ L{a_f2Tuple}, L{Ellipsoid} or L{Ellipsoid2}), overridden
315
+ by B{C{latlon}}'s datum if present.
316
+ @kwarg Wm: Optional class to return the WM coordinate (L{Wm}) or C{None}.
317
+ @kwarg name_Wm_kwds_radius: Optional C{B{name}=NN} (C{str}), optional,
318
+ additional B{C{Wm}} keyword arguments, ignored if C{B{Wm} is
319
+ None} and DEPRECATED keyword argument C{B{radius}=earth},
320
+ use B{C{earth}}.
321
+
322
+ @return: The WM coordinate (B{C{Wm}}) or if C{B{Wm} is None}, an
325
323
  L{EasNorRadius3Tuple}C{(easting, northing, radius)}.
326
324
 
327
- @raise ValueError: If B{C{lon}} value is missing, if B{C{latlon}} is not
328
- scalar, if B{C{latlon}} is beyond the valid WM range
329
- and L{pygeodesy.rangerrors} is set to C{True} or if
330
- B{C{earth}} is invalid.
325
+ @raise ValueError: If B{C{earth}} is invalid, if B{C{lon}} value is missing,
326
+ if B{C{latlon}} is not scalar, or if B{C{latlon}} is beyond
327
+ the valid WM range and L{rangerrrors<pygeodesy.rangerrors>}
328
+ is C{True}.
331
329
  '''
332
330
  name, kwds = _name2__(name_Wm_kwds_radius)
333
331
  R, kwds = _xkwds_pop2(kwds, radius=earth)
pygeodesy/wgrs.py CHANGED
@@ -16,22 +16,22 @@ also U{World Geographic Reference System
16
16
  from pygeodesy.constants import INT0, _float, _off90, _0_001, \
17
17
  _0_5, _1_0, _2_0, _60_0, _1000_0
18
18
  from pygeodesy.dms import parse3llh # parseDMS2
19
- from pygeodesy.errors import _ValueError, _xattr, _xkwds
19
+ from pygeodesy.errors import _ValueError, _xattr, _xStrError
20
20
  from pygeodesy.interns import NN, _0to9_, _AtoZnoIO_, _COMMA_, \
21
21
  _height_, _radius_, _SPACE_
22
22
  from pygeodesy.lazily import _ALL_LAZY, _ALL_OTHER
23
- from pygeodesy.named import nameof, isstr, Property_RO
23
+ from pygeodesy.named import _name2__, nameof, isstr, Property_RO
24
24
  from pygeodesy.namedTuples import LatLon2Tuple, LatLonPrec3Tuple
25
25
  # from pygeodesy.props import Property_RO # from .named
26
26
  from pygeodesy.streprs import Fmt, _0wd
27
27
  from pygeodesy.units import Height, Int, Lat, Lon, Precision_, \
28
- Radius, Scalar_, Str, _xStrError
28
+ Radius, Scalar_, Str
29
29
  from pygeodesy.utily import ft2m, m2ft, m2NM
30
30
 
31
31
  from math import floor
32
32
 
33
33
  __all__ = _ALL_LAZY.wgrs
34
- __version__ = '23.06.12'
34
+ __version__ = '24.06.15'
35
35
 
36
36
  _Base = 10
37
37
  _BaseLen = 4
@@ -207,27 +207,25 @@ class Georef(Str):
207
207
  '''
208
208
  return self._decoded5.radius
209
209
 
210
- def toLatLon(self, LatLon=None, height=None, **LatLon_kwds):
211
- '''Return (the center of) this georef cell as an instance
212
- of the supplied C{LatLon} class.
210
+ def toLatLon(self, LatLon=None, height=None, **name_LatLon_kwds):
211
+ '''Return (the center of) this georef cell as a C{LatLon}.
213
212
 
214
213
  @kwarg LatLon: Class to use (C{LatLon}) or C{None}.
215
- @kwarg height: Optional height (C{meter}).
216
- @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword
217
- arguments, ignored if C{B{LatLon} is None}.
214
+ @kwarg height: Optional height (C{meter}), overriding this height.
215
+ @kwarg name_LatLon_kwds: Optional C{B{name}=NN} (C{str}) and optional,
216
+ additional B{C{LatLon}} keyword arguments, ignored if
217
+ C{B{LatLon} is None}.
218
218
 
219
- @return: This georef location (B{C{LatLon}}) or if B{C{LatLon}}
220
- is C{None}, a L{LatLon3Tuple}C{(lat, lon, height)}.
219
+ @return: This georef location (B{C{LatLon}}) or if C{B{LatLon} is None},
220
+ a L{LatLon3Tuple}C{(lat, lon, height)}.
221
221
 
222
- @raise TypeError: Invalid B{C{LatLon}} or B{C{LatLon_kwds}}.
222
+ @raise TypeError: Invalid B{C{LatLon}} or B{C{name_LatLon_kwds}}.
223
223
  '''
224
- if LatLon is None:
225
- r = self.latlonheight if height is None else \
226
- self.latlon.to3Tuple(height)
227
- else:
228
- h = (self.height or INT0) if height is None else height
229
- r = LatLon(*self.latlon, height=h, **_xkwds(LatLon_kwds, name=self.name))
230
- return r
224
+ n, kwds = _name2__(name_LatLon_kwds, _or_nameof=self)
225
+ h = (self.height or INT0) if height is None else height # _heigHt
226
+ r = self.latlon.to3Tuple(h) if LatLon is None else LatLon(
227
+ *self.latlon, height=h, **kwds)
228
+ return r.renamed(n) if n else r
231
229
 
232
230
 
233
231
  def decode3(georef, center=True):
@@ -1,116 +0,0 @@
1
- pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
- pygeodesy/__init__.py,sha256=MliQ7bvn1U4dND9REeqtweBQF8d_LWeWIliPvZwBkeg,41046
3
- pygeodesy/__main__.py,sha256=UmTd6Qw20g_pgnQjdaHePm-xuOEBi1tUNRLO0eL0-rU,4593
4
- pygeodesy/albers.py,sha256=2t8EjmoFWmkdTb4DUHMlECkwTPDS1wpNf92WD_UWXds,31081
5
- pygeodesy/azimuthal.py,sha256=RQdZbHoLlHSamhnJ4GMrrRU6UrYmTpa1yK59nYB-A4o,50252
6
- pygeodesy/basics.py,sha256=Ez1tApjFnk6vNsYXeZzi28hYsa5AhUYobLS1Anna2g0,29381
7
- pygeodesy/booleans.py,sha256=_19jhaMqcPdaOfKdSElh50y2JQemXcu9Xcx0CqJ90ZE,73533
8
- pygeodesy/cartesianBase.py,sha256=-n3g68SO-3399cqyzgDXAolQnQfyOhzFYixhATpWZVI,47216
9
- pygeodesy/clipy.py,sha256=3ysIEWQ89HjvLnSlZm0nZAt9EN5AQxIs1sLLM8yF9zM,27675
10
- pygeodesy/constants.py,sha256=-weWOuHwE-qI6pYRLcTucI0KNcNJm6vPNzxwrJzACKs,19192
11
- pygeodesy/css.py,sha256=RXlLh76tVDFClVh7L1U3FFrLZvjBPFASDf3vq8dHecE,25778
12
- pygeodesy/datums.py,sha256=GYbtvPyzDChHYgnNleBqsM-MNwLNQqrO2_MMV4Z9kmI,34006
13
- pygeodesy/dms.py,sha256=VujWxk1L2Kp6OMfnu0XPI-j8bnyJ33sFmtB9_MbHqSU,44455
14
- pygeodesy/ecef.py,sha256=35lTlGfCM4t45IFpjfXHSUXJSyGUEjuqUK-YWRRplLs,59680
15
- pygeodesy/elevations.py,sha256=1qZM2w0rDF7jHunydpTEmdLwOwF81KUL9L6RALJC7K4,10807
16
- pygeodesy/ellipsoidalBase.py,sha256=ljWfrFENRFFWxhyvptfipEWM8xKeTs329F2OP4lZvKI,55297
17
- pygeodesy/ellipsoidalBaseDI.py,sha256=lPUPP5lVsCzI5RIukxmJ5MH6j2Mb7mdvftQ0tsvsW6g,38585
18
- pygeodesy/ellipsoidalExact.py,sha256=a_2C6S6hGRumavy5giRoC9QAhnjqpujiXyu92od6nKo,16951
19
- pygeodesy/ellipsoidalGeodSolve.py,sha256=nzT6KOubBOxXRHYafOo5ByQ90VOY1zvaS7byhnwaFqE,16830
20
- pygeodesy/ellipsoidalKarney.py,sha256=m07XlZKWvBnOzIKV6P7RNttk8G5s2JRBH2RVF_lg0_k,19243
21
- pygeodesy/ellipsoidalNvector.py,sha256=kRmWclV0NFnEJv3m3TxBNJMu7wyrZZO2iUrNrr-_m9g,30261
22
- pygeodesy/ellipsoidalVincenty.py,sha256=Uk93B8GFcMnWiwKUOA84TlLwbBlvzVnsAXAx0cU7cn4,26004
23
- pygeodesy/ellipsoids.py,sha256=_fbQy9k_k40Li6jAOlHcSlEPPUnliZsqjIR2be3h2QI,120238
24
- pygeodesy/elliptic.py,sha256=-80MbZvRPk-TeA_ggkfXhjuPv07MzsB4HxNF7gbdhB4,42501
25
- pygeodesy/epsg.py,sha256=oWHX_QVChE5roktAyXUmPmX49XHiryYmXTHxQzrAprE,8222
26
- pygeodesy/errors.py,sha256=3GPp5Axnbnch93VWO-E7uEAAfVnRzbByafNCtKR6g_I,28443
27
- pygeodesy/etm.py,sha256=DeX0mZQcHK0KbmOZodp2iv2TEFtRjYziSL9oUEV2YxU,44952
28
- pygeodesy/fmath.py,sha256=EOHD0uZ8VULZtXAk8tVeuPaSTozPDCN8GJcemCo-jqg,33709
29
- pygeodesy/formy.py,sha256=JKFqC7OlxBvB9sOH9OaWJX4bLkf0dMqW3LcVrwdnt7A,75121
30
- pygeodesy/frechet.py,sha256=GL4R26drObd1qFyg4hV-L9btdXaIj7xzrKjQUA-7JKc,34342
31
- pygeodesy/fstats.py,sha256=4eIhzSCMnn-2nVP3Q-5cCWCI-rvH0CE-zkk9hp3Pvn8,28642
32
- pygeodesy/fsums.py,sha256=35PAG1f5DO1KgnEWujH5TSbaas6a6eETAeeJxGcUW1A,80453
33
- pygeodesy/gars.py,sha256=gVnLQIEofyf_dA8dhpLrmhtIxGhBHZVRw8PbWgYUnnY,11400
34
- pygeodesy/geodesicw.py,sha256=PwUO5jCGExhMt6cKkQwVnPTHMMVadkTrd6pV4UWZYNY,27064
35
- pygeodesy/geodsolve.py,sha256=lC-81_56RUpgyJPDTXv0ih73tEuMNp3evDvyP4CDKSs,21974
36
- pygeodesy/geohash.py,sha256=hAgcl8p4DSswBdrNj-SzmWYMU2q6h5yczeLKtpRvmZA,32080
37
- pygeodesy/geoids.py,sha256=ztWLvRLpOPqC_52sxJVzVk7_g4o2REVxx5d3hh7jZ8g,80887
38
- pygeodesy/hausdorff.py,sha256=bhxy8_3dAoR1syc-X90AbANNrulMFdwRyvNxjYfcw6I,34713
39
- pygeodesy/heights.py,sha256=3-4ESUw7s7fggRRTXIR1YpV3K-Qk8x3nlt7BkNa54lw,43191
40
- pygeodesy/internals.py,sha256=0y4Wwx7bGife4-quIyAf7l6MR91Tmfjrie1FuqNSM5Y,19354
41
- pygeodesy/interns.py,sha256=njF6hxFJRhhWLsrfx21XX8V3ZvS59ujfzk2spWBGSBM,23258
42
- pygeodesy/iters.py,sha256=xPH0ytomvJeKHu717Fjzi3QbRrEikO6n7vqkY_IDz1k,20311
43
- pygeodesy/karney.py,sha256=iGoi32hDPdaMR39i6pypcbY2hqvHFVPFROYcjjA-Jrw,35121
44
- pygeodesy/ktm.py,sha256=itQElJegrfhpAuMujAWFTcyuMSeKIgSyw5qkkHFs7vE,27519
45
- pygeodesy/latlonBase.py,sha256=EK7hM0GrLrpfCrtYc0frdS_hF1UxSo8KkqP0Bg5nq24,79072
46
- pygeodesy/lazily.py,sha256=b6x3Dfob6HCoiwHaF8lhtnFQei3w2qW8yoMURPdr7tA,46519
47
- pygeodesy/lcc.py,sha256=H6HTbruMKwboVxAnM1EsieBJHKqWhdd47bCYDzTIioE,25746
48
- pygeodesy/ltp.py,sha256=oFuGZgWFKI7YjldlyTNhbLLOS7AVixLf5iemEhHhRbA,50857
49
- pygeodesy/ltpTuples.py,sha256=VFJWeGJ96NUPaxwc1JT82dMYgE3NpnUwzu0osaaHfVE,58414
50
- pygeodesy/mgrs.py,sha256=cKYnLKUorr_27Rca4V5I1-R6RPGnTlzrlYFuENnnjnI,29707
51
- pygeodesy/named.py,sha256=oZEqvA1rORBY44J8oi2I6XpBchCnyi_QgAvd-zlx25A,51885
52
- pygeodesy/namedTuples.py,sha256=UDmL4kCihvf8tIUVXzGzRLzL_1BLuyqm04pite6YUuk,28495
53
- pygeodesy/nvectorBase.py,sha256=jT_tmA7JW_C66h7zbgP4mKxcYnmLVVpv6j-ZTvZC3NI,28744
54
- pygeodesy/osgr.py,sha256=g-uCTy735aUNh5odTp27PY8CLDnTaquc1_oTs8Qv6zg,30827
55
- pygeodesy/points.py,sha256=whMm-9Nzlhr19nPNVkXB0nIg52iMvQ4q2Xg_Eor_Yz0,64415
56
- pygeodesy/props.py,sha256=8dGmTpdEABnLbBngmaOIpM0h4NYiBteMOHc_r4iNpAg,21988
57
- pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
58
- pygeodesy/simplify.py,sha256=NybC-pfze0ObEm4ZCz6ZQrjJlQ-QyA83E6mSJqCuKq4,25223
59
- pygeodesy/solveBase.py,sha256=FGuvHvloiyBdE0H50o8rOxtD_n6gCx1Gp31Ckn-N7hk,16852
60
- pygeodesy/sphericalBase.py,sha256=eIvQz573LR9xPFZK4t5Z0TEVz4aPKI9MdMtgFDbm7Zo,32284
61
- pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
62
- pygeodesy/sphericalTrigonometry.py,sha256=SqkFi2_Cy1LOzlZvvO4tpwxkS-AEBhdfRTgopXFTISw,64208
63
- pygeodesy/streprs.py,sha256=jZigK7DeHAFi2HTbvA5sXE1bJ8jeyJC1spBnzz7nTSs,24018
64
- pygeodesy/trf.py,sha256=CRFHmu0lFNtc41fddXavEkHmgnTFWEqR4RTFodcFKsw,119022
65
- pygeodesy/triaxials.py,sha256=klirzOo6yxTmd-eQM4PHMnszUo71JR0VKIUy9mYUam8,62860
66
- pygeodesy/units.py,sha256=gHmNw5HO78zeG3zUPfwf3wrV9LKQxBLOPPzbLivMiWA,38196
67
- pygeodesy/unitsBase.py,sha256=9WC7GgLJWc9MMKX1xFIlgXNKGpK9k0Do1lA6vAkLE8s,13539
68
- pygeodesy/ups.py,sha256=p9F49qQ9tGGf18fnFWJ5DdqQA-FdNe_BcuIGAi5tIoE,23419
69
- pygeodesy/utily.py,sha256=u5yGJvNKiNtafrokDaydHzBPe8vAGuy7WXrPP7yNSnk,36149
70
- pygeodesy/utm.py,sha256=ZxBvDcCkdnmTRzMOHyhADHdZJSUo0U0xBAsg0rEeTHk,31148
71
- pygeodesy/utmups.py,sha256=_GCrF3TljW4k5W9uKwilO1ivPLAbOArxlzi7jPJ4rbc,13226
72
- pygeodesy/utmupsBase.py,sha256=rRTSGgBbZiIp_C1v2elAjHKEIjYN1rt27lECXc55hH8,18764
73
- pygeodesy/vector2d.py,sha256=zJq5PB777_mFJpKD-rt_T0Vm4SNbVwF7pc3KxX8uCT8,34994
74
- pygeodesy/vector3d.py,sha256=t1MVIYCfnP-EdHiV3PAuVDcjLrDNZ3E48UOW-2rw5js,44953
75
- pygeodesy/vector3dBase.py,sha256=R6rQlqoO8pvzhfjz6jK1llL74c9SldafPXHbdBrPCIA,35732
76
- pygeodesy/webmercator.py,sha256=J89VAROczHNpD34AuIWD3vxfogk3ZKoYj1w0lXOCkYA,14968
77
- pygeodesy/wgrs.py,sha256=AKUrYRCC67lOeJ6vUDAiGb_mY6R3ZwflXpOaP3wauOg,14774
78
- pygeodesy/auxilats/_CX_4.py,sha256=U41njj8Pu8cHMGuoUUVA20QIvRJAq-VGCnyoKJl0Ylo,8662
79
- pygeodesy/auxilats/_CX_6.py,sha256=x4hrHxunjqqkEsZbVW1dyn3R5mR8EWYOuX77RzDEyh4,14856
80
- pygeodesy/auxilats/_CX_8.py,sha256=t-OO48t4cCOsOgMi1FoyPw2DQqybVZFsgQMqAYP-jKY,25304
81
- pygeodesy/auxilats/__init__.py,sha256=tj9fglSENe7whplLC9YCl--EQNyMNd1g26BPLT2JNr0,2881
82
- pygeodesy/auxilats/__main__.py,sha256=Vuj1YSp1LV0zejVzi6EYauka1Dv8kwOHI_aeHxQEVYk,2899
83
- pygeodesy/auxilats/auxAngle.py,sha256=rljkFpqLhCMZVMo9u0xNBmGZV0KxsmIbI41d5itcZ3E,16740
84
- pygeodesy/auxilats/auxDLat.py,sha256=U3BHF6AkW5--nrwH9whL5wZVIZLH_keRLfUz6c6KBx4,10950
85
- pygeodesy/auxilats/auxDST.py,sha256=bdNEh3TdABWH7qW6ngZx5SnzDM3B5rtPLvYhvCnFsKc,10497
86
- pygeodesy/auxilats/auxLat.py,sha256=GUpK5_rcL8IHjC209dhIibYYBJudFU0Yk7JD-KUApbc,32529
87
- pygeodesy/auxilats/auxily.py,sha256=ZiCFedYcr32O6TWQ_dcnwMrc9TgogyuhNSbR77WMDpg,8240
88
- pygeodesy/deprecated/__init__.py,sha256=ZRGqgwSdvtKSYZdw09-LPuGa_i0jMHWKIwrPG3r1hHs,2815
89
- pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8,1655
90
- pygeodesy/deprecated/classes.py,sha256=PXgss-2kEu3bzaxvSeVZJGdcRqsdi_6_aRqsESyUQKQ,11662
91
- pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
92
- pygeodesy/deprecated/datum.py,sha256=KfuMA64LYGMj1voW2uai2RGcugtWdpvlOL6UHJvpTeQ,1875
93
- pygeodesy/deprecated/functions.py,sha256=nwYgLqw9Wy6ieDxQGZJ-dIeBaF4IvmNBFx9AcHwiBlE,13907
94
- pygeodesy/deprecated/nvector.py,sha256=_dZf84RdmPr7e7i8Yi683R-8Mqn0ipTqIsDhNl29hGo,2117
95
- pygeodesy/deprecated/rhumbBase.py,sha256=d7YKW--dnRpobB2CSvhFsntWF0B5-HYJqID2pv5lD5k,1375
96
- pygeodesy/deprecated/rhumbaux.py,sha256=n29xazYMbVG4MJkLjAGu8B88bbcFF5xnvuj9xSxjfIk,1428
97
- pygeodesy/deprecated/rhumbsolve.py,sha256=QprjRfo5T1_C4ovaa1cffAcmNczzkhGIfmybAup9a9w,1431
98
- pygeodesy/deprecated/rhumbx.py,sha256=OS0p_meaoVrpZe5UhK6qZljjlrGpL0pCHWw8gofw7ks,1425
99
- pygeodesy/geodesicx/_C4_24.py,sha256=kS4XMR9m7iBs01V8K0Oz9qTYmjN-icIQGpc_8iwVhig,90750
100
- pygeodesy/geodesicx/_C4_27.py,sha256=bPbj2Ckrn9WJglm3SNTXyMkULNwANM0tCQ-LKxP1L58,134258
101
- pygeodesy/geodesicx/_C4_30.py,sha256=QZO8p971ztJwDGLOaJYgIhklztz9GlqbtS-xRP_E7o4,201964
102
- pygeodesy/geodesicx/__init__.py,sha256=0_wTYAkvfJ2xVTzw5Zo9qQlSQIT7Q_PUwC_IqFQkrWA,2446
103
- pygeodesy/geodesicx/__main__.py,sha256=JnKrYmg1q9J5wRRqUy-dQ9abj2-2jpWtrolMMaFfWiY,3176
104
- pygeodesy/geodesicx/gx.py,sha256=Luu-bmgX9WAJ7sVNkeLRuWUUj-ndp4FGafe71xC3H2k,61650
105
- pygeodesy/geodesicx/gxarea.py,sha256=-Kwe6spe2MSQbeLFDd6UN2NOi4JOjYhHAEzonOU3u4A,19409
106
- pygeodesy/geodesicx/gxbases.py,sha256=nSQpDPuRQFkkzvjOaalBTHOQCYT1fhSOb5uy-5NvvSA,5215
107
- pygeodesy/geodesicx/gxline.py,sha256=GP7BXfpsePLZy0SLLiIO6ytWKFpBLuPsOaL2Z_-45iU,27373
108
- pygeodesy/rhumb/__init__.py,sha256=70qKVuNKkddfqMSxZ9c0VCZM1w0_Ka_nBWwtpfxxh2o,2207
109
- pygeodesy/rhumb/aux_.py,sha256=UJEnoam_MLx2dBxgzjn_zU59f9wwDDNotdsV3ccWZFU,16652
110
- pygeodesy/rhumb/bases.py,sha256=J8fXg42CcAI1VR4Hz-MctOwUs029PWRTRIo6sSZYo8I,54089
111
- pygeodesy/rhumb/ekx.py,sha256=GZLJOqAEy_120q27rdt7kyEvkuoBPk6LOhOzjPOTOr8,24084
112
- pygeodesy/rhumb/solve.py,sha256=EDlLpbnw2FiNANOTau0emk29AEAaJpmckjK_cprvLNA,24035
113
- PyGeodesy-24.6.9.dist-info/METADATA,sha256=9j-xNRochKcXdPvnUAMAvuX3teuN-uBTTweCnqr7af0,19411
114
- PyGeodesy-24.6.9.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
115
- PyGeodesy-24.6.9.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
116
- PyGeodesy-24.6.9.dist-info/RECORD,,