pygeodesy 24.11.11__py2.py3-none-any.whl → 25.1.5__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 (118) hide show
  1. {PyGeodesy-24.11.11.dist-info → PyGeodesy-25.1.5.dist-info}/METADATA +34 -35
  2. PyGeodesy-25.1.5.dist-info/RECORD +118 -0
  3. {PyGeodesy-24.11.11.dist-info → PyGeodesy-25.1.5.dist-info}/WHEEL +1 -1
  4. pygeodesy/__init__.py +19 -19
  5. pygeodesy/__main__.py +1 -1
  6. pygeodesy/albers.py +5 -5
  7. pygeodesy/auxilats/_CX_4.py +1 -1
  8. pygeodesy/auxilats/_CX_6.py +1 -1
  9. pygeodesy/auxilats/_CX_8.py +1 -1
  10. pygeodesy/auxilats/_CX_Rs.py +1 -1
  11. pygeodesy/auxilats/__init__.py +1 -1
  12. pygeodesy/auxilats/__main__.py +1 -1
  13. pygeodesy/auxilats/auxAngle.py +5 -5
  14. pygeodesy/auxilats/auxDLat.py +6 -6
  15. pygeodesy/auxilats/auxDST.py +2 -2
  16. pygeodesy/auxilats/auxLat.py +5 -5
  17. pygeodesy/auxilats/auxily.py +2 -2
  18. pygeodesy/azimuthal.py +5 -5
  19. pygeodesy/basics.py +60 -8
  20. pygeodesy/booleans.py +1 -1
  21. pygeodesy/cartesianBase.py +22 -61
  22. pygeodesy/clipy.py +1 -1
  23. pygeodesy/constants.py +5 -5
  24. pygeodesy/css.py +1 -1
  25. pygeodesy/datums.py +1 -1
  26. pygeodesy/deprecated/__init__.py +2 -2
  27. pygeodesy/deprecated/bases.py +1 -1
  28. pygeodesy/deprecated/classes.py +86 -2
  29. pygeodesy/deprecated/consterns.py +1 -1
  30. pygeodesy/deprecated/datum.py +5 -5
  31. pygeodesy/deprecated/functions.py +42 -8
  32. pygeodesy/deprecated/nvector.py +1 -1
  33. pygeodesy/deprecated/rhumbBase.py +1 -1
  34. pygeodesy/deprecated/rhumbaux.py +1 -1
  35. pygeodesy/deprecated/rhumbsolve.py +1 -1
  36. pygeodesy/deprecated/rhumbx.py +1 -1
  37. pygeodesy/dms.py +1 -1
  38. pygeodesy/ecef.py +53 -56
  39. pygeodesy/elevations.py +1 -1
  40. pygeodesy/ellipsoidalBase.py +3 -3
  41. pygeodesy/ellipsoidalBaseDI.py +1 -1
  42. pygeodesy/ellipsoidalExact.py +1 -1
  43. pygeodesy/ellipsoidalGeodSolve.py +1 -1
  44. pygeodesy/ellipsoidalKarney.py +1 -1
  45. pygeodesy/ellipsoidalNvector.py +1 -1
  46. pygeodesy/ellipsoidalVincenty.py +6 -5
  47. pygeodesy/ellipsoids.py +4 -5
  48. pygeodesy/elliptic.py +6 -6
  49. pygeodesy/epsg.py +1 -1
  50. pygeodesy/errors.py +1 -1
  51. pygeodesy/etm.py +5 -5
  52. pygeodesy/fmath.py +18 -17
  53. pygeodesy/formy.py +409 -555
  54. pygeodesy/frechet.py +29 -86
  55. pygeodesy/fstats.py +1 -1
  56. pygeodesy/fsums.py +32 -33
  57. pygeodesy/gars.py +1 -1
  58. pygeodesy/geodesici.py +7 -7
  59. pygeodesy/geodesicw.py +1 -1
  60. pygeodesy/geodesicx/_C4_24.py +2 -2
  61. pygeodesy/geodesicx/_C4_27.py +2 -2
  62. pygeodesy/geodesicx/_C4_30.py +2 -2
  63. pygeodesy/geodesicx/__init__.py +2 -2
  64. pygeodesy/geodesicx/__main__.py +4 -5
  65. pygeodesy/geodesicx/gx.py +6 -5
  66. pygeodesy/geodesicx/gxarea.py +2 -2
  67. pygeodesy/geodesicx/gxbases.py +2 -2
  68. pygeodesy/geodesicx/gxline.py +16 -12
  69. pygeodesy/geodsolve.py +1 -1
  70. pygeodesy/geohash.py +1 -1
  71. pygeodesy/geoids.py +277 -203
  72. pygeodesy/hausdorff.py +23 -81
  73. pygeodesy/heights.py +115 -150
  74. pygeodesy/internals.py +1 -1
  75. pygeodesy/interns.py +2 -3
  76. pygeodesy/iters.py +1 -1
  77. pygeodesy/karney.py +3 -3
  78. pygeodesy/ktm.py +16 -15
  79. pygeodesy/latlonBase.py +323 -409
  80. pygeodesy/lazily.py +53 -44
  81. pygeodesy/lcc.py +1 -1
  82. pygeodesy/ltp.py +46 -50
  83. pygeodesy/ltpTuples.py +147 -130
  84. pygeodesy/mgrs.py +1 -1
  85. pygeodesy/named.py +149 -3
  86. pygeodesy/namedTuples.py +58 -7
  87. pygeodesy/nvectorBase.py +122 -105
  88. pygeodesy/osgr.py +1 -1
  89. pygeodesy/points.py +1 -1
  90. pygeodesy/props.py +1 -1
  91. pygeodesy/resections.py +18 -17
  92. pygeodesy/rhumb/__init__.py +1 -1
  93. pygeodesy/rhumb/aux_.py +2 -2
  94. pygeodesy/rhumb/bases.py +2 -2
  95. pygeodesy/rhumb/ekx.py +4 -4
  96. pygeodesy/rhumb/solve.py +1 -1
  97. pygeodesy/simplify.py +289 -401
  98. pygeodesy/solveBase.py +1 -1
  99. pygeodesy/sphericalBase.py +1 -1
  100. pygeodesy/sphericalNvector.py +5 -5
  101. pygeodesy/sphericalTrigonometry.py +7 -6
  102. pygeodesy/streprs.py +10 -5
  103. pygeodesy/trf.py +1 -1
  104. pygeodesy/triaxials.py +23 -16
  105. pygeodesy/units.py +16 -16
  106. pygeodesy/unitsBase.py +1 -1
  107. pygeodesy/ups.py +4 -4
  108. pygeodesy/utily.py +341 -211
  109. pygeodesy/utm.py +5 -5
  110. pygeodesy/utmups.py +1 -1
  111. pygeodesy/utmupsBase.py +1 -1
  112. pygeodesy/vector2d.py +5 -5
  113. pygeodesy/vector3d.py +14 -3
  114. pygeodesy/vector3dBase.py +5 -5
  115. pygeodesy/webmercator.py +1 -1
  116. pygeodesy/wgrs.py +1 -1
  117. PyGeodesy-24.11.11.dist-info/RECORD +0 -118
  118. {PyGeodesy-24.11.11.dist-info → PyGeodesy-25.1.5.dist-info}/top_level.txt +0 -0
