pygeodesy 24.10.24__py2.py3-none-any.whl → 24.12.12__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 (118) hide show
  1. {PyGeodesy-24.10.24.dist-info → PyGeodesy-24.12.12.dist-info}/METADATA +6 -6
  2. PyGeodesy-24.12.12.dist-info/RECORD +118 -0
  3. {PyGeodesy-24.10.24.dist-info → PyGeodesy-24.12.12.dist-info}/WHEEL +1 -1
  4. pygeodesy/__init__.py +5 -5
  5. pygeodesy/__main__.py +1 -1
  6. pygeodesy/albers.py +5 -5
  7. pygeodesy/auxilats/_CX_4.py +1 -1
  8. pygeodesy/auxilats/_CX_6.py +1 -1
  9. pygeodesy/auxilats/_CX_8.py +1 -1
  10. pygeodesy/auxilats/_CX_Rs.py +1 -1
  11. pygeodesy/auxilats/__init__.py +1 -1
  12. pygeodesy/auxilats/__main__.py +1 -1
  13. pygeodesy/auxilats/auxAngle.py +5 -5
  14. pygeodesy/auxilats/auxDLat.py +6 -6
  15. pygeodesy/auxilats/auxDST.py +2 -2
  16. pygeodesy/auxilats/auxLat.py +5 -5
  17. pygeodesy/auxilats/auxily.py +2 -2
  18. pygeodesy/azimuthal.py +55 -65
  19. pygeodesy/basics.py +35 -34
  20. pygeodesy/booleans.py +37 -37
  21. pygeodesy/cartesianBase.py +26 -65
  22. pygeodesy/clipy.py +1 -1
  23. pygeodesy/constants.py +7 -7
  24. pygeodesy/css.py +8 -9
  25. pygeodesy/datums.py +1 -1
  26. pygeodesy/deprecated/__init__.py +2 -2
  27. pygeodesy/deprecated/bases.py +1 -1
  28. pygeodesy/deprecated/classes.py +10 -10
  29. pygeodesy/deprecated/consterns.py +1 -1
  30. pygeodesy/deprecated/datum.py +1 -1
  31. pygeodesy/deprecated/functions.py +23 -13
  32. pygeodesy/deprecated/nvector.py +1 -1
  33. pygeodesy/deprecated/rhumbBase.py +1 -1
  34. pygeodesy/deprecated/rhumbaux.py +1 -1
  35. pygeodesy/deprecated/rhumbsolve.py +1 -1
  36. pygeodesy/deprecated/rhumbx.py +1 -1
  37. pygeodesy/dms.py +1 -1
  38. pygeodesy/ecef.py +63 -69
  39. pygeodesy/elevations.py +1 -1
  40. pygeodesy/ellipsoidalBase.py +106 -121
  41. pygeodesy/ellipsoidalBaseDI.py +115 -119
  42. pygeodesy/ellipsoidalExact.py +36 -38
  43. pygeodesy/ellipsoidalGeodSolve.py +1 -1
  44. pygeodesy/ellipsoidalKarney.py +1 -1
  45. pygeodesy/ellipsoidalNvector.py +1 -1
  46. pygeodesy/ellipsoidalVincenty.py +6 -5
  47. pygeodesy/ellipsoids.py +7 -8
  48. pygeodesy/elliptic.py +6 -6
  49. pygeodesy/epsg.py +1 -1
  50. pygeodesy/errors.py +25 -25
  51. pygeodesy/etm.py +84 -76
  52. pygeodesy/fmath.py +54 -51
  53. pygeodesy/formy.py +74 -106
  54. pygeodesy/frechet.py +1 -1
  55. pygeodesy/fstats.py +1 -1
  56. pygeodesy/fsums.py +82 -72
  57. pygeodesy/gars.py +1 -1
  58. pygeodesy/geodesici.py +4 -4
  59. pygeodesy/geodesicw.py +16 -15
  60. pygeodesy/geodesicx/_C4_24.py +2 -2
  61. pygeodesy/geodesicx/_C4_27.py +2 -2
  62. pygeodesy/geodesicx/_C4_30.py +2 -2
  63. pygeodesy/geodesicx/__init__.py +3 -3
  64. pygeodesy/geodesicx/__main__.py +1 -1
  65. pygeodesy/geodesicx/gx.py +6 -5
  66. pygeodesy/geodesicx/gxarea.py +2 -2
  67. pygeodesy/geodesicx/gxbases.py +2 -2
  68. pygeodesy/geodesicx/gxline.py +16 -12
  69. pygeodesy/geodsolve.py +8 -17
  70. pygeodesy/geohash.py +1 -1
  71. pygeodesy/geoids.py +6 -6
  72. pygeodesy/hausdorff.py +1 -1
  73. pygeodesy/heights.py +3 -3
  74. pygeodesy/internals.py +64 -80
  75. pygeodesy/interns.py +2 -3
  76. pygeodesy/iters.py +1 -1
  77. pygeodesy/karney.py +4 -4
  78. pygeodesy/ktm.py +20 -21
  79. pygeodesy/latlonBase.py +296 -346
  80. pygeodesy/lazily.py +15 -15
  81. pygeodesy/lcc.py +5 -5
  82. pygeodesy/ltp.py +55 -59
  83. pygeodesy/ltpTuples.py +208 -192
  84. pygeodesy/mgrs.py +9 -10
  85. pygeodesy/named.py +153 -3
  86. pygeodesy/namedTuples.py +58 -7
  87. pygeodesy/nvectorBase.py +122 -105
  88. pygeodesy/osgr.py +10 -13
  89. pygeodesy/points.py +1 -1
  90. pygeodesy/props.py +3 -3
  91. pygeodesy/resections.py +26 -26
  92. pygeodesy/rhumb/__init__.py +2 -2
  93. pygeodesy/rhumb/aux_.py +2 -2
  94. pygeodesy/rhumb/bases.py +2 -2
  95. pygeodesy/rhumb/ekx.py +4 -4
  96. pygeodesy/rhumb/solve.py +4 -4
  97. pygeodesy/simplify.py +291 -403
  98. pygeodesy/solveBase.py +1 -1
  99. pygeodesy/sphericalBase.py +1 -1
  100. pygeodesy/sphericalNvector.py +84 -127
  101. pygeodesy/sphericalTrigonometry.py +66 -71
  102. pygeodesy/streprs.py +10 -5
  103. pygeodesy/trf.py +1 -1
  104. pygeodesy/triaxials.py +23 -16
  105. pygeodesy/units.py +17 -17
  106. pygeodesy/unitsBase.py +1 -1
  107. pygeodesy/ups.py +4 -4
  108. pygeodesy/utily.py +202 -145
  109. pygeodesy/utm.py +10 -10
  110. pygeodesy/utmups.py +1 -1
  111. pygeodesy/utmupsBase.py +1 -1
  112. pygeodesy/vector2d.py +17 -17
  113. pygeodesy/vector3d.py +32 -23
  114. pygeodesy/vector3dBase.py +22 -19
  115. pygeodesy/webmercator.py +5 -5
  116. pygeodesy/wgrs.py +5 -5
  117. PyGeodesy-24.10.24.dist-info/RECORD +0 -118
  118. {PyGeodesy-24.10.24.dist-info → PyGeodesy-24.12.12.dist-info}/top_level.txt +0 -0
