pygeodesy 24.11.11__py2.py3-none-any.whl → 24.12.12__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-24.12.12.dist-info}/METADATA +4 -4
- PyGeodesy-24.12.12.dist-info/RECORD +118 -0
- {PyGeodesy-24.11.11.dist-info → PyGeodesy-24.12.12.dist-info}/WHEEL +1 -1
- pygeodesy/__init__.py +4 -4
- 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 +1 -1
- pygeodesy/booleans.py +1 -1
- pygeodesy/cartesianBase.py +22 -61
- pygeodesy/clipy.py +1 -1
- pygeodesy/constants.py +3 -3
- 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 +1 -1
- pygeodesy/deprecated/consterns.py +1 -1
- pygeodesy/deprecated/datum.py +1 -1
- pygeodesy/deprecated/functions.py +18 -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 +17 -16
- pygeodesy/formy.py +71 -104
- pygeodesy/frechet.py +1 -1
- pygeodesy/fstats.py +1 -1
- pygeodesy/fsums.py +32 -33
- pygeodesy/gars.py +1 -1
- pygeodesy/geodesici.py +4 -4
- 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 +1 -1
- pygeodesy/geodesicx/__main__.py +1 -1
- 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 +1 -1
- pygeodesy/hausdorff.py +1 -1
- pygeodesy/heights.py +1 -1
- 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 +291 -341
- pygeodesy/lazily.py +11 -11
- pygeodesy/lcc.py +1 -1
- pygeodesy/ltp.py +46 -50
- pygeodesy/ltpTuples.py +145 -128
- 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 +202 -145
- 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-24.12.12.dist-info}/top_level.txt +0 -0
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
|
@@ -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.11.24'
|
|
60
60
|
|
|
61
61
|
_0t = 0, # int
|
|
62
62
|
_1_1t = -1, +1
|
|
@@ -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
|
@@ -27,7 +27,7 @@ __version__ = '24.11.02'
|
|
|
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
|
@@ -65,7 +65,7 @@ _main(C4order=int(argv[1])) if len(argv) == 2 and argv[1].isdigit() else _main()
|
|
|
65
65
|
|
|
66
66
|
# **) MIT License
|
|
67
67
|
#
|
|
68
|
-
# Copyright (C) 2016-
|
|
68
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
69
69
|
#
|
|
70
70
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
71
71
|
# 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"),
|
pygeodesy/geodesicx/gxline.py
CHANGED
|
@@ -49,14 +49,13 @@ from pygeodesy.lazily import _ALL_DOCS, _ALL_MODS as _MODS
|
|
|
49
49
|
from pygeodesy.karney import _around, _atan2d, Caps, GDict, _fix90, \
|
|
50
50
|
_K_2_0, _llz2gl, _norm2, _norm180, \
|
|
51
51
|
_sincos2, _sincos2d
|
|
52
|
-
from pygeodesy.
|
|
53
|
-
|
|
54
|
-
from pygeodesy.utily import atan2d as _atan2d_reverse, sincos2
|
|
52
|
+
from pygeodesy.props import Property_RO, property_ROver, _update_all
|
|
53
|
+
from pygeodesy.utily import atan2, atan2d as _atan2d_reverse, sincos2
|
|
55
54
|
|
|
56
|
-
from math import
|
|
55
|
+
from math import cos, degrees, fabs, floor, radians, sin
|
|
57
56
|
|
|
58
57
|
__all__ = ()
|
|
59
|
-
__version__ = '24.
|
|
58
|
+
__version__ = '24.11.24'
|
|
60
59
|
|
|
61
60
|
_glXs = [] # instances of C{[_]GeodesicLineExact} to be updated
|
|
62
61
|
|
|
@@ -377,11 +376,11 @@ class _GeodesicLineExact(_GeodesicBase):
|
|
|
377
376
|
lam12 = salp0 * self._H0e2_f1 * fsum1f_(eF.deltaH(ssig2, csig2, dn2),
|
|
378
377
|
-self._H1, sig12)
|
|
379
378
|
if (outmask & Cs.LONG_UNROLL):
|
|
380
|
-
|
|
379
|
+
t = _copysign_1_0(salp0) # east-going?
|
|
381
380
|
tchi1 = t * schi1
|
|
382
381
|
tchi2 = t * schi2
|
|
383
|
-
chi12 = t * fsum1f_(
|
|
384
|
-
|
|
382
|
+
chi12 = t * fsum1f_(atan2(ssig1, csig1), -atan2(ssig2, csig2),
|
|
383
|
+
atan2(tchi2, cchi2), -atan2(tchi1, cchi1), sig12)
|
|
385
384
|
lon2 = self.lon1 + degrees(chi12 - lam12)
|
|
386
385
|
else:
|
|
387
386
|
chi12 = atan2(*_sincos12(schi1, cchi1, schi2, cchi2))
|
|
@@ -634,6 +633,13 @@ class _GeodesicLineExact(_GeodesicBase):
|
|
|
634
633
|
# unnecessary because Einv inverts E
|
|
635
634
|
# return -self._eF.deltaEinv(stau1, ctau1)
|
|
636
635
|
|
|
636
|
+
@property_ROver
|
|
637
|
+
def _toProps7(self):
|
|
638
|
+
'''(INTERNAL) 7-Tuple of C{toStr} properties.
|
|
639
|
+
'''
|
|
640
|
+
C = _GeodesicLineExact
|
|
641
|
+
return C.lat1, C.lon1, C.azi1, C.a13, C.s13, C.caps, C.geodesic
|
|
642
|
+
|
|
637
643
|
def toStr(self, **prec_sep_name): # PYCHOK signature
|
|
638
644
|
'''Return this C{GeodesicLineExact} as string.
|
|
639
645
|
|
|
@@ -642,16 +648,14 @@ class _GeodesicLineExact(_GeodesicBase):
|
|
|
642
648
|
|
|
643
649
|
@return: C{GeodesicLineExact} (C{str}).
|
|
644
650
|
'''
|
|
645
|
-
|
|
646
|
-
t = C.lat1, C.lon1, C.azi1, C.a13, C.s13, C.caps, C.geodesic
|
|
647
|
-
return self._instr(props=t, **prec_sep_name)
|
|
651
|
+
return self._instr(props=self._toProps7, **prec_sep_name)
|
|
648
652
|
|
|
649
653
|
|
|
650
654
|
__all__ += _ALL_DOCS(_GeodesicLineExact)
|
|
651
655
|
|
|
652
656
|
# **) MIT License
|
|
653
657
|
#
|
|
654
|
-
# Copyright (C) 2016-
|
|
658
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
655
659
|
#
|
|
656
660
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
657
661
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/geodsolve.py
CHANGED
|
@@ -504,7 +504,7 @@ if __name__ == '__main__':
|
|
|
504
504
|
|
|
505
505
|
# **) MIT License
|
|
506
506
|
#
|
|
507
|
-
# Copyright (C) 2016-
|
|
507
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
508
508
|
#
|
|
509
509
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
510
510
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/geohash.py
CHANGED
|
@@ -1099,7 +1099,7 @@ if __name__ == '__main__':
|
|
|
1099
1099
|
|
|
1100
1100
|
# **) MIT License
|
|
1101
1101
|
#
|
|
1102
|
-
# Copyright (C) 2016-
|
|
1102
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1103
1103
|
#
|
|
1104
1104
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1105
1105
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/geoids.py
CHANGED
|
@@ -1837,7 +1837,7 @@ del _intCs # trash ints cache
|
|
|
1837
1837
|
|
|
1838
1838
|
# **) MIT License
|
|
1839
1839
|
#
|
|
1840
|
-
# Copyright (C) 2016-
|
|
1840
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1841
1841
|
#
|
|
1842
1842
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1843
1843
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/hausdorff.py
CHANGED
|
@@ -882,7 +882,7 @@ def randomrangenerator(seed):
|
|
|
882
882
|
|
|
883
883
|
# **) MIT License
|
|
884
884
|
#
|
|
885
|
-
# Copyright (C) 2016-
|
|
885
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
886
886
|
#
|
|
887
887
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
888
888
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/heights.py
CHANGED
|
@@ -1110,7 +1110,7 @@ __all__ += _ALL_DOCS(_HeightBase, _HeightIDW, _HeightNamed)
|
|
|
1110
1110
|
|
|
1111
1111
|
# **) MIT License
|
|
1112
1112
|
#
|
|
1113
|
-
# Copyright (C) 2016-
|
|
1113
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1114
1114
|
#
|
|
1115
1115
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1116
1116
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/internals.py
CHANGED
|
@@ -718,7 +718,7 @@ if _is_DUNDER_main(__name__): # PYCHOK no cover
|
|
|
718
718
|
|
|
719
719
|
# **) MIT License
|
|
720
720
|
#
|
|
721
|
-
# Copyright (C) 2016-
|
|
721
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
722
722
|
#
|
|
723
723
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
724
724
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/interns.py
CHANGED
|
@@ -217,7 +217,6 @@ _ellipsoidal_ = 'ellipsoidal' # PYCHOK OK
|
|
|
217
217
|
_encode_ = 'encode' # PYCHOK OK
|
|
218
218
|
_end_ = 'end' # PYCHOK OK
|
|
219
219
|
_epoch_ = 'epoch' # PYCHOK OK
|
|
220
|
-
_eps_ = 'eps' # PYCHOK OK
|
|
221
220
|
_EQUAL_ = Str_('=') # PYCHOK OK
|
|
222
221
|
_EQUALSPACED_ = Str_(' = ') # PYCHOK OK
|
|
223
222
|
_Error_ = 'Error' # PYCHOK OK
|
|
@@ -441,7 +440,7 @@ _LR_PAIRS = {_LANGLE_: _RANGLE_,
|
|
|
441
440
|
|
|
442
441
|
__all__ = (_NN_, # NOT MISSING!
|
|
443
442
|
Str_.__name__) # classes
|
|
444
|
-
__version__ = '24.
|
|
443
|
+
__version__ = '24.11.27'
|
|
445
444
|
|
|
446
445
|
if __name__ == '__main__':
|
|
447
446
|
|
|
@@ -464,7 +463,7 @@ if __name__ == '__main__':
|
|
|
464
463
|
|
|
465
464
|
# **) MIT License
|
|
466
465
|
#
|
|
467
|
-
# Copyright (C) 2016-
|
|
466
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
468
467
|
#
|
|
469
468
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
470
469
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/iters.py
CHANGED
|
@@ -527,7 +527,7 @@ __all__ += _ALL_DOCS(_BaseIter)
|
|
|
527
527
|
|
|
528
528
|
# **) MIT License
|
|
529
529
|
#
|
|
530
|
-
# Copyright (C) 2016-
|
|
530
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
531
531
|
#
|
|
532
532
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
533
533
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/karney.py
CHANGED
|
@@ -165,7 +165,7 @@ from pygeodesy.utily import atan2d, sincos2d, tand, _unrollon, fabs
|
|
|
165
165
|
# from math import fabs # from .utily
|
|
166
166
|
|
|
167
167
|
__all__ = _ALL_LAZY.karney
|
|
168
|
-
__version__ = '24.11.
|
|
168
|
+
__version__ = '24.11.26'
|
|
169
169
|
|
|
170
170
|
_2_4_ = '2.4'
|
|
171
171
|
_K_2_0 = _getenv(_PYGEODESY(_xgeographiclib, 1), _2_)
|
|
@@ -1011,7 +1011,7 @@ def _tand(x):
|
|
|
1011
1011
|
try:
|
|
1012
1012
|
return _wrapped.Math.tand(x)
|
|
1013
1013
|
except AttributeError:
|
|
1014
|
-
return tand(x)
|
|
1014
|
+
return tand(x) # Error=None
|
|
1015
1015
|
|
|
1016
1016
|
|
|
1017
1017
|
def _unroll2(lon1, lon2, wrap=False): # see .ellipsoidalBaseDI._intersects2
|
|
@@ -1039,7 +1039,7 @@ __all__ += _ALL_DOCS(_CapsBase)
|
|
|
1039
1039
|
|
|
1040
1040
|
# **) MIT License
|
|
1041
1041
|
#
|
|
1042
|
-
# Copyright (C) 2016-
|
|
1042
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1043
1043
|
#
|
|
1044
1044
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1045
1045
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/ktm.py
CHANGED
|
@@ -35,7 +35,7 @@ following exceptions:
|
|
|
35
35
|
- Evaluating the convergence and scale using the expression for the
|
|
36
36
|
projection or its inverse.
|
|
37
37
|
|
|
38
|
-
Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-
|
|
38
|
+
Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2024)
|
|
39
39
|
and licensed under the MIT/X11 License. For more information, see the
|
|
40
40
|
U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
|
|
41
41
|
'''
|
|
@@ -60,13 +60,13 @@ from pygeodesy.props import property_doc_, Property, Property_RO, \
|
|
|
60
60
|
_update_all
|
|
61
61
|
# from pygeodesy.streprs import pairs # from .named
|
|
62
62
|
from pygeodesy.units import Degrees, Scalar_, _1mm as _TOL_10 # PYCHOK used!
|
|
63
|
-
from pygeodesy.utily import atan1d, _loneg, sincos2, sincos2d_
|
|
63
|
+
from pygeodesy.utily import atan1d, atan2, _loneg, sincos2, sincos2d_
|
|
64
64
|
|
|
65
65
|
from cmath import polar
|
|
66
|
-
from math import
|
|
66
|
+
from math import asinh, cos, cosh, degrees, fabs, sin, sinh, sqrt, tanh
|
|
67
67
|
|
|
68
68
|
__all__ = _ALL_LAZY.ktm
|
|
69
|
-
__version__ = '24.11.
|
|
69
|
+
__version__ = '24.11.24'
|
|
70
70
|
|
|
71
71
|
|
|
72
72
|
class KTMError(_ValueError):
|
|
@@ -148,7 +148,8 @@ class KTransverseMercator(_NamedBase):
|
|
|
148
148
|
else:
|
|
149
149
|
self.ellipsoid = a_earth
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
if lon0:
|
|
152
|
+
self.lon0 = lon0
|
|
152
153
|
self.k0 = k0
|
|
153
154
|
if raiser:
|
|
154
155
|
self.raiser = True
|
|
@@ -425,9 +426,9 @@ class KTransverseMercator(_NamedBase):
|
|
|
425
426
|
return _COMMASPACE_.join(pairs(d, **kwds))
|
|
426
427
|
|
|
427
428
|
|
|
428
|
-
def
|
|
429
|
-
'''(INTERNAL)
|
|
430
|
-
C{a}, C{b0} and C{b1} and scalar C{Cn}.
|
|
429
|
+
def _cfma(a, b0, b1, Cn):
|
|
430
|
+
'''(INTERNAL) Complex fused-multiply-add M{a * b0 - b1 + Cn} with
|
|
431
|
+
complex C{a}, C{b0} and C{b1} and scalar C{Cn}.
|
|
431
432
|
|
|
432
433
|
@see: CPython function U{_Py_c_prod<https://GitHub.com/python/
|
|
433
434
|
cpython/blob/main/Objects/complexobject.c>}.
|
|
@@ -462,16 +463,16 @@ def _Cyxgk4(E, xi_, eta_, C):
|
|
|
462
463
|
n -= 1
|
|
463
464
|
while n > 0:
|
|
464
465
|
Cn = C[n]
|
|
465
|
-
y1 =
|
|
466
|
-
z1 =
|
|
466
|
+
y1 = _cfma(a, y0, y1, Cn)
|
|
467
|
+
z1 = _cfma(a, z0, z1, Cn * (n * 2))
|
|
467
468
|
n -= 1
|
|
468
469
|
Cn = C[n]
|
|
469
|
-
y0 =
|
|
470
|
-
z0 =
|
|
470
|
+
y0 = _cfma(a, y1, y0, Cn)
|
|
471
|
+
z0 = _cfma(a, z1, z0, Cn * (n * 2))
|
|
471
472
|
n -= 1
|
|
472
473
|
# assert n == 0
|
|
473
|
-
x =
|
|
474
|
-
c =
|
|
474
|
+
x = _cfma(s, y0, -x, _0_0)
|
|
475
|
+
c = _cfma(c, z0, z1, _1_0)
|
|
475
476
|
|
|
476
477
|
# Gauss-Schreiber to Gauss-Krueger TM
|
|
477
478
|
# C{cmath.polar} handles INF, NAN, etc.
|
|
@@ -611,7 +612,7 @@ if __name__ == '__main__':
|
|
|
611
612
|
|
|
612
613
|
# **) MIT License
|
|
613
614
|
#
|
|
614
|
-
# Copyright (C) 2022-
|
|
615
|
+
# Copyright (C) 2022-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
615
616
|
#
|
|
616
617
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
617
618
|
# copy of this software and associated documentation files (the "Software"),
|