pygeodesy 24.4.12__py2.py3-none-any.whl → 24.4.18__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.4.12.dist-info → PyGeodesy-24.4.18.dist-info}/METADATA +2 -2
- {PyGeodesy-24.4.12.dist-info → PyGeodesy-24.4.18.dist-info}/RECORD +20 -20
- pygeodesy/__init__.py +1 -1
- pygeodesy/albers.py +12 -19
- pygeodesy/auxilats/auxLat.py +3 -3
- pygeodesy/deprecated/__init__.py +1 -1
- pygeodesy/deprecated/classes.py +14 -1
- pygeodesy/ellipsoids.py +3 -3
- pygeodesy/elliptic.py +10 -11
- pygeodesy/errors.py +27 -28
- pygeodesy/fmath.py +64 -65
- pygeodesy/fsums.py +290 -215
- pygeodesy/lazily.py +3 -3
- pygeodesy/ltp.py +11 -11
- pygeodesy/osgr.py +24 -24
- pygeodesy/resections.py +16 -24
- pygeodesy/triaxials.py +4 -4
- pygeodesy/vector2d.py +9 -8
- {PyGeodesy-24.4.12.dist-info → PyGeodesy-24.4.18.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.4.12.dist-info → PyGeodesy-24.4.18.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PyGeodesy
|
|
3
|
-
Version: 24.4.
|
|
3
|
+
Version: 24.4.18
|
|
4
4
|
Summary: Pure Python geodesy tools
|
|
5
5
|
Home-page: https://GitHub.com/mrJean1/PyGeodesy
|
|
6
6
|
Author: Jean M. Brouwers
|
|
@@ -158,7 +158,7 @@ and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64
|
|
|
158
158
|
|
|
159
159
|
For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
|
|
160
160
|
|
|
161
|
-
*Last updated: April
|
|
161
|
+
*Last updated: April 18, 2024.*
|
|
162
162
|
|
|
163
163
|
License
|
|
164
164
|
=======
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
-
pygeodesy/__init__.py,sha256=
|
|
2
|
+
pygeodesy/__init__.py,sha256=Wx1Zo8hUxl6CV1eZZvLbrQSQ6VSB8mHBTmPqxcG0Mpc,40824
|
|
3
3
|
pygeodesy/__main__.py,sha256=qMFG3caY8ZXWu6uGiemzyT4OqTFZnsFtlxcGCAgkVJw,4637
|
|
4
|
-
pygeodesy/albers.py,sha256=
|
|
4
|
+
pygeodesy/albers.py,sha256=g2AVlpV8JO2AYFCthoIbRC2h1OJqjb9P3hpwF0C3TI8,30994
|
|
5
5
|
pygeodesy/azimuthal.py,sha256=tc4JxgLi-0jzU08m4Bvi-t-kzHXYPeGuzL3j_tyVFUA,50125
|
|
6
6
|
pygeodesy/basics.py,sha256=_BMYLzGKA6OIS3qv25HfHy7MIh0kAbmkzyScb59clUs,28160
|
|
7
7
|
pygeodesy/booleans.py,sha256=HZbwoL-S7Ww9d4C2D1BVqXfmcuqqVpEVSU9_S0uyUyo,74204
|
|
@@ -20,16 +20,16 @@ pygeodesy/ellipsoidalGeodSolve.py,sha256=xfNcb70AuPbIiJUqhisIfg6pCQBqXyQffBNuESE
|
|
|
20
20
|
pygeodesy/ellipsoidalKarney.py,sha256=FoOsfNf96oHuGa9k4AB42y_UUBuOkh4xMW7PFGF63SA,19246
|
|
21
21
|
pygeodesy/ellipsoidalNvector.py,sha256=vHVKSfR86LnIapGlwl5_uCaEuQGdm0e89mwE6Ay-394,30323
|
|
22
22
|
pygeodesy/ellipsoidalVincenty.py,sha256=Uk93B8GFcMnWiwKUOA84TlLwbBlvzVnsAXAx0cU7cn4,26004
|
|
23
|
-
pygeodesy/ellipsoids.py,sha256=
|
|
24
|
-
pygeodesy/elliptic.py,sha256=
|
|
23
|
+
pygeodesy/ellipsoids.py,sha256=SxMsivNnE9ibUjQGd0d24H0SzoSjh6jfhLWjasOWpao,119946
|
|
24
|
+
pygeodesy/elliptic.py,sha256=XRVpmpdm3hbztM4P-qhWKQizbgsXDUxWujgmOrIpgiQ,42428
|
|
25
25
|
pygeodesy/epsg.py,sha256=ldHoLWqJWR4FUiBVnDTtrI_e7TNjjtr9OkxDlri1g5E,8165
|
|
26
|
-
pygeodesy/errors.py,sha256=
|
|
26
|
+
pygeodesy/errors.py,sha256=mUaacHJKcSCowlcbzamaBMDqjI2dqsTM5O4ozIITtAk,27233
|
|
27
27
|
pygeodesy/etm.py,sha256=joEhU2lw9ehRv101nRpZvXq8hOYAEzdcYFpif9_obfk,44585
|
|
28
|
-
pygeodesy/fmath.py,sha256=
|
|
28
|
+
pygeodesy/fmath.py,sha256=9jjm_QxrQKNtOUxgNk02j-UVMFVjC1cDPaEqXznKgzk,30716
|
|
29
29
|
pygeodesy/formy.py,sha256=Rces4Q5ecED0WVfuI9mQzeyHE54LDowYfI6faBHpyeA,74536
|
|
30
30
|
pygeodesy/frechet.py,sha256=qgee-ISBtT7Ov3rJkcd_t-WeXTbeNoMSQuMa0j3MyQc,33512
|
|
31
31
|
pygeodesy/fstats.py,sha256=r8O2aIknHuoHsW8gZUIY42zpHZy7syHvCB7uCVtPpkc,25559
|
|
32
|
-
pygeodesy/fsums.py,sha256=
|
|
32
|
+
pygeodesy/fsums.py,sha256=QjV9B-YGbhFALMPEQMKT8-1j7JFDWnabakAdZDvFsSs,72501
|
|
33
33
|
pygeodesy/gars.py,sha256=fCiWBJ4kOJxPfNOxadX-OzBGDXj7C9g02NuGHiZa_88,11342
|
|
34
34
|
pygeodesy/geodesicw.py,sha256=5yjJ2rLekSsjT7e-Km6v592ZcFlA41flQP_E42jU9Sw,26901
|
|
35
35
|
pygeodesy/geodsolve.py,sha256=3GLI2_4gglzTpZwKchNzAv-XhWFBzWRKjcWsjCC3dvI,21900
|
|
@@ -42,18 +42,18 @@ pygeodesy/iters.py,sha256=CfU365eE9F4oWZbBx0qTEvfodMhpa8rGOepLIv67xF8,20181
|
|
|
42
42
|
pygeodesy/karney.py,sha256=lYdsSHis8xQJVS1V0F3cphx6Dhgd77xTlMOdVR8MN8I,34994
|
|
43
43
|
pygeodesy/ktm.py,sha256=sCvbLvJItavlruilAyjeZ0sOZx2yJumzGe_UiIVbGi4,27315
|
|
44
44
|
pygeodesy/latlonBase.py,sha256=LimCMj91J3Q4D_rTu7VN7c63cLL_KzxXagFQfedobmc,77730
|
|
45
|
-
pygeodesy/lazily.py,sha256=
|
|
45
|
+
pygeodesy/lazily.py,sha256=4ZxBVj1Yu4Db-dw_e6oxXx7EtDSrgdGBV-ypUefMPGY,48633
|
|
46
46
|
pygeodesy/lcc.py,sha256=yNpmAdOwv3HNh2ZLopF5QtvDokeQYCmnxSc8UFUPHO4,25737
|
|
47
|
-
pygeodesy/ltp.py,sha256=
|
|
47
|
+
pygeodesy/ltp.py,sha256=8se8dYG7LG__Ru0FoK939DJBF9GCQGeJik_Un1Im8Xw,48609
|
|
48
48
|
pygeodesy/ltpTuples.py,sha256=iKzvDfv33HfmEevjNISUS4c9KXIkiISEkVlQopyKgfY,55769
|
|
49
49
|
pygeodesy/mgrs.py,sha256=GJ-vG54E2zSLtROyqJ_kj8fHH-8jWGf3kVe7gb8993o,28978
|
|
50
50
|
pygeodesy/named.py,sha256=2Kg4tv883V80ZVUEgFzDeBmIEMkig_VUbJuufC0lhN0,48009
|
|
51
51
|
pygeodesy/namedTuples.py,sha256=msEYvQKj4oCW35Kx80RpeQXY85A1G0O3GEqsysLaV2M,27288
|
|
52
52
|
pygeodesy/nvectorBase.py,sha256=WJY5ylZ_HCeM1wGL7ryEecJphEYibp-EAWL0piKlMG8,28766
|
|
53
|
-
pygeodesy/osgr.py,sha256=
|
|
53
|
+
pygeodesy/osgr.py,sha256=voC1rbOe4dnS_EjaDaRDRUQ4MoG7puMBEMV6lcAuIBI,31029
|
|
54
54
|
pygeodesy/points.py,sha256=QNAAF0r7iqSXFr_6aQm-wW7f6vU3KusWVhXEMVeVo58,64442
|
|
55
55
|
pygeodesy/props.py,sha256=ZnXRuSOkfkeJY3Of-iT06FNWZkTYgLZQBPBNF6aS0jE,21421
|
|
56
|
-
pygeodesy/resections.py,sha256=
|
|
56
|
+
pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
|
|
57
57
|
pygeodesy/simplify.py,sha256=FT3AzXiFjFfvwJ-X2q8iA9cQOUVdBT1vD_BIskM3gK8,25223
|
|
58
58
|
pygeodesy/solveBase.py,sha256=cBe3QQWEaJlPWUlXoiYo1eFMh4z6GDZbQyt8ZiwMfos,16687
|
|
59
59
|
pygeodesy/sphericalBase.py,sha256=sH2WwmY_RL0STyr1OhtCDKvGhO0Ks7o3V-MHLddpiHQ,31944
|
|
@@ -61,7 +61,7 @@ pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms
|
|
|
61
61
|
pygeodesy/sphericalTrigonometry.py,sha256=Q9qsqzIK43xBken2G8uP9snPXPuBoZ20pMHqbT_IjG0,64216
|
|
62
62
|
pygeodesy/streprs.py,sha256=-29aUO7dYe-YWfTjflljesxGUp7IfEAjk5dJLHWMPVs,23413
|
|
63
63
|
pygeodesy/trf.py,sha256=4gVtF780EEZEqWwMBDe4x1AEkIz3hB8h4l0_0NXWM5U,118903
|
|
64
|
-
pygeodesy/triaxials.py,sha256=
|
|
64
|
+
pygeodesy/triaxials.py,sha256=fkUcWkXkykZNbTq62LcdnEjhNu9q-e2UaSpRotdzuu8,61546
|
|
65
65
|
pygeodesy/units.py,sha256=ofFTYc7mF9wOpfvpYHN83dGszMM18rTdsxfEXVzaIko,38705
|
|
66
66
|
pygeodesy/unitsBase.py,sha256=xRZlNlO7S47Mwy0FGBg_cefvB4fEtWFM5dAE-Nlw-NE,13111
|
|
67
67
|
pygeodesy/ups.py,sha256=07AG-Rb1D4EvmN3g-xk3ZxKzyaNYvOzztcyYbx7t8jc,23229
|
|
@@ -69,7 +69,7 @@ pygeodesy/utily.py,sha256=jP82RmCPCVghxTQv4ZRuIS89afmsD-roz2iafHfyHXA,36128
|
|
|
69
69
|
pygeodesy/utm.py,sha256=0qF5Kjw8Wf9zxGWOaCF-LSweibat-EkHvvmy7dFO_KE,30981
|
|
70
70
|
pygeodesy/utmups.py,sha256=u2hlWSnmZKwR-ApgKw16R9p75sW_yaqQAmbcBUE8Zfg,13007
|
|
71
71
|
pygeodesy/utmupsBase.py,sha256=KetB8R0uRYU6X8nLG3JkBHUr1OfNlChKa0isgvm8Yq8,18807
|
|
72
|
-
pygeodesy/vector2d.py,sha256=
|
|
72
|
+
pygeodesy/vector2d.py,sha256=IAgmn-9-P6zxh4rond2k0tuf26miVwe-eHqm5f7sWTU,35003
|
|
73
73
|
pygeodesy/vector3d.py,sha256=Q_brX_URZg_Eln01y8G8_NAEuPbbOI_IgO2wBJk1N0U,44970
|
|
74
74
|
pygeodesy/vector3dBase.py,sha256=wJpEcgHlJ5Qu0Us7CKuNDepZQzo6a-RvqZbA2-O4-ko,35583
|
|
75
75
|
pygeodesy/webmercator.py,sha256=1IXiAHBXTm5kMCp5gEI67oBJeRXD7BiPVI7bcRRX1U4,14918
|
|
@@ -82,11 +82,11 @@ pygeodesy/auxilats/__main__.py,sha256=TVN8evCKEzBKdANU5-Ucps8bZySqBTQmEGU4hy_U1c
|
|
|
82
82
|
pygeodesy/auxilats/auxAngle.py,sha256=3tTYEuiX2YmEOmoyqGPYrSN3gLXbcKWKFH1TNt3NqbI,16738
|
|
83
83
|
pygeodesy/auxilats/auxDLat.py,sha256=U3BHF6AkW5--nrwH9whL5wZVIZLH_keRLfUz6c6KBx4,10950
|
|
84
84
|
pygeodesy/auxilats/auxDST.py,sha256=bdNEh3TdABWH7qW6ngZx5SnzDM3B5rtPLvYhvCnFsKc,10497
|
|
85
|
-
pygeodesy/auxilats/auxLat.py,sha256=
|
|
85
|
+
pygeodesy/auxilats/auxLat.py,sha256=U6thEwMEoUm4OFb2_JviEtEn2-nqyVjNbII7oyMf0hM,31282
|
|
86
86
|
pygeodesy/auxilats/auxily.py,sha256=ZiCFedYcr32O6TWQ_dcnwMrc9TgogyuhNSbR77WMDpg,8240
|
|
87
|
-
pygeodesy/deprecated/__init__.py,sha256=
|
|
87
|
+
pygeodesy/deprecated/__init__.py,sha256=ZRGqgwSdvtKSYZdw09-LPuGa_i0jMHWKIwrPG3r1hHs,2815
|
|
88
88
|
pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8,1655
|
|
89
|
-
pygeodesy/deprecated/classes.py,sha256=
|
|
89
|
+
pygeodesy/deprecated/classes.py,sha256=PXgss-2kEu3bzaxvSeVZJGdcRqsdi_6_aRqsESyUQKQ,11662
|
|
90
90
|
pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
|
|
91
91
|
pygeodesy/deprecated/datum.py,sha256=KfuMA64LYGMj1voW2uai2RGcugtWdpvlOL6UHJvpTeQ,1875
|
|
92
92
|
pygeodesy/deprecated/functions.py,sha256=-Ckor43KBiCDa7rbwY5kHvrs5xwuixTlw1TZpNSBgrU,13647
|
|
@@ -109,7 +109,7 @@ pygeodesy/rhumb/aux_.py,sha256=W4HkgoHAQz_aWaysfsmOA5010nCGvBfUs2Q-bymnHYU,16660
|
|
|
109
109
|
pygeodesy/rhumb/bases.py,sha256=kzU_Dgt4FNPMgTg5rqbw-HiNpflDPKpmq9jhPbQmR4U,53851
|
|
110
110
|
pygeodesy/rhumb/ekx.py,sha256=lF3tZ-ZY9fPJV8y1kgHW-7EOZCyb3gJr-kR-jj5Fbf8,23871
|
|
111
111
|
pygeodesy/rhumb/solve.py,sha256=NZfwx7xv5UriQs7A0c7ZhoxxVUeAT15UwXK_jtwEXQw,27802
|
|
112
|
-
PyGeodesy-24.4.
|
|
113
|
-
PyGeodesy-24.4.
|
|
114
|
-
PyGeodesy-24.4.
|
|
115
|
-
PyGeodesy-24.4.
|
|
112
|
+
PyGeodesy-24.4.18.dist-info/METADATA,sha256=kwVbSazBaM7cCqqiNZ0-SQbbnG7-Y3vLtmAh_yGMK3s,19366
|
|
113
|
+
PyGeodesy-24.4.18.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
114
|
+
PyGeodesy-24.4.18.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
115
|
+
PyGeodesy-24.4.18.dist-info/RECORD,,
|
pygeodesy/__init__.py
CHANGED
pygeodesy/albers.py
CHANGED
|
@@ -22,7 +22,7 @@ from pygeodesy.constants import EPS0, EPS02, _EPSqrt as _TOL, \
|
|
|
22
22
|
from pygeodesy.datums import _ellipsoidal_datum, _WGS84
|
|
23
23
|
from pygeodesy.errors import _ValueError, _xkwds
|
|
24
24
|
from pygeodesy.fmath import hypot, hypot1, sqrt3
|
|
25
|
-
from pygeodesy.fsums import Fsum, fsum1f_
|
|
25
|
+
from pygeodesy.fsums import Fsum, _Fsum1f_, fsum1f_
|
|
26
26
|
from pygeodesy.interns import NN, _COMMASPACE_, _datum_, _gamma_, _k0_, \
|
|
27
27
|
_lat_, _lat1_, _lat2_, _lon_, _name_, _not_, \
|
|
28
28
|
_negative_, _scale_, _SPACE_, _x_, _y_
|
|
@@ -38,7 +38,7 @@ from pygeodesy.utily import atan1, atan1d, degrees360, sincos2, sincos2d, \
|
|
|
38
38
|
from math import atan2, atanh, degrees, fabs, radians, sqrt
|
|
39
39
|
|
|
40
40
|
__all__ = _ALL_LAZY.albers
|
|
41
|
-
__version__ = '24.04.
|
|
41
|
+
__version__ = '24.04.14'
|
|
42
42
|
|
|
43
43
|
_k1_ = 'k1'
|
|
44
44
|
_NUMIT = 8 # XXX 4?
|
|
@@ -54,14 +54,6 @@ def _ct2(s, c):
|
|
|
54
54
|
return c, (s / c)
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
def _Fsum1(a, b, c=_0_0): # floats=True
|
|
58
|
-
'''(INTERNAL) C{Fsum} 1-primed.
|
|
59
|
-
'''
|
|
60
|
-
S = Fsum()
|
|
61
|
-
S._facc_(_1_0, a, b, c, _N_1_0, up=False)
|
|
62
|
-
return S
|
|
63
|
-
|
|
64
|
-
|
|
65
57
|
def _Ks(**name_k):
|
|
66
58
|
'''(INTERNAL) Scale C{B{k} >= EPS0}.
|
|
67
59
|
'''
|
|
@@ -388,12 +380,13 @@ class _AlbersBase(_NamedBase):
|
|
|
388
380
|
|
|
389
381
|
den = hypot(nx, y1) + nrho0 # 0 implies origin with polar aspect
|
|
390
382
|
if den:
|
|
391
|
-
drho =
|
|
383
|
+
drho = _Fsum1f_(x * nx, y_ * nrho0 * _N_2_0, y_ * ny).fover(den / k0)
|
|
392
384
|
# dsxia = scxi0 * dsxi
|
|
393
|
-
t += drho * n0
|
|
385
|
+
t += drho * n0 # k0 below
|
|
394
386
|
d_ = (nrho0 + t) * drho * self._scxi0_ # / (qZ * E.a2)
|
|
395
|
-
|
|
396
|
-
|
|
387
|
+
t_ = txi - d_
|
|
388
|
+
d_ = (txi + t_) * d_ + _1_0
|
|
389
|
+
txi = t_ / (sqrt(d_) if d_ > EPS02 else EPS0)
|
|
397
390
|
|
|
398
391
|
ta = self._tanf(txi)
|
|
399
392
|
lat = atan1d(s * ta)
|
|
@@ -487,11 +480,11 @@ class _AlbersBase(_NamedBase):
|
|
|
487
480
|
(ca2, sa2, ta2, scb22))
|
|
488
481
|
|
|
489
482
|
dsxi = ((esa12 / esa1_2) + _DatanheE(sa2, sa1, E)) * dsn_2 / self._qx
|
|
490
|
-
C =
|
|
483
|
+
C = _Fsum1f_(sxi * dtb12 / dsxi, scb22, scb12).fover(scb22 * scb12 * _2_0)
|
|
491
484
|
|
|
492
|
-
|
|
493
|
-
axi *= (
|
|
494
|
-
bxi *=
|
|
485
|
+
S = _Fsum1f_(sa1, sa2, sa12)
|
|
486
|
+
axi *= (S * e2 + _1).fover(S + _1, raiser=False)
|
|
487
|
+
bxi *= _Fsum1f_(sa1, sa2, esa12).fover(esa1_2) * e2 + _D2atanheE(sa1, sa2, E) * E.e21
|
|
495
488
|
s1_qZ = (axi * self._qZ - bxi) * dsn_2 / dtb12
|
|
496
489
|
ta0 = self._ta0(s1_qZ, (ta1 + ta2) * _0_5, E)
|
|
497
490
|
return ta0, C
|
|
@@ -571,7 +564,7 @@ class _AlbersBase(_NamedBase):
|
|
|
571
564
|
es2m1a = es2m1 * E.e21 # e2m
|
|
572
565
|
s = sqrt((ca2 / (es1p1 * es2m1a) + _atanheE(ca2 / es1m1, E))
|
|
573
566
|
* (es1m1 / es2m1a + _atanheE(es1p1, E)))
|
|
574
|
-
t =
|
|
567
|
+
t = _Fsum1f_(sa / es2m1, _atanheE(sa, E)).fover(s)
|
|
575
568
|
return neg(t) if ta < 0 else t
|
|
576
569
|
|
|
577
570
|
|
pygeodesy/auxilats/auxLat.py
CHANGED
|
@@ -27,7 +27,7 @@ from pygeodesy.datums import _ellipsoidal_datum, _WGS84, Ellipsoid
|
|
|
27
27
|
from pygeodesy.elliptic import Elliptic as _Ef
|
|
28
28
|
from pygeodesy.errors import AuxError, _xkwds, _xkwds_get, _Xorder
|
|
29
29
|
# from pygeodesy.fmath import cbrt # from .karney
|
|
30
|
-
from pygeodesy.fsums import Fsum, _sum
|
|
30
|
+
from pygeodesy.fsums import Fsum, _Fsumf_, _sum
|
|
31
31
|
from pygeodesy.karney import _2cos2x, _polynomial, _ALL_DOCS, cbrt, _MODS
|
|
32
32
|
from pygeodesy.interns import NN, _DOT_, _UNDER_ # _earth_
|
|
33
33
|
# from pygeodesy.lazily import _ALL_DOCS, _ALL_MODS as _MODS # from .karney
|
|
@@ -44,7 +44,7 @@ except ImportError: # Python 3.11-
|
|
|
44
44
|
return pow(_2_0, x)
|
|
45
45
|
|
|
46
46
|
__all__ = ()
|
|
47
|
-
__version__ = '
|
|
47
|
+
__version__ = '24.04.14'
|
|
48
48
|
|
|
49
49
|
_TRIPS = 1024 # XXX 2 or 3?
|
|
50
50
|
|
|
@@ -286,7 +286,7 @@ class AuxLat(AuxAngle):
|
|
|
286
286
|
atphi = _asinh_2(tphi) # atanh(sphi)
|
|
287
287
|
t = _asinh_2(em1 * (tphi * scphib)) / em1
|
|
288
288
|
try:
|
|
289
|
-
Dg =
|
|
289
|
+
Dg = _Fsumf_(atphi, atphib, t, e * t)
|
|
290
290
|
except ValueError: # Fsum(NAN) exception
|
|
291
291
|
Dg = _sum((atphi, atphib, t, e * t))
|
|
292
292
|
e *= atphib
|
pygeodesy/deprecated/__init__.py
CHANGED
|
@@ -27,7 +27,7 @@ __all__ = (_ALL_DEPRECATED.deprecated_bases +
|
|
|
27
27
|
_ALL_DEPRECATED.deprecated_classes +
|
|
28
28
|
_ALL_DEPRECATED.deprecated_consterns +
|
|
29
29
|
_ALL_DEPRECATED.deprecated_functions)
|
|
30
|
-
__version__ = '24.
|
|
30
|
+
__version__ = '24.04.17'
|
|
31
31
|
|
|
32
32
|
if _unLazy0:
|
|
33
33
|
from pygeodesy.deprecated import bases, datum, nvector, rhumbBase, \
|
pygeodesy/deprecated/classes.py
CHANGED
|
@@ -22,7 +22,7 @@ from pygeodesy.trf import TRFXform7Tuple as _TRFXform7Tuple
|
|
|
22
22
|
from pygeodesy.units import Bearing, Int, Lat, Lon, Meter
|
|
23
23
|
|
|
24
24
|
__all__ = _ALL_DEPRECATED.deprecated_classes
|
|
25
|
-
__version__ = '24.
|
|
25
|
+
__version__ = '24.04.17'
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
class _Deprecated_NamedTuple(_NamedTuple):
|
|
@@ -98,6 +98,19 @@ def EcefCartesian(*args, **kwds):
|
|
|
98
98
|
return EcefCartesian_(*args, **kwds)
|
|
99
99
|
|
|
100
100
|
|
|
101
|
+
def Fn_rt(root, *xs, **name_RESIDUAL_raiser): # PYCHOK no cover
|
|
102
|
+
'''DEPRECATED on 2024.04.17, use class L{Froot}.
|
|
103
|
+
'''
|
|
104
|
+
Froot = _MODS.fmath.Froot
|
|
105
|
+
|
|
106
|
+
class Fn_rt(Froot): # PYCHOK no cover
|
|
107
|
+
'''DEPRECATED on 2024.04.17, use class L{Froot}.
|
|
108
|
+
'''
|
|
109
|
+
def __init__(self, root, *xs, **name_RESIDUAL_raiser):
|
|
110
|
+
deprecated_class(self.__class__)
|
|
111
|
+
Froot.__init__(self, root, *xs, **name_RESIDUAL_raiser)
|
|
112
|
+
|
|
113
|
+
|
|
101
114
|
def HeightIDW(knots, **kwds): # PYCHOK no cover
|
|
102
115
|
'''DEPRECATED, use class L{HeightIDWeuclidean}.'''
|
|
103
116
|
HeightIDWeuclidean = _MODS.heights.HeightIDWeuclidean
|
pygeodesy/ellipsoids.py
CHANGED
|
@@ -70,8 +70,8 @@ from pygeodesy.constants import EPS, EPS0, EPS02, EPS1, INF, NINF, PI4, PI_2, PI
|
|
|
70
70
|
_0_0s, _0_0, _0_5, _1_0, _1_EPS, _2_0, _4_0, _90_0, \
|
|
71
71
|
_0_25, _3_0 # PYCHOK used!
|
|
72
72
|
from pygeodesy.errors import _AssertionError, IntersectionError, _ValueError, _xattr, _xkwds_not
|
|
73
|
-
from pygeodesy.fmath import cbrt, cbrt2, fdot, Fhorner, fpowers,
|
|
74
|
-
hypot1, hypot2, sqrt3
|
|
73
|
+
from pygeodesy.fmath import cbrt, cbrt2, fdot, Fhorner, fpowers, hypot, hypot_, \
|
|
74
|
+
hypot1, hypot2, sqrt3, Fsum
|
|
75
75
|
# from pygeodesy.fsums import Fsum # from .fmath
|
|
76
76
|
from pygeodesy.interns import NN, _a_, _Airy1830_, _AiryModified_, _b_, _Bessel1841_, _beta_, \
|
|
77
77
|
_Clarke1866_, _Clarke1880IGN_, _DOT_, _f_, _GRS80_, _height_, \
|
|
@@ -93,7 +93,7 @@ from pygeodesy.utily import atan1, atan1d, atan2b, degrees90, m2radians, radians
|
|
|
93
93
|
from math import asinh, atan, atanh, cos, degrees, exp, fabs, radians, sin, sinh, sqrt, tan
|
|
94
94
|
|
|
95
95
|
__all__ = _ALL_LAZY.ellipsoids
|
|
96
|
-
__version__ = '24.04.
|
|
96
|
+
__version__ = '24.04.14'
|
|
97
97
|
|
|
98
98
|
_f_0_0 = Float(f =_0_0) # zero flattening
|
|
99
99
|
_f__0_0 = Float(f_=_0_0) # zero inverse flattening
|
pygeodesy/elliptic.py
CHANGED
|
@@ -97,7 +97,7 @@ from math import asinh, atan, atan2, ceil, cosh, fabs, floor, \
|
|
|
97
97
|
radians, sin, sqrt, tanh
|
|
98
98
|
|
|
99
99
|
__all__ = _ALL_LAZY.elliptic
|
|
100
|
-
__version__ = '24.04.
|
|
100
|
+
__version__ = '24.04.14'
|
|
101
101
|
|
|
102
102
|
_TolRD = zqrt(EPS * 0.002)
|
|
103
103
|
_TolRF = zqrt(EPS * 0.030)
|
|
@@ -1023,13 +1023,12 @@ def _Horner(S, e1, E2, E3, E4, E5, *over):
|
|
|
1023
1023
|
# + 3*E5/26 - E2**3/16 + 3*E3**2/40 + 3*E2*E4/20
|
|
1024
1024
|
# + 45*E2**2*E3/272 - 9*(E3*E4+E2*E5)/68)
|
|
1025
1025
|
# converted to Horner-like form ...
|
|
1026
|
-
F = Fsum
|
|
1027
1026
|
e = e1 * 4084080
|
|
1028
1027
|
S *= e
|
|
1029
|
-
S +=
|
|
1030
|
-
S +=
|
|
1031
|
-
S +=
|
|
1032
|
-
S +=
|
|
1028
|
+
S += Fsum(E2 * -540540, 471240).fmul(E5)
|
|
1029
|
+
S += Fsum(E2 * 612612, E3 * -540540, -556920).fmul(E4)
|
|
1030
|
+
S += Fsum(E2 * -706860, E22 * 675675, E3 * 306306, 680680).fmul(E3)
|
|
1031
|
+
S += Fsum(E2 * 417690, E22 * -255255, -875160).fmul(E2)
|
|
1033
1032
|
S += 4084080
|
|
1034
1033
|
if over:
|
|
1035
1034
|
e *= over[0]
|
|
@@ -1122,14 +1121,14 @@ def _rG2(inst, x, y, PI_=PI_4): # 2-args
|
|
|
1122
1121
|
'''(INTERNAL) Carlson, eqs 2.36 - 2.39.
|
|
1123
1122
|
'''
|
|
1124
1123
|
m = -1 # neg!
|
|
1125
|
-
S =
|
|
1126
|
-
# assert not S
|
|
1124
|
+
S = None
|
|
1127
1125
|
for a, b in _ab2(inst, x, y): # PYCHOK yield
|
|
1128
|
-
if S:
|
|
1126
|
+
if S is None: # initial
|
|
1127
|
+
S = _Dsum()
|
|
1128
|
+
S += (a + b)**2 * _0_5
|
|
1129
|
+
else:
|
|
1129
1130
|
S += (a - b)**2 * m
|
|
1130
1131
|
m *= 2
|
|
1131
|
-
else: # initial
|
|
1132
|
-
S += (a + b)**2 * _0_5
|
|
1133
1132
|
return S(PI_).fover(a + b)
|
|
1134
1133
|
|
|
1135
1134
|
|
pygeodesy/errors.py
CHANGED
|
@@ -11,9 +11,9 @@ chaining}, use command line option C{python -X dev} I{OR} set env variable
|
|
|
11
11
|
C{PYTHONDEVMODE=1} or to any non-empty string I{OR} set env variable
|
|
12
12
|
C{PYGEODESY_EXCEPTION_CHAINING=std} or to any non-empty string.
|
|
13
13
|
'''
|
|
14
|
-
# from pygeodesy.basics import isint, isodd, itemsorted, _xinstanceof, _zip # _MODS
|
|
14
|
+
# from pygeodesy.basics import isint, isodd, issubclassof, itemsorted, _xinstanceof, _zip # _MODS
|
|
15
15
|
# from pygeodesy.ellipsoidalBase import CartesianEllipsoidalBase, LatLonEllipsoidalBase # _MODS
|
|
16
|
-
# from pygeodesy import errors # _MODS.getattr
|
|
16
|
+
# from pygeodesy import errors # _MODS, _MODS.getattr
|
|
17
17
|
from pygeodesy.interns import MISSING, NN, _a_, _an_, _and_, _clip_, _COLON_, \
|
|
18
18
|
_COLONSPACE_, _COMMASPACE_, _datum_, _ellipsoidal_, \
|
|
19
19
|
_incompatible_, _invalid_, _len_, _not_, _or_, _SPACE_, \
|
|
@@ -25,7 +25,7 @@ from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _getenv, _PYTHON_X_D
|
|
|
25
25
|
from copy import copy as _copy
|
|
26
26
|
|
|
27
27
|
__all__ = _ALL_LAZY.errors # _ALL_DOCS('_InvalidError', '_IsnotError') _under
|
|
28
|
-
__version__ = '24.
|
|
28
|
+
__version__ = '24.04.18'
|
|
29
29
|
|
|
30
30
|
_box_ = 'box'
|
|
31
31
|
_limiterrors = True # in .formy
|
|
@@ -425,7 +425,7 @@ def _error_init(Error, inst, args, fmt_name_value='%s (%r)', txt=NN,
|
|
|
425
425
|
def _error_under(inst):
|
|
426
426
|
'''(INTERNAL) Remove leading underscore from instance' class name.
|
|
427
427
|
'''
|
|
428
|
-
n = inst.__class__.__name__
|
|
428
|
+
n = inst.__class__.__name__ # _tailof?
|
|
429
429
|
if n.startswith(_UNDER_):
|
|
430
430
|
inst.__class__.__name__ = n.lstrip(_UNDER_)
|
|
431
431
|
return inst
|
|
@@ -479,8 +479,15 @@ def isError(exc):
|
|
|
479
479
|
C{False} if B{C{exc}} is a standard Python error
|
|
480
480
|
of C{None} if neither.
|
|
481
481
|
'''
|
|
482
|
-
|
|
483
|
-
|
|
482
|
+
def _X(exc):
|
|
483
|
+
X = type(exc)
|
|
484
|
+
m = X.__module__
|
|
485
|
+
return _MODS.basics.issubclassof(X, *_XErrors) or \
|
|
486
|
+
((m is __name__ or m == __name__) and
|
|
487
|
+
_tailof(X.__name__).startswith(_UNDER_))
|
|
488
|
+
|
|
489
|
+
return True if isinstance(exc, _XErrors) else (
|
|
490
|
+
_X(exc) if isinstance(exc, Exception) else None)
|
|
484
491
|
|
|
485
492
|
|
|
486
493
|
def _IsnotError(*nouns, **name_value_Error_cause): # name=value [, Error=TypeError, cause=None]
|
|
@@ -665,31 +672,23 @@ def _xError2(exc): # in .constants, .fsums, .lazily, .vector2d
|
|
|
665
672
|
|
|
666
673
|
@arg exc: The exception instance (usually, C{Exception}).
|
|
667
674
|
'''
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
return E,
|
|
675
|
+
x = isError(exc)
|
|
676
|
+
if x:
|
|
677
|
+
E = type(exc)
|
|
678
|
+
elif x is None:
|
|
679
|
+
E = _AssertionError
|
|
680
|
+
else: # get _Error from Error
|
|
681
|
+
n = NN(_UNDER_, _tailof(type(exc).__name__))
|
|
682
|
+
E = _MODS.getattr(__name__, n, _NotImplementedError)
|
|
683
|
+
x = E is not _NotImplementedError
|
|
684
|
+
return E, (str(exc) if x else repr(exc))
|
|
678
685
|
|
|
679
686
|
|
|
680
|
-
_XErrors =
|
|
687
|
+
_XErrors = (_AssertionError, _AttributeError, # some isError's
|
|
688
|
+
_TypeError, _ValueError, _ZeroDivisionError)
|
|
681
689
|
# map certain C{Exception} classes to the C{_Error}
|
|
682
|
-
# _X2Error = {AssertionError:
|
|
683
|
-
#
|
|
684
|
-
# ImportError: _ImportError,
|
|
685
|
-
# IndexError: _IndexError,
|
|
686
|
-
# KeyError: _KeyError,
|
|
687
|
-
# NameError: _NameError,
|
|
688
|
-
# NotImplementedError: _NotImplementedError,
|
|
689
|
-
# OverflowError: _OverflowError,
|
|
690
|
-
# TypeError: _TypeError,
|
|
691
|
-
# ValueError: _ValueError,
|
|
692
|
-
# ZeroDivisionError: _ZeroDivisionError}
|
|
690
|
+
# _X2Error = {AssertionError: _AssertionError, ...
|
|
691
|
+
# ZeroDivisionError: _ZeroDivisionError}
|
|
693
692
|
|
|
694
693
|
try:
|
|
695
694
|
_ = {}.__or__ # {} | {} # Python 3.9+
|