@@ -24,32 +24,32 @@ from pygeodesy.fsums import fsumf_, Fmt
24
24
  from pygeodesy.interns import _COMMASPACE_, _datum_, _no_, _phi_
25
25
  from pygeodesy.interns import _ellipsoidal_, _spherical_ # PYCHOK used!
26
26
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
27
- from pygeodesy.named import _name2__, _Pass
27
+ from pygeodesy.named import _name2__, _NamedLocal, _Pass
28
28
  from pygeodesy.namedTuples import LatLon4Tuple, _NamedTupleTo , Vector3Tuple, \
29
29
  Vector4Tuple, Bearing2Tuple # PYCHOK .sphericalBase
30
30
  # from pygeodesy.nvectorBase import _N_vector # _MODS
31
31
  from pygeodesy.props import deprecated_method, Property, Property_RO, property_doc_, \
32
- property_RO, property_ROnce, _update_all
32
+ property_RO, _update_all
33
33
  # from pygeodesy,resections import cassini, collins5, pierlot, pierlotx, \
34
34
  # tienstra7 # _MODS
35
35
  # from pygeodesy.streprs import Fmt # from .fsums
36
36
  # from pygeodesy.triaxials import Triaxial_ # _MODS
37
37
  from pygeodesy.units import Degrees, Height, _heigHt, _isMeter, Meter, Radians
38
- from pygeodesy.utily import acos1, sincos2d, sincos2_, atan2, degrees, radians
38
+ from pygeodesy.utily import acos1, atan2, sincos2d, sincos2_, degrees, radians
39
39
  from pygeodesy.vector3d import Vector3d, _xyzhdlln4
40
40
  # from pygeodesy.vector3dBase import _xyz3 # _MODS
41
41
  # from pygeodesy import ltp # _MODS
42
42
 
43
- # from math import atan2, degrees, fabs, radians, sqrt # from .fmath, .utily
43
+ # from math import degrees, fabs, radians, sqrt # from .fmath, .utily
44
44
 
45
45
  __all__ = _ALL_LAZY.cartesianBase
46
- __version__ = '24.10.12'
46
+ __version__ = '24.12.04'
47
47
 
48
48
  _r_ = 'r'
49
49
  _theta_ = 'theta'
50
50
 
51
51
 
52
- class CartesianBase(Vector3d):
52
+ class CartesianBase(Vector3d, _NamedLocal):
53
53
  '''(INTERNAL) Base class for ellipsoidal and spherical C{Cartesian}.
54
54
  '''
55
55
  _datum = None # L{Datum}, to be overriden