pygeodesy/frechet.py CHANGED
@@ -3,21 +3,19 @@
3
3
 
4
4
  u'''Fréchet distances.
5
5
 
6
- Classes L{Frechet}, L{FrechetDegrees}, L{FrechetRadians},
7
- L{FrechetCosineAndoyerLambert}, L{FrechetCosineForsytheAndoyerLambert},
8
- L{FrechetCosineLaw}, L{FrechetDistanceTo}< L{FrechetEquirectangular},
9
- L{FrechetEuclidean}, L{FrechetExact}, L{FrechetFlatLocal}, L{FrechetFlatPolar},
10
- L{FrechetHaversine}, L{FrechetHubeny}, L{FrechetKarney}, L{FrechetThomas}
11
- and L{FrechetVincentys} to compute I{discrete} U{Fréchet
12
- <https://WikiPedia.org/wiki/Frechet_distance>} distances between two sets
13
- of C{LatLon}, C{NumPy}, C{tuples} or other types of points.
6
+ Classes L{Frechet}, L{FrechetDegrees}, L{FrechetRadians}, L{FrechetCosineLaw},
7
+ L{FrechetDistanceTo}, L{FrechetEquirectangular}, L{FrechetEuclidean},
8
+ L{FrechetExact}, L{FrechetFlatLocal}, L{FrechetFlatPolar}, L{FrechetHaversine},
9
+ L{FrechetHubeny}, L{FrechetKarney}, L{FrechetThomas} and L{FrechetVincentys}
10
+ to compute I{discrete} U{Fréchet<https://WikiPedia.org/wiki/Frechet_distance>}
11
+ distances between two sets of C{LatLon}, C{NumPy}, C{tuples} or other types of points.
14
12
 
15
13
  Only L{FrechetDistanceTo} -iff used with L{ellipsoidalKarney.LatLon}
16
14
  points- and L{FrechetKarney} requires installation of I{Charles Karney}'s
17
15
  U{geographiclib<https://PyPI.org/project/geographiclib>}.
18
16
 
19
- Typical usage is as follows. First, create a C{Frechet} calculator
20
- from one set of C{LatLon} points.
17
+ Typical usage is as follows. First, create a C{Frechet} calculator from one
18
+ set of C{LatLon} points.
21
19
 
22
20
  C{f = FrechetXyz(point1s, ...)}
23
21
 
@@ -101,7 +99,7 @@ from collections import defaultdict as _defaultdict
101
99
  # from math import radians # from .points
102
100
 
103
101
  __all__ = _ALL_LAZY.frechet
104
- __version__ = '24.06.15'
102
+ __version__ = '24.12.31'
105
103
 
106
104
 
107
105
  def _fraction(fraction, n):
@@ -381,7 +379,7 @@ class _FrechetMeterRadians(Frechet):
381
379
  return self._discrete(point2s, fraction, _formy._radistance(self))
382
380
 
383
381
  @Property
384
- def _func_(self):
382
+ def _func_(self): # see _formy._radistance
385
383
  '''(INTERNAL) I{Must be overloaded}.'''
386
384
  self._notOverloaded(**self.kwds)
387
385
 
@@ -390,67 +388,22 @@ class _FrechetMeterRadians(Frechet):
390
388
  return _formy._Propy(func, 3, self.kwds)
391
389
 
392
390
 
393
- class FrechetCosineAndoyerLambert(_FrechetMeterRadians):
394
- '''Compute the C{Frechet} distance based on the I{angular} distance
395
- in C{radians} from function L{pygeodesy.cosineAndoyerLambert}.
396
- '''
397
- def __init__(self, point1s, **fraction_name__datum_wrap):
398
- '''New L{FrechetCosineAndoyerLambert} calculator/interpolator.
399
-
400
- @kwarg fraction_name__datum_wrap: Optional C{B{fraction}=None}
401
- and C{B{name}=NN} and keyword arguments for
402
- function L{pygeodesy.cosineAndoyerLambert}.
403
-
404
- @see: L{Frechet.__init__} for details about B{C{point1s}},
405
- B{C{fraction}}, B{C{name}} and other exceptions.
406
- '''
407
- Frechet.__init__(self, point1s, **fraction_name__datum_wrap)
408
- self._func = _formy.cosineAndoyerLambert
409
- self._func_ = _formy.cosineAndoyerLambert_
410
-
411
- if _FOR_DOCS:
412
- discrete = Frechet.discrete
413
-
414
-
415
- class FrechetCosineForsytheAndoyerLambert(_FrechetMeterRadians):
416
- '''Compute the C{Frechet} distance based on the I{angular} distance
417
- in C{radians} from function L{pygeodesy.cosineForsytheAndoyerLambert}.
418
- '''
419
- def __init__(self, point1s, **fraction_name__datum_wrap):
420
- '''New L{FrechetCosineForsytheAndoyerLambert} calculator/interpolator.
421
-
422
- @kwarg fraction_name__datum_wrap: Optional C{B{fraction}=None} and
423
- C{B{name}=NN} and keyword arguments for function
424
- L{pygeodesy.cosineForsytheAndoyerLambert}.
425
-
426
- @see: L{Frechet.__init__} for details about B{C{point1s}},
427
- B{C{fraction}}, B{C{name}} and other exceptions.
428
- '''
429
- Frechet.__init__(self, point1s, **fraction_name__datum_wrap)
430
- self._func = _formy.cosineForsytheAndoyerLambert
431
- self._func_ = _formy.cosineForsytheAndoyerLambert_
432
-
433
- if _FOR_DOCS:
434
- discrete = Frechet.discrete
435
-
436
-
437
391
  class FrechetCosineLaw(_FrechetMeterRadians):
438
- '''Compute the C{Frechet} distance based on the I{angular} distance
439
- in C{radians} from function L{pygeodesy.cosineLaw}.
392
+ '''Compute the C{Frechet} distance with functionn L{pygeodesy.cosineLaw}.
440
393
 
441
394
  @note: See note at function L{pygeodesy.vincentys_}.
442
395
  '''
