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/namedTuples.py CHANGED
@@ -10,7 +10,7 @@ of C{_NamedTuple} defined in C{pygeodesy.named}.
10
10
 
11
11
  from pygeodesy.basics import isinstanceof, issubclassof, map1, _xinstanceof
12
12
  # from pygeodesy.cartesianBase import CartesianBase # _MODS
13
- # from pygeodesy.constants import INT0 # from .units
13
+ from pygeodesy.constants import INT0
14
14
  # from pygeodesy.dms import toDMS # _MODS
15
15
  from pygeodesy.errors import _TypeError, _xattr, _xkwds, _xkwds_not
16
16
  from pygeodesy.interns import NN, _1_, _2_, _a_, _A_, _area_, _angle_, _b_, _B_, \
@@ -26,10 +26,10 @@ from pygeodesy.props import deprecated_property_RO, property_RO
26
26
  from pygeodesy.units import Band, Bearing, Degrees, Degrees2, Easting, FIx, \
27
27
  Height, Int, Lam, Lat, Lon, Meter, Meter2, \
28
28
  Northing, Number_, Phi, Precision_, Radians, \
29
- Radius, Scalar, Str, INT0
29
+ Radius, Scalar, Str
30
30
 
31
31
  __all__ = _ALL_LAZY.namedTuples
32
- __version__ = '24.11.22'
32
+ __version__ = '25.05.12'
33
33
 
34
34
  # __DUNDER gets mangled in class
35
35
  _closest_ = 'closest'
pygeodesy/nvectorBase.py CHANGED
@@ -16,7 +16,7 @@ from pygeodesy.constants import EPS, EPS0, EPS1, EPS_2, R_M, \
16
16
  # from pygeodesy.datums import _spherical_datum # from .formy
17
17
  from pygeodesy.errors import IntersectionError, _ValueError, VectorError, \
18
18
  _xattrs, _xkwds, _xkwds_pop2
19
- from pygeodesy.fmath import fdot, fidw, hypot # PYCHOK fdot shared
19
+ from pygeodesy.fmath import fidw, hypot
20
20
  from pygeodesy.fsums import Fsum, fsumf_
21
21
  from pygeodesy.formy import _isequalTo, _spherical_datum
22
22
  # from pygeodesy.internals import _under # from .named
@@ -38,7 +38,7 @@ from pygeodesy.vector3d import Vector3d, _xyzhdlln4
38
38
  from math import degrees, fabs, sqrt
39
39
 
40
40
  __all__ = _ALL_LAZY.nvectorBase
41
- __version__ = '25.04.14'
41
+ __version__ = '25.05.12'
42
42
 
43
43
 
44
44
  class NvectorBase(Vector3d): # XXX kept private