@@ -186,7 +186,7 @@ class CartesianBase(Vector3d):
186
186
  or L{Local9Tuple}).
187
187
  @kwarg Cartesian: Optional (geocentric) class to return the destination
188
188
  or C{None}.
189
- @kwarg name_Cartesian_kwds: Optional C{B{name}=NN} (C{str}) and optional,
189
+ @kwarg name_Cartesian_kwds: Optional C{B{name}=NN} (C{str}) and optionally,
190
190
  additional B{C{Cartesian}} keyword arguments, ignored if
191
191
  C{B{Cartesian} is None}.
192
192
 
@@ -211,12 +211,6 @@ class CartesianBase(Vector3d):
211
211
  r = Cartesian(*c, **kwds)
212
212
  return r.renamed(n) if n else r
213
213
 
214
- @property_ROnce
215
- def Ecef(self):
216
- '''Get the ECEF I{class} (L{EcefKarney}), I{once}.
217
- '''
218
- return _MODS.ecef.EcefKarney
219
-
220
214
  @Property_RO
221
215
  def _ecef9(self):
222
216
  '''(INTERNAL) Helper for L{toEcef}, L{toLocal} and L{toLtp} (L{Ecef9Tuple}).
@@ -231,14 +225,14 @@ class CartesianBase(Vector3d):
231
225
 
232
226
  def hartzell(self, los=False, earth=None):
233
227
  '''Compute the intersection of a Line-Of-Sight from this cartesian Point-Of-View
234
- (pov) and this cartesian's ellipsoid surface.
228
+ (pov) and this cartesian's C{datum} ellipsoid surface.
235
229
 
236
230
  @kwarg los: Line-Of-Sight, I{direction} to the ellipsoid (L{Los}, L{Vector3d}),
237
231
  C{True} for the I{normal, plumb} onto the surface or I{False} or
238
232
  C{None} to point to the center of the ellipsoid.
239
233
  @kwarg earth: The earth model (L{Datum}, L{Ellipsoid}, L{Ellipsoid2}, L{a_f2Tuple}
240
234
  or C{scalar} radius in C{meter}), overriding this cartesian's
241
- C{datum} ellipsoid.
235
+ datum.
242
236
 
243
237
  @return: The intersection (C{Cartesian}) with C{.height} set to the distance to
244
238
  this C{pov}.
@@ -284,7 +278,8 @@ class CartesianBase(Vector3d):
284
278
  return r
285
279
 
286
280
  def height3(self, earth=None, height=None, **Cartesian_and_kwds):
287
- '''Compute the cartesian at a height above or below this certesian's ellipsoid.
281
+ '''Compute the cartesian at a height above or below this certesian's
282
+ C{datum} ellipsoid surface.
288
283
 
289
284
  @kwarg earth: A datum, ellipsoid, triaxial ellipsoid or earth radius,
290
285
  I{overriding} this cartesian's datum (L{Datum}, L{Ellipsoid},
@@ -411,12 +406,6 @@ class CartesianBase(Vector3d):
411
406
  '''
412
407
  return self.toEcef().latlonheightdatum
413
408
 
414
- @Property_RO
415
- def _Ltp(self):
416
- '''(INTERNAL) Cache for L{toLtp}.
417
- '''
418
- return _MODS.ltp.Ltp(self._ecef9, ecef=self.Ecef(self.datum), name=self.name)
419
-
420
409
  @Property_RO
421
410
  def _N_vector(self):
422
411
  '''(INTERNAL) Get the (C{nvectorBase._N_vector_}).
@@ -696,8 +685,8 @@ class CartesianBase(Vector3d):
696
685
  def toEcef(self):
697
686
  '''Convert this cartesian to I{geodetic} (lat-/longitude) coordinates.
698
687
 
699
- @return: An L{Ecef9Tuple}C{(x, y, z, lat, lon, height,
700
- C, M, datum)} with C{C} and C{M} if available.
688
+ @return: An L{Ecef9Tuple}C{(x, y, z, lat, lon, height, C, M, datum)}
689
+ with C{C} and C{M} if available.
701
690
 
702
691
  @raise EcefError: A C{.datum} or an ECEF issue.
703
692
  '''
@@ -706,18 +695,16 @@ class CartesianBase(Vector3d):
706
695
  def toLatLon(self, datum=None, height=None, LatLon=None, **LatLon_kwds): # see .ecef.Ecef9Tuple.toDatum
