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.
- {PyGeodesy-24.11.11.dist-info → PyGeodesy-25.1.5.dist-info}/METADATA +34 -35
- PyGeodesy-25.1.5.dist-info/RECORD +118 -0
- {PyGeodesy-24.11.11.dist-info → PyGeodesy-25.1.5.dist-info}/WHEEL +1 -1
- pygeodesy/__init__.py +19 -19
- pygeodesy/__main__.py +1 -1
- pygeodesy/albers.py +5 -5
- pygeodesy/auxilats/_CX_4.py +1 -1
- pygeodesy/auxilats/_CX_6.py +1 -1
- pygeodesy/auxilats/_CX_8.py +1 -1
- pygeodesy/auxilats/_CX_Rs.py +1 -1
- pygeodesy/auxilats/__init__.py +1 -1
- pygeodesy/auxilats/__main__.py +1 -1
- pygeodesy/auxilats/auxAngle.py +5 -5
- pygeodesy/auxilats/auxDLat.py +6 -6
- pygeodesy/auxilats/auxDST.py +2 -2
- pygeodesy/auxilats/auxLat.py +5 -5
- pygeodesy/auxilats/auxily.py +2 -2
- pygeodesy/azimuthal.py +5 -5
- pygeodesy/basics.py +60 -8
- pygeodesy/booleans.py +1 -1
- pygeodesy/cartesianBase.py +22 -61
- pygeodesy/clipy.py +1 -1
- pygeodesy/constants.py +5 -5
- pygeodesy/css.py +1 -1
- pygeodesy/datums.py +1 -1
- pygeodesy/deprecated/__init__.py +2 -2
- pygeodesy/deprecated/bases.py +1 -1
- pygeodesy/deprecated/classes.py +86 -2
- pygeodesy/deprecated/consterns.py +1 -1
- pygeodesy/deprecated/datum.py +5 -5
- pygeodesy/deprecated/functions.py +42 -8
- pygeodesy/deprecated/nvector.py +1 -1
- pygeodesy/deprecated/rhumbBase.py +1 -1
- pygeodesy/deprecated/rhumbaux.py +1 -1
- pygeodesy/deprecated/rhumbsolve.py +1 -1
- pygeodesy/deprecated/rhumbx.py +1 -1
- pygeodesy/dms.py +1 -1
- pygeodesy/ecef.py +53 -56
- pygeodesy/elevations.py +1 -1
- pygeodesy/ellipsoidalBase.py +3 -3
- pygeodesy/ellipsoidalBaseDI.py +1 -1
- pygeodesy/ellipsoidalExact.py +1 -1
- pygeodesy/ellipsoidalGeodSolve.py +1 -1
- pygeodesy/ellipsoidalKarney.py +1 -1
- pygeodesy/ellipsoidalNvector.py +1 -1
- pygeodesy/ellipsoidalVincenty.py +6 -5
- pygeodesy/ellipsoids.py +4 -5
- pygeodesy/elliptic.py +6 -6
- pygeodesy/epsg.py +1 -1
- pygeodesy/errors.py +1 -1
- pygeodesy/etm.py +5 -5
- pygeodesy/fmath.py +18 -17
- pygeodesy/formy.py +409 -555
- pygeodesy/frechet.py +29 -86
- pygeodesy/fstats.py +1 -1
- pygeodesy/fsums.py +32 -33
- pygeodesy/gars.py +1 -1
- pygeodesy/geodesici.py +7 -7
- pygeodesy/geodesicw.py +1 -1
- pygeodesy/geodesicx/_C4_24.py +2 -2
- pygeodesy/geodesicx/_C4_27.py +2 -2
- pygeodesy/geodesicx/_C4_30.py +2 -2
- pygeodesy/geodesicx/__init__.py +2 -2
- pygeodesy/geodesicx/__main__.py +4 -5
- pygeodesy/geodesicx/gx.py +6 -5
- pygeodesy/geodesicx/gxarea.py +2 -2
- pygeodesy/geodesicx/gxbases.py +2 -2
- pygeodesy/geodesicx/gxline.py +16 -12
- pygeodesy/geodsolve.py +1 -1
- pygeodesy/geohash.py +1 -1
- pygeodesy/geoids.py +277 -203
- pygeodesy/hausdorff.py +23 -81
- pygeodesy/heights.py +115 -150
- pygeodesy/internals.py +1 -1
- pygeodesy/interns.py +2 -3
- pygeodesy/iters.py +1 -1
- pygeodesy/karney.py +3 -3
- pygeodesy/ktm.py +16 -15
- pygeodesy/latlonBase.py +323 -409
- pygeodesy/lazily.py +53 -44
- pygeodesy/lcc.py +1 -1
- pygeodesy/ltp.py +46 -50
- pygeodesy/ltpTuples.py +147 -130
- pygeodesy/mgrs.py +1 -1
- pygeodesy/named.py +149 -3
- pygeodesy/namedTuples.py +58 -7
- pygeodesy/nvectorBase.py +122 -105
- pygeodesy/osgr.py +1 -1
- pygeodesy/points.py +1 -1
- pygeodesy/props.py +1 -1
- pygeodesy/resections.py +18 -17
- pygeodesy/rhumb/__init__.py +1 -1
- pygeodesy/rhumb/aux_.py +2 -2
- pygeodesy/rhumb/bases.py +2 -2
- pygeodesy/rhumb/ekx.py +4 -4
- pygeodesy/rhumb/solve.py +1 -1
- pygeodesy/simplify.py +289 -401
- pygeodesy/solveBase.py +1 -1
- pygeodesy/sphericalBase.py +1 -1
- pygeodesy/sphericalNvector.py +5 -5
- pygeodesy/sphericalTrigonometry.py +7 -6
- pygeodesy/streprs.py +10 -5
- pygeodesy/trf.py +1 -1
- pygeodesy/triaxials.py +23 -16
- pygeodesy/units.py +16 -16
- pygeodesy/unitsBase.py +1 -1
- pygeodesy/ups.py +4 -4
- pygeodesy/utily.py +341 -211
- pygeodesy/utm.py +5 -5
- pygeodesy/utmups.py +1 -1
- pygeodesy/utmupsBase.py +1 -1
- pygeodesy/vector2d.py +5 -5
- pygeodesy/vector3d.py +14 -3
- pygeodesy/vector3dBase.py +5 -5
- pygeodesy/webmercator.py +1 -1
- pygeodesy/wgrs.py +1 -1
- PyGeodesy-24.11.11.dist-info/RECORD +0 -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{
|
|
8
|
-
L{
|
|
9
|
-
L{
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
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, **
|
|
396
|
+
def __init__(self, point1s, **fraction_name__corr_earth_wrap):
|
|
444
397
|
'''New L{FrechetCosineLaw} calculator/interpolator.
|
|
445
398
|
|
|
446
|
-
@kwarg
|
|
447
|
-
|
|
448
|
-
|
|
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, **
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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-
|
|
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-
|
|
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.
|
|
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,
|
|
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
|
|
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 =
|
|
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(*
|
|
1648
|
+
return Fsum2Tuple(*_s_r2(s, r))
|
|
1649
1649
|
if n > 1: # len(ps) == 2
|
|
1650
|
-
s, r =
|
|
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
|
-
|
|
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, _ =
|
|
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(*
|
|
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 =
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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,
|
|
54
|
+
from pygeodesy.utily import atan2, sincos2, fabs, radians
|
|
55
55
|
|
|
56
|
-
# from math import
|
|
56
|
+
# from math import ceil as _ceil, fabs, radians # .fsums, .utily
|
|
57
57
|
|
|
58
58
|
__all__ = _ALL_LAZY.geodesici
|
|
59
|
-
__version__ = '24.
|
|
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 =
|
|
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-
|
|
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-
|
|
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"),
|
pygeodesy/geodesicx/_C4_24.py
CHANGED
|
@@ -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-
|
|
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-
|
|
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"),
|
pygeodesy/geodesicx/_C4_27.py
CHANGED
|
@@ -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-
|
|
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-
|
|
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"),
|
pygeodesy/geodesicx/_C4_30.py
CHANGED
|
@@ -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-
|
|
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-
|
|
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"),
|
pygeodesy/geodesicx/__init__.py
CHANGED
|
@@ -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.
|
|
26
|
+
__version__ = '24.12.31'
|
|
27
27
|
|
|
28
28
|
# **) MIT License
|
|
29
29
|
#
|
|
30
|
-
# Copyright (C) 2016-
|
|
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"),
|
pygeodesy/geodesicx/__main__.py
CHANGED
|
@@ -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.
|
|
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
|
|
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=
|
|
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-
|
|
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-
|
|
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,
|
|
61
|
+
from pygeodesy.utily import atan2, atan2d as _atan2d_reverse, _unrollon, \
|
|
62
|
+
_Wrap, wrap360
|
|
62
63
|
|
|
63
|
-
from math import
|
|
64
|
+
from math import copysign, cos, degrees, fabs, radians, sqrt
|
|
64
65
|
|
|
65
66
|
__all__ = ()
|
|
66
|
-
__version__ = '24.
|
|
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-
|
|
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"),
|
pygeodesy/geodesicx/gxarea.py
CHANGED
|
@@ -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-
|
|
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-
|
|
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"),
|
pygeodesy/geodesicx/gxbases.py
CHANGED
|
@@ -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-
|
|
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-
|
|
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"),
|