pygeodesy/osgr.py CHANGED
@@ -24,7 +24,7 @@ U{A Guide<https://www.OrdnanceSurvey.co.UK/documents/resources/guide-coordinate-
24
24
  and U{Ordnance Survey National Grid<https://WikiPedia.org/wiki/Ordnance_Survey_National_Grid>}.
25
25
  '''
26
26
  # make sure int/int division yields float quotient, see .basics
27
- from __future__ import division as _; del _ # PYCHOK semicolon
27
+ from __future__ import division as _; del _ # noqa: E702 ;
28
28
 
29
29
  from pygeodesy.basics import halfs2, isbool, isfloat, map1, \
30
30
  _splituple, _xsubclassof, typename
@@ -54,7 +54,7 @@ from pygeodesy.utily import degrees90, degrees180, sincostan3, truncate
54
54
  from math import cos, fabs, radians, sin, sqrt
55
55
 
56
56
  __all__ = _ALL_LAZY.osgr
57
- __version__ = '25.04.12'
57
+ __version__ = '25.05.12'
58
58
 
59
59
  _equivalent_ = 'equivalent'
60
60
  _OSGR_ = 'OSGR'
pygeodesy/points.py CHANGED
@@ -52,8 +52,7 @@ from pygeodesy.named import classname, _NamedTuple, nameof, \
52
52
  notImplemented, notOverloaded
53
53
  from pygeodesy.namedTuples import Bounds2Tuple, Bounds4Tuple, LatLon2Tuple, \
54
54
  NearestOn3Tuple, NearestOn5Tuple, \
55
- Point3Tuple, Vector3Tuple, \
56
- PhiLam2Tuple # PYCHOK shared
55
+ Point3Tuple, Vector3Tuple
57
56
  from pygeodesy.props import Property_RO, property_doc_, property_RO
58
57
  from pygeodesy.streprs import Fmt, instr
59
58
  from pygeodesy.units import Number_, Radius, Scalar, Scalar_
@@ -63,7 +62,7 @@ from pygeodesy.utily import atan2b, degrees90, degrees180, degrees2m, \
63
62
  from math import cos, fabs, fmod as _fmod, radians, sin
64
63
 
65
64
  __all__ = _ALL_LAZY.points
66
- __version__ = '25.04.18'
65
+ __version__ = '25.05.12'
67
66
 
68
67
  _ilat_ = 'ilat'
69
68
  _ilon_ = 'ilon'
pygeodesy/props.py CHANGED
@@ -26,7 +26,7 @@ from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, \
26
26
  from functools import wraps as _wraps
27
27
 
28
28
  __all__ = _ALL_LAZY.props
29
- __version__ = '25.04.14'
29
+ __version__ = '25.05.21'
30
30
 
31
31
  _class_ = 'class'
32
32
  _DNL_ = _NL_ * 2 # PYCHOK used!
@@ -460,7 +460,7 @@ def _deprecated(call, kind, qual_d):
460
460
  @see: Brett Slatkin, "Effective Python", 2019 page 105, 2nd
461
461
  ed, Addison-Wesley.
462
462
  '''
463
- doc = _DOCof(call)
463
+ doc = _DEPRECATEDof(call)
464
464
 
465
465
  @_wraps(call) # PYCHOK self?
466
466
  def _deprecated_call(*args, **kwds):
@@ -517,6 +517,17 @@ def _deprecated_module(name): # PYCHOK no cover
517
517
  _throwarning(_module_, name, _dont_use_)
518
518
 
519
519
 
520
+ def _DEPRECATEDof(obj):
521
+ '''(INTERNAL) Get uniform DEPRECATED __doc__ string.
522
+ '''
523
+ try:
524
+ d = obj.__doc__.strip()
525
+ i = d.find(_DEPRECATED_)
526
+ except AttributeError:
527
+ i = -1
528
+ return _DOT_(_DEPRECATED_, NN) if i < 0 else d[i:]
529
+
530
+
520
531
  if _WARNINGS_X_DEV:
521
532
  class deprecated_property(_PropertyBase):
522
533
  '''Decorator for a DEPRECATED C{property} or C{Property}.
@@ -524,7 +535,7 @@ if _WARNINGS_X_DEV:
524
535
  def __init__(self, method):
525
536
  '''Decorator for a DEPRECATED C{property} or C{Property} getter.
526
537
  '''
527
- doc = _DOCof(method)
538
+ doc = _DEPRECATEDof(method)
528
539
 
529
540
  def _fget(inst): # PYCHOK no cover
530
541
  '''Get the C{property} or C{Property} value.
@@ -554,7 +565,7 @@ if _WARNINGS_X_DEV:
554
565
  '''Set the C{property} or C{Property} value.
555
566
  '''
556
567
  q = _qualified(inst, self.name)
557
- _throwarning(typename(property), q, _DOCof(method))
568
+ _throwarning(typename(property), q, _DEPRECATEDof(method))
558
569
  method(inst, val)
559
570
  # self._update(inst) # un-cache this item
560
571
 
@@ -594,7 +605,7 @@ def deprecated_property_RO(method):
594
605
  def _deprecated_RO(method, _RO):
595
606
  '''(INTERNAL) Create a DEPRECATED C{property_RO} or C{Property_RO}.
596
607
  '''
597
- doc = _DOCof(method)
608
+ doc = _DEPRECATEDof(method)
598
609
 
599
610
  if _WARNINGS_X_DEV:
600
611
 
@@ -614,17 +625,6 @@ def _deprecated_RO(method, _RO):
614
625
  return _RO(method, doc=doc)
615
626
 
616
627
 
617
- def _DOCof(obj):
618
- '''(INTERNAL) Get uniform DEPRECATED __doc__ string.
619
- '''
620
- try:
621
- d = obj.__doc__.strip()
622
- i = d.find(_DEPRECATED_)
623
- except AttributeError:
624
- i = -1
625
- return _DOT_(_DEPRECATED_, NN) if i < 0 else d[i:]
626
-
627
-
628
628
  def _qualified(inst, name):
629
629
  '''(INTERNAL) Fully qualify a name.
630
630
  '''
pygeodesy/resections.py CHANGED
@@ -10,7 +10,7 @@ L{triAngle}, L{triAngle5}, L{triSide}, L{triSide2} and L{triSide4}.
10
10
  U{Pierlot<http://www.Telecom.ULg.ac.BE/publi/publications/pierlot/Pierlot2014ANewThree>}.
11
11
  '''
12
12
  # make sure int/int division yields float quotient
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 map1, map2, _zip, _ALL_LAZY, typename
16
16
  from pygeodesy.constants import EPS, EPS0, EPS02, INT0, PI, PI2, PI_2, PI_4, \
@@ -34,7 +34,7 @@ from pygeodesy.vector3d import _otherV3d, Vector3d
34
34
  from math import cos, degrees, fabs, radians, sin, sqrt
35
35
 
36
36
  __all__ = _ALL_LAZY.resections
37
- __version__ = '25.05.04'
37
+ __version__ = '25.05.12'
38
38
 
39
39
  _concyclic_ = 'concyclic'
40
40
  _PA_ = 'PA'
@@ -798,12 +798,12 @@ def triArea(a, b, c):
798
798
  try:
799
799
  r, y, x = sorted(map1(float, a, b, c))
800
800
  if r > 0: # r = min(a, b, c)
801
- z = r
802
- d = x - y
803
- r = (z + d) * (z - d)
801
+ s = r
802
+ d = x - y
803
+ r = (s + d) * (s - d)
804
804
  if r:
805
- x += y
806
- r *= (x + z) * (x - z)
805
+ y += x
806
+ r *= (y + s) * (y - s)
807
807
  if r < 0:
808
808
  raise ValueError(_negative_)
809
809
  return sqrt(r / _16_0) if r else _0_0
@@ -927,9 +927,11 @@ def triSide4(radA, radB, c):
927
927
  sc = fsum1f_(sa * cb, sb * ca)
928
928
  if sc < EPS0 or min(sa, sb) < 0:
929
929
  raise ValueError(_invalid_)
930
- sc = c / sc
931
- return TriSide4Tuple((sa * sc), (sb * sc), rC, (sa * sb * sc),
932
- name=typename(triSide4))
930
+ sc = c / sc
931
+ sa *= sc
932
+ sd = sa * sb
933
+ sb *= sc
934
+ return TriSide4Tuple(sa, sb, rC, sd, name=typename(triSide4))
933
935
 
934
936
  except (TypeError, ValueError) as x:
935
937
  raise TriangleError(radA=radA, radB=radB, c=c, cause=x)
@@ -948,7 +950,8 @@ def wildberger3(a, b, c, alpha, beta, R3=min):
948
950
  @arg alpha: Angle subtended by triangle side B{C{b}} (C{degrees}, non-negative).
949
951
  @arg beta: Angle subtended by triangle side B{C{a}} (C{degrees}, non-negative).
950
952
  @kwarg R3: Callable to determine C{R3} from C{(R3 - C)**2 = D}, typically standard
951
- Python function C{min} or C{max}, invoked with 2 arguments.
953
+ Python function C{min} or C{max}, invoked with 2 arguments, each
954
+ C{float} or an L{Fsum<pygeodesy.fsums.Fsum>}.
952
955
 
953
956
  @return: L{Survey3Tuple}C{(PA, PB, PC)} with distance from survey point C{P} to
954
957
  each of the triangle corners C{A}, C{B} and C{C}, same units as B{C{a}},
@@ -962,19 +965,20 @@ def wildberger3(a, b, c, alpha, beta, R3=min):
962
965
  U{Devine Proportions, page 252<http://www.MS.LT/derlius/WildbergerDivineProportions.pdf>}
963
966
  and function L{snellius3}.
964
967
  '''
965
- def _s(x):
968
+ def _sin2(x):
966
969
  return sin(x)**2
967
970
 
968
971
  def _vpa(r3, q2, q3, s2, s3):
972
+ r4 = r3 * _4_0
973
+ s4 = r4 * s2
974
+ if isnear0(s4):
975
+ raise ValueError(_coincident_)
969
976
  r1 = s2 * q3 / s3
970
- r = r1 * r3 * _4_0
971
- R = _Fsumf_(r1, r3, -q2)
972
- R *= R # -(R**2 ...
973
- R -= r # ... - r) / s3
974
- n = -R.fover(s3)
975
- if n < 0 or r < EPS0:
977
+ N2 = _Fsumf_(r1, r3, -q2)**2
978
+ n = (r4 * r1 - N2).fover(s4)
979
+ if n < 0:
976
980
  raise ValueError(_coincident_)
977
- return sqrt((n / r) * q3) if n else _0_0
981
+ return sqrt(n) if n else _0_0
978
982
 
979
983
  try:
980
984
  a, b, c, da, db = _noneg(a, b, c, alpha, beta)
@@ -983,21 +987,23 @@ def wildberger3(a, b, c, alpha, beta, R3=min):
983
987
  raise ValueError(_coincident_)
984
988
 
985
989
  ra, rb = map1(radians, da, db)
986
- s1, s2, s3 = s = map1(_s, rb, ra, ra + rb) # rb, ra!
990
+ s1, s2, s3 = s = map1(_sin2, rb, ra, ra + rb) # rb, ra!
987
991
  if min(s) < EPS02:
988
992
  raise ValueError(_or(_coincident_, _colinear_))
993
+ s += _Fsumf_(*s), # == fsum1(s),
989
994
 
990
995
  Q = _Fsumf_(*q) # == a**2 + b**2 + ...
991
- s += _Fsumf_(*s), # == fsum1(s),
992
996
  C0 = Fdot(s, q1, q2, q3, -Q * _0_5)
993
997
  r3 = C0.fover(-s3) # C0 /= -s3
998
+
994
999
  Q *= Q # Q**2 - 2 * (a**4 + b**4 ...
995
- Q -= hypot2_(*q) *_2_0 # ... + c**4)
996
- d0 = Q.fmul(s1 * s2).fover(s3)
1000
+ Q -= hypot2_(*q) * _2_0 # ... + c**4)
1001
+ Q *= s1 * s2 # Q * s1 * s2 / s3
1002
+ d0 = Q.fover(s3)
997
1003
  if d0 > EPS02: # > c0
998
1004
  _xcallable(R3=R3)
999
1005
  d0 = sqrt(d0)
1000
- r3 = R3(float(C0 + d0), float(C0 - d0)) # XXX min or max
1006
+ r3 = R3(C0 + d0, C0 - d0).as_iscalar # XXX min or max
1001
1007
  elif d0 < (-EPS02):
1002
1008
  raise ValueError(_negative_)
1003
1009
 
pygeodesy/rhumb/aux_.py CHANGED
@@ -26,7 +26,7 @@ License. For more information, see the U{GeographicLib<https://GeographicLib.So
26
26
  windows/win32/fileio/naming-a-file#naming-conventions>} with and without extension.
27
27
  '''
28
28
  # make sure int/int division yields float quotient
29
- from __future__ import division as _; del _ # PYCHOK semicolon
29
+ from __future__ import division as _; del _ # noqa: E702 ;
30
30
 
31
31
  from pygeodesy.auxilats.auxAngle import AuxMu, AuxPhi, hypot
32
32
  from pygeodesy.auxilats.auxDLat import AuxDLat, _DClenshaw
@@ -48,7 +48,7 @@ from pygeodesy.rhumb.bases import RhumbBase, RhumbLineBase, \
48
48
  from math import ceil as _ceil, fabs, radians
49
49
 
50
50
  __all__ = _ALL_LAZY.rhumb_aux_
51
- __version__ = '25.04.12'
51
+ __version__ = '25.05.12'
52
52
 
53
53
  # DIGITS = (sizeof(real) * 8) bits
54
54
  # = (ctypes.sizeof(ctypes.c_double(1.0)) * 8) bits
pygeodesy/rhumb/bases.py CHANGED
@@ -21,7 +21,7 @@ Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2014-2024) and lice
21
21
  License. For more information, see the U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
22
22
  '''
23
23
  # make sure int/int division yields float quotient
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 _copysign, itemsorted, unsigned0, _xinstanceof
27
27
  from pygeodesy.constants import EPS, EPS0, EPS1, INT0, NAN, _over, \
@@ -44,7 +44,7 @@ from pygeodesy.namedTuples import Distance2Tuple, LatLon2Tuple
44
44
  from pygeodesy.props import deprecated_method, Property, Property_RO, \
45
45
  property_RO, _update_all
46
46
  from pygeodesy.streprs import Fmt, pairs
47
- from pygeodesy.units import Float_, Lat, Lon, Meter, Radius_, Int # PYCHOK shared
47
+ from pygeodesy.units import Float_, Lat, Lon, Meter, Radius_
48
48
  from pygeodesy.utily import acos1, _azireversed, _loneg, sincos2d, sincos2d_, \
49
49
  _unrollon, _Wrap
50
50
  from pygeodesy.vector3d import _intersect3d3, Vector3d # in .Intersection below
@@ -52,7 +52,7 @@ from pygeodesy.vector3d import _intersect3d3, Vector3d # in .Intersection below
52
52
  from math import cos, fabs
53
53
 
54
54
  __all__ = ()
55
- __version__ = '25.04.14'
55
+ __version__ = '25.05.12'
56
56
 
57
57
  _anti_ = _Dash('anti')
58
58
  _rls = [] # instances of C{RbumbLine...} to be updated
pygeodesy/rhumb/ekx.py CHANGED
@@ -20,7 +20,7 @@ Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2014-2024) and lice
20
20
  License. For more information, see the U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
21
21
  '''
22
22
  # make sure int/int division yields float quotient
23
- from __future__ import division as _; del _ # PYCHOK semicolon
23
+ from __future__ import division as _; del _ # noqa: E702 ;
24
24
 
25
25
  from pygeodesy.basics import copysign0, neg
26
26
  from pygeodesy.constants import PI_2, _0_0s, _0_0, _0_5, _1_0, \
@@ -31,8 +31,7 @@ from pygeodesy.errors import RhumbError, _xkwds_pop2, _Xorder
31
31
  from pygeodesy.fmath import hypot, hypot1
32
32
  # from pygeodesy.fsums import fsum1f_ # _MODS
33
33
  # from pygeodesy.karney import Caps # from .rhumb.bases
34
- from pygeodesy.ktm import KTransverseMercator, _Xs, \
35
- _AlpCoeffs, _BetCoeffs # PYCHOK used!
34
+ from pygeodesy.ktm import _Xs, _AlpCoeffs, _BetCoeffs # PYCHOK used!
36
35
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
37
36
  from pygeodesy.props import deprecated_method, Property, Property_RO, \
38
37
  property_RO
@@ -43,7 +42,7 @@ from pygeodesy.utily import atan1, sincos2_
43
42
  from math import asinh, atan, cos, cosh, radians, sin, sinh, sqrt, tan # as _tan
44
43
 
45
44
  __all__ = _ALL_LAZY.rhumb_ekx
46
- __version__ = '25.04.12'
45
+ __version__ = '25.05.12'
47
46
 
48
47
 
49
48
  class Rhumb(RhumbBase):
pygeodesy/rhumb/solve.py CHANGED
@@ -9,7 +9,7 @@ as an (exact) rhumb or rhumb line from I{either GeographicLib 2.0 or 2.2+}.
9
9
  path of the C{RhumbSolve} executable.
10
10
  '''
11
11
  from pygeodesy.basics import _xinstanceof
12
- from pygeodesy.constants import _0_0, _180_0, _N_180_0, _over, _90_0 # PYCHOK used!
12
+ from pygeodesy.constants import _180_0, _N_180_0, _over, _0_0 # PYCHOK used!
13
13
  from pygeodesy.errors import RhumbError # PYCHOK used!
14
14
  from pygeodesy.interns import NN, _a12_, _azi12_, _DMAIN_, _lat2_, _lon2_, _s12_, \
15
15
  _S12_, _UNDER_
@@ -21,7 +21,7 @@ from pygeodesy.solveBase import _SolveGDictBase, _SolveGDictLineBase
21
21
  from pygeodesy.utily import _unrollon, _Wrap, wrap360
22
22
 
23
23
  __all__ = _ALL_LAZY.rhumb_solve
24
- __version__ = '25.04.12'
24
+ __version__ = '25.05.07'
25
25
 
26
26
 
27
27
  class _RhumbSolveBase(_SolveGDictBase):
pygeodesy/simplify.py CHANGED
@@ -65,7 +65,7 @@ See:
65
65
  - U{https://PyPI.org/project/simplification}
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 len2 # from .fmath
71
71
  from pygeodesy.constants import EPS, R_M, _1_0
@@ -80,7 +80,7 @@ from pygeodesy.units import _ALL_LAZY, _1mm, Radius_
80
80
  from math import degrees, fabs, radians
81
81
 
82
82
  __all__ = _ALL_LAZY.simplify
83
- __version__ = '24.12.02'
83
+ __version__ = '25.05.12'
84
84
 
85
85
 
86
86
  # try:
pygeodesy/solveBase.py CHANGED
@@ -20,10 +20,10 @@ from pygeodesy.named import callername, _name2__, notOverloaded
20
20
  from pygeodesy.props import Property, Property_RO, property_RO, _update_all
21
21
  from pygeodesy.streprs import Fmt, fstr, fstrzs, pairs, strs
22
22
  from pygeodesy.units import Precision_
23
- from pygeodesy.utily import unroll180, wrap360 # PYCHOK shared
23
+ from pygeodesy.utily import unroll180
24
24
 
25
25
  __all__ = _ALL_LAZY.solveBase
26
- __version__ = '25.04.14'
26
+ __version__ = '25.05.12'
27
27
 
28
28
  _ERROR_ = 'ERROR'
29
29
 
@@ -10,10 +10,10 @@ and published under the same MIT Licence**, see
10
10
  U{Latitude/Longitude<https://www.Movable-Type.co.UK/scripts/latlong.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.basics import _copysign, isbool, _isin, isinstanceof, map1
16
- from pygeodesy.cartesianBase import CartesianBase, Bearing2Tuple
16
+ from pygeodesy.cartesianBase import CartesianBase
17
17
  from pygeodesy.constants import EPS, EPS0, PI, PI2, PI_2, R_M, \
18
18
  _0_0, _0_5, _1_0, _180_0, _360_0, \
19
19
  _over, isnear0, isnon0
@@ -24,9 +24,9 @@ from pygeodesy.fmath import favg, fdot, hypot, sqrt_a
24
24
  from pygeodesy.interns import _COMMA_, _concentric_, _datum_, _distant_, \
25
25
  _exceed_PI_radians_, _name_, _near_, \
26
26
  _radius_, _too_
27
- from pygeodesy.latlonBase import LatLonBase, _trilaterate5 # PYCHOK passed
27
+ from pygeodesy.latlonBase import LatLonBase
28
28
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
29
- # from pygeodesy.namedTuples import Bearing2Tuple # from .cartesianBase
29
+ # from pygeodesy.namedTuples import Bearing2Tuple # _MODS
30
30
  from pygeodesy.nvectorBase import NvectorBase, Fmt
31
31
  from pygeodesy.props import deprecated_method, property_doc_, property_RO, \
32
32
  _update_all
@@ -40,7 +40,7 @@ from pygeodesy.utily import acos1, asin1, atan2b, atan2d, degrees90, \
40
40
  from math import cos, fabs, log, sin, sqrt
41
41
 
42
42
  __all__ = _ALL_LAZY.sphericalBase
43
- __version__ = '25.04.14'
43
+ __version__ = '25.05.12'
44
44
 
45
45
 
46
46
  class CartesianSphericalBase(CartesianBase):
@@ -157,7 +157,7 @@ class LatLonSphericalBase(LatLonBase):
157
157
  # .initialBearingTo is inside .-Nvector and .-Trigonometry
158
158
  i = self.initialBearingTo(other, wrap=wrap, raiser=raiser) # PYCHOK .initialBearingTo
159
159
  f = self.finalBearingTo( other, wrap=wrap, raiser=raiser)
160
- return Bearing2Tuple(i, f, name=self.name)
160
+ return _MODS.namedTuples.Bearing2Tuple(i, f, name=self.name)
161
161
 
162
162
  @property_doc_(''' this point's datum (L{Datum}).''')
163
163
  def datum(self):
@@ -31,7 +31,7 @@ Also note that on a spherical earth model, an n-vector is equivalent
31
31
  to a normalised version of an (ECEF) cartesian coordinate.
32
32
  '''
33
33
  # make sure int/int division yields float quosient, see .basics
34
- from __future__ import division as _; del _ # PYCHOK semicolon
34
+ from __future__ import division as _; del _ # noqa: E702 ;
35
35
 
36
36
  from pygeodesy.basics import _isin, _xinstanceof, typename
37
37
  from pygeodesy.constants import EPS, EPS0, PI, PI2, PI_2, R_M, \
@@ -62,7 +62,7 @@ from pygeodesy.utily import atan2, degrees360, sincos2, sincos2_, sincos2d, \
62
62
  # from math import fabs # from utily
63
63
 
64
64
  __all__ = _ALL_LAZY.sphericalNvector
65
- __version__ = '25.04.14'
65
+ __version__ = '25.05.12'
66
66
 
67
67
  _lines_ = 'lines'
68
68
 
@@ -14,7 +14,7 @@ I{(C) Chris Veness 2011-2024} published under the same MIT Licence**, see
14
14
  U{Latitude/Longitude<https://www.Movable-Type.co.UK/scripts/latlong.html>}.
15
15
  '''
16
16
  # make sure int/int division yields float quotient, see .basics
17
- from __future__ import division as _; del _ # PYCHOK semicolon
17
+ from __future__ import division as _; del _ # noqa: E702 ;
18
18
 
19
19
  from pygeodesy.basics import copysign0, _isin, map1, signOf, typename
20
20
  from pygeodesy.constants import EPS, EPS1, EPS4, PI, PI2, PI_2, PI_4, R_M, \
@@ -34,8 +34,9 @@ from pygeodesy.interns import _1_, _2_, _coincident_, _composite_, _colinear_, \
34
34
  _concentric_, _convex_, _end_, _infinite_, \
35
35
  _invalid_, _line_, _near_, _null_, _parallel_, \
36
36
  _point_, _SPACE_, _too_
37
+ from pygeodesy.latlonBase import _trilaterate5
37
38
  from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _ALL_OTHER
38
- # from pygeodesy.nvectorBase import NvectorBase, sumOf # _MODE
39
+ # from pygeodesy.nvectorBase import NvectorBase, sumOf # _MODS
39
40
  from pygeodesy.namedTuples import LatLon2Tuple, LatLon3Tuple, NearestOn3Tuple, \
40
41
  Triangle7Tuple, Triangle8Tuple
41
42
  from pygeodesy.points import ispolar, nearestOn5 as _nearestOn5, \
@@ -43,10 +44,10 @@ from pygeodesy.points import ispolar, nearestOn5 as _nearestOn5, \
43
44
  from pygeodesy.props import deprecated_function, deprecated_method
44
45
  from pygeodesy.sphericalBase import _m2radians, CartesianSphericalBase, \
45
46
  _intersecant2, LatLonSphericalBase, \
46
- _rads3, _radians2m, _trilaterate5
47
+ _rads3, _radians2m
47
48
  # from pygeodesy.streprs import Fmt as _Fmt # from .points XXX shadowed
48
49
  from pygeodesy.units import Bearing_, Height, _isDegrees, _isRadius, Lamd, \
49
- Phid, Radius_, Scalar
50
+ Phid, Radius_, Scalar
50
51
  from pygeodesy.utily import acos1, asin1, atan1d, atan2, atan2d, degrees90, \
51
52
  degrees180, degrees2m, m2radians, radiansPI2, \
52
53
  sincos2_, tan_2, unrollPI, _unrollon, _unrollon3, \
@@ -56,7 +57,7 @@ from pygeodesy.vector3d import sumOf, Vector3d
56
57
  from math import asin, cos, degrees, fabs, radians, sin
57
58
 
58
59
  __all__ = _ALL_LAZY.sphericalTrigonometry
59
- __version__ = '25.04.14'
60
+ __version__ = '25.05.12'
60
61
 
61
62
  _PI_EPS4 = PI - EPS4
62
63
  if _PI_EPS4 >= PI:
pygeodesy/trf.py CHANGED
@@ -93,7 +93,7 @@ from math import ceil as _ceil, fabs
93
93
  # import operator as _operator # from .datums
94
94
 
95
95
  __all__ = _ALL_LAZY.trf
96
- __version__ = '25.04.14'
96
+ __version__ = '25.05.12'
97
97
 
98
98
  _EP0CH = Epoch(0, low=0)
99
99
  _Es = {_EP0CH: _EP0CH} # L{Epoch}s, deleted below
@@ -148,7 +148,7 @@ def _E(epoch): # deleted below
148
148
  '''(INTERNAL) De-dup L{Epochs}s.
149
149
  '''
150
150
  e = Epoch(_F(epoch))
151
- return _Es.setdefault(e, e) # PYCHOK del
151
+ return _Es.setdefault(e, e) # noqa: F821 del
152
152
 
153
153
 
154
154
  def _P(ps, name, _Ps): # deleted below
@@ -1299,11 +1299,11 @@ def _trfX(n1, n2, raiser=True, **epoch_xform_rates):
1299
1299
 
1300
1300
 
1301
1301
  def _X(*ps): # deleted below
1302
- return _P(ps, _xform_, _Xs) # PYCHOK del
1302
+ return _P(ps, _xform_, _Xs) # noqa: F821 del
1303
1303
 
1304
1304
 
1305
1305
  def _R(*ps): # deleted below
1306
- return _P(ps, _rates_, _Rs) # PYCHOK del
1306
+ return _P(ps, _rates_, _Rs) # noqa: F821 del
1307
1307
 
1308
1308
 
1309
1309
  _P_0_0s = TRFXform7Tuple(_0_0s(len(_Names7)), name='unity')
pygeodesy/triaxials.py CHANGED
@@ -28,7 +28,7 @@ see the U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
28
28
  @var Triaxials.WGS84_35: Triaxial(name='WGS84_35', a=6378172, b=6378102, c=6356752.314245179, e2ab=0.00002195, e2bc=0.006683478, e2ac=0.006705281, volume=1083207319768789942272, area=510065621722018.125, area_p=510065626587483.3125)
29
29
  '''
30
30
  # make sure int/int division yields float quotient, see .basics
31
- from __future__ import division as _; del _ # PYCHOK semicolon
31
+ from __future__ import division as _; del _ # noqa: E702 ;
32
32
 
33
33
  from pygeodesy.basics import _isin, isLatLon, isscalar
34
34
  from pygeodesy.constants import EPS, EPS0, EPS02, EPS4, INT0, PI2, PI_3, PI4, \
@@ -59,7 +59,7 @@ from pygeodesy.vector3d import _otherV3d, Vector3d, _ALL_LAZY, _MODS
59
59
  from math import fabs, sqrt
60
60
 
61
61
  __all__ = _ALL_LAZY.triaxials
62
- __version__ = '25.04.14'
62
+ __version__ = '25.05.12'
63
63
 
64
64
  _not_ordered_ = _not_('ordered')
65
65
  _omega_ = 'omega'
pygeodesy/units.py CHANGED
@@ -7,18 +7,17 @@ L{Feet}, L{Meter}, L{Radians}, etc.
7
7
  '''
8
8
 
9
9
  from pygeodesy.basics import isscalar, issubclassof, signOf, typename
10
- from pygeodesy.constants import EPS, EPS1, PI, PI2, PI_2, _umod_360, _0_0, \
11
- _0_001, _0_5, INT0 # PYCHOK for .mgrs, .namedTuples
10
+ from pygeodesy.constants import EPS, EPS1, PI, PI2, PI_2, _umod_360, _0_0, _0_001
12
11
  from pygeodesy.dms import F__F, F__F_, S_NUL, S_SEP, parseDMS, parseRad, _toDMS
13
12
  from pygeodesy.errors import _AssertionError, TRFError, UnitError, _xattr, _xcallable
14
13
  # from pygeodesy.internals import typename # from .basics
15
14
  from pygeodesy.interns import NN, _azimuth_, _band_, _bearing_, _COMMASPACE_, \
16
15
  _degrees_, _degrees2_, _distance_, _E_, _easting_, \
17
- _epoch_, _EW_, _feet_, _height_, _lam_, _lat_, _LatLon_, \
18
- _lon_, _meter_, _meter2_, _N_, _negative_, _northing_, \
16
+ _epoch_, _EW_, _feet_, _height_, _lam_, _lat_, _lon_, \
17
+ _meter_, _meter2_, _N_, _negative_, _northing_, _radians_, \
19
18
  _NS_, _NSEW_, _number_, _PERCENT_, _phi_, _precision_, \
20
- _radians_, _radians2_, _radius_, _S_, _scalar_, \
21
- _units_, _W_, _zone_, _std_ # PYCHOK used!
19
+ _radians2_, _radius_, _S_, _scalar_, \
20
+ _W_, _zone_, _std_ # PYCHOK used!
22
21
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
23
22
  # from pygeodesy.named import _name__ # _MODS
24
23
  from pygeodesy.props import Property_RO
@@ -28,7 +27,7 @@ from pygeodesy.unitsBase import Float, Int, _NamedUnit, Radius, Str, Fmt, fstr
28
27
  from math import degrees, isnan, radians
29
28
 
30
29
  __all__ = _ALL_LAZY.units
31
- __version__ = '25.04.14'
30
+ __version__ = '25.05.12'
32
31
 
33
32
 
34
33
  class Float_(Float):
@@ -861,7 +860,7 @@ def _std_repr(*Classes):
861
860
  '''
862
861
  from pygeodesy.internals import _getenv
863
862
  for C in Classes:
864
- if hasattr(C, typename(_std_repr)): # PYCHOK del _std_repr
863
+ if hasattr(C, typename(_std_repr)): # noqa: F821 del
865
864
  env = 'PYGEODESY_%s_STD_REPR' % (typename(C).upper(),)
866
865
  if _getenv(env, _std_).lower() != _std_:
867
866
  C._std_repr = False
pygeodesy/utily.py CHANGED
@@ -9,7 +9,7 @@ and U{Vector-based geodesy<https://www.Movable-Type.co.UK/scripts/latlong-vector
9
9
  and published under the same MIT Licence**.
10
10
  '''
11
11
  # make sure int/int division yields float quotient, see .basics
12
- from __future__ import division as _; del _ # PYCHOK semicolon
12
+ from __future__ import division as _; del _ # noqa: E702 ;
13
13
 
14
14
  from pygeodesy.basics import _copysign, isinstanceof, isint, isstr
15
15
  from pygeodesy.constants import EPS, EPS0, INF, NAN, PI, PI2, PI_2, R_M, \
@@ -28,7 +28,7 @@ from math import acos, asin, atan2 as _atan2, cos, degrees, fabs, radians, \
28
28
  sin, tan as _tan # pow
29
29
 
30
30
  __all__ = _ALL_LAZY.utily
31
- __version__ = '25.04.14'
31
+ __version__ = '25.05.12'
32
32
 
33
33
  _G_DEG = _float( 400.0 / _360_0) # grades per degree
34
34
  _G_RAD = _float( 400.0 / PI2) # grades per radian
pygeodesy/utmupsBase.py CHANGED
@@ -5,7 +5,7 @@ u'''(INTERNAL) Private class C{UtmUpsBase}, functions and constants
5
5
  for modules L{epsg}, L{etm}, L{mgrs}, L{ups} and L{utm}.
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, _isin, isint, isscalar, isstr, \
11
11
  neg_, _xinstanceof, _xsubclassof
@@ -32,7 +32,7 @@ from pygeodesy.utily import atan1, _Wrap, wrap360
32
32
  from math import cos, degrees, fabs, sin, tan # copysign as _copysign
33
33
 
34
34
  __all__ = _ALL_LAZY.utmupsBase
35
- __version__ = '25.04.26'
35
+ __version__ = '25.05.12'
36
36
 
37
37
  _UPS_BANDS = _A_, _B_, _Y_, _Z_ # UPS polar bands SE, SW, NE, NW
38
38
  # _UTM_BANDS = _MODS.utm._Bands