707
696
  '''Convert this cartesian to a I{geodetic} (lat-/longitude) point.
708
697
 
709
- @kwarg datum: Optional datum (L{Datum}, L{Ellipsoid}, L{Ellipsoid2}
710
- or L{a_f2Tuple}).
711
- @kwarg height: Optional height, overriding the converted height
712
- (C{meter}), only if C{B{LatLon} is not None}.
713
- @kwarg LatLon: Optional class to return the geodetic point
714
- (C{LatLon}) or C{None}.
715
- @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword
716
- arguments, ignored if C{B{LatLon} is None}.
698
+ @kwarg datum: Optional datum (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}).
699
+ @kwarg height: Optional height, overriding the converted height (C{meter}), only if
700
+ C{B{LatLon} is not None}.
701
+ @kwarg LatLon: Optional class to return the geodetic point (C{LatLon}) or C{None}.
702
+ @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword arguments, ignored if
703
+ C{B{LatLon} is None}.
717
704
 
718
- @return: The geodetic point (B{C{LatLon}}) or if C{B{LatLon}
719
- is None}, an L{Ecef9Tuple}C{(x, y, z, lat, lon, height,
720
- C, M, datum)} with C{C} and C{M} if available.
705
+ @return: The geodetic point (B{C{LatLon}}) or if C{B{LatLon}is None}, an
706
+ L{Ecef9Tuple}C{(x, y, z, lat, lon, height, C, M, datum)} with C{C}
707
+ and C{M} if available.
721
708
 
722
709
  @raise TypeError: Invalid B{C{datum}} or B{C{LatLon_kwds}}.
723
710
  '''
@@ -735,32 +722,6 @@ class CartesianBase(Vector3d):
735
722
  _xdatum(r.datum, d)
736
723
  return r
737
724
 
738
- def toLocal(self, Xyz=None, ltp=None, **Xyz_kwds):
739
- '''Convert this I{geocentric} cartesian to I{local} C{X}, C{Y} and C{Z}.
740
-
741
- @kwarg Xyz: Optional class to return C{X}, C{Y} and C{Z} (L{XyzLocal},
742
- L{Enu}, L{Ned}) or C{None}.
743
- @kwarg ltp: The I{local tangent plane} (LTP) to use, overriding this
744
- cartesian's LTP (L{Ltp}).
745
- @kwarg Xyz_kwds: Optional, additional B{C{Xyz}} keyword arguments,
746
- ignored if C{B{Xyz} is None}.
747
-
748
- @return: An B{C{Xyz}} instance or a L{Local9Tuple}C{(x, y, z, lat, lon,
749
- height, ltp, ecef, M)} if C{B{Xyz} is None} (with C{M=None}).
750
-
751
- @raise TypeError: Invalid B{C{ltp}}.
752
- '''
753
- return _MODS.ltp._toLocal(self, ltp, Xyz, Xyz_kwds) # self._ecef9
754
-
755
- def toLtp(self, Ecef=None, **name):
756
- '''Return the I{local tangent plane} (LTP) for this cartesian.
757
-
758
- @kwarg Ecef: Optional ECEF I{class} (L{EcefKarney}, ...
759
- L{EcefYou}), overriding this cartesian's C{Ecef}.
760
- @kwarg name: Optional C{B{name}=NN} (C{str}).
761
- '''
762
- return _MODS.ltp._toLtp(self, Ecef, self._ecef9, name) # self._Ltp
763
-
764
725
  def toNvector(self, Nvector=None, datum=None, **name_Nvector_kwds):
