pygeodesy 24.5.15__py2.py3-none-any.whl → 24.6.1__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 (90) hide show
  1. {PyGeodesy-24.5.15.dist-info → PyGeodesy-24.6.1.dist-info}/METADATA +6 -5
  2. PyGeodesy-24.6.1.dist-info/RECORD +116 -0
  3. pygeodesy/__init__.py +4 -4
  4. pygeodesy/albers.py +41 -41
  5. pygeodesy/auxilats/__init__.py +1 -1
  6. pygeodesy/auxilats/__main__.py +2 -2
  7. pygeodesy/auxilats/auxAngle.py +32 -31
  8. pygeodesy/auxilats/auxLat.py +80 -51
  9. pygeodesy/azimuthal.py +123 -124
  10. pygeodesy/basics.py +46 -10
  11. pygeodesy/booleans.py +13 -14
  12. pygeodesy/cartesianBase.py +25 -23
  13. pygeodesy/clipy.py +3 -3
  14. pygeodesy/constants.py +3 -3
  15. pygeodesy/css.py +50 -42
  16. pygeodesy/datums.py +42 -41
  17. pygeodesy/deprecated/functions.py +9 -3
  18. pygeodesy/dms.py +6 -6
  19. pygeodesy/ecef.py +41 -41
  20. pygeodesy/ellipsoidalBase.py +41 -41
  21. pygeodesy/ellipsoidalBaseDI.py +3 -4
  22. pygeodesy/ellipsoidalGeodSolve.py +2 -2
  23. pygeodesy/ellipsoidalKarney.py +3 -3
  24. pygeodesy/ellipsoidalNvector.py +11 -12
  25. pygeodesy/ellipsoids.py +45 -38
  26. pygeodesy/elliptic.py +3 -4
  27. pygeodesy/epsg.py +4 -3
  28. pygeodesy/errors.py +52 -20
  29. pygeodesy/etm.py +68 -65
  30. pygeodesy/fmath.py +44 -49
  31. pygeodesy/formy.py +129 -115
  32. pygeodesy/frechet.py +118 -103
  33. pygeodesy/fstats.py +21 -14
  34. pygeodesy/fsums.py +124 -80
  35. pygeodesy/gars.py +10 -9
  36. pygeodesy/geodesicw.py +19 -17
  37. pygeodesy/geodesicx/__init__.py +1 -1
  38. pygeodesy/geodesicx/__main__.py +2 -2
  39. pygeodesy/geodesicx/gx.py +39 -33
  40. pygeodesy/geodesicx/gxarea.py +12 -9
  41. pygeodesy/geodesicx/gxbases.py +3 -4
  42. pygeodesy/geodesicx/gxline.py +6 -8
  43. pygeodesy/geodsolve.py +29 -28
  44. pygeodesy/geohash.py +60 -57
  45. pygeodesy/geoids.py +34 -32
  46. pygeodesy/hausdorff.py +114 -101
  47. pygeodesy/heights.py +137 -130
  48. pygeodesy/internals.py +16 -11
  49. pygeodesy/interns.py +3 -6
  50. pygeodesy/iters.py +19 -17
  51. pygeodesy/karney.py +21 -17
  52. pygeodesy/ktm.py +25 -18
  53. pygeodesy/latlonBase.py +12 -11
  54. pygeodesy/lazily.py +6 -6
  55. pygeodesy/lcc.py +24 -25
  56. pygeodesy/ltp.py +143 -113
  57. pygeodesy/ltpTuples.py +207 -150
  58. pygeodesy/mgrs.py +26 -26
  59. pygeodesy/named.py +172 -90
  60. pygeodesy/namedTuples.py +33 -25
  61. pygeodesy/nvectorBase.py +8 -8
  62. pygeodesy/osgr.py +40 -48
  63. pygeodesy/points.py +18 -18
  64. pygeodesy/props.py +29 -16
  65. pygeodesy/rhumb/__init__.py +1 -1
  66. pygeodesy/rhumb/aux_.py +13 -15
  67. pygeodesy/rhumb/bases.py +12 -5
  68. pygeodesy/rhumb/ekx.py +24 -18
  69. pygeodesy/rhumb/solve.py +13 -10
  70. pygeodesy/simplify.py +16 -16
  71. pygeodesy/solveBase.py +18 -18
  72. pygeodesy/sphericalBase.py +17 -21
  73. pygeodesy/sphericalTrigonometry.py +21 -21
  74. pygeodesy/streprs.py +5 -5
  75. pygeodesy/trf.py +13 -11
  76. pygeodesy/triaxials.py +68 -64
  77. pygeodesy/units.py +35 -35
  78. pygeodesy/unitsBase.py +24 -11
  79. pygeodesy/ups.py +66 -70
  80. pygeodesy/utily.py +3 -3
  81. pygeodesy/utm.py +183 -187
  82. pygeodesy/utmups.py +38 -38
  83. pygeodesy/utmupsBase.py +104 -106
  84. pygeodesy/vector2d.py +6 -7
  85. pygeodesy/vector3d.py +16 -17
  86. pygeodesy/vector3dBase.py +4 -5
  87. pygeodesy/webmercator.py +43 -51
  88. PyGeodesy-24.5.15.dist-info/RECORD +0 -116
  89. {PyGeodesy-24.5.15.dist-info → PyGeodesy-24.6.1.dist-info}/WHEEL +0 -0
  90. {PyGeodesy-24.5.15.dist-info → PyGeodesy-24.6.1.dist-info}/top_level.txt +0 -0
