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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyGeodesy
3
- Version: 24.4.2
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.3.1 Sonoma and in 64-bit only.
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-2.1 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1 Big
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.3.1 Sonoma.
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 02, 2024.*
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=_3ZB1L61RzVekqZjnjG1Q-nWx4O6g6fbCUm9ygiBoQU,40824
2
+ pygeodesy/__init__.py,sha256=VQ4Ax0S1ZenUk2bZtcfv8F-OWwKawIzU85WpPHWDrRE,40824
3
3
  pygeodesy/__main__.py,sha256=qMFG3caY8ZXWu6uGiemzyT4OqTFZnsFtlxcGCAgkVJw,4637
4
- pygeodesy/albers.py,sha256=UpWNezHXFuA_kT5PhH_2V_gGFJjcmVLLogl5ScJloPU,31098
5
- pygeodesy/azimuthal.py,sha256=e796vtU5ol5ZG2yBX3E5YBXsONJuCrhyEX60YzGzFi0,50115
6
- pygeodesy/basics.py,sha256=tkHRN1-4wcZyniACBp9K5RJSrrFVIEmaVt9a0celNGk,27687
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=0ooop-YabUzSvO1Z3Q3J6P--LT-ViR83om4aj6PlqOg,19144
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=iCu45kqAvClqDiW8sRPk_rRXh7liGKmkmMMTBca40p4,59717
14
+ pygeodesy/ecef.py,sha256=VRoGa8zjGDPFXYr9HZiKS4XwoAI6p4N_ngsHtGipQAo,59703
15
15
  pygeodesy/elevations.py,sha256=ZTxzLWHLUrghFI9Fkl0ZGHzdiLDe0y3ImGUsfxFg6Qc,10814
16
- pygeodesy/ellipsoidalBase.py,sha256=VyPHLTyFjviQSdIcGYlENhqBtQjqyMXAH_qKYoqQGp8,56704
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=oXvraveSFEdf-OJvojT7JGmKl_feTod5xy_7ZjhEG5Y,119944
24
- pygeodesy/elliptic.py,sha256=n2R-3H1ruMnwBewEtn75ahjpgeEU93irzcvFxarCyPs,42393
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=ADIMY8zxVu3cAiP9rUGj3Mq3LyO2C5w3ejdW2YY1eJ8,44583
28
- pygeodesy/fmath.py,sha256=z0YBdZW92NaLM0VEyx6ItTIjuf3I6PhRce27OUl_RnM,30360
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=1tiLc6WZou8YVbizB0QisVhYH-VOP03pMZQ5GOAb9Dc,33527
31
- pygeodesy/fstats.py,sha256=X79Qd8pL4R-kUIYN0CZDuA7L1UArtBFvWqaFoHASNqs,25605
32
- pygeodesy/fsums.py,sha256=3Fdnk0ZJmg05qoJmUSLH8ra4mQQKuDFDTdD5L4jio5U,67166
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=Rw1pmT8UabWsBKfecsd4VR5Ks3uMrhH8sufydJS_MMs,26901
35
- pygeodesy/geodsolve.py,sha256=J75l_bbPPsPr4NZXm1hCASl9TrXAS5DSeufXYkz2Qzs,21863
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=qndN0H7oDUfqDTzvvs3Rk89pVChYJUEBTxVSnQ2689E,80620
38
- pygeodesy/hausdorff.py,sha256=zmdp2oUrGZPceeHcX-_5dn2i5_GzPI3s2M5lKhlN6ss,34207
39
- pygeodesy/heights.py,sha256=hMM5OlhMwNlBboJs9QSzMspub1WwmzmD6OyBDkROAWM,42543
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=oY7Trlw0pL_qAP8sdn68EfHDgaxM7JpL7AIynWkf1rk,77759
45
- pygeodesy/lazily.py,sha256=JlMAXFraRha9SfwOADlFjLChtx6O9C9e0b_HWr6qtwM,48624
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=akINPlWAHDFefH5to5TAA0ZxaRepLKSZbKj12v23Dgs,48579
48
- pygeodesy/ltpTuples.py,sha256=o_bNxYpAZ-Kj5IOH3GAfkrwr3VdLlPD5k9Wn2NwOiQQ,55812
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=ZH63C6RGOBgeS5e3HJpd1LxvPvhIM8UTRP9r5OTBsbE,47622
50
+ pygeodesy/named.py,sha256=2Kg4tv883V80ZVUEgFzDeBmIEMkig_VUbJuufC0lhN0,48009
51
51
  pygeodesy/namedTuples.py,sha256=msEYvQKj4oCW35Kx80RpeQXY85A1G0O3GEqsysLaV2M,27288