765
726
  '''Convert this cartesian to C{n-vector} components, I{including height}.
766
727
 
@@ -768,7 +729,7 @@ class CartesianBase(Vector3d):
768
729
  (C{Nvector}) or C{None}.
769
730
  @kwarg datum: Optional datum (L{Datum}, L{Ellipsoid}, L{Ellipsoid2}
770
731
  or L{a_f2Tuple}) overriding this cartesian's datum.
771
- @kwarg name_Nvector_kwds: Optional C{B{name}=NN} (C{str}) and optional,
732
+ @kwarg name_Nvector_kwds: Optional C{B{name}=NN} (C{str}) and optionally,
772
733
  additional B{C{Nvector}} keyword arguments, ignored if
773
734
  C{B{Nvector} is None}.
774
735
 
@@ -940,8 +901,8 @@ def rtp2xyz_(r_rtp, theta=0, phi=0, **name_Cartesian_and_kwds):
940
901
  @arg theta: Inclination B{C{theta}} (C{radians} with respect to the positive z-axis),
941
902
  required if C{B{r_rtp}} is C{scalar}, ignored otherwise.
942
903
  @arg phi: Azimuthal angle B{C{phi}} (C{radians}), like B{C{theta}}.
943
- @kwarg name_Cartesian_and_kwds: Optional C{B{name}=NN} (C{str}), a C{B{Cartesian}=None}
944
- class to return the coordinates and optional, additional C{B{Cartesian}}
904
+ @kwarg name_Cartesian_and_kwds: Optional C{B{name}=NN} (C{str}), C{B{Cartesian}=None}
905
+ class to return the coordinates and optionally, additional C{B{Cartesian}}
945
906
  keyword arguments.
946
907
 
947
908
  @return: A C{B{Cartesian}(x, y, z)} instance or if no C{B{Cartesian}} keyword argument
@@ -1030,7 +991,7 @@ __all__ += _ALL_DOCS(CartesianBase)
1030
991
 
1031
992
  # **) MIT License
1032
993
  #
1033
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
994
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
1034
995
  #
1035
996
  # Permission is hereby granted, free of charge, to any person obtaining a
1036
997
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/clipy.py CHANGED
@@ -683,7 +683,7 @@ def clipSH3(points, corners, closed=False, inull=False):
683
683
 
684
684
  # **) MIT License
685
685
  #
686
- # Copyright (C) 2018-2024 -- mrJean1 at Gmail -- All Rights Reserved.
686
+ # Copyright (C) 2018-2025 -- mrJean1 at Gmail -- All Rights Reserved.
687
687
  #
688
688
  # Permission is hereby granted, free of charge, to any person obtaining a
689
689
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/constants.py CHANGED
@@ -10,10 +10,10 @@ L{pygeodesy.isnon0} and L{pygeodesy.remainder}.
10
10
  # make sure int/int division yields float quotient, see .basics
11
11
  from __future__ import division as _; del _ # PYCHOK semicolon
12
12
 
13
- from pygeodesy.basics import _copysign, isbool, iscomplex, isint, _0_0
13
+ from pygeodesy.basics import _copysign, isbool, iscomplex, isint
14
14
  from pygeodesy.errors import _xError, _xError2, _xkwds_get1, _xkwds_item2
15
15
  # from pygeodesy.fsums import _isFsum_2Tuple # _MODS
16
- # from pygeodesy.internals import _0_0 # from .basics
16
+ from pygeodesy.internals import _0_0, _100_0
17
17
  from pygeodesy.interns import _INF_, _NAN_, _UNDER_
18
18
  from pygeodesy.lazily import _ALL_MODS as _MODS, _ALL_LAZY
19
19
  # from pygeodesy.streprs import Fmt # from .unitsBase
@@ -26,7 +26,7 @@ except ImportError: # Python 2-
26
26
  _inf, _nan = float(_INF_), float(_NAN_)
27
27
 
28
28
  __all__ = _ALL_LAZY.constants
29
- __version__ = '24.10.15'
29
+ __version__ = '24.11.06'
30
30
 
31
31
 
32
32
  def _copysign_0_0(y):
@@ -185,7 +185,7 @@ _32_0 = _float( 32) # PYCHOK expected
185
185
  _60_0 = _float( 60) # PYCHOK expected
186
186
  _64_0 = _float( 64) # PYCHOK expected
187
187
  _90_0 = _float( 90) # PYCHOK expected
188
- _100_0 = _float( 100) # PYCHOK expected
188
+ _100_0 = _float(_100_0) # PYCHOK expected
189
189
  _180_0 = _float( 180) # PYCHOK expected
190
190
  _270_0 = _float( 270) # PYCHOK expected
191
191
  _360_0 = _float( 360) # PYCHOK expected
@@ -348,8 +348,8 @@ def isfinite(obj):
348
348
  @arg obj: Value (C{scalar}, C{complex}, an L{Fsum} or
349
349
  L{Fsum2Tuple}).
350
350
 
351
- @return: C{False} if B{C{obj}} is C{INF}, C{NINF}
352
- or C{NAN}, C{True} otherwise.
351
+ @return: C{False} if B{C{obj}} is C{INF}, C{NINF} or
352
+ C{NAN}, C{True} otherwise.
353
353
 
354
354
  @raise TypeError: Non-scalar and non-complex B{C{obj}}.
355
355
  '''
@@ -515,7 +515,7 @@ if __name__ == '__main__':
515
515
 
516
516
  # **) MIT License
517
517
  #
518
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
518
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
519
519
  #
520
520
  # Permission is hereby granted, free of charge, to any person obtaining a
521
521
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/css.py CHANGED
@@ -33,7 +33,7 @@ from pygeodesy.units import Azimuth, Degrees, Easting, Height, _heigHt, \
33
33
  # from math import fabs # from .karney
34
34
 
35
35
  __all__ = _ALL_LAZY.css
36
- __version__ = '24.07.25'
36
+ __version__ = '24.11.06'
37
37
 
38
38
 
39
39
  def _CS0(cs0):
@@ -313,16 +313,15 @@ class CassiniSoldner(_NamedBase):
313
313
  self._sb0, self._cb0 = _norm2(s * g.f1, c)
314
314
 
315
315
  def reverse(self, easting, northing, LatLon=None, **name_LatLon_kwds):
316
- '''Convert a Cassini-Soldner location to (ellipsoidal) geodetic
317
- lat- and longitude.
316
+ '''Convert a Cassini-Soldner location to (ellipsoidal) geodetic lat- and longitude.
318
317
 
319
318
  @arg easting: Easting of the location (C{meter}).
320
319
  @arg northing: Northing of the location (C{meter}).
321
- @kwarg LatLon: Optional, ellipsoidal class to return the geodetic
322
- location as (C{LatLon}) or C{None}.
323
- @kwarg name_LatLon_kwds: Optional name C{B{name}=NN} (C{str}) and
324
- optional, additional B{C{LatLon}} keyword arguments,
325
- ignored if C{B{LatLon} is None}.
320
+ @kwarg LatLon: Optional, ellipsoidal class to return the geodetic location as
321
+ (C{LatLon}) or C{None}.
322
+ @kwarg name_LatLon_kwds: Optional name C{B{name}=NN} (C{str}) and optionally,
323
+ additional B{C{LatLon}} keyword arguments, ignored if C{B{LatLon}
324
+ is None}.
326
325
 