443
- def __init__(self, point1s, **fraction_name__radius_wrap):
396
+ def __init__(self, point1s, **fraction_name__corr_earth_wrap):
444
397
  '''New L{FrechetCosineLaw} calculator/interpolator.
445
398
 
446
- @kwarg fraction_name__radius_wrap: Optional C{B{fraction}=None}
447
- and C{B{name}=NN} and keyword arguments
448
- for function L{pygeodesy.cosineLaw}.
399
+ @kwarg fraction_name__corr_earth_wrap: Optional
400
+ C{B{fraction}=None} and C{B{name}=NN} and keyword
401
+ arguments for function L{pygeodesy.cosineLaw}.
449
402
 
450
403
  @see: L{Frechet.__init__} for details about B{C{point1s}},
451
404
  B{C{fraction}}, B{C{name}} and other exceptions.
452
405
  '''
453
- Frechet.__init__(self, point1s, **fraction_name__radius_wrap)
406
+ Frechet.__init__(self, point1s, **fraction_name__corr_earth_wrap)
454
407
  self._func = _formy.cosineLaw
455
408
  self._func_ = _formy.cosineLaw_
456
409
 
@@ -459,8 +412,7 @@ class FrechetCosineLaw(_FrechetMeterRadians):
459
412
 
460
413
 
461
414
  class FrechetDistanceTo(Frechet): # FrechetMeter
462
- '''Compute the C{Frechet} distance based on the distance from the
463
- point1s' C{LatLon.distanceTo} method, conventionally in C{meter}.
415
+ '''Compute the C{Frechet} distance with the point1s' C{LatLon.distanceTo} method.
464
416
  '''
465
417
  _units = _unitsBase._Str_meter
466
418
 
@@ -495,8 +447,7 @@ class FrechetDistanceTo(Frechet): # FrechetMeter
495
447
 
496
448
 
497
449
  class FrechetEquirectangular(Frechet):
498
- '''Compute the C{Frechet} distance based on the I{equirectangular}
499
- distance in C{radians squared} like function L{pygeodesy.equirectangular}.
450
+ '''Compute the C{Frechet} distance with function L{pygeodesy.equirectangular}.
500
451
  '''
