pygeodesy 24.5.2__py2.py3-none-any.whl → 24.5.8__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.5.2.dist-info → PyGeodesy-24.5.8.dist-info}/METADATA +4 -4
- {PyGeodesy-24.5.2.dist-info → PyGeodesy-24.5.8.dist-info}/RECORD +17 -17
- pygeodesy/__init__.py +3 -3
- pygeodesy/basics.py +12 -3
- pygeodesy/ecef.py +12 -13
- pygeodesy/errors.py +2 -3
- pygeodesy/fmath.py +201 -178
- pygeodesy/fstats.py +292 -227
- pygeodesy/fsums.py +312 -239
- pygeodesy/interns.py +9 -6
- pygeodesy/named.py +18 -6
- pygeodesy/props.py +8 -7
- pygeodesy/streprs.py +16 -7
- pygeodesy/vector2d.py +2 -2
- pygeodesy/vector3d.py +2 -2
- {PyGeodesy-24.5.2.dist-info → PyGeodesy-24.5.8.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.5.2.dist-info → PyGeodesy-24.5.8.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PyGeodesy
|
|
3
|
-
Version: 24.5.
|
|
3
|
+
Version: 24.5.8
|
|
4
4
|
Summary: Pure Python geodesy tools
|
|
5
5
|
Home-page: https://GitHub.com/mrJean1/PyGeodesy
|
|
6
6
|
Author: Jean M. Brouwers
|
|
@@ -114,7 +114,7 @@ line: ``epydoc --html --no-private --no-source --name=PyGeodesy --url=... -v pyg
|
|
|
114
114
|
Tests
|
|
115
115
|
=====
|
|
116
116
|
|
|
117
|
-
The tests ran with Python 3.12.
|
|
117
|
+
The tests ran with Python 3.12.3 (with geographiclib_ 2.0), 3.11.5 (with geographiclib_ 2.0, numpy_
|
|
118
118
|
1.24.2 and scipy_ 1.10.1), Python 3.10.8 (with geographiclib_ 2.0, numpy_ 1.23.3, scipy_ 1.9.1,
|
|
119
119
|
GeoConvert_ 2.2, GeodSolve_ 2.2 and RhumbSolve_ 2.2), Python 3.9.6 and Python 2.7.18 (with geographiclib_
|
|
120
120
|
1.50, numpy_ 1.16.6, scipy_ 1.2.2, GeoConvert_ 2.2, GeodSolve_ 2.2 and RhumbSolve_ 2.2), all on macOS
|
|
@@ -137,7 +137,7 @@ Python 3.11.5, 3.10.10 and 2.7.18 (all with geographiclib_ 1.52) on `Windows 10`
|
|
|
137
137
|
A single-File and single-Directory application with ``pygeodesy`` has been bundled using PyInstaller_
|
|
138
138
|
3.4 and 64-bit Python 3.7.4 and 3.7.3 on macOS 10.13.6 High Sierra.
|
|
139
139
|
|
|
140
|
-
Previously, the tests were run with Python 3.12.0-
|
|
140
|
+
Previously, the tests were run with Python 3.12.0-2, 3.11.2-4, 3.10.1-7, 3.9.1, 3.8.7, 3.7.1, 2.7.15, PyPy_
|
|
141
141
|
7.3.12 (Python 3.10.12), 7.3.1 (Python 3.6.9) and PyPy_ 7.1.1 (Python 2.7.13) (and geographiclib_ 1.52,
|
|
142
142
|
numpy_ 1.16.3, 1.16.4, 1.16.6, 1.19.0, 1.19.4, 1.19.5 or 1.22.4 and scipy_ 1.2.1, 1.4.1, 1.5.2 or 1.8.1)
|
|
143
143
|
on `Ubuntu 16.04`_, with Python 3.10.0-1, 3.9.0-5, 3.8.0-6, 3.7.2-6, 3.7.0, 3.6.2-5, 3.5.3, 2.7.13-17,
|
|
@@ -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: May
|
|
161
|
+
*Last updated: May 08, 2024.*
|
|
162
162
|
|
|
163
163
|
License
|
|
164
164
|
=======
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
-
pygeodesy/__init__.py,sha256=
|
|
2
|
+
pygeodesy/__init__.py,sha256=aWftpUqOeH1Uul8uN_kDAXbFL0TqLXDhynBhCmgpxoQ,40733
|
|
3
3
|
pygeodesy/__main__.py,sha256=qMFG3caY8ZXWu6uGiemzyT4OqTFZnsFtlxcGCAgkVJw,4637
|
|
4
4
|
pygeodesy/albers.py,sha256=g2AVlpV8JO2AYFCthoIbRC2h1OJqjb9P3hpwF0C3TI8,30994
|
|
5
5
|
pygeodesy/azimuthal.py,sha256=tc4JxgLi-0jzU08m4Bvi-t-kzHXYPeGuzL3j_tyVFUA,50125
|
|
6
|
-
pygeodesy/basics.py,sha256=
|
|
6
|
+
pygeodesy/basics.py,sha256=GWsiv-Zl2qOZoW7wPwIG7yLd2FwYLUvsq8c6hZdgsFE,28453
|
|
7
7
|
pygeodesy/booleans.py,sha256=HZbwoL-S7Ww9d4C2D1BVqXfmcuqqVpEVSU9_S0uyUyo,74204
|
|
8
8
|
pygeodesy/cartesianBase.py,sha256=I3q29mRdBB3NCDmPoJsJ0QOFfLzkdMWc8X9zG4IwJyA,47264
|
|
9
9
|
pygeodesy/clipy.py,sha256=VU3ynQ1IZ0v5hJlicqD48oW0imRgiL5_ZzRPrIjpfPw,27683
|
|
@@ -11,7 +11,7 @@ pygeodesy/constants.py,sha256=RxO8dMe_3AEfmZyKaRIy_44QnOTdEpzgYwimN0_w9Qs,19113
|
|
|
11
11
|
pygeodesy/css.py,sha256=sKXsahUiyruDcUk-tGjA6mxq-xzwBoBKxKo9_b2uBmY,25394
|
|
12
12
|
pygeodesy/datums.py,sha256=gJZPgV4bELZvZ8Sj2zE3MBysVtsLxqsN8zm0xjOKvpo,33851
|
|
13
13
|
pygeodesy/dms.py,sha256=op3MU-59CoJQRdybnu21aVM9wtocd_-XFNAZFqmozSo,44439
|
|
14
|
-
pygeodesy/ecef.py,sha256=
|
|
14
|
+
pygeodesy/ecef.py,sha256=47zX9rr7MdWY0K9shMqLbxGIb13MkNEUDDxtGigFwHE,59682
|
|
15
15
|
pygeodesy/elevations.py,sha256=ZTxzLWHLUrghFI9Fkl0ZGHzdiLDe0y3ImGUsfxFg6Qc,10814
|
|
16
16
|
pygeodesy/ellipsoidalBase.py,sha256=dqEmBFguS_Q0K95VaBN7oZOVEaxHuicLCrqIuj1QM7w,56639
|
|
17
17
|
pygeodesy/ellipsoidalBaseDI.py,sha256=MSuQI3PlJAHL7gtVy4t0qkm1QP3zeHqbkG4tnMDWDIg,38510
|
|
@@ -23,13 +23,13 @@ pygeodesy/ellipsoidalVincenty.py,sha256=Uk93B8GFcMnWiwKUOA84TlLwbBlvzVnsAXAx0cU7
|
|
|
23
23
|
pygeodesy/ellipsoids.py,sha256=SxMsivNnE9ibUjQGd0d24H0SzoSjh6jfhLWjasOWpao,119946
|
|
24
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=RHZ_f1zcOIyLQYProiQznaAOhojbDPDR4XbblXJMuS0,27232
|
|
27
27
|
pygeodesy/etm.py,sha256=joEhU2lw9ehRv101nRpZvXq8hOYAEzdcYFpif9_obfk,44585
|
|
28
|
-
pygeodesy/fmath.py,sha256=
|
|
28
|
+
pygeodesy/fmath.py,sha256=MylYc4nkVtDWI6U-R4hGmXcq-9tUUBmnlM795weezec,33477
|
|
29
29
|
pygeodesy/formy.py,sha256=Rces4Q5ecED0WVfuI9mQzeyHE54LDowYfI6faBHpyeA,74536
|
|
30
30
|
pygeodesy/frechet.py,sha256=qgee-ISBtT7Ov3rJkcd_t-WeXTbeNoMSQuMa0j3MyQc,33512
|
|
31
|
-
pygeodesy/fstats.py,sha256=
|
|
32
|
-
pygeodesy/fsums.py,sha256=
|
|
31
|
+
pygeodesy/fstats.py,sha256=23XqQRoegfeE4xEbbcgcsuw4JGEAe0OPvR8Jn2W8U-8,28414
|
|
32
|
+
pygeodesy/fsums.py,sha256=M9btYPykj5JHvO4gg6wkKPGKlg9R4ZfdoFFKcgmQVno,78284
|
|
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
|
|
@@ -37,7 +37,7 @@ pygeodesy/geohash.py,sha256=HwukecfkWvyfz9LHKfoA-WddQHYot_mB04o0lyWrKyU,32382
|
|
|
37
37
|
pygeodesy/geoids.py,sha256=EwZJ50qRXeZb1591N99hnamM_EC2NP6MIhLb5swVHf4,80605
|
|
38
38
|
pygeodesy/hausdorff.py,sha256=LJULGbDop4xqiWeRH5-Uayvk5WVCZQpxK4PCYu4kqSs,34192
|
|
39
39
|
pygeodesy/heights.py,sha256=tjr-5eb8UXn2MAp6-157sb6qxPREFk5dtDjHtBgIgZ8,42528
|
|
40
|
-
pygeodesy/interns.py,sha256=
|
|
40
|
+
pygeodesy/interns.py,sha256=WuQe08kItPIwSJ9J1bUxI5yVOX_eNfpGIMpKHzoCqAw,30245
|
|
41
41
|
pygeodesy/iters.py,sha256=CfU365eE9F4oWZbBx0qTEvfodMhpa8rGOepLIv67xF8,20181
|
|
42
42
|
pygeodesy/karney.py,sha256=lYdsSHis8xQJVS1V0F3cphx6Dhgd77xTlMOdVR8MN8I,34994
|
|
43
43
|
pygeodesy/ktm.py,sha256=sCvbLvJItavlruilAyjeZ0sOZx2yJumzGe_UiIVbGi4,27315
|
|
@@ -47,19 +47,19 @@ pygeodesy/lcc.py,sha256=yNpmAdOwv3HNh2ZLopF5QtvDokeQYCmnxSc8UFUPHO4,25737
|
|
|
47
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
|
-
pygeodesy/named.py,sha256=
|
|
50
|
+
pygeodesy/named.py,sha256=MzYSWAckYfwJKIdG7duN-6pt1byb9_ZZ7772czjma50,48269
|
|
51
51
|
pygeodesy/namedTuples.py,sha256=msEYvQKj4oCW35Kx80RpeQXY85A1G0O3GEqsysLaV2M,27288
|
|
52
52
|
pygeodesy/nvectorBase.py,sha256=WJY5ylZ_HCeM1wGL7ryEecJphEYibp-EAWL0piKlMG8,28766
|
|
53
53
|
pygeodesy/osgr.py,sha256=voC1rbOe4dnS_EjaDaRDRUQ4MoG7puMBEMV6lcAuIBI,31029
|
|
54
54
|
pygeodesy/points.py,sha256=QNAAF0r7iqSXFr_6aQm-wW7f6vU3KusWVhXEMVeVo58,64442
|
|
55
|
-
pygeodesy/props.py,sha256=
|
|
55
|
+
pygeodesy/props.py,sha256=rPVqHSnowuDeQR95zFKGwmY0356X2WGW-yRsL2fODCo,21500
|
|
56
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
|
|
60
60
|
pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
|
|
61
61
|
pygeodesy/sphericalTrigonometry.py,sha256=Q9qsqzIK43xBken2G8uP9snPXPuBoZ20pMHqbT_IjG0,64216
|
|
62
|
-
pygeodesy/streprs.py,sha256=
|
|
62
|
+
pygeodesy/streprs.py,sha256=8t10NwrS3DmuX6Qig0TDIR7bEWRFmnQUwV1_ItL9zd0,23940
|
|
63
63
|
pygeodesy/trf.py,sha256=4gVtF780EEZEqWwMBDe4x1AEkIz3hB8h4l0_0NXWM5U,118903
|
|
64
64
|
pygeodesy/triaxials.py,sha256=nYFQcLimivcxpeXMj9a83iWuENDU1gI-2zNgCkZzL0U,61549
|
|
65
65
|
pygeodesy/units.py,sha256=ofFTYc7mF9wOpfvpYHN83dGszMM18rTdsxfEXVzaIko,38705
|
|
@@ -69,8 +69,8 @@ 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=
|
|
73
|
-
pygeodesy/vector3d.py,sha256=
|
|
72
|
+
pygeodesy/vector2d.py,sha256=pSvfpFoSa5R37o9tSmRma7KsjNnN9GwTDG9rhFOEmfA,35004
|
|
73
|
+
pygeodesy/vector3d.py,sha256=6ZLYLhZJoOM6UVJlbV8segkVXcFt38HA-SywCdWsynM,44972
|
|
74
74
|
pygeodesy/vector3dBase.py,sha256=wJpEcgHlJ5Qu0Us7CKuNDepZQzo6a-RvqZbA2-O4-ko,35583
|
|
75
75
|
pygeodesy/webmercator.py,sha256=1IXiAHBXTm5kMCp5gEI67oBJeRXD7BiPVI7bcRRX1U4,14918
|
|
76
76
|
pygeodesy/wgrs.py,sha256=AKUrYRCC67lOeJ6vUDAiGb_mY6R3ZwflXpOaP3wauOg,14774
|
|
@@ -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.5.
|
|
113
|
-
PyGeodesy-24.5.
|
|
114
|
-
PyGeodesy-24.5.
|
|
115
|
-
PyGeodesy-24.5.
|
|
112
|
+
PyGeodesy-24.5.8.dist-info/METADATA,sha256=iiCbD7PToGDSIyOreeEG4YnJO2j2TZRnNvKeQdOVLQQ,19363
|
|
113
|
+
PyGeodesy-24.5.8.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
114
|
+
PyGeodesy-24.5.8.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
115
|
+
PyGeodesy-24.5.8.dist-info/RECORD,,
|
pygeodesy/__init__.py
CHANGED
|
@@ -121,7 +121,7 @@ C{epydoc --html --no-private --no-source --name=PyGeodesy --url=... -v pygeodesy
|
|
|
121
121
|
Tests
|
|
122
122
|
=====
|
|
123
123
|
|
|
124
|
-
The tests ran with Python 3.12.
|
|
124
|
+
The tests ran with Python 3.12.3 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0,
|
|
125
125
|
Python 3.11.5 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0, U{numpy
|
|
126
126
|
<https://PyPI.org/project/numpy>} 1.24.2 and U{scipy<https://PyPI.org/project/scipy>} 1.10.1), Python
|
|
127
127
|
3.10.8 (with U{geographiclib <https://PyPI.org/project/geographiclib>} 2.0, U{numpy
|
|
@@ -155,7 +155,7 @@ U{Debian 11<https://Cirrus-CI.com/github/mrJean1/PyGeodesy/master>} in 64-bit on
|
|
|
155
155
|
A single-File and single-Directory application with C{pygeodesy} has been bundled using U{PyInstaller
|
|
156
156
|
<https://PyPI.org/project/pyinstaller>} 3.4 and 64-bit Python 3.7.3 on macOS 10.13.6 High Sierra.
|
|
157
157
|
|
|
158
|
-
Previously, the tests were run with Python 3.12.0-
|
|
158
|
+
Previously, the tests were run with Python 3.12.0-2, 3.11.2-4, 3.10.1-7, 3.9.1, 3.8.7, 3.7.1, 2.7.15, U{PyPy
|
|
159
159
|
<https://PyPy.org>} 7.3.12 (Python 3.10.12), 7.3.1 (Python 3.6.9) and U{PyPy<https://PyPy.org>} 7.1.1 (Python
|
|
160
160
|
2.7.13) (and U{geographiclib <https://PyPI.org/project/geographiclib>} 1.52, U{numpy<https://PyPI.org/project/numpy>}
|
|
161
161
|
1.16.3, 1.16.4, 1.16.6, 1.19.0, 1.19.4, 1.19.5 or 1.22.4 and U{scipy<https://PyPI.org/project/scipy>} 1.2.1, 1.4.1,
|
|
@@ -585,7 +585,7 @@ else:
|
|
|
585
585
|
_init__all__ = False
|
|
586
586
|
|
|
587
587
|
from pygeodesy.interns import _DOT_, _version2 # PYCHOK import
|
|
588
|
-
__version__ = '24.05.
|
|
588
|
+
__version__ = '24.05.08'
|
|
589
589
|
# see setup.py for similar logic
|
|
590
590
|
version = _DOT_(*_version2(__version__, n=3))
|
|
591
591
|
|
pygeodesy/basics.py
CHANGED
|
@@ -21,7 +21,8 @@ from pygeodesy.errors import _AttributeError, _ImportError, _NotImplementedError
|
|
|
21
21
|
_xkwds_get
|
|
22
22
|
from pygeodesy.interns import MISSING, NN, _1_, _by_, _COMMA_, _DOT_, _DEPRECATED_, \
|
|
23
23
|
_ELLIPSIS4_, _enquote, _EQUAL_, _in_, _invalid_, _N_A_, \
|
|
24
|
-
_not_scalar_, _SPACE_, _UNDER_, _version_,
|
|
24
|
+
_not_, _not_scalar_, _odd_, _SPACE_, _UNDER_, _version_, \
|
|
25
|
+
_version_info
|
|
25
26
|
# from pygeodesy.latlonBase import LatLonBase # _MODS
|
|
26
27
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _FOR_DOCS, \
|
|
27
28
|
_getenv, LazyImportError, _sys, _sys_version_info2
|
|
@@ -34,13 +35,12 @@ from math import copysign as _copysign
|
|
|
34
35
|
import inspect as _inspect
|
|
35
36
|
|
|
36
37
|
__all__ = _ALL_LAZY.basics
|
|
37
|
-
__version__ = '24.
|
|
38
|
+
__version__ = '24.05.08'
|
|
38
39
|
|
|
39
40
|
_0_0 = 0.0 # in .constants
|
|
40
41
|
_below_ = 'below'
|
|
41
42
|
_list_tuple_types = (list, tuple)
|
|
42
43
|
_list_tuple_set_types = (list, tuple, set)
|
|
43
|
-
_odd_ = 'odd'
|
|
44
44
|
_PYGEODESY_XPACKAGES_ = 'PYGEODESY_XPACKAGES'
|
|
45
45
|
_required_ = 'required'
|
|
46
46
|
|
|
@@ -786,6 +786,15 @@ def _xisscalar(**names_values):
|
|
|
786
786
|
raise _TypeError(n, v, txt=_not_scalar_)
|
|
787
787
|
|
|
788
788
|
|
|
789
|
+
def _xiterable(obj):
|
|
790
|
+
'''(INTERNAL) Raise C{TypeError} if C{obj} is not iterable.
|
|
791
|
+
'''
|
|
792
|
+
# https://PyPI.org/project/isiterable/
|
|
793
|
+
if not (hasattr(obj, '__iter__') or
|
|
794
|
+
hasattr(obj, '__getitem__')):
|
|
795
|
+
raise TypeError(_not_(_xiterable.__name__[2:]))
|
|
796
|
+
|
|
797
|
+
|
|
789
798
|
def _xnumpy(where, *required):
|
|
790
799
|
'''(INTERNAL) Import C{numpy} and check required version.
|
|
791
800
|
'''
|
pygeodesy/ecef.py
CHANGED
|
@@ -67,7 +67,7 @@ from pygeodesy.datums import a_f2Tuple, _ellipsoidal_datum, _WGS84, _EWGS84
|
|
|
67
67
|
# from pygeodesy.ellipsoids import a_f2Tuple, _EWGS84 # from .datums
|
|
68
68
|
from pygeodesy.errors import _IndexError, LenError, _ValueError, _TypesError, \
|
|
69
69
|
_xattr, _xdatum, _xkwds, _xkwds_get
|
|
70
|
-
from pygeodesy.fmath import cbrt, fdot, hypot, hypot1, hypot2_
|
|
70
|
+
from pygeodesy.fmath import cbrt, fdot, Fpowers, hypot, hypot1, hypot2_, sqrt0
|
|
71
71
|
from pygeodesy.fsums import Fsum, fsumf_, Fmt, unstr
|
|
72
72
|
from pygeodesy.interns import NN, _a_, _C_, _datum_, _ellipsoid_, _f_, _height_, \
|
|
73
73
|
_lat_, _lon_, _M_, _name_, _singular_, _SPACE_, \
|
|
@@ -86,7 +86,7 @@ from pygeodesy.utily import atan1, atan1d, atan2d, degrees90, degrees180, \
|
|
|
86
86
|
from math import atan2, cos, degrees, fabs, radians, sqrt
|
|
87
87
|
|
|
88
88
|
__all__ = _ALL_LAZY.ecef
|
|
89
|
-
__version__ = '24.04
|
|
89
|
+
__version__ = '24.05.04'
|
|
90
90
|
|
|
91
91
|
_Ecef_ = 'Ecef'
|
|
92
92
|
_prolate_ = 'prolate'
|
|
@@ -797,14 +797,14 @@ class EcefYou(_EcefBase):
|
|
|
797
797
|
|
|
798
798
|
def __init__(self, a_ellipsoid=_EWGS84, f=None, **name_lon00): # PYCHOK signature
|
|
799
799
|
_EcefBase.__init__(self, a_ellipsoid, f=f, **name_lon00) # inherited documentation
|
|
800
|
-
|
|
800
|
+
self._ee2 = EcefYou._ee2(self.ellipsoid)
|
|
801
801
|
|
|
802
802
|
@staticmethod
|
|
803
|
-
def
|
|
803
|
+
def _ee2(E):
|
|
804
804
|
e2 = E.a2 - E.b2
|
|
805
805
|
if e2 < 0 or E.f < 0:
|
|
806
806
|
raise EcefError(ellipsoid=E, txt=_prolate_)
|
|
807
|
-
return e2
|
|
807
|
+
return sqrt0(e2), e2
|
|
808
808
|
|
|
809
809
|
def reverse(self, xyz, y=None, z=None, M=None, **name_lon00): # PYCHOK unused M
|
|
810
810
|
'''Convert geocentric C{(x, y, z)} to geodetic C{(lat, lon, height)}
|
|
@@ -831,13 +831,12 @@ class EcefYou(_EcefBase):
|
|
|
831
831
|
'''
|
|
832
832
|
x, y, z, name = _xyzn4(xyz, y, z, self._Geocentrics, **name_lon00)
|
|
833
833
|
|
|
834
|
-
E
|
|
835
|
-
e2 =
|
|
836
|
-
e = sqrt(e2) if e2 > 0 else _0_0 # XXX sqrt0(e2)?
|
|
834
|
+
E = self.ellipsoid
|
|
835
|
+
e, e2 = self._ee2
|
|
837
836
|
|
|
838
|
-
q
|
|
839
|
-
|
|
840
|
-
u
|
|
837
|
+
q = hypot(x, y) # R
|
|
838
|
+
u = Fpowers(2, x, y, z) - e2
|
|
839
|
+
u = u.fadd_(hypot(u, e * z * _2_0)).fover(_2_0)
|
|
841
840
|
if u > EPS02:
|
|
842
841
|
u = sqrt(u)
|
|
843
842
|
p = hypot(u, e)
|
|
@@ -849,8 +848,8 @@ class EcefYou(_EcefBase):
|
|
|
849
848
|
if isnon0(d):
|
|
850
849
|
B += fsumf_(u * E.b, -p, e2) / d
|
|
851
850
|
sB, cB = sincos2(B)
|
|
852
|
-
elif u <
|
|
853
|
-
raise EcefError(x=x, y=y, z=z, txt=_singular_)
|
|
851
|
+
elif u < (-EPS2):
|
|
852
|
+
raise EcefError(x=x, y=y, z=z, u=u, txt=_singular_)
|
|
854
853
|
else:
|
|
855
854
|
sB, cB = _copysign_1_0(z), _0_0
|
|
856
855
|
|
pygeodesy/errors.py
CHANGED
|
@@ -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.05.06'
|
|
29
29
|
|
|
30
30
|
_box_ = 'box'
|
|
31
31
|
_limiterrors = True # in .formy
|
|
@@ -397,15 +397,14 @@ def _error_init(Error, inst, args, fmt_name_value='%s (%r)', txt=NN,
|
|
|
397
397
|
|
|
398
398
|
t, n = (), len(args)
|
|
399
399
|
if n > 2:
|
|
400
|
-
s = _MODS.basics.isodd(n)
|
|
401
400
|
t = _fmtuple(zip(args[0::2], args[1::2]))
|
|
401
|
+
s = _MODS.basics.isodd(n)
|
|
402
402
|
if s: # XXX _xzip(..., strict=s)
|
|
403
403
|
t += args[-1:]
|
|
404
404
|
elif n == 2:
|
|
405
405
|
t = (fmt_name_value % args),
|
|
406
406
|
elif n: # == 1
|
|
407
407
|
t = str(args[0]),
|
|
408
|
-
|
|
409
408
|
if kwds:
|
|
410
409
|
t += _fmtuple(_MODS.basics.itemsorted(kwds))
|
|
411
410
|
t = _or(*t) if t else _SPACE_(_name_value_, MISSING)
|