327
326
  @return: Geodetic location B{C{LatLon}} or if C{B{LatLon} is None},
328
327
  a L{LatLon2Tuple}C{(lat, lon)}.
@@ -643,7 +642,7 @@ def toCss(latlon, cs0=None, height=None, Css=Css, **name):
643
642
 
644
643
  # **) MIT License
645
644
  #
646
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
645
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
647
646
  #
648
647
  # Permission is hereby granted, free of charge, to any person obtaining a
649
648
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/datums.py CHANGED
@@ -733,7 +733,7 @@ if __name__ == '__main__':
733
733
 
734
734
  # **) MIT License
735
735
  #
736
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
736
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
737
737
  #
738
738
  # Permission is hereby granted, free of charge, to any person obtaining a
739
739
  # copy of this software and associated documentation files (the "Software"),
@@ -27,7 +27,7 @@ __all__ = (_ALL_DEPRECATED.deprecated_bases +
27
27
  _ALL_DEPRECATED.deprecated_classes +
28
28
  _ALL_DEPRECATED.deprecated_consterns +
29
29
  _ALL_DEPRECATED.deprecated_functions)
30
- __version__ = '24.09.19'
30
+ __version__ = '24.11.28'
31
31
 
32
32
  if _unLazy0:
33
33
  from pygeodesy.deprecated import bases, datum, nvector, rhumbBase, \
@@ -40,7 +40,7 @@ else: # lazily import modules and exported attrs
40
40
 
41
41
  # **) MIT License
42
42
  #
43
- # Copyright (C) 2018-2024 -- mrJean1 at Gmail -- All Rights Reserved.
43
+ # Copyright (C) 2018-2025 -- mrJean1 at Gmail -- All Rights Reserved.
44
44
  #
45
45
  # Permission is hereby granted, free of charge, to any person obtaining a
46
46
  # copy of this software and associated documentation files (the "Software"),
@@ -19,7 +19,7 @@ class LatLonHeightBase(_LatLonBase): # PYCHOK no cover
19
19
 
20
20
  # **) MIT License
21
21
  #
22
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
22
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
23
23
  #
24
24
  # Permission is hereby granted, free of charge, to any person obtaining a
25
25
  # copy of this software and associated documentation files (the "Software"),
@@ -22,7 +22,7 @@ from pygeodesy.trf import TRFXform7Tuple as _TRFXform7Tuple
22
22
  from pygeodesy.units import Bearing, Int, Lamd, Lat, Lon, Meter, Phid
23
23
 
24
24
  __all__ = _ALL_DEPRECATED.deprecated_classes
25
- __version__ = '24.07.02'
25
+ __version__ = '24.11.07'
26
26
 
27
27
 
28
28
  class _Deprecated_NamedTuple(_NamedTuple):
@@ -153,7 +153,7 @@ def HeightIDW3(knots, **kwds): # PYCHOK no cover
153
153
 
154
154
  class Lam_(Lamd):
155
155
  '''DEPRECATED on 2024.06.15, use class L{Lamd}.'''
156
- def __init__(self, *args, **kwds): # PYCHOK signature
156
+ def __init__(self, *args, **kwds): # PYCHOK no cover
157
157
  deprecated_class(self.__class__)
158
158
  Lamd.__init__(self, *args, **kwds)
159
159
 
@@ -172,7 +172,7 @@ class NearestOn4Tuple(_Deprecated_NamedTuple): # PYCHOK no cover
172
172
 
173
173
  class Phi_(Phid):
174
174
  '''DEPRECATED on 2024.06.15, use class L{Phid}.'''
175
- def __init__(self, *args, **kwds): # PYCHOK signature
175
+ def __init__(self, *args, **kwds): # PYCHOK no cover
176
176
  deprecated_class(self.__class__)
177
177
  Phid.__init__(self, *args, **kwds)
178
178
 
@@ -205,22 +205,22 @@ class Rhumb7Tuple(_Deprecated_NamedTuple):
205
205
  _Units_ = _Rhumb8Tuple._Units_[:7]
206
206
 
207
207
  @deprecated_method
208
- def toDirect9Tuple(self, **kwds):
208
+ def toDirect9Tuple(self, **kwds): # PYCHOK no cover
209
209
  return self.toRhumb8Tuple().toDirect9Tuple(self, **kwds)
210
210
 
211
211
  @deprecated_method
212
- def toGDict(self, **kwds):
212
+ def toGDict(self, **kwds): # PYCHOK no cover
213
213
  return self.toRhumb8Tuple().toGDict(**kwds)
214
214
 
215
215
  @deprecated_method