501
452
  _units = _unitsBase._Str_radians2
502
453
 
@@ -520,8 +471,7 @@ class FrechetEquirectangular(Frechet):
520
471
 
521
472
 
522
473
  class FrechetEuclidean(_FrechetMeterRadians):
523
- '''Compute the C{Frechet} distance based on the I{Euclidean}
524
- distance in C{radians} from function L{pygeodesy.euclidean}.
474
+ '''Compute the C{Frechet} distance with function L{pygeodesy.euclidean}.
525
475
  '''
526
476
  def __init__(self, point1s, **fraction_name__adjust_radius_wrap): # was=True
527
477
  '''New L{FrechetEuclidean} calculator/interpolator.
@@ -542,8 +492,7 @@ class FrechetEuclidean(_FrechetMeterRadians):
542
492
 
543
493
 
544
494
  class FrechetExact(Frechet):
545
- '''Compute the C{Frechet} distance based on the I{angular} distance
546
- in C{degrees} from method L{GeodesicExact}C{.Inverse}.
495
+ '''Compute the C{Frechet} distance with method L{GeodesicExact}C{.Inverse}.
547
496
  '''
548
497
  _units = _unitsBase._Str_degrees
549
498
 
@@ -571,8 +520,7 @@ class FrechetExact(Frechet):
571
520
 
572
521
 
573
522
  class FrechetFlatLocal(_FrechetMeterRadians):
574
- '''Compute the C{Frechet} distance based on the I{angular} distance in
575
- C{radians squared} like function L{pygeodesy.flatLocal_}/L{pygeodesy.hubeny}.
523
+ '''Compute the C{Frechet} distance with function L{pygeodesy.flatLocal_}/L{pygeodesy.hubeny}.
576
524
  '''
577
525
  _units_ = _unitsBase._Str_radians2 # see L{flatLocal_}
578
526
 
@@ -597,8 +545,7 @@ class FrechetFlatLocal(_FrechetMeterRadians):
597
545
 
598
546
 
599
547
  class FrechetFlatPolar(_FrechetMeterRadians):
600
- '''Compute the C{Frechet} distance based on the I{angular} distance
601
- in C{radians} from function L{flatPolar_}.
548
+ '''Compute the C{Frechet} distance with function L{flatPolar_}.
602
549
  '''
603
550
  def __init__(self, point1s, **fraction_name__radius_wrap):
604
551
  '''New L{FrechetFlatPolar} calculator/interpolator.
@@ -619,8 +566,7 @@ class FrechetFlatPolar(_FrechetMeterRadians):
619
566
 
620
567
 
621
568
  class FrechetHaversine(_FrechetMeterRadians):
622
- '''Compute the C{Frechet} distance based on the I{angular}
623
- distance in C{radians} from function L{pygeodesy.haversine_}.
569
+ '''Compute the C{Frechet} distance with function L{pygeodesy.haversine_}.
624
570
 
625
571
  @note: See note at function L{pygeodesy.vincentys_}.
626
572
  '''
@@ -651,11 +597,10 @@ class FrechetHubeny(FrechetFlatLocal): # for Karl Hubeny
651
597
 
652
598
 
653
599
  class FrechetKarney(Frechet):
654
- '''Compute the C{Frechet} distance based on the I{angular}
655
- distance in C{degrees} from I{Karney}'s U{geographiclib
600
+ '''Compute the C{Frechet} distance with I{Karney}'s U{geographiclib
656
601
  <https://PyPI.org/project/geographiclib>} U{geodesic.Geodesic
657
- <https://GeographicLib.SourceForge.io/Python/doc/code.html>}
658
- C{Inverse} method.
602
+ <https://GeographicLib.SourceForge.io/Python/doc/code.html>}C{.Inverse}
603
+ method.
659
604
  '''
660
605
  _units = _unitsBase._Str_degrees
661
606
 
@@ -686,8 +631,7 @@ class FrechetKarney(Frechet):
686
631
 
687
632
 
688
633
  class FrechetThomas(_FrechetMeterRadians):
689
- '''Compute the C{Frechet} distance based on the I{angular} distance
690
- in C{radians} from function L{pygeodesy.thomas_}.
634
+ '''Compute the C{Frechet} distance with function L{pygeodesy.thomas_}.
691
635
  '''
692
636
  def __init__(self, point1s, **fraction_name__datum_wrap):
693
637
  '''New L{FrechetThomas} calculator/interpolator.
@@ -708,8 +652,7 @@ class FrechetThomas(_FrechetMeterRadians):
708
652
 
709
653
 
710
654
  class FrechetVincentys(_FrechetMeterRadians):
711
- '''Compute the C{Frechet} distance based on the I{angular}
712
- distance in C{radians} from function L{pygeodesy.vincentys_}.
655
+ '''Compute the C{Frechet} distance with function L{pygeodesy.vincentys_}.
713
656
 