52
- pygeodesy/nvectorBase.py,sha256=vpuGECs038I-8z_MDFJ9gZMY_6Een-EG2Y_llRLpl-o,28794
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=8LiAH1dMiNN6mLmBZAisI0VsccD9PSy97XhDtJUfBuw,64441
54
+ pygeodesy/points.py,sha256=QNAAF0r7iqSXFr_6aQm-wW7f6vU3KusWVhXEMVeVo58,64442
55
55
  pygeodesy/props.py,sha256=ZnXRuSOkfkeJY3Of-iT06FNWZkTYgLZQBPBNF6aS0jE,21421
56
- pygeodesy/resections.py,sha256=ILXfcWkHH-WP2eczhYw6p5HANZXH_sttfhdJBM22l-k,43586
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=bJSlguIyVfJpFmY596fQWVUlHcuxpql5qU-0iv3NQ-k,56973
61
- pygeodesy/sphericalTrigonometry.py,sha256=FckyhYOF8UnDxXJpLhFYiDA2NsEwcQRioD4HRpS9-n0,64293
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=O9y9G02kRKtcvTyGJqxWaYDA10rv3mPhTub4VTQmrQI,36105
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=5mKmo2cGSCJM8Q5oRQ7tmGJgRTdIgRVncCwG_BqB030,18816
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=ZZ4Ba0Cl45tQdfEquyQPSQdH2vXgemF3tCw6UuzHphs,53893
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.2.dist-info/METADATA,sha256=hh9f4N7AItjpHOMK6dzULDBjunNb4dIoN4WIiVUxsDQ,19365
113
- PyGeodesy-24.4.2.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
114
- PyGeodesy-24.4.2.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
115
- PyGeodesy-24.4.2.dist-info/RECORD,,
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.3.1 Sonoma and
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-2.1 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1
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.3.1 Sonoma.
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.02'
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.03.22'
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).fsum2_
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).fsum2_
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).fsum2_
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.fsum_
785
- _C = Fsum().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; p = _T(z); z *= x # PYCHOK ;
789
- T *= y; t = _T(z); z *= x # PYCHOK ;
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(p, t) * e / k)
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, notOverloaded, _Pass
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.02'
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
- notOverloaded(self, lat, lon, name=name)
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
- notOverloaded(self, x, y, name=name, **LatLon_and_kwds)
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
- notOverloaded(self)
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 = g.Line(self.lat0, self.lon0, z, caps=m | g.LINE_OFF).Position
823
- _S2 = Fsum(s).fsum2_
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 fabs(d) < a:
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.01'
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 _req_d_by(where, **name): # in .basics
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
- n = _xkwds_get(name, name=NN)
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.03.15'
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, notOverloaded, _Pass, _xnamed
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.03.22'
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
- notOverloaded(self, xyz, y=y, z=z, M=M, **name_lon00)
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).fsum2_
660
+ _S2 = Fsum(sa).fsum2f_
661
661
  _rt = sqrt
662
662
  for i in range(1, _TRIPS):
663
663
  ca2 = _1_0 - sa**2
@@ -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.03.09'
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
- _MODS.named.notOverloaded(self, other, fraction, height=height, wrap=wrap)
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.03.22'
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).fsum2_ # τ0
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.03.22'
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 _D(list):
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.fsum2_, 0 # aggregate
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 _L(list):
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[:] = [(r + _) * _0_25 for _ in 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 = self._a0
954
+ a0 = self._a0
955
+ _am = _1_0 / am
955
956
  for x in xs:
956
- yield (a0 - x) / am
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
- a, b = b, a
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
- return S.fdiv((over[0] * e) if over else e) # Fsum
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 = _L(x, y, z)
1073
- S = _D()
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 = _L(x, y, z)
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 = _D()
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 = _L(x, y, z, p)
1153
+ L = _List(x, y, z, p)
1152
1154
  n = neg(_xyzp(x, y, z, -p))
1153
- S = _D()
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.03.22'
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).fsum2_
610
- _V_2 = Fsum(v).fsum2_
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)