pygeodesy 25.5.5__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 (81) hide show
  1. pygeodesy/__init__.py +186 -186
  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/booleans.py +2 -2
  12. pygeodesy/cartesianBase.py +2 -2
  13. pygeodesy/clipy.py +2 -2
  14. pygeodesy/constants.py +2 -2
  15. pygeodesy/datums.py +2 -2
  16. pygeodesy/deprecated/__init__.py +8 -8
  17. pygeodesy/deprecated/bases.py +2 -2
  18. pygeodesy/deprecated/rhumbBase.py +2 -2
  19. pygeodesy/deprecated/rhumbaux.py +2 -2
  20. pygeodesy/deprecated/rhumbsolve.py +2 -2
  21. pygeodesy/deprecated/rhumbx.py +2 -2
  22. pygeodesy/ecef.py +3 -4
  23. pygeodesy/ellipsoidalBase.py +2 -2
  24. pygeodesy/ellipsoidalBaseDI.py +7 -6
  25. pygeodesy/ellipsoidalExact.py +3 -3
  26. pygeodesy/ellipsoidalNvector.py +4 -4
  27. pygeodesy/ellipsoidalVincenty.py +15 -14
  28. pygeodesy/ellipsoids.py +4 -4
  29. pygeodesy/elliptic.py +2 -2
  30. pygeodesy/errors.py +1 -1
  31. pygeodesy/etm.py +2 -2
  32. pygeodesy/fmath.py +9 -9
  33. pygeodesy/formy.py +2 -2
  34. pygeodesy/frechet.py +5 -5
  35. pygeodesy/fstats.py +2 -2
  36. pygeodesy/fsums.py +37 -28
  37. pygeodesy/gars.py +2 -3
  38. pygeodesy/geodesici.py +4 -4
  39. pygeodesy/geodesicx/__init__.py +3 -3
  40. pygeodesy/geodesicx/gx.py +2 -2
  41. pygeodesy/geodesicx/gxarea.py +2 -2
  42. pygeodesy/geodesicx/gxline.py +2 -2
  43. pygeodesy/geoids.py +5 -5
  44. pygeodesy/hausdorff.py +4 -4
  45. pygeodesy/heights.py +2 -2
  46. pygeodesy/iters.py +1 -1
  47. pygeodesy/karney.py +2 -2
  48. pygeodesy/ktm.py +2 -2
  49. pygeodesy/latlonBase.py +3 -4
  50. pygeodesy/lazily.py +1 -1
  51. pygeodesy/lcc.py +2 -2
  52. pygeodesy/ltp.py +5 -5
  53. pygeodesy/mgrs.py +3 -3
  54. pygeodesy/namedTuples.py +3 -3
  55. pygeodesy/nvectorBase.py +2 -2
  56. pygeodesy/osgr.py +2 -2
  57. pygeodesy/points.py +2 -3
  58. pygeodesy/props.py +16 -16
  59. pygeodesy/resections.py +30 -24
  60. pygeodesy/rhumb/aux_.py +2 -2
  61. pygeodesy/rhumb/bases.py +3 -3
  62. pygeodesy/rhumb/ekx.py +3 -4
  63. pygeodesy/rhumb/solve.py +2 -2
  64. pygeodesy/simplify.py +2 -2
  65. pygeodesy/solveBase.py +2 -2
  66. pygeodesy/sphericalBase.py +6 -6
  67. pygeodesy/sphericalNvector.py +2 -2
  68. pygeodesy/sphericalTrigonometry.py +6 -5
  69. pygeodesy/trf.py +4 -4
  70. pygeodesy/triaxials.py +2 -2
  71. pygeodesy/units.py +7 -8
  72. pygeodesy/utily.py +2 -2
  73. pygeodesy/utmupsBase.py +2 -2
  74. pygeodesy/vector2d.py +13 -7
  75. pygeodesy/vector3d.py +3 -3
  76. pygeodesy/webmercator.py +2 -2
  77. {pygeodesy-25.5.5.dist-info → pygeodesy-25.5.25.dist-info}/METADATA +16 -16
  78. pygeodesy-25.5.25.dist-info/RECORD +119 -0
  79. pygeodesy-25.5.5.dist-info/RECORD +0 -119
  80. {pygeodesy-25.5.5.dist-info → pygeodesy-25.5.25.dist-info}/WHEEL +0 -0
  81. {pygeodesy-25.5.5.dist-info → pygeodesy-25.5.25.dist-info}/top_level.txt +0 -0
pygeodesy/azimuthal.py CHANGED
@@ -40,7 +40,7 @@ altitude in Earth radii<https://WikiPedia.org/wiki/Azimuthal_equidistant_project
40
40
  #/media/File:Comparison_azimuthal_projections.svg>}.
41
41
  '''
42
42
  # make sure int/int division yields float quotient, see .basics
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 _isin, _xinstanceof # from .ellipsoidalBase
46
46
  from pygeodesy.constants import EPS, EPS0, EPS1, NAN, isnon0, _umod_360, \
@@ -71,7 +71,7 @@ from pygeodesy.utily import asin1, atan1, atan2, atan2b, atan2d, \
71
71
  from math import acos, degrees, fabs, sin, sqrt
72
72
 
73
73
  __all__ = _ALL_LAZY.azimuthal
74
- __version__ = '25.04.14'
74
+ __version__ = '25.05.12'
75
75
 
76
76
  _EPS_K = _EPStol * _0_1 # Karney's eps_ or _EPSmin * _0_1?
77
77
  _over_horizon_ = 'over horizon'
pygeodesy/booleans.py CHANGED
@@ -15,7 +15,7 @@ C{reverse-difference}, C{sum} and C{union}.
15
15
  <http://www.Inf.USI.CH/hormann/papers/Greiner.1998.ECO.pdf>}.
16
16
  '''