714
657
  @note: See note at function L{pygeodesy.vincentys_}.
715
658
  '''
@@ -856,7 +799,7 @@ class Frechet6Tuple(_NamedTuple):
856
799
 
857
800
  # **) MIT License
858
801
  #
859
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
802
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
860
803
  #
861
804
  # Permission is hereby granted, free of charge, to any person obtaining a
862
805
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/fstats.py CHANGED
@@ -803,7 +803,7 @@ __all__ += _ALL_DOCS(_FstatsBase, _FstatsNamed)
803
803
 
804
804
  # **) MIT License
805
805
  #
806
- # Copyright (C) 2021-2024 -- mrJean1 at Gmail -- All Rights Reserved.
806
+ # Copyright (C) 2021-2025 -- mrJean1 at Gmail -- All Rights Reserved.
807
807
  #
808
808
  # Permission is hereby granted, free of charge, to any person obtaining a
809
809
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/fsums.py CHANGED
@@ -64,7 +64,7 @@ from math import fabs, isinf, isnan, \
64
64
  ceil as _ceil, floor as _floor # PYCHOK used! .ltp
65
65
 
66
66
  __all__ = _ALL_LAZY.fsums
67
- __version__ = '24.11.11'
67
+ __version__ = '24.12.02'
68
68
 
69
69
  from pygeodesy.interns import (
70
70
  _PLUS_ as _add_op_, # in .auxilats.auxAngle
@@ -100,7 +100,7 @@ def _2finite(x, _isfine=_isfinite): # in .fstats
100
100
 
101
101
 
102
102
  def _2float(index=None, _isfine=_isfinite, **name_x): # in .fmath, .fstats
103
- '''(INTERNAL) Raise C{TypeError} or C{Overflow-/ValueError} if not finite.
103
+ '''(INTERNAL) Raise C{TypeError} or C{Overflow-/ValueError} if C{x} not finite.
104
104
  '''
105
105
  n, x = name_x.popitem() # _xkwds_item2(name_x)
106
106
  try:
@@ -233,7 +233,7 @@ def f2product(two=None):
233
233
  return t
234
234
 
235
235
 
236
- def _Fsumf_(*xs): # in .auxLat, .ltp, ...
236
+ def _Fsumf_(*xs): # in .auxLat, ...
237
237
  '''(INTERNAL) An C{Fsum(xs)}, all C{scalar}, an L{Fsum} or L{Fsum2Tuple}.
238
238
  '''
239
239
  return Fsum()._facc_scalarf(xs, up=False)
@@ -401,7 +401,7 @@ def _residue(other):
401
401
  return r
402
402
 
403
403
 
404
- def _s_r(s, r):
404
+ def _s_r2(s, r):
405
405
  '''(INTERNAL) Return C{(s, r)}, I{ordered}.
406
406
  '''
407
407
  if _isfinite(s):
@@ -415,24 +415,6 @@ def _s_r(s, r):
415
415
  return s, r
416
416
 
417
417
 
418
- def _2s_r(other):
419
- '''(INTERNAL) Return 2-tuple C{(other, r)} with C{other} as C{int},
420
- C{float} or C{as-is} and C{r} the residual of C{as-is} or 0.
421
- '''
422
- if _isFsum_2Tuple(other):
423
- s, r = other._fint2
424
- if r:
425
- s, r = other._nfprs2
426
- if r: # PYCHOK no cover
427
- s = other # L{Fsum} as-is
428
- else:
429
- r = 0
430
- s = other # C{type} as-is
431
- if isint(s, both=True):
432
- s = int(s)
433
- return s, r
434
-
435
-
436
418
  def _strcomplex(s, *args):
437
419
  '''(INTERNAL) C{Complex} 2- or 3-arg C{pow} error as C{str}.
438
420
  '''
@@ -489,6 +471,24 @@ def _threshold(threshold=_0_0, **kwds):
489
471
  raise ResidualError(threshold=threshold, cause=x)
490
472
 
491
473
 
474
+ def _2tuple2(other):
475
+ '''(INTERNAL) Return 2-tuple C{(other, r)} with C{other} as C{int},
476
+ C{float} or C{as-is} and C{r} the residual of C{as-is} or 0.
477
+ '''
478
+ if _isFsum_2Tuple(other):
479
+ s, r = other._fint2
480
+ if r:
481
+ s, r = other._nfprs2
482
+ if r: # PYCHOK no cover
483
+ s = other # L{Fsum} as-is
484
+ else:
485
+ r = 0
486
+ s = other # C{type} as-is
487
+ if isint(s, both=True):
488
+ s = int(s)
489
+ return s, r
490
+
491
+
492
492
  class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats, ...
