pygeodesy 24.10.10__py2.py3-none-any.whl → 24.11.11__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 (76) hide show
  1. {PyGeodesy-24.10.10.dist-info → PyGeodesy-24.11.11.dist-info}/METADATA +12 -12
  2. PyGeodesy-24.11.11.dist-info/RECORD +118 -0
  3. {PyGeodesy-24.10.10.dist-info → PyGeodesy-24.11.11.dist-info}/WHEEL +1 -1
  4. pygeodesy/__init__.py +14 -14
  5. pygeodesy/__main__.py +5 -5
  6. pygeodesy/albers.py +12 -17
  7. pygeodesy/azimuthal.py +51 -61
  8. pygeodesy/basics.py +60 -62
  9. pygeodesy/booleans.py +87 -79
  10. pygeodesy/cartesianBase.py +6 -6
  11. pygeodesy/constants.py +23 -19
  12. pygeodesy/css.py +7 -8
  13. pygeodesy/datums.py +3 -3
  14. pygeodesy/deprecated/__init__.py +1 -1
  15. pygeodesy/deprecated/classes.py +9 -9
  16. pygeodesy/deprecated/functions.py +6 -6
  17. pygeodesy/dms.py +250 -270
  18. pygeodesy/ecef.py +11 -14
  19. pygeodesy/ellipsoidalBase.py +106 -121
  20. pygeodesy/ellipsoidalBaseDI.py +114 -118
  21. pygeodesy/ellipsoidalExact.py +35 -37
  22. pygeodesy/ellipsoidalNvector.py +4 -4
  23. pygeodesy/ellipsoidalVincenty.py +2 -2
  24. pygeodesy/ellipsoids.py +10 -51
  25. pygeodesy/elliptic.py +14 -14
  26. pygeodesy/errors.py +28 -28
  27. pygeodesy/etm.py +92 -68
  28. pygeodesy/fmath.py +42 -40
  29. pygeodesy/formy.py +7 -6
  30. pygeodesy/fsums.py +72 -51
  31. pygeodesy/geodesici.py +43 -40
  32. pygeodesy/geodesicw.py +17 -16
  33. pygeodesy/geodesicx/__init__.py +2 -2
  34. pygeodesy/geodesicx/gxarea.py +3 -2
  35. pygeodesy/geodsolve.py +79 -39
  36. pygeodesy/geohash.py +2 -2
  37. pygeodesy/geoids.py +32 -31
  38. pygeodesy/heights.py +2 -2
  39. pygeodesy/internals.py +201 -147
  40. pygeodesy/interns.py +23 -20
  41. pygeodesy/karney.py +62 -13
  42. pygeodesy/ktm.py +11 -13
  43. pygeodesy/latlonBase.py +18 -20
  44. pygeodesy/lazily.py +210 -218
  45. pygeodesy/lcc.py +4 -4
  46. pygeodesy/ltp.py +10 -10
  47. pygeodesy/ltpTuples.py +74 -75
  48. pygeodesy/mgrs.py +20 -21
  49. pygeodesy/named.py +15 -10
  50. pygeodesy/nvectorBase.py +1 -1
  51. pygeodesy/osgr.py +9 -12
  52. pygeodesy/points.py +2 -2
  53. pygeodesy/props.py +35 -14
  54. pygeodesy/resections.py +9 -10
  55. pygeodesy/rhumb/__init__.py +1 -1
  56. pygeodesy/rhumb/bases.py +5 -5
  57. pygeodesy/rhumb/solve.py +9 -10
  58. pygeodesy/simplify.py +5 -5
  59. pygeodesy/solveBase.py +7 -25
  60. pygeodesy/sphericalBase.py +20 -23
  61. pygeodesy/sphericalNvector.py +103 -145
  62. pygeodesy/sphericalTrigonometry.py +68 -73
  63. pygeodesy/streprs.py +5 -5
  64. pygeodesy/trf.py +6 -4
  65. pygeodesy/triaxials.py +46 -9
  66. pygeodesy/units.py +5 -4
  67. pygeodesy/ups.py +6 -6
  68. pygeodesy/utily.py +2 -2
  69. pygeodesy/utm.py +7 -7
  70. pygeodesy/vector2d.py +13 -13
  71. pygeodesy/vector3d.py +19 -21
  72. pygeodesy/vector3dBase.py +21 -19
  73. pygeodesy/webmercator.py +4 -4
  74. pygeodesy/wgrs.py +4 -4
  75. PyGeodesy-24.10.10.dist-info/RECORD +0 -118
  76. {PyGeodesy-24.10.10.dist-info → PyGeodesy-24.11.11.dist-info}/top_level.txt +0 -0
pygeodesy/vector2d.py CHANGED
@@ -12,7 +12,7 @@ from pygeodesy.constants import EPS, EPS0, EPS02, EPS4, INF, INT0, \
12
12
  _1_0, _1_0_1T, _N_1_0, _2_0, _N_2_0, _4_0
13
13
  from pygeodesy.errors import _and, _AssertionError, IntersectionError, NumPyError, \
14
14
  PointsError, TriangleError, _xError, _xkwds
15
- from pygeodesy.fmath import fabs, fdot, hypot, hypot2_, sqrt
15
+ from pygeodesy.fmath import fabs, fdot, fdot_, hypot, hypot2_, sqrt
16
16
  from pygeodesy.fsums import _Fsumf_, fsumf_, fsum1f_
17
17
  from pygeodesy.interns import NN, _a_, _and_, _b_, _c_, _center_, _coincident_, \