216
- def toInverse10Tuple(self, **kwds):
216
+ def toInverse10Tuple(self, **kwds): # PYCHOK no cover
217
217
  return self.toRhumb8Tuple().toInverse10Tuple(self, **kwds)
218
218
 
219
219
  @deprecated_method
220
- def toRhumb8Tuple(self, dflt=NAN):
220
+ def toRhumb8Tuple(self, dflt=NAN): # PYCHOK no cover
221
221
  return _Rhumb8Tuple(self + (dflt,), name=self.name)
222
222
 
223
- def _to7Tuple(self):
223
+ def _to7Tuple(self): # PYCHOK no cover
224
224
  '''(INTERNAL) see L{Rhumb8Tuple._to7Tuple}.
225
225
  '''
226
226
  return self
@@ -266,7 +266,7 @@ class UtmUps4Tuple(_Deprecated_NamedTuple): # PYCHOK no cover
266
266
 
267
267
  class XDist(ADict):
268
268
  '''DEPRECATED on 2024.07.02, use class L{XDict}.'''
269
- def __init__(self, *args, **kwds): # PYCHOK signature
269
+ def __init__(self, *args, **kwds): # PYCHOK no cover
270
270
  deprecated_class(self.__class__)
271
271
  ADict.__init__(self, *args, **kwds)
272
272
 
@@ -275,7 +275,7 @@ __all__ += _ALL_DOCS(_Deprecated_NamedTuple)
275
275
 
276
276
  # **) MIT License
277
277
  #
278
- # Copyright (C) 2018-2024 -- mrJean1 at Gmail -- All Rights Reserved.
278
+ # Copyright (C) 2018-2025 -- mrJean1 at Gmail -- All Rights Reserved.
279
279
  #
280
280
  # Permission is hereby granted, free of charge, to any person obtaining a
281
281
  # copy of this software and associated documentation files (the "Software"),
@@ -33,7 +33,7 @@ OK = _Deprecated_Str(OK='OK')
33
33
 
34
34
  # **) MIT License
35
35
  #
36
- # Copyright (C) 2018-2024 -- mrJean1 at Gmail -- All Rights Reserved.
36
+ # Copyright (C) 2018-2025 -- mrJean1 at Gmail -- All Rights Reserved.
37
37
  #
38
38
  # Permission is hereby granted, free of charge, to any person obtaining a
39
39
  # copy of this software and associated documentation files (the "Software"),
@@ -19,7 +19,7 @@ assert _ALL_OTHER(Curvature2Tuple, Datum, Ellipsoid, Transform) + \
19
19
 
20
20
  # **) MIT License
21
21
  #
22
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
22
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
23
23
  #
24
24
  # Permission is hereby granted, free of charge, to any person obtaining a
25
25
  # copy of this software and associated documentation files (the "Software"),
@@ -11,10 +11,10 @@ from pygeodesy.interns import NN, _area_, _COMMASPACE_, _negative_, \
11
11
  from pygeodesy.lazily import _ALL_DEPRECATED, _ALL_MODS as _MODS
12
12
  from pygeodesy.props import deprecated_function
13
13
  # from pygeodesy.resections import TriAngle5Tuple as _TriAngle5Tuple # from .classes
14
- from pygeodesy.units import Number_, Scalar_
14
+ from pygeodesy.units import _1mm, Number_, Scalar_
15
15
 
16
16
  __all__ = _ALL_DEPRECATED.deprecated_functions
17
- __version__ = '24.09.19'
17
+ __version__ = '24.11.28'
18
18
 
19
19
  _WGS84 = _UTM = object()
20
20
 
@@ -32,7 +32,7 @@ def areaof(points, adjust=True, radius=R_M, wrap=True): # PYCHOK no cover
32
32
 
33
33
 
34
34
  @deprecated_function
35
- def atand(x):
35
+ def atand(x): # PYCHOK no cover
36
36
  '''DEPRECATED on 2023.09.28, use function L{pygeodesy.atan1d}.'''
37
37
  return _MODS.utily.atan1d(x)
38
38
 
@@ -124,19 +124,19 @@ def equirectangular3(lat1, lon1, lat2, lon2, **options): # PYCHOK no cover
124
124
 
125
125
 
126
126
  @deprecated_function
127
- def excessAbc(A, b, c):
127
+ def excessAbc(A, b, c): # PYCHOK no cover
128
128
  '''DEPRECATED on 2023.04.04, use function L{pygeodesy.excessAbc_}.'''
129
129
  return _MODS.formy.excessAbc_(A, b, c)
130
130
 
131
131
 
132
132
  @deprecated_function
133
- def excessGirard(A, B, C):
133
+ def excessGirard(A, B, C): # PYCHOK no cover
134
134
  '''DEPRECATED on 2023.04.04, use function L{pygeodesy.excessGirard_}.'''
135
135
  return _MODS.formy.excessGirard_(A, B, C)
136
136
 
137
137
 
138
138
  @deprecated_function
139
- def excessLHuilier(a, b, c):
139
+ def excessLHuilier(a, b, c): # PYCHOK no cover
140
140
  '''DEPRECATED on 2023.04.04, use function L{pygeodesy.excessLHuilier_}.'''