493
493
  '''Precision floating point summation, I{running} summation and accurate multiplication.
494
494
 
@@ -1579,7 +1579,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
1579
1579
  elif self.is_integer():
1580
1580
  # return an exact C{int} for C{int}**C{int}
1581
1581
  i, _ = self._fint2 # assert _ == 0
1582
- x, r = _2s_r(other) # C{int}, C{float} or other
1582
+ x, r = _2tuple2(other) # C{int}, C{float} or other
1583
1583
  f = self._Fsum_as(i)._pow_Fsum(other, op, **raiser_RESIDUAL) if r else \
1584
1584
  self._pow_2_3(i, x, other, op, **raiser_RESIDUAL)
1585
1585
  else: # mod[0] is None, power(self, other)
@@ -1645,9 +1645,9 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
1645
1645
  # Fsum._ps_max = max(Fsum._ps_max, n)
1646
1646
  if n > 2:
1647
1647
  r = self._ps_1sum(s)
1648
- return Fsum2Tuple(*_s_r(s, r))
1648
+ return Fsum2Tuple(*_s_r2(s, r))
1649
1649
  if n > 1: # len(ps) == 2
1650
- s, r = _s_r(*_2sum(*ps, **self._isfine))
1650
+ s, r = _s_r2(*_2sum(*ps, **self._isfine))
1651
1651
  ps[:] = (r, s) if r else (s,)
1652
1652
  elif ps: # len(ps) == 1
1653
1653
  s = ps[0]
@@ -1673,9 +1673,8 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
1673
1673
  def fset_(self, *xs):
1674
1674
  '''Apply C{B{self}.partials = Fsum(*B{xs}).partials}.
1675
1675
 
1676
- @arg xs: Optional, new values (each C{scalar} or
1677
- an L{Fsum} or L{Fsum2Tuple} instance), all
1678
- positional.
1676
+ @arg xs: Optional, new values (each C{scalar} or an L{Fsum}
1677
+ or L{Fsum2Tuple} instance), all positional.
1679
1678
 
1680
1679
  @return: This instance, replaced (C{Fsum}).
1681
1680
 
@@ -1850,7 +1849,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
1850
1849
  s, r = _facc(xs, **facc_kwds)._fprs2
1851
1850
  if _isfinite(s): # _fsum(_1primed((s, -p, r, -q))
1852
1851
  d, r = _2sum(s - p, r - q, _isfine=_isOK)
1853
- r, _ = _s_r(d, r)
1852
+ r, _ = _s_r2(d, r)
1854
1853
  return s, (r if _isfinite(r) else _NONFINITEr)
1855
1854
  else:
1856
1855
  return p, _0_0
@@ -2185,7 +2184,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
2185
2184
  return s
2186
2185
 
2187
2186
  b = _s(*(b._fprs2 if m is None else b._fint2))
2188
- x = _s(*_2s_r(x))
2187
+ x = _s(*_2tuple2(x))
2189
2188
 
2190
2189
  try:
2191
2190
  # 0**INF == 0.0, 1**INF == 1.0, -1**2.3 == -(1**2.3)
@@ -2608,7 +2607,7 @@ class Fsum2Tuple(_NamedTuple): # in .fstats
2608
2607
 
2609
2608
  @Property_RO
2610
2609
  def _Fsum(self): # this C{Fsum2Tuple} as L{Fsum}, in .fstats
2611
- s, r = _s_r(*self)
2610
+ s, r = _s_r2(*self)
2612
2611
  ps = (r, s) if r else (s,)
2613
2612
  return _Psum(ps, name=self.name)
2614
2613
 
@@ -2817,7 +2816,7 @@ def _xsum(which, xs, nonfinites=None, primed=0, **floats): # origin=0
2817
2816
  nonfinites = _xkwds_get1(floats, floats=nonfinites)
2818
2817
  elif nonfinites is None:
2819
2818
  nonfinites = not nonfiniterrors()
2820
- fs = _xs(xs, **_x_isfine(nonfinites, which=which))
2819
+ fs = _xs(xs, **_x_isfine(nonfinites, which=which)) # PYCHOK yield
2821
2820
  return _fsum(_1primed(fs) if primed else fs)
2822
2821
 
2823
2822
 
@@ -2848,7 +2847,7 @@ if __name__ == '__main__':
2848
2847
 
2849
2848
  # **) MIT License
2850
2849
  #
2851
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
2850
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
2852
2851
  #
2853
2852
  # Permission is hereby granted, free of charge, to any person obtaining a