18
18
  _colinear_, _COMMASPACE_, _concentric_, _few_, \
@@ -31,7 +31,7 @@ from contextlib import contextmanager
31
31
  # from math import fabs, sqrt # from .fmath
32
32
 
33
33
  __all__ = _ALL_LAZY.vector2d
34
- __version__ = '24.08.19'
34
+ __version__ = '24.11.10'
35
35
 
36
36
  _cA_ = 'cA'
37
37
  _cB_ = 'cB'
@@ -175,7 +175,7 @@ def _circin6(point1, point2, point3, eps=EPS4, useZ=True, dLL3=False, **Vector_k
175
175
  C = V(c.x, c.y, c.z, **V_kwds)
176
176
  return c, C
177
177
 
178
- t, p1, p2, p3 = _radii11ABC(point1, point2, point3, useZ=useZ)
178
+ t, p1, p2, p3 = _radii11ABC4(point1, point2, point3, useZ=useZ)
179
179
  V, r1, r2, r3 = point1.classof, t.rA, t.rB, t.rC
180
180
 
181
181
  c1, cA = _contact2(t.a, p2, r2, p3, r3, V, _xkwds(Vector_kwds, name=_cA_))
@@ -251,8 +251,8 @@ def circum4(points, useZ=True, **Vector_and_kwds):
251
251
  @kwarg useZ: If C{True}, use the points' Z component, otherwise force C{z=INT0}
252
252
  (C{bool}).
253
253
  @kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the center point
254
- and optional, additional B{C{Vector}} keyword arguments, otherwise
255
- the first B{C{points}}' (sub-)class is used.
254
+ and optionally, additional B{C{Vector}} keyword arguments, otherwise
255
+ the B{C{points}}' (sub-)class.
256
256
 
257
257
  @return: L{Circum4Tuple}C{(radius, center, rank, residuals)} with C{center} an
258
258
  instance of C{B{points}[0]}' (sub-)class or B{C{Vector}} if specified.
@@ -509,12 +509,12 @@ def radii11(point1, point2, point3, useZ=True):
509
509
  U{Tangent Circles<https://MathWorld.Wolfram.com/TangentCircles.html>}.
510
510
  '''
511
511
  try:
512
- return _radii11ABC(point1, point2, point3, useZ=useZ)[0]
512
+ return _radii11ABC4(point1, point2, point3, useZ=useZ)[0]
513
513
  except (TypeError, ValueError) as x:
514
514
  raise _xError(x, point1=point1, point2=point2, point3=point3)
515
515
 
516
516
 
517
- def _radii11ABC(point1, point2, point3, useZ=True):
517
+ def _radii11ABC4(point1, point2, point3, useZ=True):
518
518
  # (INTERNAL) Tangent, Circum, Incircle, Soddy radii, sides and semi-perimeter
519
519
  A = _otherV3d(useZ=useZ, point1=point1, NN_OK=False)
520
520
  B = _otherV3d(useZ=useZ, point2=point2, NN_OK=False)
@@ -589,7 +589,7 @@ def soddy4(point1, point2, point3, eps=EPS4, useZ=True):
589
589
  @see: Functions L{radii11} and L{circum3} and U{Soddy Circles
590
590
  <https://MathWorld.Wolfram.com/SoddyCircles.html>}.
591
591
  '''
592
- t, p1, p2, p3 = _radii11ABC(point1, point2, point3, useZ=useZ)
592
+ t, p1, p2, p3 = _radii11ABC4(point1, point2, point3, useZ=useZ)
593
593
 
594
594
  r = t.riS
595
595
  c, d = _tricenter3d2(p1, t.rA + r,
@@ -685,8 +685,8 @@ def trilaterate2d2(x1, y1, radius1, x2, y2, radius2, x3, y3, radius3,
685
685
  @kwarg eps: Tolerance to check the trilaterated point I{delta} on
686
686
  all 3 circles (C{scalar}) or C{None} for no checking.
687
687
  @kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return
688
- the trilateration and optional, additional
689
- B{C{Vector}} keyword arguments).
688
+ the trilateration and optionally, additional B{C{Vector}}
689
+ keyword arguments).
690
690
 
691
691
  @return: Trilaterated point as C{B{Vector}(x, y, **B{Vector_kwds})}
692
692
  or L{Vector2Tuple}C{(x, y)} if C{B{Vector} is None}.
@@ -742,14 +742,14 @@ def _trilaterate2d2(x1, y1, radius1, x2, y2, radius2, x3, y3, radius3,
742
742
  raise IntersectionError(_and(_astr(x3=x3, y3=y3, radius3=r3),
743
743
  _astr(x1=x1, y1=y1, radius1=r1)), txt=t)
744
744
 
745
- q = (a * e - b * d) * _2_0
745
+ q = fdot_(a, e, -b, d) * _2_0
746
746
  if isnear0(q):
747
747
  t = _no_(_intersection_)
748
748
  raise IntersectionError(_and(_astr(x1=x1, y1=y1, radius1=r1),
749
749
  _astr(x2=x2, y2=y2, radius2=r2),
750
750
  _astr(x3=x3, y3=y3, radius3=r3)), txt=t)
751
- t = Vector2Tuple((c * e - b * f) / q,
752
- (a * f - c * d) / q, name=trilaterate2d2.__name__)
751
+ t = Vector2Tuple(fdot_(c, e, -b, f) / q,
752
+ fdot_(a, f, -c, d) / q, name=trilaterate2d2.__name__)
753
753
 
754
754
  if eps and eps > 0: # check distances to center vs radius
755
755
  for x, y, r in ((x1, y1, r1), (x2, y2, r2), (x3, y3, r3)):
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.10.01'
34
+ __version__ = '24.11.11'
35
35
 
36
36
  _vector2d = _MODS.into(vector2d=__name__)
37
37
 
@@ -272,7 +272,7 @@ class Vector3d(Vector3dBase):
272
272
  Circles<https://MathWorld.Wolfram.com/TangentCircles.html>}.
273
273
  '''
274
274
  try:
275
- return _vector2d._radii11ABC(self, point2, point3, useZ=True)[0]
275
+ return _vector2d._radii11ABC4(self, point2, point3, useZ=True)[0]
276
276
  except (TypeError, ValueError) as x:
277
277
  raise _xError(x, point=self, point2=point2, point3=point3)
278
278
 
@@ -497,17 +497,16 @@ def intersection3d3(start1, end1, start2, end2, eps=EPS, useZ=True,
497
497
  B{C{start2}} (Ccompass C{degrees}).
498
498
  @kwarg eps: Tolerance for skew line distance and length (C{EPS}).
499
499
  @kwarg useZ: If C{True}, use the Z components, otherwise force C{z=INT0} (C{bool}).
500
- @kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the
501
- intersection points and optional, additional B{C{Vector}}
502
- keyword arguments, otherwise B{C{start1}}'s (sub-)class.
500
+ @kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the intersection
501
+ points and optional, additional B{C{Vector}} keyword arguments,
502
+ otherwise B{C{start1}}'s (sub-)class.
503
503
 
504
- @return: An L{Intersection3Tuple}C{(point, outside1, outside2)} with
505
- C{point} an instance of B{C{Vector}} or B{C{start1}}'s (sub-)class.
504
+ @return: An L{Intersection3Tuple}C{(point, outside1, outside2)} with C{point}
505
+ an instance of B{C{Vector}} or B{C{start1}}'s (sub-)class.
506
506
 
507
507
  @note: The C{outside} values is C{0} for lines specified by point and bearing.
508
508
 
509
- @raise IntersectionError: Invalid, skew, non-co-planar or otherwise
510
- non-intersecting lines.
509
+ @raise IntersectionError: Invalid, skew, non-co-planar or otherwise non-intersecting lines.
511
510
 
512
511
  @see: U{Line-line intersection<https://MathWorld.Wolfram.com/Line-LineIntersection.html>}
513
512
  and U{line-line distance<https://MathWorld.Wolfram.com/Line-LineDistance.html>},
@@ -538,9 +537,9 @@ def intersections2(center1, radius1, center2, radius2, sphere=True, **Vector_and
538
537
  @kwarg sphere: If C{True}, compute the center and radius of the intersection of
539
538
  two spheres. If C{False}, ignore the C{z}-component and compute
540
539
  the intersection of two circles (C{bool}).
541
- @kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the
542
- intersection points and optional, additional B{C{Vector}}
543
- keyword arguments, otherwise B{C{center1}}'s (sub-)class.
540
+ @kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the intersection
541
+ points and optionally, additional B{C{Vector}} keyword arguments,
542
+ otherwise B{C{center1}}'s (sub-)class.
544
543
 
545
544
  @return: If C{B{sphere} is True}, a 2-tuple of the C{center} and C{radius} of the
546
545
  intersection of the I{spheres}. For abutting circles, C{radius} is C{0.0}
@@ -725,12 +724,12 @@ def nearestOn6(point, points, closed=False, useZ=True, **Vector_and_kwds): # ep
725
724
  @kwarg closed: Optionally, close the path or polygon (C{bool}).
726
725
  @kwarg useZ: If C{True}, use the Z components, otherwise force C{z=INT0} (C{bool}).
727
726
  @kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the closest
728
- point and optional, additional B{C{Vector}} keyword
729
- arguments, otherwise B{C{point}}'s (sub-)class.
727
+ point and optionally, additional B{C{Vector}} keyword arguments,
728
+ otherwise B{C{point}}'s (sub-)class.
730
729
 
731
730
  @return: A L{NearestOn6Tuple}C{(closest, distance, fi, j, start, end)} with the
732
731
  C{closest}, the C{start} and the C{end} point each an instance of the
733
- B{C{Vector}} keyword argument of if {B{Vector}=None} or not specified,
732
+ B{C{Vector}} keyword argument or if {B{Vector}=None} or not specified,
734
733
  an instance of the reference B{C{point}}'s (sub-)class.
735
734
 
736
735
  @raise PointsError: Insufficient number of B{C{points}}
@@ -854,17 +853,16 @@ def trilaterate3d2(center1, radius1, center2, radius2, center3, radius3,
854
853
  and C{z}).
855
854
  @kwarg eps: Pertubation tolerance (C{scalar}), same units as C{x},
856
855
  C{y} and C{z} or C{None} for no pertubations.
857
- @kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return
858
- the trilateration and optional, additional
859
- B{C{Vector}} keyword arguments, otherwise
860
- the B{C{center1}}'s (sub-)class.
856
+ @kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the
857
+ trilateration and optionally, additional B{C{Vector}}
858
+ keyword arguments, otherwise B{C{center1}}'s (sub-)class.
861
859
 
862
860
  @return: 2-Tuple with two trilaterated points, each a B{C{Vector}}
863
861
  instance. Both points are the same instance if all three
864
862
  spheres abut/intersect in a single point.
865
863
 
866
- @raise ImportError: Package C{numpy} not found, not installed or
867
- older than version 1.10.
864
+ @raise ImportError: Package C{numpy} not found, not installed or older
865
+ than version 1.10.
868
866
 
869
867
  @raise IntersectionError: Near-concentric, -colinear, too distant or
870
868
  non-intersecting spheres.
pygeodesy/vector3dBase.py CHANGED
@@ -4,7 +4,7 @@
4
4
  u'''(INTERNAL) Private, 3-D vector base class C{Vector3dBase}.
5
5
 
6
6
  A pure Python implementation of vector-based functions by I{(C) Chris Veness
7
- 2011-2015} published under the same MIT Licence**, see U{Vector-based geodesy
7
+ 2011-2024} published under the same MIT Licence**, see U{Vector-based geodesy
8
8
  <https://www.Movable-Type.co.UK/scripts/latlong-vectors.html>}.
9
9
  '''
10
10
 
@@ -14,10 +14,9 @@ from pygeodesy.constants import EPS, EPS0, INT0, PI, PI2, _copysignINF, \
14
14
  _float0, isnear0, isnear1, isneg0, \
15
15
  _pos_self, _1_0
16
16
  from pygeodesy.errors import CrossError, VectorError, _xcallable, _xError
17
- from pygeodesy.fmath import euclid_, fdot, hypot_, hypot2_
17
+ from pygeodesy.fmath import euclid_, fdot, fdot_, hypot_, hypot2_ # _MODS.fmath.fma
18
18
  from pygeodesy.interns import _coincident_, _colinear_, _COMMASPACE_, _xyz_
19
- from pygeodesy.lazily import _ALL_LAZY, _ALL_DOCS, _ALL_MODS as _MODS, \
20
- _sys_version_info2
19
+ from pygeodesy.lazily import _ALL_LAZY, _ALL_DOCS, _ALL_MODS as _MODS
21
20
  from pygeodesy.named import _NamedBase, _NotImplemented, _xother3
22
21
  # from pygeodesy.namedTuples import Vector3Tuple # _MODS
23
22
  from pygeodesy.props import deprecated_method, Property, Property_RO, \
@@ -29,7 +28,7 @@ from pygeodesy.utily import sincos2, atan2, fabs
29
28
  from math import ceil as _ceil, floor as _floor, trunc as _trunc
30
29
 
31
30
  __all__ = _ALL_LAZY.vector3dBase
32
- __version__ = '24.08.18'
31
+ __version__ = '24.11.10'
33
32
 
34
33
 
35
34
  class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
@@ -142,10 +141,6 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
142
141
  '''Not implemented.'''
143
142
  return _NotImplemented(self, other)
144
143
 
145
- def __format__(self, *other): # PYCHOK no cover
146
- '''Not implemented.'''
147
- return _NotImplemented(self, *other)
148
-
149
144
  def __ge__(self, other):
150
145
  '''Is this vector longer than or equal to an other vector?
151
146
 
@@ -421,7 +416,7 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
421
416
  '''
422
417
  return self._mapped(_trunc)
423
418
 
424
- if _sys_version_info2 < (3, 0): # PYCHOK no cover
419
+ if _MODS.sys_version_info2 < (3, 0): # PYCHOK no cover
425
420
  # <https://docs.Python.org/2/library/operator.html#mapping-operators-to-functions>
426
421
  __div__ = __truediv__
427
422
  __idiv__ = __itruediv__
@@ -505,9 +500,9 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
505
500
  '''
506
501
  X, Y, Z = self.others(other).xyz3
507
502
  x, y, z = self.xyz3
508
- xyz = ((y * Z - z * Y),
509
- (z * X - x * Z),
510
- (x * Y - y * X))
503
+ xyz = (fdot_(y, Z, -z, Y),
504
+ fdot_(z, X, -x, Z),
505
+ fdot_(x, Y, -y, X))
511
506
 
512
507
  if raiser and self.crosserrors and eps0 > 0 \
513
508
  and max(map(fabs, xyz)) < eps0:
@@ -824,11 +819,12 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
824
819
  '''
825
820
  return self._plus(*_xyz3(self.plus_, other_x, *y_z))
826
821
 
827
- def rotate(self, axis, theta):
822
+ def rotate(self, axis, theta, fma=False):
828
823
  '''Rotate this vector around an axis by a specified angle.
829
824
 
830
825
  @arg axis: The axis being rotated around (L{Vector3d}).
831
826
  @arg theta: The angle of rotation (C{radians}).
827
+ @kwarg fma: If C{True}, use fused-multiply-add (C{bool}).
832
828
 
833
829
  @return: New, rotated vector (L{Vector3d}).
834
830
 
@@ -847,17 +843,23 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
847
843
  bx, by, bz = r.times(d).xyz3
848
844
  sx, sy, sz = r.times(s).xyz3
849
845
 
850
- x = fdot(p, ax * bx + c, ax * by - sz, ax * bz + sy)
851
- y = fdot(p, ay * bx + sz, ay * by + c, ay * bz - sx)
852
- z = fdot(p, az * bx - sy, az * by + sx, az * bz + c)
846
+ if fma:
847
+ _fma = _MODS.fmath.fma
848
+ else:
849
+ def _fma(a, b, c):
850
+ return a * b + c
851
+
852
+ x = fdot(p, _fma(ax, bx, c), _fma(ax, by, -sz), _fma(ax, bz, sy))
853
+ y = fdot(p, _fma(ay, bx, sz), _fma(ay, by, c), _fma(ay, bz, -sx))
854
+ z = fdot(p, _fma(az, bx, -sy), _fma(az, by, sx), _fma(az, bz, c))
853
855
  else: # unrotated
854
856
  x, y, z = self.xyz3
855
857
  return self.classof(x, y, z)
856
858
 
857
859
  @deprecated_method
858
- def rotateAround(self, axis, theta): # PYCHOK no cover
860
+ def rotateAround(self, axis, theta):
859
861
  '''DEPRECATED, use method C{rotate}.'''
860
- return self.rotate(axis, theta)
862
+ return self.rotate(axis, theta) # PYCHOK no cover
861
863
 
862
864
  def times(self, factor):
863
865
  '''Multiply this vector by a scalar.
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.08.13'
39
+ __version__ = '24.11.06'
40
40
 
41
41
  # _FalseEasting = 0 # false Easting (C{meter})
42
42
  # _FalseNorthing = 0 # false Northing (C{meter})
@@ -314,10 +314,10 @@ def toWm(latlon, lon=None, earth=R_MA, Wm=Wm, **name_Wm_kwds_radius):
314
314
  L{a_f2Tuple}, L{Ellipsoid} or L{Ellipsoid2}), overridden
315
315
  by B{C{latlon}}'s datum if present.
316
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,
317
+ @kwarg name_Wm_kwds_radius: Optional C{B{name}=NN} (C{str}), optionally,
318
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}}.
319
+ None} and DEPRECATED keyword argument C{B{radius}=earth}, use
320
+ B{C{earth}}.
321
321
 
322
322
  @return: The WM coordinate (B{C{Wm}}) or if C{B{Wm} is None}, an
323
323
  L{EasNorRadius3Tuple}C{(easting, northing, radius)}.
pygeodesy/wgrs.py CHANGED
@@ -32,7 +32,7 @@ from pygeodesy.utily import ft2m, m2ft, m2NM
32
32
  from math import floor
33
33
 
34
34
  __all__ = _ALL_LAZY.wgrs
35
- __version__ = '24.08.15'
35
+ __version__ = '24.11.06'
36
36
 
37
37
  _Base = 10
38
38
  _BaseLen = 4
@@ -212,9 +212,9 @@ class Georef(Str):
212
212
 
213
213
  @kwarg LatLon: Class to use (C{LatLon}) or C{None}.
214
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}.
215
+ @kwarg name_LatLon_kwds: Optional C{B{name}=NN} (C{str}) and optionally,
216
+ additional B{C{LatLon}} keyword arguments, ignored if C{B{LatLon}
217
+ is None}.
218
218
 
219
219
  @return: This georef location (B{C{LatLon}}) or if C{B{LatLon} is None},
220
220
  a L{LatLon3Tuple}C{(lat, lon, height)}.
@@ -1,118 +0,0 @@
1
- pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
- pygeodesy/__init__.py,sha256=44KoRZEfeBEA_093Z9NhDUB-NZ2etmdLYWMcKPEtj30,42477
3
- pygeodesy/__main__.py,sha256=OupAiDFT_RXFw1Lh6C8bVG9NaonV_Wy6jibN_hA4aJg,5442
4
- pygeodesy/albers.py,sha256=JXqeWAteV2N601e5R-D7bCsa8qAYv3oWm7M3R4uszXM,31078
5
- pygeodesy/azimuthal.py,sha256=erI5DTM0-Nr5YC2LnBTVNbUKlrnnXJUwKe0SCQ7-Soc,50223
6
- pygeodesy/basics.py,sha256=JPANq5maTBqd4PhHIO4TLCfl9SG0D0n6OiUF421p1bQ,30163
7
- pygeodesy/booleans.py,sha256=gEh1bWdHEoSv-4yp0M9JE73xa4DLwLllgKC9d0mNLwM,73460
8
- pygeodesy/cartesianBase.py,sha256=jzPJR4_3Yp5jmK7A5inGOXskDebs7YMdjQzINHjzkP8,46935
9
- pygeodesy/clipy.py,sha256=hzI6IutTRkbssjPPgAjXv9OcgCIIZchjnMWaHin4YAU,27728
10
- pygeodesy/constants.py,sha256=E3ANfteZK05I89wbGP4Noxms0pT2TKBOyaVSv8jmlxg,19673
11
- pygeodesy/css.py,sha256=rPr5EcGm_blVt72h-851ytpVxdPhx1MEqqGs3Ppx3eI,25651
12
- pygeodesy/datums.py,sha256=-m9-cvUVOaJ92eeFgc3O54lel3WqnVYcS7o6WCXkNyw,34043
13
- pygeodesy/dms.py,sha256=QxiRtyc8QSiW-egm6Mrcrgmi_deWz3YnYwIm82JS4TU,44443
14
- pygeodesy/ecef.py,sha256=_yy_TIUGsXmEZ7aRcmchbJwTp7x__edx6EPiS3Xznes,59587
15
- pygeodesy/elevations.py,sha256=4FuVcVNb_D09gmcvUlck344N4f7Jms76SIRrdutvKjk,10801
16
- pygeodesy/ellipsoidalBase.py,sha256=IDu0-cKGhkCk3Aj16DJXt2gxjGYsFcjSTrvwG5GbATs,55385
17
- pygeodesy/ellipsoidalBaseDI.py,sha256=wsUcdVdp1Tcs8IOS6bM773tAShIOqt_yscRFU2oiehI,38397
18
- pygeodesy/ellipsoidalExact.py,sha256=wmIGgZyd0cvjswP4KOeDuEcuagjwQQRRq1cmseRoD-Q,16946
19
- pygeodesy/ellipsoidalGeodSolve.py,sha256=fAT4b3HXkM6i1W_C0rb4vbSxZqr4c6rS7PIvGF2ad7s,16666
20
- pygeodesy/ellipsoidalKarney.py,sha256=qvJa8kZ4SgaRR2UbjtkcRxw_CRbwhXoUT4Dn_6DJ6Ag,18721
21
- pygeodesy/ellipsoidalNvector.py,sha256=rzjFx-y1Z2apUK4yYelcZMYelYFTU-diFGI6o-nxkUk,30039
22
- pygeodesy/ellipsoidalVincenty.py,sha256=hSQ7s6QGDJSsrZvP7KwM1Q4wJz0YjyFjODF6XPGZ5WQ,25946
23
- pygeodesy/ellipsoids.py,sha256=i7piclEb17hYt5wqL7Q0p5qLuRVvz3yonUSUcvmiozc,108005
24
- pygeodesy/elliptic.py,sha256=M30EjB1Il_5Y8E94rN5hz4zPhYBQNoCo5Lj0TvCkiRE,45010
25
- pygeodesy/epsg.py,sha256=Vq_M1g7Z0x5Noqsmt6OCQkPdYJj4jpWObtixL5pAjDA,8220
26
- pygeodesy/errors.py,sha256=ATfeHd7mnox2MQ1xxEMLCY5d6hKH7h86iBR-CzVWfS4,32042
27
- pygeodesy/etm.py,sha256=G6dtN1LQAoft5mcUoxVgxHPnl9s8NBsXl-IlS8WP7jo,45328
28
- pygeodesy/fmath.py,sha256=acNpvowoCYKH6bmg6KWOTGHE4qVE6yam80niXQoQrKk,36484
29
- pygeodesy/formy.py,sha256=FvbkYhJ-iIOFR-IOImwm0I_dgXM9CfnWrJK_IvBX0SU,75082
30
- pygeodesy/frechet.py,sha256=F6TYbOEYSOFcll6nvp4GhqafUWXh1umAKb1QaMYQtuM,34372
31
- pygeodesy/fstats.py,sha256=8Vn1cwlgCQD444WX8FfAEC-AXQcJDeI9_i14Mizp59U,28288
32
- pygeodesy/fsums.py,sha256=p08RcOrs8kpVeG4GXLyfywP6GEU7vFNr9rdKOj9Er44,102945
33
- pygeodesy/gars.py,sha256=KRlyZUv1euEl7ZkDYSZG913GAfFMRG2m2hp37ObYY_Y,11829
34
- pygeodesy/geodesici.py,sha256=I9e7saiO5lRodOXJk5DSQxladVcGfT0FR6KJSJVCw7Y,75015
35
- pygeodesy/geodesicw.py,sha256=oEs96Epw839BH3rVpxVdpXuQRBudbOftUsSBUid8fcc,28710
36
- pygeodesy/geodsolve.py,sha256=_Vlb1c3j8n7dW99AinJ2HA_DiV4YnlRjbBY7Ha8AvEk,23553
37
- pygeodesy/geohash.py,sha256=CHJUhvV26PLpjkaTwF4fS42ZRSSsnpH2zyGvadPxqG4,40201
38
- pygeodesy/geoids.py,sha256=EWKfkmdl2GSL0eQCr79ndDwSGXYOPChGokxocCy7YuM,82371
39
- pygeodesy/hausdorff.py,sha256=-aKtRbMefDSoIk4V3wCvNrXPZ7Bqk1P6-XuGuI7o8Zc,34770
40
- pygeodesy/heights.py,sha256=Gv3b1xC7I0tBvTO-DdmWVW8A3ZV3RKxY3jveUUZso38,42909
41
- pygeodesy/internals.py,sha256=QgxNtfirxCsfQCrnLiIWjVVhI70YF9jT4tQrl6K1tp4,22551
42
- pygeodesy/interns.py,sha256=XvNyWODsUd8_vBLX9XLmcU9Bq97L0nahhF-gvLivzKA,23278
43
- pygeodesy/iters.py,sha256=xPH0ytomvJeKHu717Fjzi3QbRrEikO6n7vqkY_IDz1k,20311
44
- pygeodesy/karney.py,sha256=ZkZhbsieGnr2cAIXjzmK-9OJdh72Hjp6Hya1wIoVP3c,38913
45
- pygeodesy/ktm.py,sha256=eUWYKhoPou1AiWiNz-xI8eDr-q-RvKDY6newAmYP26Q,27239
46
- pygeodesy/latlonBase.py,sha256=kCK6IcVg4oeGPYkIU0rgKbZLCRo36wC9NtY5OKBlpeQ,79106
47
- pygeodesy/lazily.py,sha256=NpWnTIAOkIxMorgUMvyR7d3D65-55DqaU98eBnwxcrQ,47411
48
- pygeodesy/lcc.py,sha256=oDooTzFHnqsMtSKmmmfEbypHpdlPltfo7Mt0pAO4-_A,25669
49
- pygeodesy/ltp.py,sha256=ZMdfJHLKeDHSoymmjWfoAZTtrdoADf0O6WccRf53L2w,50745
50
- pygeodesy/ltpTuples.py,sha256=oNTxtjxmHveMDQvPdQCHl-JzSJJGb1jFRrF8SEG_Ojw,58480
51
- pygeodesy/mgrs.py,sha256=B3_BATbbCwBXKcxRtyX4PKScyWl0SmhAeXF8CVoc0_A,29903
52
- pygeodesy/named.py,sha256=-uqZk54BC4rFtuVh4LwfWty704DVPLEIwI1EzpNImIg,52350
53
- pygeodesy/namedTuples.py,sha256=e0rV1Zb2tbx8fztXcSkUFsRTmZtye8B5i_Hi4vBUndU,28758
54
- pygeodesy/nvectorBase.py,sha256=rClYu26Bof9DsM1F60i0eccktNo8xYA_vkThwoY7N4o,28644
55
- pygeodesy/osgr.py,sha256=3Qon_oWuVrIb1vYnd3ae3L5MDkjp_tngyVdiYHuL4to,30821
56
- pygeodesy/points.py,sha256=vtPQdL2kLOenIrpOdGjOYrUWsav3I1JXQEJugMv46eY,64383
57
- pygeodesy/props.py,sha256=3BIkcaEDwyhSMJle6ufBaji0R0FrD64G3nuR4tPsnrU,23819
58
- pygeodesy/resections.py,sha256=IrPHAHbF9JdBgAVd9LMgXoPgPFRkY8j1G7p0P8y8pdc,43543
59
- pygeodesy/simplify.py,sha256=vkOtO478sOjZHZBuSFvCaRh72qSDQuzXLQpMK1LKyYI,25232
60
- pygeodesy/solveBase.py,sha256=oI_-FFjSPI1_yQ598hF6HFKUa4tLsAfbnWtKoQ-TJgE,19206
61
- pygeodesy/sphericalBase.py,sha256=bDVuArfePzqcothiTTkyisUGrMDTallXKROjihotcn8,32239
62
- pygeodesy/sphericalNvector.py,sha256=Ip0jPv-MXBoHf3f-uXitGqiMz2xynDtE15OSJEl268Q,56913
63
- pygeodesy/sphericalTrigonometry.py,sha256=cfXuJaJJ6jrJZxQ5anFHhz3ZbgkAB7aiMfuyMtJXqsE,64064
64
- pygeodesy/streprs.py,sha256=owtyWBlieE4SOuS3Aa7D6-lzYf2mtmJ7PYs351fAGJ4,23453
65
- pygeodesy/trf.py,sha256=CRFHmu0lFNtc41fddXavEkHmgnTFWEqR4RTFodcFKsw,119022
66
- pygeodesy/triaxials.py,sha256=a9vdXmSqUXOneL0WpLriEFwNMW9EB6MpVbKYXuw_wi8,62562
67
- pygeodesy/units.py,sha256=gHN-uzsOwIYjyhtWs0th0VHNY-fOiUiZo9G1cZi0oXg,35272
68
- pygeodesy/unitsBase.py,sha256=ZZ-VDntCOTjSerQJf9aaLE_J0lozrpmUhynRBaCtg24,14060
69
- pygeodesy/ups.py,sha256=zapIvzoVuj_FDGC6sr8O8ynPhfqXwUg-EFCVnJdM9Eo,23329
70
- pygeodesy/utily.py,sha256=Zb6L9unzHHhp67znmQLLdizvyX6p4eczR1PDtcyWH-s,36189
71
- pygeodesy/utm.py,sha256=lCp7mNEaJNrAYnbdPaNUKkhbsX_GdssTEkp68uYdMLI,31091
72
- pygeodesy/utmups.py,sha256=g2Z_aEOt6fhV9f4fASlW4_K_O_P4zBsBbWfQV11mIKo,13196
73
- pygeodesy/utmupsBase.py,sha256=S4s1Sehj9jSMy-XRxwtwVstG3QhyVt924V0FHu0cPIk,18730
74
- pygeodesy/vector2d.py,sha256=O9a3uRIREL2k7G-pnpuacjBcAlKg75MnokjtfJB-nBs,39659
75
- pygeodesy/vector3d.py,sha256=PaiuJgHCf0bO8nhOai42ut2zk0_DskSNCrOtCuHxw6U,42673
76
- pygeodesy/vector3dBase.py,sha256=UOy6W-r8nTZTOMvxUgFQN6cFQo9H4zw0efqtcSpyy8s,36154
77
- pygeodesy/webmercator.py,sha256=fFQtTxIsjOE35_nX_mAgFv1Eov7AdcsCBjT2ONm3qmI,14934
78
- pygeodesy/wgrs.py,sha256=6dO31uMKF-t-uQz58hdutilE2A5msOs5Bybq5Uq3qgk,15453
79
- pygeodesy/auxilats/_CX_4.py,sha256=WsxGrwqEhdWBx-K5ocwwDuatIkDTZB-FwrqQITbcNU0,6829
80
- pygeodesy/auxilats/_CX_6.py,sha256=PsaVhzOdCDyRuZ-SH6ZwbWrf_rAkidtwLuAQTlvv5XQ,11277
81
- pygeodesy/auxilats/_CX_8.py,sha256=mxk12xvzOMNimyHM74fn9sFB0aUSBLojYqtenYhAekQ,18899
82
- pygeodesy/auxilats/_CX_Rs.py,sha256=z7UXI7KUyURE44wGuLJE2on6SlgAZzfbay4jkbpON1U,7967
83
- pygeodesy/auxilats/__init__.py,sha256=ywIs1e5wes3qq3dvCvX0VdxoGtFNQwBmY8Ar-07f9Kg,2881
84
- pygeodesy/auxilats/__main__.py,sha256=pb0GWDrrg440xNvHvPAz-UTGrLu2uXp4g-RlbkW7P6c,3171
85
- pygeodesy/auxilats/auxAngle.py,sha256=nr-su1loEbv1uVxg7_cEjH0M1DLyodsulPfq4NVT5kY,16745
86
- pygeodesy/auxilats/auxDLat.py,sha256=3sq7Wc-ykpVbldNh10IZ3tIlJ7DcQFDlmZ4nOhJEgo0,10969
87
- pygeodesy/auxilats/auxDST.py,sha256=BSHR0M3hQBR1KjF_BUJHrNzGXr2PblYXUQsMD5L1Kcc,10468
88
- pygeodesy/auxilats/auxLat.py,sha256=7uxe7mtkY-9uSI3z2wmUNBqzCKyFujIpJU1v-8yDgds,31934
89
- pygeodesy/auxilats/auxily.py,sha256=X1y4_qC40Th7CgmZILqoQCLAUQoyORcR5W-bN4X0W4I,7882
90
- pygeodesy/deprecated/__init__.py,sha256=jSwmipBzyIOYIQhiZxZwsIQlqMXPfNaPfVpppBu7zkw,2815
91
- pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8,1655
92
- pygeodesy/deprecated/classes.py,sha256=gktUr5qYXCm8ztH6lfzFgaHKqMiw1tHc1Vw6i6DEvNA,12377
93
- pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
94
- pygeodesy/deprecated/datum.py,sha256=s8Hke053RucP5ACvg3gdX8weQfGM0x59pQyHpY11eOs,1875
95
- pygeodesy/deprecated/functions.py,sha256=-spa_5k7yRWGd7s4UBObzf9QpAM0o-tgP4S0wX876JY,14122
96
- pygeodesy/deprecated/nvector.py,sha256=_dZf84RdmPr7e7i8Yi683R-8Mqn0ipTqIsDhNl29hGo,2117
97
- pygeodesy/deprecated/rhumbBase.py,sha256=d7YKW--dnRpobB2CSvhFsntWF0B5-HYJqID2pv5lD5k,1375
98
- pygeodesy/deprecated/rhumbaux.py,sha256=n29xazYMbVG4MJkLjAGu8B88bbcFF5xnvuj9xSxjfIk,1428
99
- pygeodesy/deprecated/rhumbsolve.py,sha256=QprjRfo5T1_C4ovaa1cffAcmNczzkhGIfmybAup9a9w,1431
100
- pygeodesy/deprecated/rhumbx.py,sha256=OS0p_meaoVrpZe5UhK6qZljjlrGpL0pCHWw8gofw7ks,1425
101
- pygeodesy/geodesicx/_C4_24.py,sha256=r5-So2i4z-OFY6NFYERUvhtxYHaYphPRgUUC3PWC5K4,90707
102
- pygeodesy/geodesicx/_C4_27.py,sha256=Pkpns4kBAHxBcvi0f9l_3GQeE6qcrl123DccEQ593To,134215
103
- pygeodesy/geodesicx/_C4_30.py,sha256=cseNhROi7DHi77kgdrXXDXO6yiiq00DNcX0HOVf2Rpg,201921
104
- pygeodesy/geodesicx/__init__.py,sha256=Z-Pq7wWevRZeMdG2qqL7OE1b8hRUubyZE2w1GqF1OzI,2478
105
- pygeodesy/geodesicx/__main__.py,sha256=wsJPK6lW_PsgVCR1ZJksgGhwxwrsMGSXhYkhpjbknTc,4188
106
- pygeodesy/geodesicx/gx.py,sha256=yeNpMQbw_uWfs4KOQX8RMAQt6WNsG3zsGgmZRVgbQIk,60612
107
- pygeodesy/geodesicx/gxarea.py,sha256=RbxhU4oXY6koFSCyJk9gsMlewaaTfXiGBAroexpEYjg,19423
108
- pygeodesy/geodesicx/gxbases.py,sha256=AyvsjiSENqikJK6qpm55rDkUlBSmTDk_-FoqzzMFX1M,6130
109
- pygeodesy/geodesicx/gxline.py,sha256=zNQF8lz9caHZlsUcL8NfjG02KIza39Q6Qd6XizDp_UI,27537
110
- pygeodesy/rhumb/__init__.py,sha256=G8qo1yrLhKfd0yWiVUdJbIPj3udcmsgqKZqFD0PYfeA,2207
111
- pygeodesy/rhumb/aux_.py,sha256=XN0zlNwhU525NdcHko-G_Igvc7-mzXbT7ypcVIt5ADw,16048
112
- pygeodesy/rhumb/bases.py,sha256=awpP60K6EOzS753oXM-h9S6paS6FwoCnco8Zt8n81jY,54162
113
- pygeodesy/rhumb/ekx.py,sha256=JsmdCatWKqsffF8jCh4HDu5IKt_kHq1qUdmP1LMuofY,24044
114
- pygeodesy/rhumb/solve.py,sha256=d4RujlW8B7BFAHlrwfj2Bup-uXZZTpgKWgI2JJBqUGc,24059
115
- PyGeodesy-24.10.10.dist-info/METADATA,sha256=J8Ssw_oRSiu74syF_P35vCfWG-jWa6tTyEg6p0X4mMo,19891
116
- PyGeodesy-24.10.10.dist-info/WHEEL,sha256=fS9sRbCBHs7VFcwJLnLXN1MZRR0_TVTxvXKzOnaSFs8,110
117
- PyGeodesy-24.10.10.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
118
- PyGeodesy-24.10.10.dist-info/RECORD,,