pygeodesy 24.6.9__py2.py3-none-any.whl → 24.7.7__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 (87) hide show
  1. {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/METADATA +2 -2
  2. PyGeodesy-24.7.7.dist-info/RECORD +117 -0
  3. pygeodesy/__init__.py +39 -32
  4. pygeodesy/__main__.py +6 -1
  5. pygeodesy/albers.py +2 -2
  6. pygeodesy/auxilats/__init__.py +1 -1
  7. pygeodesy/auxilats/auxAngle.py +40 -39
  8. pygeodesy/auxilats/auxDLat.py +3 -2
  9. pygeodesy/auxilats/auxLat.py +16 -18
  10. pygeodesy/auxilats/auxily.py +1 -1
  11. pygeodesy/azimuthal.py +10 -10
  12. pygeodesy/basics.py +16 -4
  13. pygeodesy/booleans.py +4 -4
  14. pygeodesy/cartesianBase.py +11 -14
  15. pygeodesy/css.py +14 -18
  16. pygeodesy/datums.py +6 -6
  17. pygeodesy/deprecated/__init__.py +1 -1
  18. pygeodesy/deprecated/classes.py +25 -4
  19. pygeodesy/deprecated/datum.py +3 -3
  20. pygeodesy/deprecated/functions.py +6 -8
  21. pygeodesy/dms.py +23 -27
  22. pygeodesy/ecef.py +4 -4
  23. pygeodesy/elevations.py +4 -4
  24. pygeodesy/ellipsoidalBase.py +23 -28
  25. pygeodesy/ellipsoidalBaseDI.py +19 -23
  26. pygeodesy/ellipsoidalExact.py +3 -3
  27. pygeodesy/ellipsoidalGeodSolve.py +15 -23
  28. pygeodesy/ellipsoidalKarney.py +37 -60
  29. pygeodesy/ellipsoidalNvector.py +38 -44
  30. pygeodesy/ellipsoidalVincenty.py +11 -14
  31. pygeodesy/ellipsoids.py +107 -101
  32. pygeodesy/errors.py +109 -48
  33. pygeodesy/etm.py +32 -44
  34. pygeodesy/formy.py +55 -58
  35. pygeodesy/frechet.py +18 -20
  36. pygeodesy/fsums.py +3 -3
  37. pygeodesy/gars.py +3 -4
  38. pygeodesy/geodesici.py +1696 -0
  39. pygeodesy/geodesicw.py +15 -15
  40. pygeodesy/geodesicx/__init__.py +4 -4
  41. pygeodesy/geodesicx/gx.py +34 -55
  42. pygeodesy/geodesicx/gxbases.py +20 -8
  43. pygeodesy/geodesicx/gxline.py +93 -88
  44. pygeodesy/geodsolve.py +108 -59
  45. pygeodesy/geohash.py +26 -34
  46. pygeodesy/geoids.py +28 -37
  47. pygeodesy/hausdorff.py +17 -18
  48. pygeodesy/heights.py +2 -2
  49. pygeodesy/internals.py +46 -13
  50. pygeodesy/interns.py +2 -2
  51. pygeodesy/karney.py +78 -15
  52. pygeodesy/ktm.py +13 -16
  53. pygeodesy/latlonBase.py +17 -19
  54. pygeodesy/lazily.py +28 -25
  55. pygeodesy/lcc.py +28 -31
  56. pygeodesy/ltp.py +7 -8
  57. pygeodesy/ltpTuples.py +71 -73
  58. pygeodesy/mgrs.py +8 -9
  59. pygeodesy/named.py +19 -10
  60. pygeodesy/nvectorBase.py +9 -10
  61. pygeodesy/osgr.py +9 -9
  62. pygeodesy/points.py +6 -6
  63. pygeodesy/rhumb/__init__.py +1 -1
  64. pygeodesy/rhumb/aux_.py +5 -5
  65. pygeodesy/rhumb/bases.py +30 -31
  66. pygeodesy/rhumb/ekx.py +3 -4
  67. pygeodesy/rhumb/solve.py +21 -22
  68. pygeodesy/solveBase.py +177 -123
  69. pygeodesy/sphericalBase.py +10 -11
  70. pygeodesy/sphericalNvector.py +13 -13
  71. pygeodesy/sphericalTrigonometry.py +86 -97
  72. pygeodesy/streprs.py +4 -34
  73. pygeodesy/triaxials.py +48 -43
  74. pygeodesy/units.py +208 -275
  75. pygeodesy/unitsBase.py +115 -107
  76. pygeodesy/ups.py +26 -31
  77. pygeodesy/utily.py +8 -8
  78. pygeodesy/utm.py +35 -40
  79. pygeodesy/utmups.py +43 -46
  80. pygeodesy/utmupsBase.py +8 -9
  81. pygeodesy/vector3d.py +26 -27
  82. pygeodesy/vector3dBase.py +6 -7
  83. pygeodesy/webmercator.py +19 -21
  84. pygeodesy/wgrs.py +18 -20
  85. PyGeodesy-24.6.9.dist-info/RECORD +0 -116
  86. {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/WHEEL +0 -0
  87. {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/top_level.txt +0 -0
@@ -44,8 +44,8 @@ from pygeodesy.sphericalBase import _m2radians, CartesianSphericalBase, \
44
44
  _intersecant2, LatLonSphericalBase, \
45
45
  _rads3, _radians2m, _trilaterate5
46
46
  # from pygeodesy.streprs import Fmt as _Fmt # from .points XXX shadowed
47
- from pygeodesy.units import Bearing_, Height, _isDegrees, _isRadius, Lam_, \
48
- Phi_, Radius_, Scalar
47
+ from pygeodesy.units import Bearing_, Height, _isDegrees, _isRadius, Lamd, \
48
+ Phid, Radius_, Scalar
49
49
  from pygeodesy.utily import acos1, asin1, atan1d, atan2d, degrees90, degrees180, \
50
50
  degrees2m, m2radians, radiansPI2, sincos2_, tan_2, \
51
51
  unrollPI, _unrollon, _unrollon3, _Wrap, wrap180, wrapPI
@@ -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.05.25'
57
+ __version__ = '24.06.21'
58
58
 
59
59
  _PI_EPS4 = PI - EPS4
60
60
  if _PI_EPS4 >= PI:
@@ -73,7 +73,7 @@ class Cartesian(CartesianSphericalBase):
73
73
  arguments. Use C{B{LatLon}=...} to override
74
74
  this L{LatLon} class or specify C{B{LatLon}=None}.
75
75
 
76
- @return: The geodetic point (L{LatLon}) or if B{C{LatLon}} is C{None},
76
+ @return: The geodetic point (L{LatLon}) or if C{B{LatLon} is None},
77
77
  an L{Ecef9Tuple}C{(x, y, z, lat, lon, height, C, M, datum)}
78
78
  with C{C} and C{M} if available.
79
79
 
@@ -236,7 +236,7 @@ class LatLon(LatLonSphericalBase):
236
236
 
237
237
  @return: Distance between this and the B{C{other}} point
238
238
  (C{meter}, same units as B{C{radius}} or
239
- C{radians} if B{C{radius}} is C{None}).
239
+ C{radians} if C{B{radius} is None}).
240
240
 
241
241
  @raise TypeError: The B{C{other}} point is not L{LatLon}.
242
242
 
@@ -288,9 +288,9 @@ class LatLon(LatLonSphericalBase):
288
288
 
289
289
  @return: Initial bearing (compass C{degrees360}).
290
290
 
291
- @raise CrossError: If this and the B{C{other}} point coincide,
292
- provided both B{C{raiser}} is C{True} and
293
- L{pygeodesy.crosserrors} is C{True}.
291
+ @raise CrossError: If this and the B{C{other}} point coincide
292
+ and if B{C{raiser}} and L{crosserrors
293
+ <pygeodesy.crosserrors>} are both C{True}.
294
294
 
295
295
  @raise TypeError: The B{C{other}} point is not L{LatLon}.
296
296
  '''
@@ -638,19 +638,16 @@ class LatLon(LatLonSphericalBase):
638
638
  LatLon=self.classof, **wrap_adjust_limit)
639
639
 
640
640
  def toCartesian(self, **Cartesian_datum_kwds): # PYCHOK Cartesian=Cartesian, datum=None
641
- '''Convert this point to C{Karney}-based cartesian (ECEF)
642
- coordinates.
641
+ '''Convert this point to C{Karney}-based cartesian (ECEF) coordinates.
643
642
 
644
- @kwarg Cartesian_datum_kwds: Optional L{Cartesian}, B{C{datum}}
645
- and other keyword arguments, ignored
646
- if C{B{Cartesian} is None}. Use
647
- C{B{Cartesian}=...} to override
648
- this L{Cartesian} class or specify
649
- C{B{Cartesian}=None}.
643
+ @kwarg Cartesian_datum_kwds: Optional L{Cartesian}, B{C{datum}} and other
644
+ keyword arguments, ignored if C{B{Cartesian} is
645
+ None}. Use C{B{Cartesian}=...} to override this
646
+ L{Cartesian} class or specify C{B{Cartesian}=None}.
650
647
 
651
- @return: The cartesian point (L{Cartesian}) or if B{C{Cartesian}}
652
- is C{None}, an L{Ecef9Tuple}C{(x, y, z, lat, lon, height,
653
- C, M, datum)} with C{C} and C{M} if available.
648
+ @return: The cartesian point (L{Cartesian}) or if C{B{Cartesian} is None},
649
+ an L{Ecef9Tuple}C{(x, y, z, lat, lon, height, C, M, datum)} with C{C}
650
+ and C{M} if available.
654
651
 
655
652
  @raise TypeError: Invalid B{C{Cartesian_datum_kwds}} argument.
656
653
  '''
@@ -662,15 +659,13 @@ class LatLon(LatLonSphericalBase):
662
659
 
663
660
  @arg otherB: Second triangle point (C{LatLon}).
664
661
  @arg otherC: Third triangle point (C{LatLon}).
665
- @kwarg radius: Mean earth radius, ellipsoid or datum
666
- (C{meter}, L{Ellipsoid}, L{Ellipsoid2},
667
- L{Datum} or L{a_f2Tuple}) or C{None}.
668
- @kwarg wrap: If C{True}, wrap or I{normalize} and unroll the
669
- B{C{otherB}} and B{C{otherC}} points (C{bool}).
662
+ @kwarg radius: Mean earth radius, ellipsoid or datum (C{meter}, L{Ellipsoid},
663
+ L{Ellipsoid2}, L{Datum} or L{a_f2Tuple}) or C{None}.
664
+ @kwarg wrap: If C{True}, wrap or I{normalize} and unroll points B{C{otherB}}
665
+ and B{C{otherC}} (C{bool}).
670
666
 
671
- @return: L{Triangle7Tuple}C{(A, a, B, b, C, c, area)} or if
672
- B{C{radius}} is C{None}, a L{Triangle8Tuple}C{(A,
673
- a, B, b, C, c, D, E)}.
667
+ @return: L{Triangle7Tuple}C{(A, a, B, b, C, c, area)} or if B{C{radius} is
668
+ None}, a L{Triangle8Tuple}C{(A, a, B, b, C, c, D, E)}.
674
669
 
675
670
  @see: Function L{triangle7} and U{Spherical trigonometry
676
671
  <https://WikiPedia.org/wiki/Spherical_trigonometry>}.
@@ -703,49 +698,45 @@ class LatLon(LatLonSphericalBase):
703
698
 
704
699
  def trilaterate5(self, distance1, point2, distance2, point3, distance3,
705
700
  area=True, eps=EPS1, radius=R_M, wrap=False):
706
- '''Trilaterate three points by I{area overlap} or I{perimeter
707
- intersection} of three corresponding circles.
701
+ '''Trilaterate three points by I{area overlap} or I{perimeter intersection}
702
+ of three corresponding circles.
708
703
 
709
- @arg distance1: Distance to this point (C{meter}, same units
710
- as B{C{radius}}).
704
+ @arg distance1: Distance to this point (C{meter}, same units as B{C{radius}}).
711
705
  @arg point2: Second center point (C{LatLon}).
712
- @arg distance2: Distance to point2 (C{meter}, same units as
713
- B{C{radius}}).
706
+ @arg distance2: Distance to point2 (C{meter}, same units as B{C{radius}}).
714
707
  @arg point3: Third center point (C{LatLon}).
715
- @arg distance3: Distance to point3 (C{meter}, same units as
716
- B{C{radius}}).
717
- @kwarg area: If C{True} compute the area overlap, otherwise the
718
- perimeter intersection of the circles (C{bool}).
719
- @kwarg eps: The required I{minimal overlap} for C{B{area}=True}
720
- or the I{intersection margin} for C{B{area}=False}
721
- (C{meter}, same units as B{C{radius}}).
708
+ @arg distance3: Distance to point3 (C{meter}, same units as B{C{radius}}).
709
+ @kwarg area: If C{True} compute the area overlap, otherwise the perimeter
710
+ intersection of the circles (C{bool}).
711
+ @kwarg eps: The required I{minimal overlap} for C{B{area}=True} or the
712
+ I{intersection margin} if C{B{area}=False} (C{meter}, same
713
+ units as B{C{radius}}).
722
714
  @kwarg radius: Mean earth radius (C{meter}, conventionally).
723
- @kwarg wrap: If C{True}, wrap or I{normalize} and unroll
724
- B{C{point2}} and B{C{point3}} (C{bool}).
715
+ @kwarg wrap: If C{True}, wrap or I{normalize} and unroll B{C{point2}} and
716
+ B{C{point3}} (C{bool}).
725
717
 
726
- @return: A L{Trilaterate5Tuple}C{(min, minPoint, max, maxPoint, n)}
727
- with C{min} and C{max} in C{meter}, same units as B{C{eps}},
728
- the corresponding trilaterated points C{minPoint} and
729
- C{maxPoint} as I{spherical} C{LatLon} and C{n}, the number
730
- of trilatered points found for the given B{C{eps}}.
718
+ @return: A L{Trilaterate5Tuple}C{(min, minPoint, max, maxPoint, n)} with
719
+ C{min} and C{max} in C{meter}, same units as B{C{eps}}, the
720
+ corresponding trilaterated points C{minPoint} and C{maxPoint}
721
+ as I{spherical} C{LatLon} and C{n}, the number of trilatered
722
+ points found for the given B{C{eps}}.
731
723
 
732
- If only a single trilaterated point is found, C{min I{is}
733
- max}, C{minPoint I{is} maxPoint} and C{n = 1}.
724
+ If only a single trilaterated point is found, C{min I{is} max},
725
+ C{minPoint I{is} maxPoint} and C{n = 1}.
734
726
 
735
- For C{B{area}=True}, C{min} and C{max} are the smallest
736
- respectively largest I{radial} overlap found.
727
+ For C{B{area}=True}, C{min} and C{max} are the smallest respectively
728
+ largest I{radial} overlap found.
737
729
 
738
- For C{B{area}=False}, C{min} and C{max} represent the
739
- nearest respectively farthest intersection margin.
730
+ For C{B{area}=False}, C{min} and C{max} represent the nearest
731
+ respectively farthest intersection margin.
740
732
 
741
- If C{B{area}=True} and all 3 circles are concentric, C{n =
742
- 0} and C{minPoint} and C{maxPoint} are both the B{C{point#}}
743
- with the smallest B{C{distance#}} C{min} and C{max} the
744
- largest B{C{distance#}}.
733
+ If C{B{area}=True} and all 3 circles are concentric, C{n=0} and
734
+ C{minPoint} and C{maxPoint} are both the B{C{point#}} with the
735
+ smallest B{C{distance#}} C{min} and C{max} the largest B{C{distance#}}.
745
736
 
746
737
  @raise IntersectionError: Trilateration failed for the given B{C{eps}},
747
738
  insufficient overlap for C{B{area}=True} or
748
- no intersection or all (near-)concentric for
739
+ no intersection or all (near-)concentric if
749
740
  C{B{area}=False}.
750
741
 
751
742
  @raise TypeError: Invalid B{C{point2}} or B{C{point3}}.
@@ -776,7 +767,7 @@ def areaOf(points, radius=R_M, wrap=False): # was=True
776
767
  (C{bool}).
777
768
 
778
769
  @return: Polygon area (C{meter} I{quared}, same units as B{C{radius}}
779
- or C{radians} if B{C{radius}} is C{None}).
770
+ or C{radians} if C{B{radius} is None}).
780
771
 
781
772
  @raise PointsError: Insufficient number of B{C{points}}.
782
773
 
@@ -1173,18 +1164,15 @@ def meanOf(points, height=None, wrap=False, LatLon=LatLon, **LatLon_kwds):
1173
1164
  '''Compute the I{geographic} mean of several points.
1174
1165
 
1175
1166
  @arg points: Points to be averaged (L{LatLon}[]).
1176
- @kwarg height: Optional height at mean point, overriding the mean
1177
- height (C{meter}).
1178
- @kwarg wrap: If C{True}, wrap or I{normalize} the B{C{points}}
1179
- (C{bool}).
1180
- @kwarg LatLon: Optional class to return the mean point (L{LatLon})
1181
- or C{None}.
1182
- @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword
1183
- arguments, ignored if C{B{LatLon} is None}.
1167
+ @kwarg height: Optional height at mean point, overriding the mean height
1168
+ (C{meter}).
1169
+ @kwarg wrap: If C{True}, wrap or I{normalize} the B{C{points}} (C{bool}).
1170
+ @kwarg LatLon: Optional class to return the mean point (L{LatLon}) or C{None}.
1171
+ @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword arguments,
1172
+ ignored if C{B{LatLon} is None}.
1184
1173
 
1185
- @return: The geographic mean and height (B{C{LatLon}}) or a
1186
- L{LatLon3Tuple}C{(lat, lon, height)} if B{C{LatLon}}
1187
- is C{None}.
1174
+ @return: The geographic mean and height (B{C{LatLon}}) or if C{B{LatLon}
1175
+ is None}, a L{LatLon3Tuple}C{(lat, lon, height)}.
1188
1176
 
1189
1177
  @raise TypeError: Some B{C{points}} are not L{LatLon}.
1190
1178
 
@@ -1210,7 +1198,7 @@ def nearestOn2(point, points, **closed_radius_LatLon_options): # PYCHOK no cove
1210
1198
  point (L{LatLon}) on the polygon and the C{distance}
1211
1199
  between the C{closest} and the given B{C{point}}. The
1212
1200
  C{closest} is a B{C{LatLon}} or a L{LatLon2Tuple}C{(lat,
1213
- lon)} if B{C{LatLon}} is C{None} ...
1201
+ lon)} if C{B{LatLon} is None} ...
1214
1202
  '''
1215
1203
  ll, d, _ = nearestOn3(point, points, **closed_radius_LatLon_options) # PYCHOK 3-tuple
1216
1204
  if _xkwds_get(closed_radius_LatLon_options, LatLon=LatLon) is None:
@@ -1222,8 +1210,8 @@ def nearestOn3(point, points, closed=False, radius=R_M, wrap=False, adjust=True,
1222
1210
  limit=9, **LatLon_and_kwds):
1223
1211
  '''Locate the point on a path or polygon closest to a reference point.
1224
1212
 
1225
- Distances are I{approximated} using function L{pygeodesy.equirectangular4},
1226
- subject to the supplied B{C{options}}.
1213
+ Distances are I{approximated} using function L{equirectangular4
1214
+ <pygeodesy.equirectangular4>}, subject to the supplied B{C{options}}.
1227
1215
 
1228
1216
  @arg point: The reference point (L{LatLon}).
1229
1217
  @arg points: The path or polygon points (L{LatLon}[]).
@@ -1231,27 +1219,27 @@ def nearestOn3(point, points, closed=False, radius=R_M, wrap=False, adjust=True,
1231
1219
  @kwarg radius: Mean earth radius (C{meter}).
1232
1220
  @kwarg wrap: If C{True}, wrap or I{normalize} and unroll the
1233
1221
  B{C{points}} (C{bool}).
1234
- @kwarg adjust: See function L{pygeodesy.equirectangular4} (C{bool}).
1235
- @kwarg limit: See function L{pygeodesy.equirectangular4} (C{degrees}),
1236
- default C{9 degrees} is about C{1,000 Kmeter} (for mean
1237
- spherical earth radius L{R_KM}).
1238
- @kwarg LatLon: Optional class to return the closest point (L{LatLon})
1239
- or C{None}.
1240
- @kwarg options: Optional keyword arguments for function
1241
- L{pygeodesy.equirectangular4}.
1222
+ @kwarg adjust: See function L{equirectangular4<pygeodesy.equirectangular4>}
1223
+ (C{bool}).
1224
+ @kwarg limit: See function L{equirectangular4<pygeodesy.equirectangular4>}
1225
+ (C{degrees}), default C{9 degrees} is about C{1,000 Km} (for
1226
+ (mean spherical earth radius L{R_KM}).
1227
+ @kwarg LatLon_and_kwds: Optional class C{B{LatLon}=L{LatLon}} to return the
1228
+ closest point and optional, additional C{B{LatLon}} keyword
1229
+ arguments or specify C{B{LatLon}=None}.
1242
1230
 
1243
1231
  @return: A L{NearestOn3Tuple}C{(closest, distance, angle)} with the
1244
1232
  C{closest} point as B{C{LatLon}} or L{LatLon3Tuple}C{(lat,
1245
- lon, height)} if B{C{LatLon}} is C{None}. The C{distance}
1246
- is the L{pygeodesy.equirectangular4} distance between the
1247
- C{closest} and the given B{C{point}} converted to C{meter},
1248
- same units as B{C{radius}}. The C{angle} from the given
1249
- B{C{point}} to the C{closest} is in compass C{degrees360},
1250
- like function L{pygeodesy.compassAngle}. The C{height} is
1251
- the (interpolated) height at the C{closest} point.
1233
+ lon, height)} if C{B{LatLon} is None}. The C{distance} is
1234
+ the L{equirectangular4<pygeodesy.equirectangular4>} distance
1235
+ between the C{closest} and the given B{C{point}} converted to
1236
+ C{meter}, same units as B{C{radius}}. The C{angle} from the
1237
+ given B{C{point}} to the C{closest} is in compass C{degrees360},
1238
+ like function L{compassAngle<pygeodesy.compassAngle>}. The
1239
+ C{height} is the (interpolated) height at the C{closest} point.
1252
1240
 
1253
1241
  @raise LimitError: Lat- and/or longitudinal delta exceeds the B{C{limit}},
1254
- see function L{pygeodesy.equirectangular4}.
1242
+ see function L{equirectangular4<pygeodesy.equirectangular4>}.
1255
1243
 
1256
1244
  @raise PointsError: Insufficient number of B{C{points}}.
1257
1245
 
@@ -1259,7 +1247,8 @@ def nearestOn3(point, points, closed=False, radius=R_M, wrap=False, adjust=True,
1259
1247
 
1260
1248
  @raise ValueError: Invalid B{C{radius}}.
1261
1249
 
1262
- @see: Functions L{pygeodesy.equirectangular4} and L{pygeodesy.nearestOn5}.
1250
+ @see: Functions L{equirectangular4<pygeodesy.equirectangular4>} and
1251
+ L{nearestOn5<pygeodesy.nearestOn5>}.
1263
1252
  '''
1264
1253
  t = _nearestOn5(point, points, closed=closed, wrap=wrap,
1265
1254
  adjust=adjust, limit=limit)
@@ -1285,7 +1274,7 @@ def perimeterOf(points, closed=False, radius=R_M, wrap=True):
1285
1274
  B{C{points}} (C{bool}).
1286
1275
 
1287
1276
  @return: Polygon perimeter (C{meter}, same units as B{C{radius}}
1288
- or C{radians} if B{C{radius}} is C{None}).
1277
+ or C{radians} if C{B{radius} is None}).
1289
1278
 
1290
1279
  @raise PointsError: Insufficient number of B{C{points}}.
1291
1280
 
@@ -1294,7 +1283,7 @@ def perimeterOf(points, closed=False, radius=R_M, wrap=True):
1294
1283
  @raise ValueError: Invalid B{C{radius}} or C{B{closed}=False} with
1295
1284
  C{B{points}} a composite.
1296
1285
 
1297
- @note: Distances are based on function L{pygeodesy.vincentys_}.
1286
+ @note: Distances are based on function L{vincentys_<pygeodesy.vincentys_>}.
1298
1287
 
1299
1288
  @see: Functions L{perimeterOf<pygeodesy.perimeterOf>},
1300
1289
  L{sphericalNvector.perimeterOf} and L{ellipsoidalKarney.perimeterOf}.
@@ -1333,7 +1322,7 @@ def triangle7(latA, lonA, latB, lonB, latC, lonC, radius=R_M,
1333
1322
  or C{None}.
1334
1323
  @kwarg excess: I{Spherical excess} callable (L{excessAbc_},
1335
1324
  L{excessGirard_} or L{excessLHuilier_}).
1336
- @kwarg wrap: If C{True}, wrap and L{pygeodesy.unroll180}
1325
+ @kwarg wrap: If C{True}, wrap and L{unroll180<pygeodesy.unroll180>}
1337
1326
  longitudes (C{bool}).
1338
1327
 
1339
1328
  @return: A L{Triangle7Tuple}C{(A, a, B, b, C, c, area)} with
@@ -1345,9 +1334,9 @@ def triangle7(latA, lonA, latB, lonB, latC, lonC, radius=R_M,
1345
1334
  C{radians} with the I{spherical excess} C{E} as the
1346
1335
  C{unit area} in C{radians}.
1347
1336
  '''
1348
- t = triangle8_(Phi_(latA=latA), Lam_(lonA=lonA),
1349
- Phi_(latB=latB), Lam_(lonB=lonB),
1350
- Phi_(latC=latC), Lam_(lonC=lonC),
1337
+ t = triangle8_(Phid(latA=latA), Lamd(lonA=lonA),
1338
+ Phid(latB=latB), Lamd(lonB=lonB),
1339
+ Phid(latC=latC), Lamd(lonC=lonC),
1351
1340
  excess=excess, wrap=wrap)
1352
1341
  return _t7Tuple(t, radius)
1353
1342
 
@@ -1365,7 +1354,7 @@ def triangle8_(phiA, lamA, phiB, lamB, phiC, lamC, excess=excessAbc_,
1365
1354
  @arg lamC: Third corner longitude (C{radians}).
1366
1355
  @kwarg excess: I{Spherical excess} callable (L{excessAbc_},
1367
1356
  L{excessGirard_} or L{excessLHuilier_}).
1368
- @kwarg wrap: If C{True}, L{pygeodesy.unrollPI} the
1357
+ @kwarg wrap: If C{True}, L{unrollPI<pygeodesy.unrollPI>} the
1369
1358
  longitudinal deltas (C{bool}).
1370
1359
 
1371
1360
  @return: A L{Triangle8Tuple}C{(A, a, B, b, C, c, D, E)} with
pygeodesy/streprs.py CHANGED
@@ -7,8 +7,8 @@ u'''Floating point and other formatting utilities.
7
7
  from pygeodesy.basics import isint, islistuple, isscalar, isstr, itemsorted, \
8
8
  _zip, _0_0
9
9
  # from pygeodesy.constants import _0_0
10
- from pygeodesy.errors import _or, _AttributeError, _IsnotError, _TypeError, \
11
- _ValueError, _xkwds_get, _xkwds_item2
10
+ from pygeodesy.errors import _or, _IsnotError, _TypeError, _ValueError, \
11
+ _xkwds_get, _xkwds_item2
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, \
@@ -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.06.04'
25
+ __version__ = '24.06.15'
26
26
 
27
27
  _at_ = 'at' # PYCHOK used!
28
28
  _EN_PREC = 6 # max MGRS/OSGR precision, 1 micrometer
@@ -141,7 +141,6 @@ class Fmt(object):
141
141
  ROPEN = _Fmt('[%s)') # right-open range [L, R)
142
142
  # SPACE = _Fmt(' %s') # == _SPACE_(n, v)
143
143
  SQUARE = _Fmt('[%s]') # BRACKETS
144
- sub_class = _Sub('%s (sub-)class')
145
144
  TAG = ANGLE
146
145
  TAGEND = _Fmt('</%s>')
147
146
  tolerance = _Fmt(_tolerance_(_PAREN_g))
@@ -447,7 +446,7 @@ def pairs(items, prec=6, fmt=Fmt.F, ints=False, sep=_EQUAL_):
447
446
  # can't unzip empty items tuple, list, etc.
448
447
  n, v = _zip(*items) if items else ((), ()) # strict=True
449
448
  except (TypeError, ValueError):
450
- raise _IsnotError(dict.__name__, '2-tuples', items=items)
449
+ raise _IsnotError(dict, '2-tuples', items=items)
451
450
  v = _streprs(prec, v, fmt, ints, False, repr)
452
451
  return tuple(sep.join(t) for t in _zip(map(str, n), v)) # strict=True
453
452
 
@@ -580,35 +579,6 @@ def _0wpF(*w_p_f): # in .dms, .osgr
580
579
  return '%0*.*f' % w_p_f # XXX was F
581
580
 
582
581
 
583
- def _xattrs(insto, other, *attrs): # see .errors._xattr
584
- '''(INTERNAL) Copy attribute values from B{C{other}} to B{C{insto}}.
585
-
586
- @arg insto: Object to copy attribute values to (any C{type}).
587
- @arg other: Object to copy attribute values from (any C{type}).
588
- @arg attrs: One or more attribute names (C{str}s).
589
-
590
- @return: Object B{C{insto}}, updated.
591
-
592
- @raise AttributeError: An B{C{attrs}} doesn't exist
593
- or is not settable.
594
- '''
595
- def _getattr(o, a):
596
- if hasattr(o, a):
597
- return getattr(o, a)
598
- try:
599
- n = o._DOT_(a)
600
- except AttributeError:
601
- n = Fmt.DOT(a)
602
- raise _AttributeError(o, name=n)
603
-
604
- for a in attrs:
605
- s = _getattr(other, a)
606
- g = _getattr(insto, a)
607
- if (g is None and s is not None) or g != s:
608
- setattr(insto, a, s) # not settable?
609
- return insto
610
-
611
-
612
582
  def _xzipairs(names, values, sep=_COMMASPACE_, fmt=NN, pair_fmt=Fmt.COLON):
613
583
  '''(INTERNAL) Zip C{names} and C{values} into a C{str}, joined and bracketed.
614
584
  '''