17
17
  # make sure int/int division yields float quotient, see .basics
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 _isin, isodd, issubclassof, map2, \
21
21
  _xscalar, typename
@@ -45,7 +45,7 @@ from pygeodesy.utily import fabs, _unrollon, _Wrap
45
45
  # from math import fabs # from .utily
46
46
 
47
47
  __all__ = _ALL_LAZY.booleans
48
- __version__ = '25.04.30'
48
+ __version__ = '25.05.12'
49
49
 
50
50
  _0EPS = EPS # near-zero, positive
51
51
  _EPS0 = -EPS # near-zero, negative
@@ -28,7 +28,7 @@ from pygeodesy.interns import _ellipsoidal_, _spherical_ # PYCHOK used!
28
28
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
29
29
  from pygeodesy.named import _name2__, _Pass
30
30
  from pygeodesy.namedTuples import LatLon4Tuple, _NamedTupleTo , Vector3Tuple, \
31
- Vector4Tuple, Bearing2Tuple # PYCHOK .sphericalBase
31
+ Vector4Tuple
32
32
  # from pygeodesy.nvectorBase import _N_vector # _MODS
33
33
  from pygeodesy.props import deprecated_method, Property, Property_RO, property_doc_, \
34
34
  property_RO, _update_all
@@ -44,7 +44,7 @@ from pygeodesy.vector3d import Vector3d, _xyzhdlln4
44
44
  # from math import degrees, fabs, radians, sqrt # from .fmath, .utily
45
45
 
46
46
  __all__ = _ALL_LAZY.cartesianBase
47
- __version__ = '25.04.28'
47
+ __version__ = '25.05.07'
48
48
 
49
49
  _r_ = 'r'
50
50
  _resections = _MODS.into(resections=__name__)
pygeodesy/clipy.py CHANGED
@@ -10,7 +10,7 @@ I{Greiner-Hormann} and L{clipSH} and L{clipSH3} I{Sutherland-Hodgeman}.
10
10
  .
11
11
  '''
12
12
  # make sure int/int division yields float quotient, see .basics
13
- from __future__ import division as _; del _ # PYCHOK semicolon
13
+ from __future__ import division as _; del _ # noqa: E702 ;
14
14
 
15
15
  from pygeodesy.basics import len2, typename
16
16
  from pygeodesy.constants import EPS, _0_0, _1_0
@@ -31,7 +31,7 @@ from pygeodesy.units import Bool, FIx, HeightX, Lat, Lon, Number_
31
31
  # from math import fabs # from .fmath
32
32
 
33
33
  __all__ = _ALL_LAZY.clipy
34
- __version__ = '25.04.14'
34
+ __version__ = '25.05.12'
35
35
 
36
36
  _fj_ = 'fj'
37
37
  _original_ = 'original'
pygeodesy/constants.py CHANGED
@@ -8,7 +8,7 @@ L{pygeodesy.isnear1}, L{pygeodesy.isnear90}, L{pygeodesy.isneg0}, L{pygeodesy.is
8
8
  L{pygeodesy.isnon0} and L{pygeodesy.remainder}.
9
9
  '''
10
10
  # make sure int/int division yields float quotient, see .basics
11
- from __future__ import division as _; del _ # PYCHOK semicolon
11
+ from __future__ import division as _; del _ # noqa: E702 ;
12
12
 
13
13
  from pygeodesy.basics import _copysign, isbool, iscomplex, isint
14
14
  from pygeodesy.errors import _xError, _xError2, _xkwds_get1, _xkwds_item2
@@ -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__ = '25.04.14'
29
+ __version__ = '25.05.12'
30
30
 
31
31
 
32
32
  def _copysign_0_0(y):