2854
2853
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/gars.py CHANGED
@@ -345,7 +345,7 @@ __all__ += _ALL_DOCS(decode3, # functions
345
345
 
346
346
  # **) MIT License
347
347
  #
348
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
348
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
349
349
  #
350
350
  # Permission is hereby granted, free of charge, to any person obtaining a
351
351
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/geodesici.py CHANGED
@@ -28,8 +28,8 @@ from __future__ import division as _; del _ # PYCHOK semicolon
28
28
  from pygeodesy.basics import _copy, _enumereverse, map1, \
29
29
  _xinstanceof, _xor
30
30
  from pygeodesy.constants import EPS, INF, INT0, PI, PI2, PI_4, \
31
- _0_0, _0_5, _1_0, _1_5, _2_0, \
32
- _3_0, _64_0, _90_0, isfinite, \
31
+ _0_0, _0_5, _1_0, _1_5, _2_0, _3_0, \
32
+ _45_0, _64_0, _90_0, isfinite, \
33
33
  _EPSjam # PYCHOK used!
34
34
  from pygeodesy.ellipsoids import _EWGS84, Fmt, unstr
35
35
  from pygeodesy.errors import GeodesicError, IntersectionError, _an, \
@@ -51,12 +51,12 @@ from pygeodesy.solveBase import _SolveCapsBase, pairs
51
51
  # from pygeodesy.streprs import Fmt, unstr # from .ellipsoids
52
52
  from pygeodesy.units import Azimuth as Azi, Degrees, Float, Int, \
53
53
  _isDegrees, Lat, Lon, Meter, Meter_
54
- from pygeodesy.utily import sincos2, atan2, fabs, radians
54
+ from pygeodesy.utily import atan2, sincos2, fabs, radians
55
55
 
56
- # from math import atan2, ceil as _ceil, fabs, radians # .fsums, .utily
56
+ # from math import ceil as _ceil, fabs, radians # .fsums, .utily
57
57
 
58
58
  __all__ = _ALL_LAZY.geodesici
59
- __version__ = '24.10.22'
59
+ __version__ = '24.12.22'
60
60
 
61
61
  _0t = 0, # int
62
62
  _1_1t = -1, +1
@@ -1214,7 +1214,7 @@ class Intersector(_IntersectBase):
1214
1214
  return X if X is None else self._In5T(glA, glB, X, X)
1215
1215
 
1216
1216
  def _obliqDist4(self):
1217
- zx = 45.0
1217
+ zx = _45_0
1218
1218
  if self.f:
1219
1219
  _abs, _cjD5 = fabs, self._conjDist5
1220
1220
 
@@ -1774,7 +1774,7 @@ if __name__ == '__main__': # MCCABE 14
1774
1774
 
1775
1775
  # **) MIT License
1776
1776
  #
1777
- # Copyright (C) 2024-2024 -- mrJean1 at Gmail -- All Rights Reserved.
1777
+ # Copyright (C) 2024-2025 -- mrJean1 at Gmail -- All Rights Reserved.
1778
1778
  #
1779
1779
  # Permission is hereby granted, free of charge, to any person obtaining a
1780
1780
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/geodesicw.py CHANGED
@@ -588,7 +588,7 @@ def _PlumbTo(gl, lat0, lon0, est=None, tol=_TOL):
588
588
 
589
589
  # **) MIT License
590
590
  #
591
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
591
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
592
592
  #
593
593
  # Permission is hereby granted, free of charge, to any person obtaining a
594
594
  # copy of this software and associated documentation files (the "Software"),
@@ -4,7 +4,7 @@
4
4
  u'''A Python version of part of I{Karney}'s C++ module U{GeodesicExactC4
5
5
  <https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1GeodesicExactC4.html>}.
6
6
 
7
- Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2023)
7
+ Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2024)
8
8
  and licensed under the MIT/X11 License. For more information, see the
9
9
  U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
10
10
  '''
@@ -1676,7 +1676,7 @@ del _g, _Gfloats, _f, _f2
1676
1676
 
1677
1677
  # **) MIT License
1678
1678
  #
1679
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
1679
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
1680
1680
  #
1681
1681
  # Permission is hereby granted, free of charge, to any person obtaining a
1682
1682
  # copy of this software and associated documentation files (the "Software"),
@@ -4,7 +4,7 @@
4
4
  u'''A Python version of part of I{Karney}'s C++ module U{GeodesicExactC4
5
5
  <https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1GeodesicExactC4.html>}.
6
6
 
7
- Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2023)
7
+ Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2024)
8
8
  and licensed under the MIT/X11 License. For more information, see the
9
9
  U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
10
10
  '''
@@ -2372,7 +2372,7 @@ del _g, _Gfloats, _f, _f2
2372
2372
 
2373
2373
  # **) MIT License
2374
2374
  #
2375
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
2375
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
2376
2376
  #
2377
2377
  # Permission is hereby granted, free of charge, to any person obtaining a
2378
2378
  # copy of this software and associated documentation files (the "Software"),
@@ -4,7 +4,7 @@
4
4
  u'''A Python version of part of I{Karney}'s C++ module U{GeodesicExactC4
5
5
  <https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1GeodesicExactC4.html>}.
6
6
 
7
- Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2023)
7
+ Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2024)
8
8
  and licensed under the MIT/X11 License. For more information, see the
9
9
  U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
10
10
  '''
@@ -3278,7 +3278,7 @@ del _g, _Gfloats, _f, _f2
3278
3278
 
3279
3279
  # **) MIT License
3280
3280
  #
3281
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
3281
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
3282
3282
  #
3283
3283
  # Permission is hereby granted, free of charge, to any person obtaining a
3284
3284
  # copy of this software and associated documentation files (the "Software"),
@@ -23,11 +23,11 @@ from pygeodesy.karney import Caps, GeodesicError
23
23
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY
24
24
 
25
25
  __all__ = _ALL_LAZY.geodesicx + _ALL_DOCS(Caps, GeodesicError)
26
- __version__ = '24.11.02'
26
+ __version__ = '24.12.31'
27
27
 
28
28
  # **) MIT License
29
29
  #
30
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
30
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
31
31
  #
32
32
  # Permission is hereby granted, free of charge, to any person obtaining a
33
33
  # copy of this software and associated documentation files (the "Software"),
@@ -5,7 +5,7 @@ u'''Print L{geodesicx} version, etc. using C{python -m pygeodesy.geodesicx}.
5
5
  '''
6
6
 
7
7
  __all__ = ()
8
- __version__ = '24.09.06'
8
+ __version__ = '24.12.31'
9
9
 
10
10
 
11
11
  def _main(**C4order): # PYCHOK no cover
@@ -23,11 +23,10 @@ def _main(**C4order): # PYCHOK no cover
23
23
  gX = GeodesicExact(**C4order)
24
24
  cs = geodesicx.gx._C4coeffs(gX.C4order)
25
25
  n = len(cs)
26
- u = n if numpy else len(set(cs))
27
- z = cs.nbytes if numpy else _sizeof(cs)
26
+ u = n if numpy else len(set(cs))
28
27
  p = dict(C4order=gX.C4order, C4n=n, C4u=u,
29
28
  C4u_n=_fper(u, n), C4x=len(gX._C4x),
30
- C4t=type(cs).__name__, C4z=z)
29
+ C4t=type(cs).__name__, C4z=_sizeof(cs))
31
30
  p = list(_EQUAL_(*t) for t in p.items())