@@ -30,9 +30,9 @@ from pygeodesy.formy import antipode_, bearing_, _bearingTo2, excessAbc_, \
30
30
  excessGirard_, excessLHuilier_, opposing_, _radical2, \
31
31
  vincentys_
32
32
  from pygeodesy.interns import _1_, _2_, _coincident_, _composite_, _colinear_, \
33
- _concentric_, _convex_, _end_, _infinite_, _invalid_,\
34
- _line_, _near_, _not_, _null_, _parallel_, _point_, \
35
- _SPACE_, _too_
33
+ _concentric_, _convex_, _end_, _infinite_, \
34
+ _invalid_, _line_, _near_, _null_, _parallel_, \
35
+ _point_, _SPACE_, _too_
36
36
  from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _ALL_OTHER
37
37
  # from pygeodesy.nvectorBase import NvectorBase, sumOf # _MODE
38
38
  from pygeodesy.namedTuples import LatLon2Tuple, LatLon3Tuple, NearestOn3Tuple, \
@@ -54,7 +54,7 @@ from pygeodesy.vector3d import sumOf, Vector3d
54
54
  from math import asin, atan2, cos, degrees, fabs, radians, sin
55
55
 
56
56
  __all__ = _ALL_LAZY.sphericalTrigonometry
57
- __version__ = '24.04.07'
57
+ __version__ = '24.05.25'
58
58
 
59
59
  _PI_EPS4 = PI - EPS4
60
60
  if _PI_EPS4 >= PI:
@@ -494,7 +494,7 @@ class LatLon(LatLonSphericalBase):
494
494
  s0 = s
495
495
  else:
496
496
  t = _Fmt.SQUARE(points=i)
497
- raise _ValueError(t, p2, wrap=wrap, txt=_not_(_convex_))
497
+ raise _ValueError(t, p2, wrap=wrap, txt_not_=_convex_)
498
498
  gc1, v1 = gc, v2
499
499
 
500
500
  return True # inside
@@ -538,7 +538,7 @@ class LatLon(LatLonSphericalBase):
538
538
  def nearestOn(self, point1, point2, radius=R_M, **wrap_adjust_limit):