pygeodesy/datums.py CHANGED
@@ -65,7 +65,7 @@ datum, q.v. U{"A Guide to Coordinate Systems in Great Britain", Section 6
65
65
  @var Transforms.WGS84: Transform(name='WGS84', tx=0.0, ty=0.0, tz=0.0, s1=1.0, rx=0.0, ry=0.0, rz=0.0, s=0.0, sx=0.0, sy=0.0, sz=0.0)
66
66
  '''
67
67
  # make sure int/int division yields float quotient, see .basics
68
- from __future__ import division as _; del _ # PYCHOK semicolon
68
+ from __future__ import division as _; del _ # noqa: E702 ;
69
69
 
70
70
  from pygeodesy.basics import _isin, islistuple, map2, neg, _xinstanceof, _zip
71
71
  from pygeodesy.constants import R_M, _float as _F, _0_0, _1_0, _2_0, _8_0, _3600_0
@@ -94,7 +94,7 @@ from pygeodesy.units import _isRadius, Radius_, radians
94
94
  # import operator as _operator # from .fmath
95
95
 
96
96
  __all__ = _ALL_LAZY.datums
97
- __version__ = '25.04.14'
97
+ __version__ = '25.05.12'
98
98
 
99
99
  _a_ellipsoid_ = _UNDER_(_a_, _ellipsoid_)
100
100
  _BD72_ = 'BD72'
@@ -10,13 +10,13 @@ bases} or C{from pygeodesy.deprecated import bases}. Likewise for C{datum} and
10
10
  C{nvector}.
11
11
  '''
12
12
 
13
- from pygeodesy.deprecated.bases import * # PYCHOK not pygeodesy.__init__
14
- from pygeodesy.deprecated.datum import * # PYCHOK not pygeodesy.__init__
15
- from pygeodesy.deprecated.nvector import * # PYCHOK not pygeodesy.__init__
13
+ from pygeodesy.deprecated.bases import * # noqa: F403 not pygeodesy.__init__
14
+ from pygeodesy.deprecated.datum import * # noqa: F403 not pygeodesy.__init__
15
+ from pygeodesy.deprecated.nvector import * # noqa: F403 not pygeodesy.__init__
16
16
 
17
- from pygeodesy.deprecated.classes import * # PYCHOK expected
18
- from pygeodesy.deprecated.consterns import * # PYCHOK expected
19
- from pygeodesy.deprecated.functions import * # PYCHOK expected
17
+ from pygeodesy.deprecated.classes import * # noqa: F403
18
+ from pygeodesy.deprecated.consterns import * # noqa: F403
19
+ from pygeodesy.deprecated.functions import * # noqa: F403
20
20
 
21
21
  from pygeodesy.lazily import _ALL_ATTRS, _ALL_DEPRECATED, _lazy_import_as, _unLazy0 # _lazy_import_star
22
22
 
@@ -27,11 +27,11 @@ __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.12.31'
30
+ __version__ = '25.05.12'
31
31
 
32
32
  if _unLazy0:
33
33
  from pygeodesy.deprecated import bases, datum, nvector, rhumbBase, \
34
- rhumbaux, rhumbsolve, rhumbx # PYCHOK expected
34
+ rhumbaux, rhumbsolve, rhumbx # noqa: F401 PYCHOK expected
35
35
  __all__ += _ALL_ATTRS(_ALL_DEPRECATED.deprecated) # DEPRECATED modules
36
36
 
37
37
  else: # lazily import modules and exported attrs
@@ -4,12 +4,12 @@
4
4
  u'''DEPRECATED on 2021.02.10, use (INTERNAL) module L{pygeodesy.latlonBase} instead.
5
5
  '''
6
6
 
7
- from pygeodesy.iters import points2 # PYCHOK exported
7
+ from pygeodesy.iters import points2 # noqa: F401
8
8
  from pygeodesy.latlonBase import LatLonBase as _LatLonBase
9
9
  from pygeodesy.lazily import _ALL_DEPRECATED
10
10
 
11
11
  __all__ = _ALL_DEPRECATED.deprecated_bases
12
- __version__ = '25.04.09'
12
+ __version__ = '25.05.12'
13
13
 
14
14
 
15
15
  class LatLonHeightBase(_LatLonBase): # PYCHOK no cover
@@ -4,10 +4,10 @@
4
4
  u'''DEPRECATED on 2023.11.26, use module L{pygeodesy.rhumb.bases} instead.
5
5
  '''
6
6
 
7
- from pygeodesy.rhumb.bases import * # PYCHOK expected
7
+ from pygeodesy.rhumb.bases import * # noqa: F403
8
8
 
9
9
  __all__ = () # _ALL_LAZY.rhumb._bases
10
- __version__ = '23.11.26'
10
+ __version__ = '25.05.12'
11
11
 
12
12
  # **) MIT License
13
13
  #
@@ -4,11 +4,11 @@
4
4
  u'''DEPRECATED on 2023.11.26, use module L{pygeodesy.rhumb.aux_} instead.
5
5
  '''
6
6
 
7
- from pygeodesy.rhumb.aux_ import * # PYCHOK expected
7
+ from pygeodesy.rhumb.aux_ import * # noqa: F403
8
8
  from pygeodesy.lazily import _ALL_LAZY
9
9
 
10
10
  __all__ = _ALL_LAZY.rhumb_aux_ # attrs NOT DEPRECATED
11
- __version__ = '23.12.02'
11
+ __version__ = '25.05.12'
12
12
 
13
13
  # **) MIT License
14
14
  #
@@ -4,11 +4,11 @@
4
4
  u'''DEPRECATED on 2023.11.26, use module L{pygeodesy.rhumb.solve} instead.
5
5
  '''
6
6
 
7
- from pygeodesy.rhumb.solve import * # PYCHOK expected
7
+ from pygeodesy.rhumb.solve import * # noqa: F403
8
8
  from pygeodesy.lazily import _ALL_LAZY
9
9
 
10
10
  __all__ = _ALL_LAZY.rhumb_solve # attrs NOT DEPRECATED
11
- __version__ = '23.11.26'
11
+ __version__ = '25.05.12'
12
12
 
13
13
  # **) MIT License
14
14
  #
@@ -4,11 +4,11 @@
4
4
  u'''DEPRECATED on 2023.11.26, use module L{pygeodesy.rhumb.ekx} instead.
5
5
  '''
6
6
 
7
- from pygeodesy.rhumb.ekx import * # PYCHOK expected
7
+ from pygeodesy.rhumb.ekx import * # noqa: F403
8
8
  from pygeodesy.lazily import _ALL_LAZY
9
9
 
10
10
  __all__ = _ALL_LAZY.rhumb_ekx # attrs NOT DEPRECATED
11
- __version__ = '23.11.30'
11
+ __version__ = '25.05.12'
12
12
 
13
13
  # **) MIT License
14
14
  #
pygeodesy/ecef.py CHANGED
@@ -60,9 +60,8 @@ plane} as opposed to I{geocentric} (ECEF) ones.
60
60
  from pygeodesy.basics import copysign0, _isin, isscalar, issubclassof, neg, map1, \