32
31
  if numpy:
33
32
  p.append(_name_version(numpy))
@@ -65,7 +64,7 @@ _main(C4order=int(argv[1])) if len(argv) == 2 and argv[1].isdigit() else _main()
65
64
 
66
65
  # **) MIT License
67
66
  #
68
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
67
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
69
68
  #
70
69
  # Permission is hereby granted, free of charge, to any person obtaining a
71
70
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/geodesicx/gx.py CHANGED
@@ -8,7 +8,7 @@ Class L{GeodesicExact} follows the naming, methods and return values
8
8
  of class C{Geodesic} from I{Karney}'s Python U{geographiclib
9
9
  <https://GitHub.com/geographiclib/geographiclib-python>}.
10
10
 
11
- Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2023)
11
+ Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2024)
12
12
  and licensed under the MIT/X11 License. For more information, see the
13
13
  U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
14
14
  '''
@@ -58,12 +58,13 @@ from pygeodesy.lazily import _ALL_DOCS, _ALL_MODS as _MODS
58
58
  from pygeodesy.namedTuples import Destination3Tuple, Distance3Tuple
59
59
  from pygeodesy.props import deprecated_Property, Property, Property_RO, property_RO
60
60
  # from pygeodesy.streprs import Fmt # from .fmath
61
- from pygeodesy.utily import atan2d as _atan2d_reverse, _unrollon, _Wrap, wrap360
61
+ from pygeodesy.utily import atan2, atan2d as _atan2d_reverse, _unrollon, \
62
+ _Wrap, wrap360
62
63
 
63
- from math import atan2, copysign, cos, degrees, fabs, radians, sqrt
64
+ from math import copysign, cos, degrees, fabs, radians, sqrt
64
65
 
65
66
  __all__ = ()
66
- __version__ = '24.08.13'
67
+ __version__ = '24.11.24'
67
68
 
68
69
  _MAXIT1 = 20
69
70
  _MAXIT2 = 10 + _MAXIT1 + MANT_DIG # MANT_DIG == C++ digits
@@ -1346,7 +1347,7 @@ __all__ += _ALL_DOCS(GeodesicExact, GeodesicLineExact)
1346
1347
 
1347
1348
  # **) MIT License
1348
1349
  #
1349
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
1350
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
1350
1351
  #
1351
1352
  # Permission is hereby granted, free of charge, to any person obtaining a
1352
1353
  # copy of this software and associated documentation files (the "Software"),
@@ -10,7 +10,7 @@ Class L{GeodesicAreaExact} is intended to work with instances
10
10
  of class L{GeodesicExact} and of I{wrapped} class C{Geodesic},
11
11
  see module L{pygeodesy.karney}.
12
12
 
13
- Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2023)
13
+ Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2024)
14
14
  and licensed under the MIT/X11 License. For more information, see the
15
15
  U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
16
16
  '''
@@ -518,7 +518,7 @@ __all__ += _ALL_DOCS(GeodesicAreaExact, PolygonArea)
518
518
 
519
519
  # **) MIT License
520
520
  #
521
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
521
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
522
522
  #
523
523
  # Permission is hereby granted, free of charge, to any person obtaining a
524
524
  # copy of this software and associated documentation files (the "Software"),
@@ -3,7 +3,7 @@
3
3
 
4
4
  u'''(INTERNAL) Private L{geodesicx} base class, functions and constants.
5
5
 
6
- Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2023)
6
+ Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2024)
7
7
  and licensed under the MIT/X11 License. For more information, see the
8
8
  U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
9
9
  '''
@@ -158,7 +158,7 @@ def _xnC4(**name_nC4):
158
158
 
159
159
  # **) MIT License
160
160
  #
161
- # Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
161
+ # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
162
162
  #
163
163
  # Permission is hereby granted, free of charge, to any person obtaining a
164
164
  # copy of this software and associated documentation files (the "Software"),