141
141
  return _MODS.formy.excessLHuilier_(a, b, c)
142
142
 
@@ -176,7 +176,7 @@ def falsed2f(falsed=True, Error=ValueError, **name_value): # PYCHOK no cover
176
176
 
177
177
 
178
178
  @deprecated_function
179
- def float0(*xs):
179
+ def float0(*xs): # PYCHOK no cover
180
180
  '''DEPRECATED on 2023.04.21, use function L{pygeodesy.float0_}.'''
181
181
  return float0_(*xs)
182
182
 
@@ -295,11 +295,21 @@ def scalar(value, low=EPS, high=1.0, name=_scalar_, Error=ValueError): # PYCHOK
295
295
 
296
296
 
297
297
  @deprecated_function
298
- def simplify2(points, pipe, radius=R_M, shortest=False, indices=False, **options): # PYCHOK no cover
299
- '''DEPRECATED, use function L{pygeodesy.simplifyRW}.
300
- '''
301
- return _MODS.simplify.simplifyRW(points, pipe, radius=radius, shortest=shortest,
302
- indices=indices, **options)
298
+ def simplify2(points, pipe=_1mm, **radius_shortest_indices_options): # PYCHOK no cover
299
+ '''DEPRECATED, use function L{pygeodesy.simplifyRW}.'''
300
+ return _MODS.simplify.simplifyRW(points, pipe=pipe, **radius_shortest_indices_options)
301
+
302
+
303
+ @deprecated_function
304
+ def simplifyRDPm(points, distance=_1mm, **radius_shortest_indices_options):
305
+ '''DEPRECATED on 2024.11.28, use function L{pygeodesy.simplifyRDP}C{(points, modified=True, ...)}.'''
306
+ return _MODS.simplify.simplifyRDP(points, modified=True, distance=distance, **radius_shortest_indices_options)
307
+
308
+
309
+ @deprecated_function
310
+ def simplifyVWm(points, area=_1mm, **radius_attr_indices_options):
311
+ '''DEPRECATED on 2024.11.28, use function L{pygeodesy.simplifyVW}C{(points, modified=True, ...)}.'''
312
+ return _MODS.simplify.simplifyVW(points, modified=True, area=area, **radius_attr_indices_options)
303
313
 
304
314
 
305
315
  @deprecated_function
@@ -366,7 +376,7 @@ def utmZoneBand2(lat, lon): # PYCHOK no cover
366
376
 
367
377
  # **) MIT License
368
378
  #
369
- # Copyright (C) 2018-2024 -- mrJean1 at Gmail -- All Rights Reserved.
379
+ # Copyright (C) 2018-2025 -- mrJean1 at Gmail -- All Rights Reserved.
370
380
  #
371
381
  # Permission is hereby granted, free of charge, to any person obtaining a
372
382
  # copy of this software and associated documentation files (the "Software"),
@@ -27,7 +27,7 @@ assert (_ALL_OTHER(LatLonNvectorBase, Nvector, sumOf) +
27
27
 
28
28
  # **) MIT License
29
29
  #
30
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
30
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
31
31
  #
32
32
  # Permission is hereby granted, free of charge, to any person obtaining a
33
33
  # copy of this software and associated documentation files (the "Software"),
@@ -11,7 +11,7 @@ __version__ = '23.11.26'
11
11
 
12
12
  # **) MIT License
13
13
  #
14
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
14
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
15
15
  #
16
16
  # Permission is hereby granted, free of charge, to any person obtaining a
17
17
  # copy of this software and associated documentation files (the "Software"),
@@ -12,7 +12,7 @@ __version__ = '23.12.02'
12
12
 
13
13
  # **) MIT License
14
14
  #
15
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
15
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
16
16
  #
17
17
  # Permission is hereby granted, free of charge, to any person obtaining a
18
18
  # copy of this software and associated documentation files (the "Software"),
@@ -12,7 +12,7 @@ __version__ = '23.11.26'
12
12
 
13
13
  # **) MIT License
14
14
  #
15
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
15
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
16
16
  #
17
17
  # Permission is hereby granted, free of charge, to any person obtaining a
18
18
  # copy of this software and associated documentation files (the "Software"),
@@ -12,7 +12,7 @@ __version__ = '23.11.30'
12
12
 
13
13
  # **) MIT License
14
14
  #
15
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
15
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
16
16
  #
17
17
  # Permission is hereby granted, free of charge, to any person obtaining a
18
18
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/dms.py CHANGED
@@ -941,7 +941,7 @@ def toDMS(deg, form=_F_DMS, prec=2, sep=S_SEP, ddd=2, neg=_MINUS_, pos=_PLUS_, *
941
941
 
942
942
  # **) MIT License
943
943
  #
944
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
944
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
945
945
  #
946
946
  # Permission is hereby granted, free of charge, to any person obtaining a
947
947
  # copy of this software and associated documentation files (the "Software"),