61
61
  _xinstanceof, _xsubclassof, typename # _args_kwds_names
62
62
  from pygeodesy.constants import EPS, EPS0, EPS02, EPS1, EPS2, EPS_2, INT0, PI, PI_2, \
63
- _0_0, _0_0001, _0_01, _0_5, _1_0, _1_0_1T, _N_1_0, \
64
- _2_0, _N_2_0, _3_0, _4_0, _6_0, _60_0, _90_0, _N_90_0, \
65
- _100_0, _copysign_1_0, isnon0 # PYCHOK used!
63
+ _0_0, _0_5, _1_0, _1_0_1T, _2_0, _N_2_0, _3_0, _4_0, \
64
+ _6_0, _90_0, _N_90_0, _copysign_1_0, isnon0 # PYCHOK used!
66
65
  from pygeodesy.datums import _ellipsoidal_datum, _WGS84, a_f2Tuple, _EWGS84
67
66
  from pygeodesy.ecefLocals import _EcefLocal
68
67
  # from pygeodesy.ellipsoids import a_f2Tuple, _EWGS84 # from .datums
@@ -90,7 +89,7 @@ from pygeodesy.utily import atan1, atan1d, atan2, atan2d, degrees90, degrees180,
90
89
  from math import cos, degrees, fabs, radians, sqrt
91
90
 
92
91
  __all__ = _ALL_LAZY.ecef
93
- __version__ = '25.04.28'
92
+ __version__ = '25.05.07'
94
93
 
95
94
  _Ecef_ = 'Ecef'
96
95
  _prolate_ = 'prolate'
