pygeodesy 25.4.25__py2.py3-none-any.whl → 25.5.25__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 (85) hide show
  1. pygeodesy/__init__.py +191 -189
  2. pygeodesy/__main__.py +2 -2
  3. pygeodesy/albers.py +4 -4
  4. pygeodesy/auxilats/_CX_Rs.py +3 -3
  5. pygeodesy/auxilats/auxAngle.py +2 -2
  6. pygeodesy/auxilats/auxDLat.py +2 -2
  7. pygeodesy/auxilats/auxDST.py +2 -2
  8. pygeodesy/auxilats/auxLat.py +2 -2
  9. pygeodesy/auxilats/auxily.py +2 -2
  10. pygeodesy/azimuthal.py +2 -2
  11. pygeodesy/basics.py +1 -1
  12. pygeodesy/booleans.py +8 -8
  13. pygeodesy/cartesianBase.py +7 -6
  14. pygeodesy/clipy.py +2 -2
  15. pygeodesy/constants.py +2 -2
  16. pygeodesy/datums.py +2 -2
  17. pygeodesy/deprecated/__init__.py +8 -8
  18. pygeodesy/deprecated/bases.py +2 -2
  19. pygeodesy/deprecated/rhumbBase.py +2 -2
  20. pygeodesy/deprecated/rhumbaux.py +2 -2
  21. pygeodesy/deprecated/rhumbsolve.py +2 -2
  22. pygeodesy/deprecated/rhumbx.py +2 -2
  23. pygeodesy/ecef.py +15 -26
  24. pygeodesy/ecefLocals.py +186 -0
  25. pygeodesy/ellipsoidalBase.py +2 -2
  26. pygeodesy/ellipsoidalBaseDI.py +7 -6
  27. pygeodesy/ellipsoidalExact.py +3 -3
  28. pygeodesy/ellipsoidalNvector.py +4 -4
  29. pygeodesy/ellipsoidalVincenty.py +15 -14
  30. pygeodesy/ellipsoids.py +23 -30
  31. pygeodesy/elliptic.py +2 -2
  32. pygeodesy/errors.py +1 -1
  33. pygeodesy/etm.py +2 -2
  34. pygeodesy/fmath.py +28 -13
  35. pygeodesy/formy.py +2 -2
  36. pygeodesy/frechet.py +5 -5
  37. pygeodesy/fstats.py +2 -2
  38. pygeodesy/fsums.py +38 -29
  39. pygeodesy/gars.py +2 -3
  40. pygeodesy/geodesici.py +4 -4
  41. pygeodesy/geodesicx/__init__.py +3 -3
  42. pygeodesy/geodesicx/gx.py +2 -2
  43. pygeodesy/geodesicx/gxarea.py +2 -2
  44. pygeodesy/geodesicx/gxline.py +2 -2
  45. pygeodesy/geoids.py +5 -5
  46. pygeodesy/hausdorff.py +4 -4
  47. pygeodesy/heights.py +2 -2
  48. pygeodesy/iters.py +1 -1
  49. pygeodesy/karney.py +2 -2
  50. pygeodesy/ktm.py +2 -2
  51. pygeodesy/latlonBase.py +10 -8
  52. pygeodesy/lazily.py +46 -22
  53. pygeodesy/lcc.py +2 -2
  54. pygeodesy/ltp.py +54 -57
  55. pygeodesy/ltpTuples.py +34 -35
  56. pygeodesy/mgrs.py +3 -3
  57. pygeodesy/named.py +2 -147
  58. pygeodesy/namedTuples.py +3 -3
  59. pygeodesy/nvectorBase.py +2 -2
  60. pygeodesy/osgr.py +2 -2
  61. pygeodesy/points.py +2 -3
  62. pygeodesy/props.py +16 -16
  63. pygeodesy/resections.py +90 -82
  64. pygeodesy/rhumb/aux_.py +2 -2
  65. pygeodesy/rhumb/bases.py +3 -3
  66. pygeodesy/rhumb/ekx.py +3 -4
  67. pygeodesy/rhumb/solve.py +2 -2
  68. pygeodesy/simplify.py +2 -2
  69. pygeodesy/solveBase.py +2 -2
  70. pygeodesy/sphericalBase.py +6 -6
  71. pygeodesy/sphericalNvector.py +2 -2
  72. pygeodesy/sphericalTrigonometry.py +6 -5
  73. pygeodesy/trf.py +4 -4
  74. pygeodesy/triaxials.py +2 -2
  75. pygeodesy/units.py +7 -8
  76. pygeodesy/utily.py +2 -2
  77. pygeodesy/utmupsBase.py +55 -33
  78. pygeodesy/vector2d.py +16 -10
  79. pygeodesy/vector3d.py +3 -3
  80. pygeodesy/webmercator.py +2 -2
  81. {pygeodesy-25.4.25.dist-info → pygeodesy-25.5.25.dist-info}/METADATA +20 -19
  82. pygeodesy-25.5.25.dist-info/RECORD +119 -0
  83. pygeodesy-25.4.25.dist-info/RECORD +0 -118
  84. {pygeodesy-25.4.25.dist-info → pygeodesy-25.5.25.dist-info}/WHEEL +0 -0
  85. {pygeodesy-25.4.25.dist-info → pygeodesy-25.5.25.dist-info}/top_level.txt +0 -0