539
539
  '''Locate the point between two points closest to this point.
540
540
 
541
- Distances are approximated by function L{pygeodesy.equirectangular_},
541
+ Distances are approximated by function L{pygeodesy.equirectangular4},
542
542
  subject to the supplied B{C{options}}.
543
543
 
544
544
  @arg point1: Start point (L{LatLon}).
@@ -546,12 +546,12 @@ class LatLon(LatLonSphericalBase):
546
546
  @kwarg radius: Mean earth radius (C{meter}).
547
547
  @kwarg wrap_adjust_limit: Optional keyword arguments for functions
548
548
  L{sphericalTrigonometry.nearestOn3} and
549
- L{pygeodesy.equirectangular_},
549
+ L{pygeodesy.equirectangular4},
550
550
 
551
551
  @return: Closest point on the great circle line (L{LatLon}).
552
552
 
553
553
  @raise LimitError: Lat- and/or longitudinal delta exceeds B{C{limit}},
554
- see function L{pygeodesy.equirectangular_}.
554
+ see function L{pygeodesy.equirectangular4}.
555
555
 
556
556
  @raise NotImplementedError: Keyword argument C{B{within}=False}
557
557
  is not (yet) supported.
@@ -560,7 +560,7 @@ class LatLon(LatLonSphericalBase):
560
560
 
561
561
  @raise ValueError: Invalid B{C{radius}} or B{C{options}}.
562
562
 
563
- @see: Functions L{pygeodesy.equirectangular_} and L{pygeodesy.nearestOn5}
563
+ @see: Functions L{pygeodesy.equirectangular4} and L{pygeodesy.nearestOn5}
564
564
  and method L{sphericalTrigonometry.LatLon.nearestOn3}.
565
565
  '''
566
566
  # remove kwarg B{C{within}} if present
@@ -605,7 +605,7 @@ class LatLon(LatLonSphericalBase):
605
605
  def nearestOn3(self, points, closed=False, radius=R_M, **wrap_adjust_limit):
606
606
  '''Locate the point on a polygon closest to this point.
607
607
 
608
- Distances are approximated by function L{pygeodesy.equirectangular_},
608
+ Distances are approximated by function L{pygeodesy.equirectangular4},
609
609
  subject to the supplied B{C{options}}.
610
610
 
611
611
  @arg points: The polygon points (L{LatLon}[]).
@@ -613,17 +613,17 @@ class LatLon(LatLonSphericalBase):
613
613
  @kwarg radius: Mean earth radius (C{meter}).
614
614
  @kwarg wrap_adjust_limit: Optional keyword arguments for function
615
615
  L{sphericalTrigonometry.nearestOn3} and
616
- L{pygeodesy.equirectangular_},
616
+ L{pygeodesy.equirectangular4},
617
617
 
618
618
  @return: A L{NearestOn3Tuple}C{(closest, distance, angle)} of the
619
- C{closest} point (L{LatLon}), the L{pygeodesy.equirectangular_}
619
+ C{closest} point (L{LatLon}), the L{pygeodesy.equirectangular4}
620
620
  C{distance} between this and the C{closest} point converted to
621
621
  C{meter}, same units as B{C{radius}}. The C{angle} from this
622
622
  to the C{closest} point is in compass C{degrees360}, like
623
623
  function L{pygeodesy.compassAngle}.
624
624
 
625
625
  @raise LimitError: Lat- and/or longitudinal delta exceeds B{C{limit}},
626
- see function L{pygeodesy.equirectangular_}.
626
+ see function L{pygeodesy.equirectangular4}.
627
627
 
628
628
  @raise PointsError: Insufficient number of B{C{points}}.
629
629
 
@@ -631,7 +631,7 @@ class LatLon(LatLonSphericalBase):
631
631
 
632
632
  @raise ValueError: Invalid B{C{radius}} or B{C{options}}.
633
633
 
634
- @see: Functions L{pygeodesy.compassAngle}, L{pygeodesy.equirectangular_}
634
+ @see: Functions L{pygeodesy.compassAngle}, L{pygeodesy.equirectangular4}
635
635
  and L{pygeodesy.nearestOn5}.
636
636
  '''