@@ -10,7 +10,7 @@ and published under the same MIT Licence**, see for example U{latlon-ellipsoidal
10
10
  <https://www.Movable-Type.co.UK/scripts/geodesy/docs/latlon-ellipsoidal.js.html>}.
11
11
  '''
12
12
  # make sure int/int division yields float quotient, see .basics
13
- from __future__ import division as _; del _ # PYCHOK semicolon
13
+ from __future__ import division as _; del _ # noqa: E702 ;
14
14
 
15
15
  # from pygeodesy.azimuthal import EquidistantExact, EquidistantKarney # _MODS
16
16
  from pygeodesy.basics import _isin, _xinstanceof
@@ -46,7 +46,7 @@ from pygeodesy.units import Epoch, _isDegrees, Radius_, _1mm as _TOL_M
46
46
  # from math import fabs # from .latlonBase
47
47
 
48
48
  __all__ = _ALL_LAZY.ellipsoidalBase
49
- __version__ = '25.04.14'
49
+ __version__ = '25.05.12'
50
50
 
51
51
 
52
52
  class CartesianEllipsoidalBase(CartesianBase):
@@ -5,7 +5,7 @@ u'''(INTERNAL) Private, ellipsoidal Direct/Inverse geodesy base
5
5
  class C{LatLonEllipsoidalBaseDI} and functions.
6
6
  '''
7
7
  # make sure int/int division yields float quotient, see .basics
8
- from __future__ import division as _; del _ # PYCHOK semicolon
8
+ from __future__ import division as _; del _ # noqa: E702 ;
9
9
 
10
10
  # from pygeodesy.azimuthal import _Equidistants # _MODS
11
11
  from pygeodesy.basics import isLatLon, _xsubclassof, typename
@@ -36,7 +36,7 @@ from pygeodesy.utily import m2km, unroll180, _unrollon, _unrollon3, _Wrap, wrap3
36
36
  from math import degrees, radians
37
37
 
38
38
  __all__ = _ALL_LAZY.ellipsoidalBaseDI
39
- __version__ = '25.04.21'
39
+ __version__ = '25.05.23'
40
40
 
41
41
  _polar__ = 'polar?'
42
42
  _TRIPS = 33 # _intersect3, _intersects2, _nearestOn interations, 6..9 sufficient?
@@ -115,14 +115,15 @@ class LatLonEllipsoidalBaseDI(LatLonEllipsoidalBase):
115
115
  r = self._Direct2Tuple(LL, height, r)
116
116
  return r
117
117
 
118
- def _Direct2Tuple(self, LL, height, r):
118
+ def _Direct2Tuple(self, LL, height, r): # in .ellipsoidalVincenty.py
119
119
  '''(INTERNAL) Helper for C{._Direct} result L{Destination2Tuple}.
120
120
  '''
121
121
  h = self._heigHt(height)
122
- d = _xkwds_not(None, datum=self.datum, name=self.name,
122
+ n = self.name
123
+ d = _xkwds_not(None, datum=self.datum, height=h, name=n,
123
124
  epoch=self.epoch, reframe=self.reframe)
124
- d = LL(*_Wrap.latlon(r.lat, r.lon), height=h, **d)
125
- return Destination2Tuple(d, wrap360(r.final), name=self.name)
125
+ d = LL(*_Wrap.latlon(r.lat, r.lon), **d)
126
+ return Destination2Tuple(d, wrap360(r.final), name=n)
126
127
 
127
128
  def distanceTo(self, other, wrap=False, **unused): # radius=R_M
128
129
  '''Compute the distance between this and an other point along
@@ -11,12 +11,12 @@ L{GeodesicExact}, L{GeodesicAreaExact} and L{GeodesicLineExact}.
11
11
 
12
12
  # from pygeodesy.datums import _WGS84 # from .ellipsoidalBase
13
13
  from pygeodesy.ellipsoidalBase import CartesianEllipsoidalBase, \
14
- _nearestOn, _WGS84
14
+ _nearestOn, _WGS84
15
15
  from pygeodesy.ellipsoidalBaseDI import LatLonEllipsoidalBaseDI, \
16
16
  _intersection3, _intersections2, \
17
17
  _TOL_M, intersecant2
18
18
  # from pygeodesy.errors import _xkwds # from .karney
19
- from pygeodesy.karney import fabs, _polygon, Property_RO, _xkwds
19
+ from pygeodesy.karney import _polygon, fabs, Property_RO, _xkwds
20
20
  from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _ALL_OTHER
21
21
  from pygeodesy.points import _areaError, ispolar # PYCHOK exported
22
22
  # from pygeodesy.props import Property_RO # from .karney
@@ -24,7 +24,7 @@ from pygeodesy.points import _areaError, ispolar # PYCHOK exported
24
24
  # from math import fabs # from .karney
25
25
 
26
26
  __all__ = _ALL_LAZY.ellipsoidalExact
27
- __version__ = '24.11.06'
27
+ __version__ = '25.05.12'
28
28
 
29
29
 
30
30
  class Cartesian(CartesianEllipsoidalBase):
@@ -21,7 +21,7 @@ See also I{Kenneth Gade} U{'A Non-singular Horizontal Position Representation'
21
21
  The Journal of Navigation (2010), vol 63, nr 3, pp 395-417.
22
22
  '''
23
23
  # make sure int/int division yields float quotient, see .basics
24
- from __future__ import division as _; del _ # PYCHOK semicolon
24
+ from __future__ import division as _; del _ # noqa: E702 ;
25
25
 
26
26
  from pygeodesy.basics import _isin, issubclassof, map2, _xinstanceof, \
27
27
  _xsubclassof
@@ -32,7 +32,7 @@ from pygeodesy.ellipsoidalBase import CartesianEllipsoidalBase, \
32
32
  _nearestOn, LatLonEllipsoidalBase, \
33
33
  _TOL_M, _Wrap
34
34
  from pygeodesy.errors import _xkwds, _xkwds_pop2
35
- # from pygeodesy.fmath import fdot # from .nvectorBase
35
+ from pygeodesy.fmath import fdot, fabs
36
36
  # from pygeodesy.formy import _isequalTo # _MODS
37
37
  from pygeodesy.interns import _Nv00_, _COMMASPACE_, _pole_ # PYCHOK used!
38
38
  from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _ALL_OTHER
@@ -41,7 +41,7 @@ from pygeodesy.ltpTuples import Aer as _Aer, Ned as _Ned, Ned4Tuple, \
41
41
  sincos2d_, _xnamed
42
42
  # from pygeodesy.named import _xnamed # from .ltpTuples
43
43
  from pygeodesy.nvectorBase import LatLonNvectorBase, NorthPole, NvectorBase, \
44
- sumOf as _sumOf, fabs, fdot
44
+ sumOf as _sumOf
45
45
  from pygeodesy.props import deprecated_class, deprecated_function, \
46
46
  deprecated_method, Property_RO, property_RO
47
47
  from pygeodesy.streprs import Fmt, fstr, _xzipairs
@@ -51,7 +51,7 @@ from pygeodesy.units import Bearing, Distance, Height, Scalar
51
51
  # from math import fabs # from .nvectorBase
52
52
 
53
53
  __all__ = _ALL_LAZY.ellipsoidalNvector
54
- __version__ = '25.04.21'
54
+ __version__ = '25.05.12'
55
55
 
56
56
 
57
57
  class Ned(_Ned):
@@ -48,7 +48,7 @@ or by converting to anothor datum:
48
48
  >>> p = p.toDatum(Datums.OSGB36)
49
49
  '''
50
50
  # make sure int/int division yields float quotient, see .basics
51
- from __future__ import division as _; del _ # PYCHOK semicolon
51
+ from __future__ import division as _; del _ # noqa: E702 ;
52
52
 
53
53
  from pygeodesy.constants import EPS, EPS0, _0_0, _1_0, _2_0, _3_0, _4_0, _6_0
54
54
  # from pygeodesy.ecef import EcefVeness # _MODS
@@ -59,7 +59,7 @@ from pygeodesy.ellipsoidalBaseDI import LatLonEllipsoidalBaseDI, \
59
59
  # from pygeodesy.ellipsoidalExact import areaOf, perimeterOf # _MODS
60
60
  # from pygeodesy.ellipsoidalKarney import areaOf, perimeterOf # _MODS
61
61
  from pygeodesy.errors import _and, _ValueError, _xkwds
62
- from pygeodesy.fmath import Fpolynomial, hypot, hypot1
62
+ from pygeodesy.fmath import fdot_, Fpolynomial, hypot, hypot1
63
63
  from pygeodesy.interns import _ambiguous_, _antipodal_, _COLONSPACE_, \
64
64
  _to_, _SPACE_, _limit_ # PYCHOK used!
65
65
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
@@ -76,7 +76,7 @@ from pygeodesy.utily import atan2, atan2b, atan2d, sincos2, sincos2d, \
76
76
  from math import cos, degrees, fabs, radians, tan as _tan
77
77
 
78
78
  __all__ = _ALL_LAZY.ellipsoidalVincenty
79
- __version__ = '25.04.21'
79
+ __version__ = '25.05.23'
80
80
 
81
81
  _antipodal_to_ = _SPACE_(_antipodal_, _to_)
82
82
 
@@ -230,13 +230,13 @@ class LatLon(LatLonEllipsoidalBaseDI):
230
230
  t = self._no_convergence(e)
231
231
  raise VincentyError(t, txt=repr(self)) # self.toRepr()
232
232
 
233
- t = s1 * ss - c1 * cs * cb
233
+ t = fdot_(s1, ss, -c1, cs * cb)
234
234
  # final bearing (reverse azimuth +/- 180)
235
235
  d = atan2b(sa, -t)
236
236
  if llr:
237
237
  b = cb * ss
238
- a = atan2d(s1 * cs + c1 * b, hypot(sa, t) * E.b_a)
239
- b = atan2d(sb * ss, -s1 * b + c1 * cs) + self.lon \
238
+ a = atan2d(fdot_(s1, cs, c1, b), hypot(sa, t) * E.b_a)
239
+ b = atan2d(sb * ss, fdot_(-s1, b, c1, cs)) + self.lon \
240
240
  - degrees(_Dl(f, ca2, sa, s, cs, ss, c2sm))
241
241
  t = Destination3Tuple(a, wrap180(b), d)
242
242
  r = self._Direct2Tuple(self.classof, height, t)
@@ -349,6 +349,13 @@ def _c2sm2(c2sm):
349
349
  return c2sm**2 * _2_0 - _1_0
350
350
 
351
351
 
352
+ def _ellipsoidal(): # helper for areaOf and perimeterOf
353
+ try:
354
+ return _MODS.ellipsoidalKarney
355
+ except ImportError:
356
+ return _MODS.ellipsoidalExact
357
+
358
+
352
359
  def _Dl(f, ca2, sa, s, cs, ss, c2sm, dl=_0_0):
353
360
  # C{Dl}
354
361
  if f and sa:
@@ -399,10 +406,7 @@ def _sincostan3r(a, f):
399
406
  def areaOf(points, **datum_wrap):
400
407
  '''DEPRECATED, use function L{ellipsoidalExact.areaOf} or L{ellipsoidalKarney.areaOf}.
401
408
  '''
402
- try:
403
- return _MODS.ellipsoidalKarney.areaOf(points, **datum_wrap)
404
- except ImportError:
405
- return _MODS.ellipsoidalExact.areaOf(points, **datum_wrap)
409
+ return _ellipsoidal().areaOf(points, **datum_wrap)
406
410
 
407
411
 
408
412
  def intersection3(start1, end1, start2, end2, height=None, wrap=False, # was=True
@@ -558,10 +562,7 @@ def nearestOn(point, point1, point2, within=True, height=None, wrap=False,
558
562
  def perimeterOf(points, **closed_datum_wrap):
559
563
  '''DEPRECATED, use function L{ellipsoidalExact.perimeterOf} or L{ellipsoidalKarney.perimeterOf}.
560
564
  '''
561
- try:
562
- return _MODS.ellipsoidalKarney.perimeterOf(points, **closed_datum_wrap)
563
- except ImportError:
564
- return _MODS.ellipsoidalExact.perimeterOf(points, **closed_datum_wrap)
565
+ return _ellipsoidal().perimeterOf(points, **closed_datum_wrap)
565
566
 
566
567
 
567
568
  __all__ += _ALL_DOCS(Cartesian, LatLon, intersecant2, # from .ellipsoidalBaseDI
pygeodesy/ellipsoids.py CHANGED
@@ -62,7 +62,7 @@ Following is the list of predefined L{Ellipsoid}s, all instantiated lazily.
62
62
  @var Ellipsoids.WGS84_NGS: Ellipsoid(name='WGS84_NGS', a=6378137, f=0.00335281, f_=298.2572221, b=6356752.31414035)
63
63
  '''
64
64
  # make sure int/int division yields float quotient, see .basics
65
- from __future__ import division as _; del _ # PYCHOK semicolon
65
+ from __future__ import division as _; del _ # noqa: E702 ;
66
66
 
67
67
  # from pygeodesy.albers import AlbersEqualAreaCylindrical # _MODS
68
68
  from pygeodesy.basics import copysign0, isbool, _isin, isint, typename
@@ -95,7 +95,7 @@ from pygeodesy.utily import atan1, atan1d, atan2b, degrees90, m2radians, radians
95
95
  from math import asinh, atan, atanh, cos, degrees, exp, fabs, radians, sin, sinh, sqrt, tan # as _tan
96
96
 
97
97
  __all__ = _ALL_LAZY.ellipsoids
98
- __version__ = '25.04.28'
98
+ __version__ = '25.05.12'
99
99
 
100
100
  _f_0_0 = Float(f =_0_0) # zero flattening
101
101
  _f__0_0 = Float(f_=_0_0) # zero inverse flattening
@@ -398,7 +398,7 @@ class Ellipsoid(_NamedEnumItem):
398
398
  def AlphaKs(self):
399
399
  '''Get the I{Krüger} U{Alpha series coefficients<https://GeographicLib.SourceForge.io/C++/doc/tmseries30.html>} (C{KsOrder}C{-tuple}).
400
400
  '''
401
- return self._Kseries( # XXX int/int quotients may require from __future__ import division as _; del _ # PYCHOK semicolon
401
+ return self._Kseries( # XXX int/int quotients may require from __future__ import division as _; del _ # noqa: E702 ;
402
402
  # n n**2 n**3 n**4 n**5 n**6 n**7 n**8
403
403
  _T(1/2, -2/3, 5/16, 41/180, -127/288, 7891/37800, 72161/387072, -18975107/50803200),
404
404
  _T(13/48, -3/5, 557/1440, 281/630, -1983433/1935360, 13769/28800, 148003883/174182400), # PYCHOK unaligned
@@ -617,7 +617,7 @@ class Ellipsoid(_NamedEnumItem):
617
617
  def BetaKs(self):
618
618
  '''Get the I{Krüger} U{Beta series coefficients<https://GeographicLib.SourceForge.io/C++/doc/tmseries30.html>} (C{KsOrder}C{-tuple}).
619
619
  '''
620
- return self._Kseries( # XXX int/int quotients may require from __future__ import division as _; del _ # PYCHOK semicolon
620
+ return self._Kseries( # XXX int/int quotients may require from __future__ import division as _; del _ # noqa: E702 ;
621
621
  # n n**2 n**3 n**4 n**5 n**6 n**7 n**8
622
622
  _T(1/2, -2/3, 37/96, -1/360, -81/512, 96199/604800, -5406467/38707200, 7944359/67737600),
623
623
  _T(1/48, 1/15, -437/1440, 46/105, -1118711/3870720, 51841/1209600, 24749483/348364800), # PYCHOK unaligned
pygeodesy/elliptic.py CHANGED
@@ -73,7 +73,7 @@ The notation follows U{NIST Digital Library of Mathematical Functions
73
73
  U{22<https://DLMF.NIST.gov/22>}.
74
74
  '''
75
75
  # make sure int/int division yields float quotient, see .basics
76
- from __future__ import division as _; del _ # PYCHOK semicolon
76
+ from __future__ import division as _; del _ # noqa: E702 ;
77
77
 
78
78
  from pygeodesy.basics import copysign0, map2, neg, neg_, typename
79
79
  from pygeodesy.constants import EPS, INF, NAN, PI, PI_2, PI_4, _0_0, \
@@ -99,7 +99,7 @@ from math import asin, asinh, atan, ceil, cosh, fabs, floor, radians, \
99
99
  sin, sinh, sqrt, tan, tanh # tan as _tan
100
100
 
101
101
  __all__ = _ALL_LAZY.elliptic
102
- __version__ = '25.04.14'
102
+ __version__ = '25.05.12'
103
103
 
104
104
  _TolRD = zqrt(EPS * 0.002)
105
105
  _TolRF = zqrt(EPS * 0.030)
pygeodesy/errors.py CHANGED
@@ -27,7 +27,7 @@ from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _PYTHON_X_DEV
27
27
  from copy import copy as _copy
28
28
 
29
29
  __all__ = _ALL_LAZY.errors # _ALL_DOCS('_InvalidError', '_IsnotError') _under
30
- __version__ = '25.04.21'
30
+ __version__ = '25.05.19'
31
31
 
32
32
  _argument_ = 'argument'
33
33
  _basics = _MODS.into(basics=__name__)
pygeodesy/etm.py CHANGED
@@ -61,7 +61,7 @@ control round-off. For example, C{atanh(sin(phi))} is replaced by C{asinh(tan(p
61
61
  which maintains accuracy near C{phi = pi/2}. Such changes are noted in the code.
62
62
  '''
63
63
  # make sure int/int division yields float quotient, see .basics
64
- from __future__ import division as _; del _ # PYCHOK semicolon
64
+ from __future__ import division as _; del _ # noqa: E702 ;
65
65
 
66
66
  from pygeodesy.basics import _isin, map1, neg, neg_, _xinstanceof
67
67
  from pygeodesy.constants import EPS, EPS02, PI_2, PI_4, _K0_UTM, \
@@ -93,7 +93,7 @@ from pygeodesy.utm import _cmlon, _LLEB, _parseUTM5, _toBand, _toXtm8, \
93
93
  from math import asinh, degrees, radians, sinh, sqrt
94
94
 
95
95
  __all__ = _ALL_LAZY.etm
96
- __version__ = '25.04.14'
96
+ __version__ = '25.05.12'
97
97
 
98
98
  _OVERFLOW = _1_EPS**2 # ~2e+31
99
99
  _TAYTOL = pow(EPS, 0.6)
pygeodesy/fmath.py CHANGED
@@ -5,7 +5,7 @@ u'''Utilities for precision floating point summation, multiplication,
5
5
  C{fused-multiply-add}, polynomials, roots, etc.
6
6
  '''
7
7
  # make sure int/int division yields float quotient, see .basics
8
- from __future__ import division as _; del _ # PYCHOK semicolon
8
+ from __future__ import division as _; del _ # noqa: E702 ;
9
9
 
10
10
  from pygeodesy.basics import _copysign, copysign0, isbool, isint, isscalar, \
11
11
  len2, map1, _xiterable, typename
@@ -19,13 +19,13 @@ from pygeodesy.fsums import _2float, Fsum, fsum, _isFsum_2Tuple, Fmt, unstr
19
19
  from pygeodesy.interns import MISSING, _negative_, _not_scalar_
20
20
  from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS
21
21
  # from pygeodesy.streprs import Fmt, unstr # from .fsums
22
- from pygeodesy.units import Int_, _isHeight, _isRadius, Float_ # PYCHOK for .heights
22
+ from pygeodesy.units import Int_, _isHeight, _isRadius
23
23
 
24
24
  from math import fabs, sqrt # pow
25
25
  import operator as _operator # in .datums, .trf, .utm
26
26
 
27
27
  __all__ = _ALL_LAZY.fmath
28
- __version__ = '25.04.30'
28
+ __version__ = '25.05.12'
29
29
 
30
30
  # sqrt(2) - 1 <https://WikiPedia.org/wiki/Square_root_of_2>
31
31
  _0_4142 = 0.41421356237309504880 # ~ 3_730_904_090_310_553 / 9_007_199_254_740_992
@@ -37,7 +37,7 @@ class Fdot(Fsum):
37
37
  '''Precision dot product.
38
38
  '''
39
39
  def __init__(self, a, *b, **start_name_f2product_nonfinites_RESIDUAL):
40
- '''New L{Fdot} precision dot product M{sum(a[i] * b[i] for i=0..len(a)-1)}.
40
+ '''New L{Fdot} precision dot product M{start + sum(a[i] * b[i] for i=0..len(a)-1)}.
41
41
 
42
42
  @arg a: Iterable of values (each C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
43
43
  @arg b: Other values (each C{scalar}, an L{Fsum} or L{Fsum2Tuple}), all
@@ -70,7 +70,7 @@ class Fdot_(Fdot):
70
70
  '''Precision dot product.
71
71
  '''
72
72
  def __init__(self, *xys, **start_name_f2product_nonfinites_RESIDUAL):
73
- '''New L{Fdot_} precision dot product M{sum(xys[i] * xys[i+1] for i in
73
+ '''New L{Fdot_} precision dot product M{start + sum(xys[i] * xys[i+1] for i in
74
74
  range(0, len(xys), B{2}))}.
75
75
 
76
76
  @arg xys: Pairwise values (each C{scalar}, an L{Fsum} or L{Fsum2Tuple}),
@@ -439,7 +439,7 @@ def favg(a, b, f=_0_5, nonfinites=True):
439
439
 
440
440
 
441
441
  def fdot(xs, *ys, **start_f2product_nonfinites):
442
- '''Return the precision dot product M{sum(xs[i] * ys[i] for i in range(len(xs)))}.
442
+ '''Return the precision dot product M{start + sum(xs[i] * ys[i] for i in range(len(xs)))}.
443
443
 
444
444
  @arg xs: Iterable of values (each C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
445
445
  @arg ys: Other values (each C{scalar}, an L{Fsum} or L{Fsum2Tuple}), all positional.
@@ -460,7 +460,7 @@ def fdot(xs, *ys, **start_f2product_nonfinites):
460
460
 
461
461
 
462
462
  def fdot_(*xys, **start_f2product_nonfinites):
463
- '''Return the (precision) dot product M{sum(xys[i] * xys[i+1] for i in range(0, len(xys), B{2}))}.
463
+ '''Return the (precision) dot product M{start + sum(xys[i] * xys[i+1] for i in range(0, len(xys), B{2}))}.
464
464
 
465
465
  @arg xys: Pairwise values (each C{scalar}, an L{Fsum} or L{Fsum2Tuple}), all positional.
466
466
 
@@ -987,7 +987,7 @@ def _powers(x, n):
987
987
 
988
988
 
989
989
  def _root(x, p, where):
990
- '''(INTERNAL) Raise C{x} to power C{0 < p < 1}.
990
+ '''(INTERNAL) Raise C{x} to power C{0 <= p < 1}.
991
991
  '''
992
992
  try:
993
993
  if x > 0:
@@ -997,7 +997,7 @@ def _root(x, p, where):
997
997
  raise ValueError(_negative_)
998
998
  except Exception as X:
999
999
  raise _xError(X, unstr(where, x))
1000
- return _0_0 if p else _1_0
1000
+ return _0_0 if p else _1_0 # x == 0
1001
1001
 
1002
1002
 
1003
1003
  def sqrt0(x, Error=None):
pygeodesy/formy.py CHANGED
@@ -4,7 +4,7 @@
4
4
  u'''Formulary of basic geodesy functions and approximations.
5
5
  '''
6
6
  # make sure int/int division yields float quotient, see .basics
7
- from __future__ import division as _; del _ # PYCHOK semicolon
7
+ from __future__ import division as _; del _ # noqa: E702 ;
8
8
 
9
9
  from pygeodesy.basics import _copysign, _isin # _args_kwds_count2
10
10
  # from pygeodesy.cartesianBase import CartesianBase # _MODS
@@ -42,7 +42,7 @@ from contextlib import contextmanager
42
42
  from math import atan, cos, degrees, fabs, radians, sin, sqrt # pow
43
43
 
44
44
  __all__ = _ALL_LAZY.formy
45
- __version__ = '25.04.14'
45
+ __version__ = '25.05.12'
46
46
 
47
47
  _RADIANS2 = radians(_1_0)**2 # degree to radians-squared
48
48
  _ratio_ = 'ratio'