pygeodesy/fsums.py CHANGED
@@ -37,7 +37,7 @@ respectively C{ValueError} exceptions. However, in that case I{non-finite}
37
37
  results may differ from Python's C{math.fsum} results.
38
38
  '''
39
39
  # make sure int/int division yields float quotient, see .basics
40
- from __future__ import division as _; del _ # PYCHOK semicolon
40
+ from __future__ import division as _; del _ # noqa: E702 ;
41
41
 
42
42
  from pygeodesy.basics import _gcd, isbool, iscomplex, isint, isscalar, \
43
43
  _signOf, itemsorted, signOf, _xiterable
@@ -48,7 +48,7 @@ from pygeodesy.errors import _AssertionError, _OverflowError, _TypeError, \
48
48
  _ValueError, _xError, _xError2, _xkwds, \
49
49
  _xkwds_get, _xkwds_get1, _xkwds_not, \
50
50
  _xkwds_pop, _xsError
51
- from pygeodesy.internals import _enquote, _envPYGEODESY, _passarg, typename
51
+ from pygeodesy.internals import _enquote, _envPYGEODESY, _passarg, typename # _sizeof
52
52
  from pygeodesy.interns import NN, _arg_, _COMMASPACE_, _DMAIN_, _DOT_, _from_, \
53
53
  _not_finite_, _SPACE_, _std_, _UNDER_
54
54
  # from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS # from .named
@@ -64,7 +64,7 @@ from math import fabs, isinf, isnan, \
64
64
  ceil as _ceil, floor as _floor # PYCHOK used! .ltp
65
65
 
66
66
  __all__ = _ALL_LAZY.fsums
67
- __version__ = '25.04.14'
67
+ __version__ = '25.05.12'
68
68
 
69
69
  from pygeodesy.interns import (
70
70
  _PLUS_ as _add_op_, # in .auxilats.auxAngle
@@ -230,13 +230,13 @@ def f2product(two=None):
230
230
  def _Fsumf_(*xs): # in .auxLat, ...
231
231
  '''(INTERNAL) An C{Fsum(xs)}, all C{scalar}, an L{Fsum} or L{Fsum2Tuple}.
232
232
  '''
233
- return Fsum()._facc_scalarf(xs, up=False)
233
+ return Fsum()._facc_xsum(xs, up=False)
234
234
 
235
235
 
236
236
  def _Fsum1f_(*xs): # in .albers
237
237
  '''(INTERNAL) An C{Fsum(xs)}, all C{scalar}, an L{Fsum} or L{Fsum2Tuple}, 1-primed.