637
637
  return nearestOn3(self, points, closed=closed, radius=radius,
@@ -1222,7 +1222,7 @@ def nearestOn3(point, points, closed=False, radius=R_M, wrap=False, adjust=True,
1222
1222
  limit=9, **LatLon_and_kwds):
1223
1223
  '''Locate the point on a path or polygon closest to a reference point.
1224
1224
 
1225
- Distances are I{approximated} using function L{pygeodesy.equirectangular_},
1225
+ Distances are I{approximated} using function L{pygeodesy.equirectangular4},
1226
1226
  subject to the supplied B{C{options}}.
1227
1227
 
1228
1228
  @arg point: The reference point (L{LatLon}).
@@ -1231,19 +1231,19 @@ def nearestOn3(point, points, closed=False, radius=R_M, wrap=False, adjust=True,
1231
1231
  @kwarg radius: Mean earth radius (C{meter}).
1232
1232
  @kwarg wrap: If C{True}, wrap or I{normalize} and unroll the
1233
1233
  B{C{points}} (C{bool}).
1234
- @kwarg adjust: See function L{pygeodesy.equirectangular_} (C{bool}).
1235
- @kwarg limit: See function L{pygeodesy.equirectangular_} (C{degrees}),
1234
+ @kwarg adjust: See function L{pygeodesy.equirectangular4} (C{bool}).
1235
+ @kwarg limit: See function L{pygeodesy.equirectangular4} (C{degrees}),
1236
1236
  default C{9 degrees} is about C{1,000 Kmeter} (for mean
1237
1237
  spherical earth radius L{R_KM}).
1238
1238
  @kwarg LatLon: Optional class to return the closest point (L{LatLon})
1239
1239
  or C{None}.
1240
1240
  @kwarg options: Optional keyword arguments for function
1241
- L{pygeodesy.equirectangular_}.
1241
+ L{pygeodesy.equirectangular4}.
1242
1242
 
1243
1243
  @return: A L{NearestOn3Tuple}C{(closest, distance, angle)} with the
1244
1244
  C{closest} point as B{C{LatLon}} or L{LatLon3Tuple}C{(lat,
1245
1245
  lon, height)} if B{C{LatLon}} is C{None}. The C{distance}
1246
- is the L{pygeodesy.equirectangular_} distance between the
1246
+ is the L{pygeodesy.equirectangular4} distance between the
1247
1247
  C{closest} and the given B{C{point}} converted to C{meter},
1248
1248
  same units as B{C{radius}}. The C{angle} from the given
1249
1249
  B{C{point}} to the C{closest} is in compass C{degrees360},
@@ -1251,7 +1251,7 @@ def nearestOn3(point, points, closed=False, radius=R_M, wrap=False, adjust=True,
1251
1251
  the (interpolated) height at the C{closest} point.
1252
1252
 
1253
1253
  @raise LimitError: Lat- and/or longitudinal delta exceeds the B{C{limit}},
1254
- see function L{pygeodesy.equirectangular_}.
1254
+ see function L{pygeodesy.equirectangular4}.
1255
1255
 
1256
1256
  @raise PointsError: Insufficient number of B{C{points}}.
1257
1257
 
@@ -1259,7 +1259,7 @@ def nearestOn3(point, points, closed=False, radius=R_M, wrap=False, adjust=True,
1259
1259
 
1260
1260
  @raise ValueError: Invalid B{C{radius}}.
1261
1261
 
1262
- @see: Functions L{pygeodesy.equirectangular_} and L{pygeodesy.nearestOn5}.
1262
+ @see: Functions L{pygeodesy.equirectangular4} and L{pygeodesy.nearestOn5}.
1263
1263
  '''
1264
1264
  t = _nearestOn5(point, points, closed=closed, wrap=wrap,
1265
1265
  adjust=adjust, limit=limit)
pygeodesy/streprs.py CHANGED
@@ -12,8 +12,8 @@ from pygeodesy.errors import _or, _AttributeError, _IsnotError, _TypeError, \
12
12
  # from pygeodesy.internals import _dunder_nameof # from .lazily
13
13
  from pygeodesy.interns import NN, _0_, _0to9_, MISSING, _BAR_, _COMMASPACE_, \
14
14
  _DOT_, _E_, _ELLIPSIS_, _EQUAL_, _H_, _LR_PAIRS, \
15
- _N_, _name_, _not_, _not_scalar_, _PERCENT_, \
16
- _SPACE_, _STAR_, _UNDER_
15
+ _N_, _name_, _not_scalar_, _PERCENT_, _SPACE_, \
16
+ _STAR_, _UNDER_
17
17
  from pygeodesy.interns import _convergence_, _distant_, _e_, _eps_, _exceeds_, \
18
18
  _EQUALSPACED_, _f_, _F_, _g_, _limit_, _no_, \
19
19
  _tolerance_ # PYCHOK used!
@@ -22,7 +22,7 @@ from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _dunder_nameof
22
22
  from math import fabs, log10 as _log10
23
23
 
24
24
  __all__ = _ALL_LAZY.streprs
25
- __version__ = '24.05.13'
25
+ __version__ = '24.05.19'
26
26
 
27
27
  _at_ = 'at' # PYCHOK used!
28
28
  _EN_PREC = 6 # max MGRS/OSGR precision, 1 micrometer
@@ -499,11 +499,11 @@ def _streprs(prec, objs, fmt, ints, force, strepr):
499
499
  f = fmt.replace(_DOTSTAR_, Fmt.DOT(abs(prec)))
500
500
  _ = f % (_0_0,)
501
501
  except (TypeError, ValueError):
502
- raise _ValueError(fmt=fmt, txt=_not_(repr(_DOTSTAR_)))
502
+ raise _ValueError(fmt=fmt, txt_not_=repr(_DOTSTAR_))
503
503
  fmt = f
504
504
 
505
505
  else:
506
- raise _ValueError(fmt=fmt, txt=_not_(repr(_Fspec_)))
506
+ raise _ValueError(fmt=fmt, txt_not_=repr(_Fspec_))
507
507
 
508
508
  for i, o in enumerate(objs):
509
509
  if force or isinstance(o, float):
pygeodesy/trf.py CHANGED
@@ -80,8 +80,8 @@ from pygeodesy.interns import MISSING, NN, _AT_, _COMMASPACE_, _conversion_, \
80
80
  _NAD83_, _no_, _PLUS_, _reframe_, _s_, _SPACE_, \
81
81
  _STAR_, _to_, _vs_, _WGS84_, _x_, _intern as _i
82
82
  # from pygeodesy.lazily import _ALL_LAZY # from .units
83
- from pygeodesy.named import ADict, classname, _lazyNamedEnumItem as _lazy, _Named, \
84
- _NamedEnum, _NamedEnumItem, _NamedTuple, Fmt, unstr
83
+ from pygeodesy.named import ADict, classname, _lazyNamedEnumItem as _lazy, _name2__, \
84
+ _Named, _NamedEnum, _NamedEnumItem, _NamedTuple, Fmt, unstr
85
85
  from pygeodesy.props import deprecated_method, property_doc_, Property_RO, property_RO
86
86
  # from pygeodesy.streprs import Fmt, unstr # from .named
87
87
  from pygeodesy.units import Epoch, Float, _ALL_LAZY
@@ -91,7 +91,7 @@ from math import ceil as _ceil, fabs
91
91
  # import operator as _operator # from .datums
92
92
 
93
93
  __all__ = _ALL_LAZY.trf
94
- __version__ = '24.05.13'
94
+ __version__ = '24.05.31'
95
95
 
96
96
  _EP0CH = Epoch(0, low=0)
97
97
  _Es = {_EP0CH: _EP0CH} # L{Epoch}s, deleted below
@@ -242,7 +242,7 @@ class RefFrame(_NamedEnumItem):
242
242
  return _toRefFrame(point, reframe2, reframe=self, **_xkwds(epoch_epoch2_name,
243
243
  name=_xattr(reframe2, name=self.name)))
244
244
 
245
- def toStr(self, epoch=None, name=NN, **unused): # PYCHOK expected
245
+ def toStr(self, epoch=None, name=NN, **unused): # PYCHOK signature
246
246
  '''Return this reference frame as a string.
247
247
 
248
248
  @kwarg epoch: Override this reframe's epoch (C{scalar} or C{str}).
@@ -383,14 +383,14 @@ class TransformXform(Transform):
383
383
  def __hash__(self):
384
384
  return Transform.__hash__(self)
385
385
 
386
- def inverse(self, name=NN):
386
+ def inverse(self, **name):
387
387
  '''Return the inverse of this transform.
388
388
 
389
- @kwarg name: Optional, unique name (C{str}).
389
+ @kwarg name: Optional, unique C{B{name}=NN} (C{str}).
390
390
 
391
391
  @return: Inverse (L{TransformXform}), unregistered.
392
392
  '''
393
- r = Transform.inverse(name=name)
393
+ r = Transform.inverse(self, **name)
394
394
  r._Xform = r.Xform.inverse()
395
395
  return r
396
396
 
@@ -405,10 +405,11 @@ class TransformXform(Transform):
405
405
  n = name or (X.toStr() if X else NN)
406
406
  return Transform.rename(self, n)
407
407
 
408
- def toRefFrame(self, point, name=NN): # PYCHOK signature
408
+ def toRefFrame(self, point, **name): # PYCHOK signature
409
409
  '''Convert an ellipsoidal point using this transform and Xform.
410
410
 
411
411
  @arg point: The point to convert (C{Cartesian} or C{LatLon}).
412
+ @kwarg name: Optional C{B{name}=NN} (C{str}).
412
413
 
413
414
  @return: A copy of the B{C{point}}, converted I{directly} to
414
415
  this transform's Xform's C{refName2} and C{epoch}.
@@ -423,7 +424,7 @@ class TransformXform(Transform):
423
424
  if X: # see _toRefFrame below
424
425
  p._reframe = X.reframe2
425
426
  p._epoch = X.epoch
426
- p.rename(name or self.name)
427
+ p.rename(self._name__(name))
427
428
  return p
428
429
 
429
430
  def toTransform(self, epoch1, **epoch2_inverse):
@@ -1043,7 +1044,7 @@ def _sumstr(name1, name2, p_):
1043
1044
 
1044
1045
 
1045
1046
  def _toRefFrame(point, reframe2, reframe=None, epoch=None,
1046
- epoch2=None, name=NN, **LatLon_kwds):
1047
+ epoch2=None, **name_LatLon_kwds):
1047
1048
  '''(INTERNAL) Convert an ellipsoidal point to C{reframe2}
1048
1049
  and C{epoch2 or epoch or pont.epoch or reframe.epoch}.
1049
1050
  '''
@@ -1063,6 +1064,7 @@ def _toRefFrame(point, reframe2, reframe=None, epoch=None,
1063
1064
  _to_, _AT_(reframe2.name, e2))
1064
1065
  raise TRFError(_no_(_conversion_), txt=t)
1065
1066
 
1067
+ name, LatLon_kwds = _name2__(name_LatLon_kwds)
1066
1068
  if t0: # is not ()
1067
1069
  if t0.isunity:
1068
1070
  p = point.dup()
@@ -1078,7 +1080,7 @@ def _toRefFrame(point, reframe2, reframe=None, epoch=None,
1078
1080
  p = point.toTransform(t0)
1079
1081
  p._reframe = reframe2 # see TRFXform.toRefFrame above
1080
1082
  p._epoch = _xattr(t0.Xform, epoch=e2)
1081
- p.rename(name or reframe2.name)
1083
+ p.rename(reframe2._name__(name))
1082
1084
  else:
1083
1085
  p = point.dup(_reframe=reframe2, # ditto
1084
1086
  _epoch=e2, name=name) if name else point