pygeodesy 24.4.2__py2.py3-none-any.whl → 24.4.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.4.2.dist-info → PyGeodesy-24.4.12.dist-info}/METADATA +9 -9
- {PyGeodesy-24.4.2.dist-info → PyGeodesy-24.4.12.dist-info}/RECORD +36 -36
- pygeodesy/__init__.py +4 -4
- pygeodesy/albers.py +9 -9
- pygeodesy/azimuthal.py +9 -8
- pygeodesy/basics.py +16 -5
- pygeodesy/constants.py +2 -2
- pygeodesy/ecef.py +4 -4
- pygeodesy/ellipsoidalBase.py +2 -3
- pygeodesy/ellipsoids.py +2 -2
- pygeodesy/elliptic.py +19 -17
- pygeodesy/etm.py +3 -3
- pygeodesy/fmath.py +45 -49
- pygeodesy/frechet.py +6 -6
- pygeodesy/fstats.py +3 -4
- pygeodesy/fsums.py +418 -336
- pygeodesy/geodesicw.py +2 -2
- pygeodesy/geodsolve.py +4 -3
- pygeodesy/geoids.py +4 -4
- pygeodesy/hausdorff.py +5 -5
- pygeodesy/heights.py +6 -6
- pygeodesy/latlonBase.py +6 -6
- pygeodesy/lazily.py +1 -1
- pygeodesy/ltp.py +1 -1
- pygeodesy/ltpTuples.py +3 -4
- pygeodesy/named.py +14 -3
- pygeodesy/nvectorBase.py +5 -5
- pygeodesy/points.py +3 -3
- pygeodesy/resections.py +6 -5
- pygeodesy/rhumb/bases.py +24 -25
- pygeodesy/sphericalNvector.py +6 -6
- pygeodesy/sphericalTrigonometry.py +3 -4
- pygeodesy/utily.py +11 -10
- pygeodesy/utmupsBase.py +6 -6
- {PyGeodesy-24.4.2.dist-info → PyGeodesy-24.4.12.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.4.2.dist-info → PyGeodesy-24.4.12.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.12
|
|
4
4
|
Summary: Pure Python geodesy tools
|
|
5
5
|
Home-page: https://GitHub.com/mrJean1/PyGeodesy
|
|
6
6
|
Author: Jean M. Brouwers
|
|
@@ -118,7 +118,7 @@ The tests ran with Python 3.12.2 (with geographiclib_ 2.0), 3.11.5 (with geograp
|
|
|
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
|
|
121
|
-
14.
|
|
121
|
+
14.4.1 Sonoma and in 64-bit only.
|
|
122
122
|
|
|
123
123
|
All tests ran with and without ``lazy import`` for Python 3 and with command line option ``-W default``
|
|
124
124
|
and env variable ``PYGEODESY_WARNINGS=on`` for all Python versions. The results of those tests are
|
|
@@ -143,7 +143,7 @@ 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
|
|
|
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,
|
|
144
144
|
2.7.10 and 2.6.9 (and numpy_ 1.19.0, 1.16.5, 1.16.2, 1.15.2, 1.14.0, 1.13.1, 1.8.0rc1 or 1.6.2 and scipy_
|
|
145
145
|
1.5.0), PyPy_ 7.3.0 (Python 2.7.13 and 3.6.9), PyPy_ 6.0.0 (Python 2.7.13 and 3.5.3) and `Intel-Python`_
|
|
146
|
-
3.5.3 (and numpy_ 1.11.3) on macOS 14.0-
|
|
146
|
+
3.5.3 (and numpy_ 1.11.3) on macOS 14.0-3.1 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1 Big
|
|
147
147
|
Sur (aka 10.16), 10.15.3, 10.15.5-7 Catalina, 10.14 Mojave, 10.13.6 High Sierra and 10.12 Sierra, MacOS X
|
|
148
148
|
10.11 El Capitan and/or MacOS X 10.10 Yosemite, with Pythonista_ 3.2 (with geographiclib 1.50 or 1.49 and
|
|
149
149
|
numpy 1.8.0) on iOS 14.4.2, 11.4.1, 12.0-3 on iPad4, iPhone6, iPhone10 and/or iPhone12, with Pythonista_
|
|
@@ -154,11 +154,11 @@ Notes
|
|
|
154
154
|
=====
|
|
155
155
|
|
|
156
156
|
All Python source code has been statically checked_ with PyChecker_, PyFlakes_, PyCodeStyle_ (formerly Pep8)
|
|
157
|
-
and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64-bit on macOS 14.
|
|
157
|
+
and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64-bit on macOS 14.4.1 Sonoma.
|
|
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 12, 2024.*
|
|
162
162
|
|
|
163
163
|
License
|
|
164
164
|
=======
|
|
@@ -181,20 +181,20 @@ DEALINGS IN THE SOFTWARE.
|
|
|
181
181
|
|
|
182
182
|
.. image:: https://Img.Shields.io/pypi/pyversions/PyGeodesy.svg?label=Python
|
|
183
183
|
:target: https://PyPI.org/project/PyGeodesy
|
|
184
|
+
.. image:: https://Img.Shields.io/pypi/v/PyGeodesy.svg?label=PyPI
|
|
185
|
+
:target: https://PyPI.org/project/PyGeodesy
|
|
184
186
|
.. image:: https://Img.Shields.io/appveyor/ci/mrJean1/PyGeodesy.svg?branch=master&label=AppVeyor
|
|
185
187
|
:target: https://CI.AppVeyor.com/project/mrJean1/PyGeodesy/branch/master
|
|
186
188
|
.. image:: https://Img.Shields.io/cirrus/github/mrJean1/PyGeodesy?branch=master&label=Cirrus
|
|
187
189
|
:target: https://Cirrus-CI.com/github/mrJean1/PyGeodesy
|
|
188
190
|
.. image:: https://Img.Shields.io/badge/coverage-95%25-brightgreen
|
|
189
191
|
:target: https://GitHub.com/mrJean1/PyGeodesy/blob/master/testcoverage.pdf
|
|
190
|
-
.. image:: https://Img.Shields.io/pypi/v/PyGeodesy.svg?label=PyPI
|
|
191
|
-
:target: https://PyPI.org/project/PyGeodesy
|
|
192
192
|
.. image:: https://Img.Shields.io/pypi/wheel/PyGeodesy.svg
|
|
193
193
|
:target: https://PyPI.org/project/PyGeodesy/#files
|
|
194
|
-
.. image:: https://img.shields.io/pypi/dm/PyGeodesy
|
|
195
|
-
:target: https://PyPI.org/project/PyGeodesy
|
|
196
194
|
.. image:: https://Img.Shields.io/pypi/l/PyGeodesy.svg
|
|
197
195
|
:target: https://PyPI.org/project/PyGeodesy
|
|
196
|
+
.. image:: https://img.shields.io/pypi/dm/PyGeodesy
|
|
197
|
+
:target: https://PyPI.org/project/PyGeodesy
|
|
198
198
|
|
|
199
199
|
.. _Albers equal-area: https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1AlbersEqualArea.html
|
|
200
200
|
.. _C++ classes: https://GeographicLib.SourceForge.io/C++/doc/annotated.html
|
|
@@ -1,74 +1,74 @@
|
|
|
1
1
|
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
-
pygeodesy/__init__.py,sha256=
|
|
2
|
+
pygeodesy/__init__.py,sha256=VQ4Ax0S1ZenUk2bZtcfv8F-OWwKawIzU85WpPHWDrRE,40824
|
|
3
3
|
pygeodesy/__main__.py,sha256=qMFG3caY8ZXWu6uGiemzyT4OqTFZnsFtlxcGCAgkVJw,4637
|
|
4
|
-
pygeodesy/albers.py,sha256=
|
|
5
|
-
pygeodesy/azimuthal.py,sha256=
|
|
6
|
-
pygeodesy/basics.py,sha256=
|
|
4
|
+
pygeodesy/albers.py,sha256=mx1Bu05G52WuDaZdEHSpnN9bmRagem4vsbjYodQeuiM,31102
|
|
5
|
+
pygeodesy/azimuthal.py,sha256=tc4JxgLi-0jzU08m4Bvi-t-kzHXYPeGuzL3j_tyVFUA,50125
|
|
6
|
+
pygeodesy/basics.py,sha256=_BMYLzGKA6OIS3qv25HfHy7MIh0kAbmkzyScb59clUs,28160
|
|
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
|
|
10
|
-
pygeodesy/constants.py,sha256=
|
|
10
|
+
pygeodesy/constants.py,sha256=ypxYsWB6tNAVgrD9QVpukJAPscaLgHtPLqPuot1gUfU,19174
|
|
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=VRoGa8zjGDPFXYr9HZiKS4XwoAI6p4N_ngsHtGipQAo,59703
|
|
15
15
|
pygeodesy/elevations.py,sha256=ZTxzLWHLUrghFI9Fkl0ZGHzdiLDe0y3ImGUsfxFg6Qc,10814
|
|
16
|
-
pygeodesy/ellipsoidalBase.py,sha256=
|
|
16
|
+
pygeodesy/ellipsoidalBase.py,sha256=dqEmBFguS_Q0K95VaBN7oZOVEaxHuicLCrqIuj1QM7w,56639
|
|
17
17
|
pygeodesy/ellipsoidalBaseDI.py,sha256=MSuQI3PlJAHL7gtVy4t0qkm1QP3zeHqbkG4tnMDWDIg,38510
|
|
18
18
|
pygeodesy/ellipsoidalExact.py,sha256=a_2C6S6hGRumavy5giRoC9QAhnjqpujiXyu92od6nKo,16951
|
|
19
19
|
pygeodesy/ellipsoidalGeodSolve.py,sha256=xfNcb70AuPbIiJUqhisIfg6pCQBqXyQffBNuESEGCfU,16833
|
|
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=cykBbfMMDGWk65rfGlYGm1s_Wuh_NZD1_9bgKelPJ5s,119945
|
|
24
|
+
pygeodesy/elliptic.py,sha256=J9n6YdKeGQbcwgDKXByGRKMdAyDt1V8xKCPE_3RsGWM,42419
|
|
25
25
|
pygeodesy/epsg.py,sha256=ldHoLWqJWR4FUiBVnDTtrI_e7TNjjtr9OkxDlri1g5E,8165
|
|
26
26
|
pygeodesy/errors.py,sha256=fRGrdnb81Y9KB4Y1ua1nvB9zuuiv8IL6c6YN_cb3kBo,27280
|
|
27
|
-
pygeodesy/etm.py,sha256=
|
|
28
|
-
pygeodesy/fmath.py,sha256=
|
|
27
|
+
pygeodesy/etm.py,sha256=joEhU2lw9ehRv101nRpZvXq8hOYAEzdcYFpif9_obfk,44585
|
|
28
|
+
pygeodesy/fmath.py,sha256=cmObX2axb8BfPyhaSDGFFVRs63kBP4ZWhWzGzPhl6OQ,30286
|
|
29
29
|
pygeodesy/formy.py,sha256=Rces4Q5ecED0WVfuI9mQzeyHE54LDowYfI6faBHpyeA,74536
|
|
30
|
-
pygeodesy/frechet.py,sha256=
|
|
31
|
-
pygeodesy/fstats.py,sha256=
|
|
32
|
-
pygeodesy/fsums.py,sha256=
|
|
30
|
+
pygeodesy/frechet.py,sha256=qgee-ISBtT7Ov3rJkcd_t-WeXTbeNoMSQuMa0j3MyQc,33512
|
|
31
|
+
pygeodesy/fstats.py,sha256=r8O2aIknHuoHsW8gZUIY42zpHZy7syHvCB7uCVtPpkc,25559
|
|
32
|
+
pygeodesy/fsums.py,sha256=9ekLTz59nSON-PHtgQp_m6FxnYj3UOUCagDtoT7h8AE,69283
|
|
33
33
|
pygeodesy/gars.py,sha256=fCiWBJ4kOJxPfNOxadX-OzBGDXj7C9g02NuGHiZa_88,11342
|
|
34
|
-
pygeodesy/geodesicw.py,sha256=
|
|
35
|
-
pygeodesy/geodsolve.py,sha256=
|
|
34
|
+
pygeodesy/geodesicw.py,sha256=5yjJ2rLekSsjT7e-Km6v592ZcFlA41flQP_E42jU9Sw,26901
|
|
35
|
+
pygeodesy/geodsolve.py,sha256=3GLI2_4gglzTpZwKchNzAv-XhWFBzWRKjcWsjCC3dvI,21900
|
|
36
36
|
pygeodesy/geohash.py,sha256=HwukecfkWvyfz9LHKfoA-WddQHYot_mB04o0lyWrKyU,32382
|
|
37
|
-
pygeodesy/geoids.py,sha256=
|
|
38
|
-
pygeodesy/hausdorff.py,sha256=
|
|
39
|
-
pygeodesy/heights.py,sha256=
|
|
37
|
+
pygeodesy/geoids.py,sha256=EwZJ50qRXeZb1591N99hnamM_EC2NP6MIhLb5swVHf4,80605
|
|
38
|
+
pygeodesy/hausdorff.py,sha256=LJULGbDop4xqiWeRH5-Uayvk5WVCZQpxK4PCYu4kqSs,34192
|
|
39
|
+
pygeodesy/heights.py,sha256=tjr-5eb8UXn2MAp6-157sb6qxPREFk5dtDjHtBgIgZ8,42528
|
|
40
40
|
pygeodesy/interns.py,sha256=JqIAp_-TOzijDShKSmKIarz009vIXtqfB-JoD8ILvKo,30177
|
|
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
|
|
44
|
-
pygeodesy/latlonBase.py,sha256=
|
|
45
|
-
pygeodesy/lazily.py,sha256=
|
|
44
|
+
pygeodesy/latlonBase.py,sha256=LimCMj91J3Q4D_rTu7VN7c63cLL_KzxXagFQfedobmc,77730
|
|
45
|
+
pygeodesy/lazily.py,sha256=pLyWvdPoIdAQ8mQXoiGVNSkjBDew0T1Nkvv6OWj8Dv0,48624
|
|
46
46
|
pygeodesy/lcc.py,sha256=yNpmAdOwv3HNh2ZLopF5QtvDokeQYCmnxSc8UFUPHO4,25737
|
|
47
|
-
pygeodesy/ltp.py,sha256=
|
|
48
|
-
pygeodesy/ltpTuples.py,sha256=
|
|
47
|
+
pygeodesy/ltp.py,sha256=AEzriv6LyqjJwROF_6kLWjsu0_J_cjVhNMNlsjr4ac4,48579
|
|
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=2Kg4tv883V80ZVUEgFzDeBmIEMkig_VUbJuufC0lhN0,48009
|
|
51
51
|
pygeodesy/namedTuples.py,sha256=msEYvQKj4oCW35Kx80RpeQXY85A1G0O3GEqsysLaV2M,27288
|
|
52
|
-
pygeodesy/nvectorBase.py,sha256=
|
|
52
|
+
pygeodesy/nvectorBase.py,sha256=WJY5ylZ_HCeM1wGL7ryEecJphEYibp-EAWL0piKlMG8,28766
|
|
53
53
|
pygeodesy/osgr.py,sha256=5JB6b_nvyZ6rFMlC7ZB45mvYtjc_aiLb4DPdeaui-KY,30995
|
|
54
|
-
pygeodesy/points.py,sha256=
|
|
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=WGGsWgN9LCcJ9YCo-lbgtuA9VqEWnYvoe3OFOJ4nYFk,43619
|
|
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
|
-
pygeodesy/sphericalNvector.py,sha256=
|
|
61
|
-
pygeodesy/sphericalTrigonometry.py,sha256=
|
|
60
|
+
pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
|
|
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
64
|
pygeodesy/triaxials.py,sha256=Yet0J9Fr4FbTEIL9_p3ziollRR3PzUN2-qt7Z9ZSODU,61537
|
|
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
|
|
68
|
-
pygeodesy/utily.py,sha256=
|
|
68
|
+
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
|
-
pygeodesy/utmupsBase.py,sha256=
|
|
71
|
+
pygeodesy/utmupsBase.py,sha256=KetB8R0uRYU6X8nLG3JkBHUr1OfNlChKa0isgvm8Yq8,18807
|
|
72
72
|
pygeodesy/vector2d.py,sha256=7li4n13cpEm6qNVqlwoE7RH6Cjs9HpbAXBrPX8F4QmI,34963
|
|
73
73
|
pygeodesy/vector3d.py,sha256=Q_brX_URZg_Eln01y8G8_NAEuPbbOI_IgO2wBJk1N0U,44970
|
|
74
74
|
pygeodesy/vector3dBase.py,sha256=wJpEcgHlJ5Qu0Us7CKuNDepZQzo6a-RvqZbA2-O4-ko,35583
|
|
@@ -106,10 +106,10 @@ pygeodesy/geodesicx/gxbases.py,sha256=vmqPnZGh_k7Fwev9oYoIzAZKdFFOydAXa372pHrzfM
|
|
|
106
106
|
pygeodesy/geodesicx/gxline.py,sha256=gy0RT7DbcAvnSPqNl0FiqYpN00LBuJM-P9KcyasQvhU,27465
|
|
107
107
|
pygeodesy/rhumb/__init__.py,sha256=MbwdmdduXd3fOWuS1mFdgyKBPBf7Ju1DzRf5D8w0Rok,2207
|
|
108
108
|
pygeodesy/rhumb/aux_.py,sha256=W4HkgoHAQz_aWaysfsmOA5010nCGvBfUs2Q-bymnHYU,16660
|
|
109
|
-
pygeodesy/rhumb/bases.py,sha256=
|
|
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.12.dist-info/METADATA,sha256=f38SpV-U-BTthJlrzADhDwe_IPavzJf_dj3biK_CRvA,19366
|
|
113
|
+
PyGeodesy-24.4.12.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
114
|
+
PyGeodesy-24.4.12.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
115
|
+
PyGeodesy-24.4.12.dist-info/RECORD,,
|
pygeodesy/__init__.py
CHANGED
|
@@ -133,7 +133,7 @@ U{geographiclib<https://PyPI.org/project/geographiclib>} 1.50, U{numpy<https://P
|
|
|
133
133
|
1.16.6, U{scipy<https://PyPI.org/project/scipy>} 1.2.2, U{GeoConvert
|
|
134
134
|
<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2, U{GeodSolve
|
|
135
135
|
<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2 and U{RhumbSolve
|
|
136
|
-
<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2), all on macOS 14.
|
|
136
|
+
<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2), all on macOS 14.4.1 Sonoma and
|
|
137
137
|
in 64-bit only.
|
|
138
138
|
|
|
139
139
|
All tests ran with and without C{lazy import} for Python 3 and with command line option C{-W default} and
|
|
@@ -164,7 +164,7 @@ Previously, the tests were run with Python 3.12.0-1, 3.11.2-4, 3.10.1-7, 3.9.1,
|
|
|
164
164
|
1.16.5, 1.16.2, 1.15.2, 1.14.0, 1.13.1, 1.8.0rc1 or 1.6.2 and U{scipy<https://PyPI.org/project/scipy>} 1.5.0), U{PyPy
|
|
165
165
|
<https://PyPy.org>} 7.3.0 (Python 2.7.13 and 3.6.9), U{PyPy<https://PyPy.org>} 6.0.0 (Python 2.7.13 and 3.5.3)
|
|
166
166
|
and U{Intel-Python<https://software.Intel.com/en-us/distribution-for-python>} 3.5.3 (and U{numpy
|
|
167
|
-
<https://PyPI.org/project/numpy>} 1.11.3) on macOS 14.0-
|
|
167
|
+
<https://PyPI.org/project/numpy>} 1.11.3) on macOS 14.0-3.1 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1
|
|
168
168
|
Big Sur (aka 10.16), 10.15.3, 10.15.5-7 Catalina, 10.14 Mojave, 10.13.6 High Sierra and 10.12 Sierra, MacOS X
|
|
169
169
|
10.11 El Capitan and/or MacOS X 10.10 Yosemite, with U{Pythonista<https://OMZ-Software.com/pythonista>}3.2 (with
|
|
170
170
|
geographiclib 1.50 or 1.49 and numpy 1.8.0) on iOS 14.4.2, 11.4.1, 12.0-3 on iPad4, iPhone6, iPhone10 and/or
|
|
@@ -179,7 +179,7 @@ All Python source code has been statically U{checked<https://GitHub.com/ActiveSt
|
|
|
179
179
|
Python/546532_PyChecker_postprocessor>} with U{PyChecker<https://PyPI.org/project/pychecker>}, U{PyFlakes
|
|
180
180
|
<https://PyPI.org/project/pyflakes>}, U{PyCodeStyle<https://PyPI.org/project/pycodestyle>} (formerly Pep8) and
|
|
181
181
|
U{McCabe<https://PyPI.org/project/mccabe>} using Python 2.7.18 and with U{Flake8<https://PyPI.org/project/flake8>}
|
|
182
|
-
using Python 3.11.5, both in 64-bit on macOS 14.
|
|
182
|
+
using Python 3.11.5, both in 64-bit on macOS 14.4.1 Sonoma.
|
|
183
183
|
|
|
184
184
|
For a summary of all I{Karney}-based functionality in C{pygeodesy}, see module U{karney
|
|
185
185
|
<https://mrJean1.GitHub.io/PyGeodesy/docs/pygeodesy.karney-module.html>}.
|
|
@@ -586,7 +586,7 @@ else:
|
|
|
586
586
|
_init__all__ = False
|
|
587
587
|
|
|
588
588
|
from pygeodesy.interns import _DOT_, _version2 # PYCHOK import
|
|
589
|
-
__version__ = '24.04.
|
|
589
|
+
__version__ = '24.04.12'
|
|
590
590
|
# see setup.py for similar logic
|
|
591
591
|
version = _DOT_(*_version2(__version__, n=3))
|
|
592
592
|
|
pygeodesy/albers.py
CHANGED
|
@@ -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.
|
|
41
|
+
__version__ = '24.04.07'
|
|
42
42
|
|
|
43
43
|
_k1_ = 'k1'
|
|
44
44
|
_NUMIT = 8 # XXX 4?
|
|
@@ -431,7 +431,7 @@ class _AlbersBase(_NamedBase):
|
|
|
431
431
|
e21 = E.e21
|
|
432
432
|
e22 = E.e22 # == e2 / e21
|
|
433
433
|
tol = _tol(_TOL0, ta0)
|
|
434
|
-
_Ta02 = Fsum(ta0).
|
|
434
|
+
_Ta02 = Fsum(ta0).fsum2f_
|
|
435
435
|
_fabs = fabs
|
|
436
436
|
_fsum1 = fsum1f_
|
|
437
437
|
_sqrt = sqrt
|
|
@@ -504,7 +504,7 @@ class _AlbersBase(_NamedBase):
|
|
|
504
504
|
qx = self._qx
|
|
505
505
|
|
|
506
506
|
ta = txi
|
|
507
|
-
_Ta2 = Fsum(ta).
|
|
507
|
+
_Ta2 = Fsum(ta).fsum2f_
|
|
508
508
|
_fabs = fabs
|
|
509
509
|
_sqrt3 = sqrt3
|
|
510
510
|
_txif = self._txif
|
|
@@ -732,7 +732,7 @@ def _atanh1(x):
|
|
|
732
732
|
# x < E.e^2 == 2 * E.f use ...
|
|
733
733
|
# x / 3 + x^2 / 5 + x^3 / 7 + ...
|
|
734
734
|
y, k = x, 3
|
|
735
|
-
_S2 = Fsum(y / k).
|
|
735
|
+
_S2 = Fsum(y / k).fsum2f_
|
|
736
736
|
for _ in range(_TERMS): # 9 terms
|
|
737
737
|
y *= x # x**n
|
|
738
738
|
k += 2 # 2*n + 1
|
|
@@ -781,15 +781,15 @@ def _D2atanheE(x, y, E):
|
|
|
781
781
|
e = z = _1_0
|
|
782
782
|
k = 1
|
|
783
783
|
T = Fsum() # Taylor expansion
|
|
784
|
-
_T = T.
|
|
785
|
-
_C = Fsum().
|
|
784
|
+
_T = T.Fsumf_
|
|
785
|
+
_C = Fsum().Fsum_
|
|
786
786
|
_S2 = Fsum().fsum2_
|
|
787
787
|
for _ in range(_TERMS): # 15 terms
|
|
788
|
-
T *= y;
|
|
789
|
-
T *= y;
|
|
788
|
+
T *= y; P = _T(z); z *= x # PYCHOK ;
|
|
789
|
+
T *= y; Q = _T(z); z *= x # PYCHOK ;
|
|
790
790
|
e *= e2
|
|
791
791
|
k += 2
|
|
792
|
-
s, d = _S2(_C(
|
|
792
|
+
s, d = _S2(_C(P, Q) * e / k)
|
|
793
793
|
if not d:
|
|
794
794
|
break
|
|
795
795
|
else: # PYCHOK no cover
|
pygeodesy/azimuthal.py
CHANGED
|
@@ -58,7 +58,7 @@ from pygeodesy.interns import NN, _azimuth_, _datum_, _lat_, _lon_, \
|
|
|
58
58
|
from pygeodesy.karney import _norm180
|
|
59
59
|
from pygeodesy.latlonBase import _MODS, LatLonBase as _LLB
|
|
60
60
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _FOR_DOCS # ALL_MODS
|
|
61
|
-
from pygeodesy.named import _NamedBase, _NamedTuple,
|
|
61
|
+
from pygeodesy.named import _NamedBase, _NamedTuple, _Pass
|
|
62
62
|
from pygeodesy.namedTuples import LatLon2Tuple, LatLon4Tuple
|
|
63
63
|
from pygeodesy.props import deprecated_Property_RO, Property_RO, \
|
|
64
64
|
property_doc_, _update_all
|
|
@@ -71,7 +71,7 @@ from pygeodesy.utily import asin1, atan1, atan2b, atan2d, sincos2, \
|
|
|
71
71
|
from math import acos, atan2, degrees, fabs, sin, sqrt
|
|
72
72
|
|
|
73
73
|
__all__ = _ALL_LAZY.azimuthal
|
|
74
|
-
__version__ = '24.04.
|
|
74
|
+
__version__ = '24.04.07'
|
|
75
75
|
|
|
76
76
|
_EPS_K = _EPStol * _0_1 # Karney's eps_ or _EPSmin * _0_1?
|
|
77
77
|
_over_horizon_ = 'over horizon'
|
|
@@ -145,7 +145,7 @@ class _AzimuthalBase(_NamedBase):
|
|
|
145
145
|
|
|
146
146
|
def forward(self, lat, lon, name=NN): # PYCHOK no cover
|
|
147
147
|
'''I{Must be overloaded}.'''
|
|
148
|
-
|
|
148
|
+
self._notOverloaded(lat, lon, name=name)
|
|
149
149
|
|
|
150
150
|
def _forward(self, lat, lon, name, _k_t_2):
|
|
151
151
|
'''(INTERNAL) Azimuthal (spherical) forward C{lat, lon} to C{x, y}.
|
|
@@ -236,7 +236,7 @@ class _AzimuthalBase(_NamedBase):
|
|
|
236
236
|
|
|
237
237
|
def reverse(self, x, y, name=NN, **LatLon_and_kwds): # PYCHOK no cover
|
|
238
238
|
'''I{Must be overloaded}.'''
|
|
239
|
-
|
|
239
|
+
self._notOverloaded(x, y, name=name, **LatLon_and_kwds)
|
|
240
240
|
|
|
241
241
|
def _reverse(self, x, y, name, _c, lea, LatLon=None, **LatLon_kwds):
|
|
242
242
|
'''(INTERNAL) Azimuthal (spherical) reverse C{x, y} to C{lat, lon}.
|
|
@@ -450,7 +450,7 @@ class _AzimuthalGeodesic(_AzimuthalBase):
|
|
|
450
450
|
@Property_RO
|
|
451
451
|
def geodesic(self): # PYCHOK no cover
|
|
452
452
|
'''I{Must be overloaded}.'''
|
|
453
|
-
|
|
453
|
+
self._notOverloaded()
|
|
454
454
|
|
|
455
455
|
def _7Tuple(self, e, n, r, M=None, name=NN):
|
|
456
456
|
'''(INTERNAL) Return an C{Azimuthal7Tuple}.
|
|
@@ -819,11 +819,12 @@ class _GnomonicBase(_AzimuthalGeodesic):
|
|
|
819
819
|
m = self._mask
|
|
820
820
|
g = self.geodesic
|
|
821
821
|
|
|
822
|
-
_P
|
|
823
|
-
_S2
|
|
822
|
+
_P = g.Line(self.lat0, self.lon0, z, caps=m | g.LINE_OFF).Position
|
|
823
|
+
_S2 = Fsum(s).fsum2f_
|
|
824
|
+
_abs = fabs
|
|
824
825
|
for i in range(1, _TRIPS):
|
|
825
826
|
r = _P(s, outmask=m)
|
|
826
|
-
if
|
|
827
|
+
if _abs(d) < a:
|
|
827
828
|
break
|
|
828
829
|
s, d = _S2(_d(r, q))
|
|
829
830
|
else: # PYCHOK no cover
|
pygeodesy/basics.py
CHANGED
|
@@ -14,21 +14,27 @@ if not division:
|
|
|
14
14
|
raise ImportError('%s 1/2 == %s' % ('division', division))
|
|
15
15
|
del division
|
|
16
16
|
|
|
17
|
+
# from pygeodesy.cartesianBase import CartesianBase # _MODS
|
|
18
|
+
# from pygeodesy.constants import isneg0, NEG0 # _MODS
|
|
17
19
|
from pygeodesy.errors import _AttributeError, _ImportError, _NotImplementedError, \
|
|
18
20
|
_TypeError, _TypesError, _ValueError, _xAssertionError, \
|
|
19
21
|
_xkwds_get
|
|
20
22
|
from pygeodesy.interns import MISSING, NN, _1_, _by_, _COMMA_, _DOT_, _DEPRECATED_, \
|
|
21
23
|
_ELLIPSIS4_, _enquote, _EQUAL_, _in_, _invalid_, _N_A_, \
|
|
22
24
|
_not_scalar_, _SPACE_, _UNDER_, _version_, _version_info
|
|
25
|
+
# from pygeodesy.latlonBase import LatLonBase # _MODS
|
|
23
26
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _FOR_DOCS, \
|
|
24
27
|
_getenv, LazyImportError, _sys, _sys_version_info2
|
|
28
|
+
# from pygeodesy.named import classname, modulename # _MODS
|
|
29
|
+
# from pygeodesy.nvectorBase import NvectorBase # _MODS
|
|
30
|
+
# from pygeodesy.props import _update_all # _MODS
|
|
25
31
|
|
|
26
32
|
from copy import copy as _copy, deepcopy as _deepcopy
|
|
27
33
|
from math import copysign as _copysign
|
|
28
34
|
import inspect as _inspect
|
|
29
35
|
|
|
30
36
|
__all__ = _ALL_LAZY.basics
|
|
31
|
-
__version__ = '24.04.
|
|
37
|
+
__version__ = '24.04.04'
|
|
32
38
|
|
|
33
39
|
_0_0 = 0.0 # in .constants
|
|
34
40
|
_below_ = 'below'
|
|
@@ -537,14 +543,19 @@ def neg_(*xs):
|
|
|
537
543
|
return map(neg, xs)
|
|
538
544
|
|
|
539
545
|
|
|
540
|
-
def
|
|
546
|
+
def _neg0(x):
|
|
547
|
+
'''(INTERNAL) Return C{NEG0 if x < 0 else _0_0},
|
|
548
|
+
unlike C{_copysign_0_0} which returns C{_N_0_0}.
|
|
549
|
+
'''
|
|
550
|
+
return _MODS.constants.NEG0 if x < 0 else _0_0
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
def _req_d_by(where, name=NN): # in .basics
|
|
541
554
|
'''(INTERNAL) Get the fully qualified name.
|
|
542
555
|
'''
|
|
543
556
|
m = _MODS.named.modulename(where, prefixed=True)
|
|
544
557
|
if name:
|
|
545
|
-
|
|
546
|
-
if n:
|
|
547
|
-
m = _DOT_(m, n)
|
|
558
|
+
m = _DOT_(m, name)
|
|
548
559
|
return _SPACE_(_required_, _by_, m)
|
|
549
560
|
|
|
550
561
|
|
pygeodesy/constants.py
CHANGED
|
@@ -23,7 +23,7 @@ except ImportError: # Python 2-
|
|
|
23
23
|
_inf, _nan = float(_INF_), float(_NAN_)
|
|
24
24
|
|
|
25
25
|
__all__ = _ALL_LAZY.constants
|
|
26
|
-
__version__ = '24.
|
|
26
|
+
__version__ = '24.04.04'
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
def _copysign_0_0(y):
|
|
@@ -137,7 +137,7 @@ def _over(p, q):
|
|
|
137
137
|
'''(INTERNAL) Return C{B{p} / B{q}} avoiding C{ZeroDivisionError} exceptions.
|
|
138
138
|
'''
|
|
139
139
|
try:
|
|
140
|
-
return (p / q)
|
|
140
|
+
return (p / q) # if p else _copysign_0_0(q)
|
|
141
141
|
except ZeroDivisionError:
|
|
142
142
|
return (_copysignINF(p) if isfinite(p) else NAN) if p else p
|
|
143
143
|
|
pygeodesy/ecef.py
CHANGED
|
@@ -73,7 +73,7 @@ from pygeodesy.interns import NN, _a_, _C_, _datum_, _ellipsoid_, _f_, _height_,
|
|
|
73
73
|
_lat_, _lon_, _M_, _name_, _singular_, _SPACE_, \
|
|
74
74
|
_x_, _xyz_, _y_, _z_
|
|
75
75
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
76
|
-
from pygeodesy.named import _NamedBase, _NamedTuple,
|
|
76
|
+
from pygeodesy.named import _NamedBase, _NamedTuple, _Pass, _xnamed
|
|
77
77
|
from pygeodesy.namedTuples import LatLon2Tuple, LatLon3Tuple, \
|
|
78
78
|
PhiLam2Tuple, Vector3Tuple, Vector4Tuple
|
|
79
79
|
from pygeodesy.props import deprecated_method, Property_RO, property_RO, property_doc_
|
|
@@ -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.
|
|
89
|
+
__version__ = '24.04.07'
|
|
90
90
|
|
|
91
91
|
_Ecef_ = 'Ecef'
|
|
92
92
|
_prolate_ = 'prolate'
|
|
@@ -306,7 +306,7 @@ class _EcefBase(_NamedBase):
|
|
|
306
306
|
|
|
307
307
|
def reverse(self, xyz, y=None, z=None, M=False, **name_lon00): # PYCHOK no cover
|
|
308
308
|
'''I{Must be overloaded}.'''
|
|
309
|
-
|
|
309
|
+
self._notOverloaded(xyz, y=y, z=z, M=M, **name_lon00)
|
|
310
310
|
|
|
311
311
|
def toStr(self, prec=9, **unused): # PYCHOK signature
|
|
312
312
|
'''Return this C{Ecef*} as a string.
|
|
@@ -657,7 +657,7 @@ class EcefSudano(_EcefBase):
|
|
|
657
657
|
# N / D = (z * ca + (E.e2 * E.a - R) * sa) /
|
|
658
658
|
# (E.e2 * E.a / E.e2s2(sa) - R / ca**2)
|
|
659
659
|
tol = self.tolerance
|
|
660
|
-
_S2 = Fsum(sa).
|
|
660
|
+
_S2 = Fsum(sa).fsum2f_
|
|
661
661
|
_rt = sqrt
|
|
662
662
|
for i in range(1, _TRIPS):
|
|
663
663
|
ca2 = _1_0 - sa**2
|
pygeodesy/ellipsoidalBase.py
CHANGED
|
@@ -26,7 +26,6 @@ from pygeodesy.interns import NN, _COMMA_, _ellipsoidal_
|
|
|
26
26
|
from pygeodesy.latlonBase import LatLonBase, _trilaterate5, fabs, _Wrap
|
|
27
27
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
28
28
|
# from pygeodesy.lcc import toLcc # _MODS
|
|
29
|
-
# from pygeodesy.named import notOverloaded # _MODS
|
|
30
29
|
# from pygeodesy.namedTuples import Vector3Tuple # _MODS
|
|
31
30
|
from pygeodesy.props import deprecated_method, deprecated_property_RO, \
|
|
32
31
|
Property_RO, property_doc_, property_RO, _update_all
|
|
@@ -37,7 +36,7 @@ from pygeodesy.units import Epoch, _isDegrees, Radius_, _1mm as _TOL_M
|
|
|
37
36
|
# from math import fabs # from .latlonBase
|
|
38
37
|
|
|
39
38
|
__all__ = _ALL_LAZY.ellipsoidalBase
|
|
40
|
-
__version__ = '24.
|
|
39
|
+
__version__ = '24.04.07'
|
|
41
40
|
|
|
42
41
|
|
|
43
42
|
class CartesianEllipsoidalBase(CartesianBase):
|
|
@@ -499,7 +498,7 @@ class LatLonEllipsoidalBase(LatLonBase):
|
|
|
499
498
|
|
|
500
499
|
def intermediateTo(self, other, fraction, height=None, wrap=False): # PYCHOK no cover
|
|
501
500
|
'''I{Must be overloaded}.'''
|
|
502
|
-
|
|
501
|
+
self._notOverloaded(other, fraction, height=height, wrap=wrap)
|
|
503
502
|
|
|
504
503
|
def intersection3(self, end1, other, end2, height=None, wrap=False, # was=True
|
|
505
504
|
equidistant=None, tol=_TOL_M):
|
pygeodesy/ellipsoids.py
CHANGED
|
@@ -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.
|
|
96
|
+
__version__ = '24.04.07'
|
|
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
|
|
@@ -933,7 +933,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
933
933
|
toggles on +/-1.12e-16 or +/-4.47e-16, see C{.utm.Utm._toLLEB}.
|
|
934
934
|
'''
|
|
935
935
|
e = self._1_e21
|
|
936
|
-
_F2_ = Fsum(T).
|
|
936
|
+
_F2_ = Fsum(T).fsum2f_ # τ0
|
|
937
937
|
_tf2 = self._es_taupf2
|
|
938
938
|
for i in range(1, N + 1):
|
|
939
939
|
a, h = _tf2(T)
|
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.
|
|
100
|
+
__version__ = '24.04.09'
|
|
101
101
|
|
|
102
102
|
_TolRD = zqrt(EPS * 0.002)
|
|
103
103
|
_TolRF = zqrt(EPS * 0.030)
|
|
@@ -112,7 +112,7 @@ class _Cs(object):
|
|
|
112
112
|
self.__dict__ = kwds
|
|
113
113
|
|
|
114
114
|
|
|
115
|
-
class
|
|
115
|
+
class _Dsum(list):
|
|
116
116
|
'''(INTERNAL) Deferred C{Fsum}.
|
|
117
117
|
'''
|
|
118
118
|
def __call__(self, s):
|
|
@@ -405,7 +405,7 @@ class Elliptic(_Named):
|
|
|
405
405
|
# For kp2 close to zero use asin(r / cE) or J. P. Boyd,
|
|
406
406
|
# Applied Math. and Computation 218, 7005-7013 (2012)
|
|
407
407
|
# <https://DOI.org/10.1016/j.amc.2011.12.021>
|
|
408
|
-
_Phi2, self._iteration = Phi.
|
|
408
|
+
_Phi2, self._iteration = Phi.fsum2f_, 0 # aggregate
|
|
409
409
|
for i in range(1, _TRIPS): # GEOGRAPHICLIB_PANIC
|
|
410
410
|
sn, cn, dn = self._sncndn3(phi)
|
|
411
411
|
if dn:
|
|
@@ -896,7 +896,7 @@ class Elliptic3Tuple(_NamedTuple):
|
|
|
896
896
|
_Units_ = ( Scalar, Scalar, Scalar)
|
|
897
897
|
|
|
898
898
|
|
|
899
|
-
class
|
|
899
|
+
class _List(list):
|
|
900
900
|
'''(INTERNAL) Helper for C{_RD}, C{_RF3} and C{_RJ}.
|
|
901
901
|
'''
|
|
902
902
|
_a0 = None
|
|
@@ -938,7 +938,7 @@ class _L(list):
|
|
|
938
938
|
r = fdot(s[:3], s[1], s[2], s[0]) # sqrt(x) * sqrt(y) + ...
|
|
939
939
|
except ValueError: # Fsum(NAN) exception
|
|
940
940
|
r = _sum(s[i] * s[(i + 1) % 3] for i in range(3))
|
|
941
|
-
L[:] =
|
|
941
|
+
L[:] = ((r + _) * _0_25 for _ in L)
|
|
942
942
|
a = (r + a) * _0_25
|
|
943
943
|
if y: # yield only if used
|
|
944
944
|
yield a, m, r, s # L[2] is next z
|
|
@@ -951,9 +951,10 @@ class _L(list):
|
|
|
951
951
|
'''Rescale C{x}, C{y}, ...
|
|
952
952
|
'''
|
|
953
953
|
# assert am
|
|
954
|
-
a0
|
|
954
|
+
a0 = self._a0
|
|
955
|
+
_am = _1_0 / am
|
|
955
956
|
for x in xs:
|
|
956
|
-
yield (a0 - x)
|
|
957
|
+
yield (a0 - x) * _am
|
|
957
958
|
|
|
958
959
|
|
|
959
960
|
def _ab2(inst, x, y):
|
|
@@ -961,16 +962,15 @@ def _ab2(inst, x, y):
|
|
|
961
962
|
'''
|
|
962
963
|
a, b = sqrt(x), sqrt(y)
|
|
963
964
|
if b > a:
|
|
964
|
-
|
|
965
|
-
yield a, b # initial x0, y0
|
|
965
|
+
b, a = a, b
|
|
966
966
|
for i in range(_TRIPS):
|
|
967
|
+
yield a, b # xi, yi
|
|
967
968
|
d = fabs(a - b)
|
|
968
969
|
t = _TolRG0 * a
|
|
969
970
|
if d <= t: # 3-4 trips
|
|
970
971
|
_iterations(inst, i)
|
|
971
972
|
break
|
|
972
973
|
a, b = ((a + b) * _0_5), sqrt(a * b)
|
|
973
|
-
yield a, b # xn, yn
|
|
974
974
|
else: # PYCHOK no cover
|
|
975
975
|
raise _convergenceError(d, t)
|
|
976
976
|
|
|
@@ -1031,7 +1031,9 @@ def _Horner(S, e1, E2, E3, E4, E5, *over):
|
|
|
1031
1031
|
S += F(E2 * -706860, E22 * 675675, E3 * 306306, 680680).fmul(E3)
|
|
1032
1032
|
S += F(E2 * 417690, E22 * -255255, -875160).fmul(E2)
|
|
1033
1033
|
S += 4084080
|
|
1034
|
-
|
|
1034
|
+
if over:
|
|
1035
|
+
e *= over[0]
|
|
1036
|
+
return S.fdiv(e) # Fsum
|
|
1035
1037
|
|
|
1036
1038
|
|
|
1037
1039
|
def _iterations(inst, i):
|
|
@@ -1069,8 +1071,8 @@ def _rC(unused, x, y):
|
|
|
1069
1071
|
def _RD(inst, x, y, z, *over):
|
|
1070
1072
|
'''(INTERNAL) Carlson, eqs 2.28 - 2.34.
|
|
1071
1073
|
'''
|
|
1072
|
-
L =
|
|
1073
|
-
S =
|
|
1074
|
+
L = _List(x, y, z)
|
|
1075
|
+
S = _Dsum()
|
|
1074
1076
|
for a, m, r, s in L.amrs4(inst, True, _TolRF):
|
|
1075
1077
|
if s:
|
|
1076
1078
|
S += _over(_3_0, (r + z) * s[2] * m)
|
|
@@ -1097,7 +1099,7 @@ def _rF2(inst, x, y): # 2-arg version, z=0
|
|
|
1097
1099
|
def _RF3(inst, x, y, z): # 3-arg version
|
|
1098
1100
|
'''(INTERNAL) Carlson, eqs 2.2 - 2.7.
|
|
1099
1101
|
'''
|
|
1100
|
-
L =
|
|
1102
|
+
L = _List(x, y, z)
|
|
1101
1103
|
for a, m, _, _ in L.amrs4(inst, False, _TolRF):
|
|
1102
1104
|
pass
|
|
1103
1105
|
x, y = L.rescale(a * m, x, y)
|
|
@@ -1120,7 +1122,7 @@ def _rG2(inst, x, y, PI_=PI_4): # 2-args
|
|
|
1120
1122
|
'''(INTERNAL) Carlson, eqs 2.36 - 2.39.
|
|
1121
1123
|
'''
|
|
1122
1124
|
m = -1 # neg!
|
|
1123
|
-
S =
|
|
1125
|
+
S = _Dsum()
|
|
1124
1126
|
# assert not S
|
|
1125
1127
|
for a, b in _ab2(inst, x, y): # PYCHOK yield
|
|
1126
1128
|
if S:
|
|
@@ -1148,9 +1150,9 @@ def _RJ(inst, x, y, z, p, *over):
|
|
|
1148
1150
|
def _xyzp(x, y, z, p):
|
|
1149
1151
|
return (x + p) * (y + p) * (z + p)
|
|
1150
1152
|
|
|
1151
|
-
L =
|
|
1153
|
+
L = _List(x, y, z, p)
|
|
1152
1154
|
n = neg(_xyzp(x, y, z, -p))
|
|
1153
|
-
S =
|
|
1155
|
+
S = _Dsum()
|
|
1154
1156
|
for a, m, _, s in L.amrs4(inst, True, _TolRD):
|
|
1155
1157
|
if s:
|
|
1156
1158
|
d = _xyzp(*s)
|
pygeodesy/etm.py
CHANGED
|
@@ -92,7 +92,7 @@ from pygeodesy.utm import _cmlon, _LLEB, _parseUTM5, _toBand, _toXtm8, \
|
|
|
92
92
|
from math import asinh, atan2, degrees, radians, sinh, sqrt
|
|
93
93
|
|
|
94
94
|
__all__ = _ALL_LAZY.etm
|
|
95
|
-
__version__ = '24.
|
|
95
|
+
__version__ = '24.04.07'
|
|
96
96
|
|
|
97
97
|
_OVERFLOW = _1_EPS**2 # about 2e+31
|
|
98
98
|
_TAYTOL = pow(EPS, 0.6)
|
|
@@ -606,8 +606,8 @@ class ExactTransverseMercator(_NamedBase):
|
|
|
606
606
|
_zetaDwd2 = self._sigmaDwd2
|
|
607
607
|
|
|
608
608
|
d2, r = tol2, self.raiser
|
|
609
|
-
_U_2 = Fsum(u).
|
|
610
|
-
_V_2 = Fsum(v).
|
|
609
|
+
_U_2 = Fsum(u).fsum2f_
|
|
610
|
+
_V_2 = Fsum(v).fsum2f_
|
|
611
611
|
# min iterations 2, max 6 or 7, mean 3.9 or 4.0
|
|
612
612
|
for i in range(1, _TRIPS): # GEOGRAPHICLIB_PANIC
|
|
613
613
|
sncndn6 = self._sncndn6(u, v)
|