238
238
  '''
239
- return Fsum()._facc_scalarf(_1primed(xs), origin=-1, up=False)
239
+ return Fsum()._facc_xsum(_1primed(xs), origin=-1, up=False)
240
240
 
241
241
 
242
242
  def _halfeven(s, r, p):
@@ -585,7 +585,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
585
585
  with quotient C{div} an C{int} in Python 3+ or C{float}
586
586
  in Python 2- and remainder C{mod} an L{Fsum} instance.
587
587
 
588
- @arg other: An L{Fsum}, L{Fsum2Tuple} or C{scalar} modulus.
588
+ @arg other: Modulus (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
589
589
  @kwarg raiser_RESIDUAL: Use C{B{raiser}=False} to ignore
590
590
  L{ResidualError}s (C{bool}) and C{B{RESIDUAL}=scalar}
591
591
  to override the current L{RESIDUAL<Fsum.RESIDUAL>}.
@@ -623,7 +623,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
623
623
  def __floordiv__(self, other):
624
624
  '''Return C{B{self} // B{other}} as an L{Fsum}.
625
625
 
626
- @arg other: An L{Fsum}, L{Fsum2Tuple} or C{scalar} divisor.
626
+ @arg other: Divisor (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
627
627
 
628
628
  @return: The C{floor} quotient (L{Fsum}).
629
629
 
@@ -632,6 +632,10 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
632
632
  f = self._copyd(self.__floordiv__)
633
633
  return f._floordiv(other, _floordiv_op_)
634
634
 
635
+ # def __format__(self, *other): # PYCHOK no cover
636
+ # '''Not implemented.'''
637
+ # return _NotImplemented(self, *other)
638
+
635
639
  def __ge__(self, other):
636
640
  '''Return C{(B{self} >= B{other})}, see C{__eq__}.
637
641
  '''
@@ -672,7 +676,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
672
676
  def __ifloordiv__(self, other):
673
677
  '''Apply C{B{self} //= B{other}} to this instance.
674
678
 
675
- @arg other: An L{Fsum}, L{Fsum2Tuple} or C{scalar} divisor.
679
+ @arg other: Divisor (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
676
680
 
677
681
  @return: This instance, updated (L{Fsum}).
678
682
 
@@ -696,7 +700,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
696
700
  def __imod__(self, other):
697
701
  '''Apply C{B{self} %= B{other}} to this instance.
698
702
 
699
- @arg other: An L{Fsum}, L{Fsum2Tuple} or C{scalar} modulus.
703
+ @arg other: Modulus (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
700
704
 
701
705
  @return: This instance, updated (L{Fsum}).
702
706
 
@@ -707,7 +711,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
707
711
  def __imul__(self, other):
708
712
  '''Apply C{B{self} *= B{other}} to this instance.
709
713
 
710
- @arg other: An L{Fsum}, L{Fsum2Tuple} or C{scalar} factor.
714
+ @arg other: Factor (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
711
715
 
712
716
  @return: This instance, updated (L{Fsum}).
713
717
 
@@ -736,7 +740,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
736
740
  def __ipow__(self, other, *mod, **raiser_RESIDUAL): # PYCHOK 2 vs 3 args
737
741
  '''Apply C{B{self} **= B{other}} to this instance.
738
742
 
739
- @arg other: The exponent (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
743
+ @arg other: Exponent (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
740
744
  @arg mod: Optional modulus (C{int} or C{None}) for the 3-argument
741
745
  C{pow(B{self}, B{other}, B{mod})} version.
742
746
  @kwarg raiser_RESIDUAL: Use C{B{raiser}=False} to ignore
@@ -798,7 +802,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
798
802
  def __itruediv__(self, other, **raiser_RESIDUAL):
799
803
  '''Apply C{B{self} /= B{other}} to this instance.
800
804
 
801
- @arg other: An L{Fsum}, L{Fsum2Tuple} or C{scalar} divisor.
805
+ @arg other: Divisor (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
802
806
  @kwarg raiser_RESIDUAL: Use C{B{raiser}=False} to ignore
803
807
  L{ResidualError}s (C{bool}) and C{B{RESIDUAL}=scalar}
804
808
  to override the current L{RESIDUAL<Fsum.RESIDUAL>}.
@@ -917,7 +921,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
917
921
  f = self._rcopyd(other, self.__rfloordiv__)
918
922
  return f._floordiv(self, _floordiv_op_)
919
923
 
920
- def __rmatmul__(self, other): # PYCHOK no coveS
924
+ def __rmatmul__(self, other): # PYCHOK no cover
921
925
  '''Not implemented.'''
922
926
  return _NotImplemented(self, other)
923
927
 
@@ -970,6 +974,11 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
970
974
  f = self._rcopyd(other, self.__rtruediv__)
971
975
  return f._ftruediv(self, _truediv_op_, **raiser_RESIDUAL)
972
976
 
977
+ # def __sizeof__(self):
978
+ # '''Return the size of this instance (C{int} bytes}).
979
+ # '''
980
+ # return _sizeof(self._ps) + _sizeof(self._n)
981
+
973
982
  def __str__(self):
974
983
  '''Return the default C{str(self)}.
975
984
  '''
@@ -990,7 +999,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
990
999
  def __truediv__(self, other, **raiser_RESIDUAL):
991
1000
  '''Return C{B{self} / B{other}} as an L{Fsum}.
992
1001
 
993
- @arg other: An L{Fsum}, L{Fsum2Tuple} or C{scalar} divisor.
1002
+ @arg other: Divisor (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
994
1003
  @kwarg raiser_RESIDUAL: Use C{B{raiser}=False} to ignore
995
1004
  L{ResidualError}s (C{bool}) and C{B{RESIDUAL}=scalar}
996
1005
  to override the current L{RESIDUAL<Fsum.RESIDUAL>}.
@@ -1221,14 +1230,6 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
1221
1230
  '''
1222
1231
  return self._facc_scalar(xs, **up)
1223
1232
 
1224
- def _facc_scalarf(self, xs, up=True, **origin_which):
1225
- '''(INTERNAL) Accumulate all C{xs}, each C{scalar}, an L{Fsum} or
1226
- L{Fsum2Tuple}, like function C{_xsum}.
1227
- '''
1228
- fs = _xs(xs, **_x_isfine(self.nonfinitesOK, _Cdot=type(self),
1229
- **origin_which)) # PYCHOK yield
1230
- return self._facc_scalar(fs, up=up)
1231
-
1232
1233
  # def _facc_up(self, up=True):
1233
1234
  # '''(INTERNAL) Update the C{partials}, by removing
1234
1235
  # and re-accumulating the final C{partial}.
@@ -1243,6 +1244,14 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
1243
1244
  # break
1244
1245
  # return self._update() if up else self
1245
1246
 
1247
+ def _facc_xsum(self, xs, up=True, **origin_which):
1248
+ '''(INTERNAL) Accumulate all C{xs}, each C{scalar}, an L{Fsum}
1249
+ or L{Fsum2Tuple}, like function C{_xsum}.
1250
+ '''
1251
+ fs = _xs(xs, **_x_isfine(self.nonfinitesOK, _Cdot=type(self),
1252
+ **origin_which)) # PYCHOK yield
1253
+ return self._facc_scalar(fs, up=up)
1254
+
1246
1255
  def fadd(self, xs=()):
1247
1256
  '''Add an iterable's items to this instance.
1248
1257
 
@@ -1485,7 +1494,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
1485
1494
  @deprecated_method
1486
1495
  def f2mul(self, *others, **raiser):
1487
1496
  '''DEPRECATED on 2024.09.13, use method L{f2mul_<Fsum.f2mul_>}.'''
1488
- return self._fset(self.f2mul_(others, **raiser))
1497
+ return self._fset(self._f2mul(self.f2mul, others, **raiser))
1489
1498
 
1490
1499
  def f2mul_(self, *others, **f2product_nonfinites): # in .fmath.f2mul
1491
1500
  '''Return C{B{self} * B{other} * B{other} ...} for all B{C{others}} using cascaded,
@@ -1533,17 +1542,17 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
1533
1542
  def fover(self, over, **raiser_RESIDUAL):
1534
1543
  '''Apply C{B{self} /= B{over}} and summate.
1535
1544
 
1536
- @arg over: An L{Fsum} or C{scalar} denominator.
1545
+ @arg over: Divisor (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
1537
1546
  @kwarg raiser_RESIDUAL: Use C{B{raiser}=False} to ignore
1538
1547
  L{ResidualError}s (C{bool}) and C{B{RESIDUAL}=scalar}
1539
1548
  to override the current L{RESIDUAL<Fsum.RESIDUAL>}.
1540
1549
 
1541
- @return: Precision running sum (C{float}).
1550
+ @return: Precision running quotient sum (C{float}).
1542
1551
 
1543
1552
  @raise ResidualError: Non-zero, significant residual or invalid
1544
1553
  B{C{RESIDUAL}}.
1545
1554
 
1546
- @see: Methods L{Fsum.fsum} and L{Fsum.__itruediv__}.
1555
+ @see: Methods L{Fsum.fdiv}, L{Fsum.__itruediv__} and L{Fsum.fsum}.
1547
1556
  '''
1548
1557
  return float(self.fdiv(over, **raiser_RESIDUAL)._fprs)
1549
1558
 
@@ -1837,19 +1846,19 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
1837
1846
  '''Like method L{Fsum.fsum_} iff I{all} C{B{xs}}, each I{known to be}
1838
1847
  C{scalar}, an L{Fsum} or L{Fsum2Tuple}.
1839
1848
  '''
1840
- return self._facc_scalarf(xs, which=self.fsumf_)._fprs # origin=1?
1849
+ return self._facc_xsum(xs, which=self.fsumf_)._fprs # origin=1?
1841
1850
 
1842
1851
  def Fsumf_(self, *xs):
1843
1852
  '''Like method L{Fsum.Fsum_} iff I{all} C{B{xs}}, each I{known to be}
1844
1853
  C{scalar}, an L{Fsum} or L{Fsum2Tuple}.
1845
1854
  '''
1846
- return self._facc_scalarf(xs, which=self.Fsumf_)._copyd(self.Fsumf_) # origin=1?
1855
+ return self._facc_xsum(xs, which=self.Fsumf_)._copyd(self.Fsumf_) # origin=1?
1847
1856
 
1848
1857
  def fsum2f_(self, *xs):
1849
1858
  '''Like method L{Fsum.fsum2_} iff I{all} C{B{xs}}, each I{known to be}
1850
1859
  C{scalar}, an L{Fsum} or L{Fsum2Tuple}.
1851
1860
  '''
1852
- return self._fsum2(xs, self._facc_scalarf, which=self.fsum2f_) # origin=1?
1861
+ return self._fsum2(xs, self._facc_xsum, which=self.fsum2f_) # origin=1?
1853
1862
 
1854
1863
  # ftruediv = __itruediv__ # for naming consistency?
1855
1864
 
pygeodesy/gars.py CHANGED
@@ -15,8 +15,7 @@ Transcoded from I{Charles Karney}'s C++ class U{GARS
15
15
  '''
16
16
 
17
17
  from pygeodesy.basics import isstr, _splituple, typename
18
- from pygeodesy.constants import _off90, _1_over, _0_5, \
19
- _1_0 # PYCHOK used!
18
+ from pygeodesy.constants import _off90, _1_over, _0_5
20
19
  from pygeodesy.errors import _ValueError, _xkwds, _xStrError
21
20
  # from pygeodesy.internals import typename # from .basics
22
21
  from pygeodesy.interns import NN, _0to9_, _AtoZnoIO_, _INV_
@@ -30,7 +29,7 @@ from pygeodesy.units import Int_, Lat, Lon, Precision_, Scalar_, Str
30
29
  from math import floor
31
30
 
32
31
  __all__ = _ALL_LAZY.gars
33
- __version__ = '25.04.14'
32
+ __version__ = '25.05.07'
34
33
 
35
34
  _Digits = _0to9_
36
35
  _LatLen = 2
pygeodesy/geodesici.py CHANGED
@@ -23,7 +23,7 @@ and I{S. Baselga Moreno & J.C. Martinez-Llario}'s U{Intersection and point-to-li
23
23
  on the ellipsoid<https://riunet.UPV.ES/bitstream/handle/10251/122902/Revised_Manuscript.pdf>}.
24
24
  '''
25
25
  # make sure int/int division yields float quotient
26
- from __future__ import division as _; del _ # PYCHOK semicolon
26
+ from __future__ import division as _; del _ # noqa: E702 ;
27
27
 
28
28
  from pygeodesy.basics import _copy, _enumereverse, map1, \
29
29
  _xinstanceof, _xor, typename
@@ -57,7 +57,7 @@ from pygeodesy.utily import atan2, sincos2, fabs, radians
57
57
  # from math import ceil as _ceil, fabs, radians # .fsums, .utily
58
58
 
59
59
  __all__ = _ALL_LAZY.geodesici
60
- __version__ = '25.04.14'
60
+ __version__ = '25.05.12'
61
61
 
62
62
  _0t = 0, # int
63
63
  _1_1t = -1, +1
@@ -1560,7 +1560,7 @@ if __name__ == _DMAIN_: # MCCABE 14
1560
1560
 
1561
1561
  _isopt = re.compile('^[-]+[a-z]*$', flags=re.IGNORECASE).match
1562
1562
 
1563
- I = Intersector(GeodesicExact()) # PYCHOK I
1563
+ I = Intersector(GeodesicExact()) # noqa: E741 I is eye
1564
1564
  M = m = _R = None
1565
1565
  _T = _V = _h = _C = False
1566
1566
 
@@ -1584,7 +1584,7 @@ if __name__ == _DMAIN_: # MCCABE 14
1584
1584
  elif arg == _R__ and args:
1585
1585
  _R = args.pop(0)
1586
1586
  elif _starts('--Tool', arg):
1587
- I = Intersectool() # PYCHOK I
1587
+ I = Intersectool() # noqa: E741 I is eye
1588
1588
  if _V:
1589
1589
  I.verbose = True
1590
1590
  if not _Xables.X_OK(I.IntersectTool):
@@ -17,13 +17,13 @@ respectively C{GeodesicLine} from I{Karney}'s Python implementation U{geographic
17
17
  L{pygeodesy.geodesicw} and L{pygeodesy.karney}.
18
18
  '''
19
19
 
20
- from pygeodesy.geodesicx.gx import GeodesicExact, GeodesicLineExact # PYCHOK exported
21
- from pygeodesy.geodesicx.gxarea import GeodesicAreaExact, PolygonArea # PYCHOK exported
20
+ from pygeodesy.geodesicx.gx import GeodesicExact, GeodesicLineExact # noqa: F401
21
+ from pygeodesy.geodesicx.gxarea import GeodesicAreaExact, PolygonArea # noqa: F401
22
22
  from pygeodesy.karney import Caps, GeodesicError
23
23
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY
24
24
 
25
25
  __all__ = _ALL_LAZY.geodesicx + _ALL_DOCS(Caps, GeodesicError)
26
- __version__ = '25.04.14'
26
+ __version__ = '25.05.12'
27
27
 
28
28
  # **) MIT License
29
29
  #
pygeodesy/geodesicx/gx.py CHANGED
@@ -13,7 +13,7 @@ and licensed under the MIT/X11 License. For more information, see the
13
13
  U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
14
14
  '''
15
15
  # make sure int/int division yields float quotient
16
- from __future__ import division as _; del _ # PYCHOK semicolon
16
+ from __future__ import division as _; del _ # noqa: E702 ;
17
17
 
18
18
  # A copy of comments from Karney's C{GeodesicExact.cpp}:
19
19
  #
@@ -65,7 +65,7 @@ from pygeodesy.utily import atan2, atan2d as _atan2d_reverse, _unrollon, \
65
65
  from math import copysign, cos, degrees, fabs, radians, sqrt
66
66
 
67
67
  __all__ = ()
68
- __version__ = '25.04.14'
68
+ __version__ = '25.05.12'
69
69
 
70
70
  _MAXIT1 = 20
71
71
  _MAXIT2 = 10 + _MAXIT1 + MANT_DIG # MANT_DIG == C++ digits
@@ -15,7 +15,7 @@ and licensed under the MIT/X11 License. For more information, see the
15
15
  U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
16
16
  '''
17
17
  # make sure int/int division yields float quotient
18
- from __future__ import division as _; del _ # PYCHOK semicolon
18
+ from __future__ import division as _; del _ # noqa: E702 ;
19
19
 
20
20
  from pygeodesy.basics import isodd, unsigned0
21
21
  from pygeodesy.constants import NAN, _0_0, _0_5, _720_0
@@ -31,7 +31,7 @@ from pygeodesy.props import Property, Property_RO, property_RO
31
31
  from math import fmod as _fmod
32
32
 
33
33
  __all__ = ()
34
- __version__ = '24.10.14'
34
+ __version__ = '25.05.12'
35
35
 
36
36
 
37
37
  class GeodesicAreaExact(_NamedBase):
@@ -13,7 +13,7 @@ and licensed under the MIT/X11 License. For more information, see the
13
13
  U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
14
14
  '''
15
15
  # make sure int/int division yields float quotient
16
- from __future__ import division as _; del _ # PYCHOK semicolon
16
+ from __future__ import division as _; del _ # noqa: E702 ;
17
17
 
18
18
  # A copy of comments from Karney's C{GeodesicLineExact.cpp}:
19
19
  #
@@ -55,7 +55,7 @@ from pygeodesy.utily import atan2, atan2d as _atan2d_reverse, sincos2
55
55
  from math import cos, degrees, fabs, floor, radians, sin
56
56
 
57
57
  __all__ = ()
58
- __version__ = '25.04.12'
58
+ __version__ = '25.05.12'
59
59
 
60
60
  _glXs = [] # instances of C{[_]GeodesicLineExact} to be updated
61
61
 
pygeodesy/geoids.py CHANGED
@@ -87,7 +87,7 @@ courtesy of SBFRF.
87
87
  Above Mean Sea Level<https://Wiki.ROS.org/mavros>}.
88
88
  '''
89
89
  # make sure int/int division yields float quotient, see .basics
90
- from __future__ import division as _; del _ # PYCHOK semicolon
90
+ from __future__ import division as _; del _ # noqa: E702 ;
91
91
 
92
92
  from pygeodesy.basics import _isin, len2, min2, isodd, _splituple, \
93
93
  ub2str as _ub2str
@@ -126,7 +126,7 @@ except ImportError: # Python 3+
126
126
  from io import BytesIO as _BytesIO # PYCHOK expected
127
127
 
128
128
  __all__ = _ALL_LAZY.geoids
129
- __version__ = '25.04.14'
129
+ __version__ = '25.05.21'
130
130
 
131
131
  _assert_ = 'assert'
132
132
  _bHASH_ = b'#'
@@ -148,7 +148,7 @@ class GeoidError(HeightError):
148
148
  class _GeoidBase(_HeightBase):
149
149
  '''(INTERNAL) Base class for C{Geoid...}s.
150
150
  '''
151
- _center = None # (lat, lon, height)
151
+ # _center = None # (lat, lon, height)
152
152
  _cropped = None
153
153
  # _datum = _WGS84 # from _HeightBase
154
154
  _egm = None # open C{egm*.pgm} geoid file
@@ -297,7 +297,7 @@ class _GeoidBase(_HeightBase):
297
297
 
298
298
  @Property_RO
299
299
  def _center(self):
300
- ''' Cache for method L{center}.
300
+ '''(INTERNAL) Cache for method L{center}.
301
301
  '''
302
302
  return self._llh3(favg(self._lat_lo, self._lat_hi),
303
303
  favg(self._lon_lo, self._lon_hi))
@@ -907,7 +907,7 @@ def _I(i):
907
907
  '''(INTERNAL) Cache a single C{int} constant.
908
908
  '''
909
909
  i = int(i)
910
- return _intCs.setdefault(i, i) # PYCHOK undefined due to del _intCs
910
+ return _intCs.setdefault(i, i) # noqa: F821 del
911
911
 
912
912
 
913
913
  def _T(cs):
pygeodesy/hausdorff.py CHANGED
@@ -75,8 +75,8 @@ from pygeodesy.interns import NN, _i_, _j_, _units_
75
75
  # from pygeodesy.iters import points2 as _points2 # from .points
76
76
  from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _FOR_DOCS
77
77
  from pygeodesy.named import _name2__, _Named, _NamedTuple, _Pass
78
- # from pygeodesy.namedTuples import PhiLam2Tuple # from .points
79
- from pygeodesy.points import _distanceTo, PhiLam2Tuple, points2 as _points2, radians
78
+ from pygeodesy.namedTuples import PhiLam2Tuple
79
+ from pygeodesy.points import _distanceTo, points2 as _points2, radians
80
80
  from pygeodesy.props import Property, Property_RO, property_doc_, property_RO
81
81
  from pygeodesy.units import Float, Number_
82
82
  from pygeodesy import unitsBase as _unitsBase # _Str_..., _xUnit, _xUnits
@@ -85,7 +85,7 @@ from pygeodesy import unitsBase as _unitsBase # _Str_..., _xUnit, _xUnits
85
85
  from random import Random
86
86
 
87
87
  __all__ = _ALL_LAZY.hausdorff
88
- __version__ = '25.04.21'
88
+ __version__ = '25.05.21'
89
89
 
90
90
  _formy = _MODS.into(formy=__name__)
91
91
 
@@ -101,7 +101,7 @@ class Hausdorff(_Named):
101
101
  be overloaded.
102
102
  '''
103
103
  _datum = _WGS84
104
- _func = None # formy function/property
104
+ # _func = None # formy function/property
105
105
  _kwds = {} # func_ options
106
106
  _model = ()
107
107
  _seed = None
pygeodesy/heights.py CHANGED
@@ -69,7 +69,7 @@ C{>>> h1, h2, ... = hinterpolator.height_(lat1, lon1, lat2, lon2, ...)}
69
69
  Interpolation.
70
70
  '''
71
71
  # make sure int/int division yields float quotient, see .basics
72
- from __future__ import division as _; del _ # PYCHOK semicolon
72
+ from __future__ import division as _; del _ # noqa: E702 ;
73
73
 
74
74
  from pygeodesy.basics import isscalar, len2, map1, min2, _xnumpy, _xscipy
75
75
  from pygeodesy.constants import EPS, PI, PI_2, PI2, _0_0, _90_0, _180_0
@@ -92,7 +92,7 @@ from pygeodesy.units import _isDegrees, Float_, Int_
92
92
  # from math import radians # from .points
93
93
 
94
94
  __all__ = _ALL_LAZY.heights
95
- __version__ = '25.04.21'
95
+ __version__ = '25.05.12'
96
96
 
97
97
  _error_ = 'error'
98
98
  _formy = _MODS.into(formy=__name__)
pygeodesy/iters.py CHANGED
@@ -26,7 +26,7 @@ from pygeodesy.units import Int, Radius
26
26
  from pygeodesy.utily import degrees2m, _Wrap, _1_0
27
27
 
28
28
  __all__ = _ALL_LAZY.iters
29
- __version__ = '25.04.14'
29
+ __version__ = '25.05.19'
30
30
 
31
31
  _items_ = 'items'
32
32
  _iterNumpy2len = 1 # adjustable for testing purposes
pygeodesy/karney.py CHANGED
@@ -141,7 +141,7 @@ in C{pygeodesy} are based on I{Karney}'s post U{Area of a spherical polygon
141
141
  <https://MathOverflow.net/questions/97711/the-area-of-spherical-polygons>}, 3rd Answer.
142
142
  '''
143
143
  # make sure int/int division yields float quotient, see .basics
144
- from __future__ import division as _; del _ # PYCHOK semicolon
144
+ from __future__ import division as _; del _ # noqa: E702 ;
145
145
 
146
146
  from pygeodesy.basics import _copysign, _isin, isint, neg, unsigned0, \
147
147
  _xgeographiclib, _zip
@@ -166,7 +166,7 @@ from pygeodesy.utily import atan2d, sincos2d, tand, _unrollon, fabs
166
166
  # from math import fabs # from .utily
167
167
 
168
168
  __all__ = _ALL_LAZY.karney
169
- __version__ = '25.04.14'
169
+ __version__ = '25.05.12'
170
170
 
171
171
  _2_4_ = '2.4'
172
172
  _K_2_0 = _getenv(_PYGEODESY_ENV(typename(_xgeographiclib)[2:]), _2_)
pygeodesy/ktm.py CHANGED
@@ -40,7 +40,7 @@ and licensed under the MIT/X11 License. For more information, see the
40
40
  U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
41
41
  '''
42
42
  # make sure int/int division yields float quotient
43
- from __future__ import division as _; del _ # PYCHOK semicolon
43
+ from __future__ import division as _; del _ # noqa: E702 ;
44
44
 
45
45
  from pygeodesy.basics import copysign0, _isin, isodd, neg, neg_, \
46
46
  _reverange, _xinstanceof
@@ -66,7 +66,7 @@ from cmath import polar
66
66
  from math import asinh, cos, cosh, degrees, fabs, sin, sinh, sqrt, tanh
67
67
 
68
68
  __all__ = _ALL_LAZY.ktm
69
- __version__ = '25.04.14'
69
+ __version__ = '25.05.12'
70
70
 
71
71
 
72
72
  class KTMError(_ValueError):
pygeodesy/latlonBase.py CHANGED
@@ -17,20 +17,20 @@ from pygeodesy.constants import EPS, EPS0, EPS1, EPS4, INT0, R_M, \
17
17
  from pygeodesy.datums import _spherical_datum
18
18
  from pygeodesy.dms import F_D, F_DMS, latDMS, lonDMS, parse3llh
19
19
  # from pygeodesy.ecef import EcefKarney # _MODS
20
+ from pygeodesy.ecefLocals import _EcefLocal
20
21
  from pygeodesy.errors import _AttributeError, IntersectionError, \
21
22
  _incompatible, _IsnotError, _TypeError, \
22
23
  _ValueError, _xattr, _xdatum, _xError, \
23
24
  _xkwds, _xkwds_get, _xkwds_item2, _xkwds_not
24
25
  # from pygeodesy.fmath import favg # _MODS
25
- # from pygeodesy import formy as _formy # .MODS.into
26
+ # from pygeodesy import formy as _formy # _MODS.into
26
27
  from pygeodesy.internals import _passarg, typename
27
- from pygeodesy.interns import NN, _COMMASPACE_, _concentric_, _height_, \
28
- _intersection_, _LatLon_, _m_, _negative_, \
29
- _no_, _overlap_, _too_, _point_ # PYCHOK used!
28
+ from pygeodesy.interns import NN, _COMMASPACE_, _concentric_, _intersection_, \
29
+ _LatLon_, _m_, _no_, _overlap_, _point_ # PYCHOK used!
30
30
  # from pygeodesy.iters import PointsIter, points2 # _MODS
31
31
  # from pygeodesy.karney import Caps # _MODS
32
32
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
33
- from pygeodesy.named import _name2__, _NamedBase, _NamedLocal, Fmt
33
+ from pygeodesy.named import _name2__, _NamedBase, Fmt
34
34
  from pygeodesy.namedTuples import Bounds2Tuple, LatLon2Tuple, PhiLam2Tuple, \
35
35
  Trilaterate5Tuple, Vector3Tuple
36
36
  # from pygeodesy.nvectorBase import _N_vector_ # _MODS
@@ -48,12 +48,12 @@ from contextlib import contextmanager
48
48
  from math import asin, cos, degrees, fabs, radians
49
49
 
50
50
  __all__ = _ALL_LAZY.latlonBase
51
- __version__ = '25.04.21'
51
+ __version__ = '25.05.07'
52
52
 
53
53
  _formy = _MODS.into(formy=__name__)
54
54
 
55
55
 
56
- class LatLonBase(_NamedBase, _NamedLocal):
56
+ class LatLonBase(_NamedBase, _EcefLocal):
57
57
  '''(INTERNAL) Base class for ellipsoidal and spherical C{satLon}s.
58
58
  '''
59
59
  _clipid = INT0 # polygonal clip, see .booleans
@@ -411,7 +411,7 @@ class LatLonBase(_NamedBase, _NamedLocal):
411
411
 
412
412
  @raise TypeError: Invalid B{C{delta}}, B{C{LatLon}} or B{C{LatLon_kwds}} item.
413
413
  '''
414
- t = self._Ltp._local2ecef(delta, nine=True)
414
+ t = self._ltp._local2ecef(delta, nine=True) # _EcefLocal._ltp
415
415
  return t.toLatLon(LatLon=LatLon, **_xkwds(LatLon_kwds, name=self.name))
416
416
 
417
417
  def _distanceTo(self, func, other, radius=None, **kwds):
@@ -901,6 +901,8 @@ class LatLonBase(_NamedBase, _NamedLocal):
901
901
  _update_all(self)
902
902
  self._lon = lon
903
903
 
904
+ # _ltp = _EcefLocal._ltp(self)
905
+
904
906
  def nearestOn6(self, points, closed=False, height=None, wrap=False):
905
907
  '''Locate the point on a path or polygon closest to this point.
906
908