pygeodesy 24.4.4__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.4.dist-info → PyGeodesy-24.4.12.dist-info}/METADATA +6 -6
- {PyGeodesy-24.4.4.dist-info → PyGeodesy-24.4.12.dist-info}/RECORD +31 -31
- pygeodesy/__init__.py +1 -1
- pygeodesy/albers.py +9 -9
- pygeodesy/azimuthal.py +9 -8
- 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/frechet.py +6 -6
- pygeodesy/fstats.py +3 -4
- pygeodesy/fsums.py +314 -279
- 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/rhumb/bases.py +24 -25
- pygeodesy/sphericalNvector.py +6 -6
- pygeodesy/sphericalTrigonometry.py +3 -4
- pygeodesy/utmupsBase.py +6 -6
- {PyGeodesy-24.4.4.dist-info → PyGeodesy-24.4.12.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.4.4.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
|
|
@@ -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 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,8 +1,8 @@
|
|
|
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=
|
|
4
|
+
pygeodesy/albers.py,sha256=mx1Bu05G52WuDaZdEHSpnN9bmRagem4vsbjYodQeuiM,31102
|
|
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
|
|
8
8
|
pygeodesy/cartesianBase.py,sha256=I3q29mRdBB3NCDmPoJsJ0QOFfLzkdMWc8X9zG4IwJyA,47264
|
|
@@ -11,54 +11,54 @@ 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=
|
|
27
|
+
pygeodesy/etm.py,sha256=joEhU2lw9ehRv101nRpZvXq8hOYAEzdcYFpif9_obfk,44585
|
|
28
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
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
|
|
@@ -68,7 +68,7 @@ pygeodesy/ups.py,sha256=07AG-Rb1D4EvmN3g-xk3ZxKzyaNYvOzztcyYbx7t8jc,23229
|
|
|
68
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
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/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)
|
pygeodesy/frechet.py
CHANGED
|
@@ -89,7 +89,7 @@ import pygeodesy.formy as _formy
|
|
|
89
89
|
from pygeodesy.interns import NN, _DOT_, _n_, _units_
|
|
90
90
|
# from pygeodesy.iters import points2 as _points2 # from .points
|
|
91
91
|
from pygeodesy.lazily import _ALL_LAZY, _FOR_DOCS
|
|
92
|
-
from pygeodesy.named import _Named, _NamedTuple,
|
|
92
|
+
from pygeodesy.named import _Named, _NamedTuple, _Pass
|
|
93
93
|
# from pygeodesy.namedTuples import PhiLam2Tuple # from .points
|
|
94
94
|
from pygeodesy.points import _distanceTo, _fractional, isscalar, \
|
|
95
95
|
PhiLam2Tuple, points2 as _points2, radians
|
|
@@ -102,7 +102,7 @@ from collections import defaultdict as _defaultdict
|
|
|
102
102
|
# from math import radians # from .points
|
|
103
103
|
|
|
104
104
|
__all__ = _ALL_LAZY.frechet
|
|
105
|
-
__version__ = '24.
|
|
105
|
+
__version__ = '24.04.07'
|
|
106
106
|
|
|
107
107
|
|
|
108
108
|
def _fraction(fraction, n):
|
|
@@ -248,7 +248,7 @@ class Frechet(_Named):
|
|
|
248
248
|
|
|
249
249
|
def _func(self, *args, **kwds): # PYCHOK no cover
|
|
250
250
|
'''(INTERNAL) I{Must be overloaded}.'''
|
|
251
|
-
|
|
251
|
+
self._notOverloaded(*args, **kwds)
|
|
252
252
|
|
|
253
253
|
@property_RO
|
|
254
254
|
def kwds(self):
|
|
@@ -325,7 +325,7 @@ class FrechetDegrees(Frechet):
|
|
|
325
325
|
|
|
326
326
|
def distance(self, point1, point2, *args, **kwds): # PYCHOK no cover
|
|
327
327
|
'''I{Must be overloaded}.'''
|
|
328
|
-
|
|
328
|
+
self._notOverloaded(point1, point2, *args, **kwds)
|
|
329
329
|
|
|
330
330
|
|
|
331
331
|
class FrechetRadians(Frechet):
|
|
@@ -339,7 +339,7 @@ class FrechetRadians(Frechet):
|
|
|
339
339
|
|
|
340
340
|
def distance(self, point1, point2, *args, **kwds): # PYCHOK no cover
|
|
341
341
|
'''I{Must be overloaded}.'''
|
|
342
|
-
|
|
342
|
+
self._notOverloaded(point1, point2, *args, **kwds)
|
|
343
343
|
|
|
344
344
|
def point(self, point):
|
|
345
345
|
'''Return B{C{point}} as L{PhiLam2Tuple} to maintain
|
|
@@ -373,7 +373,7 @@ class _FrechetMeterRadians(Frechet):
|
|
|
373
373
|
|
|
374
374
|
def _func_(self, *args, **kwds): # PYCHOK no cover
|
|
375
375
|
'''(INTERNAL) I{Must be overloaded}.'''
|
|
376
|
-
|
|
376
|
+
self._notOverloaded(*args, **kwds)
|
|
377
377
|
|
|
378
378
|
|
|
379
379
|
class FrechetCosineAndoyerLambert(_FrechetMeterRadians):
|
pygeodesy/fstats.py
CHANGED
|
@@ -15,15 +15,14 @@ from pygeodesy.fmath import hypot2, sqrt
|
|
|
15
15
|
from pygeodesy.fsums import _2float, Fsum, Fmt
|
|
16
16
|
from pygeodesy.interns import NN, _iadd_op_, _invalid_, _other_, _SPACE_
|
|
17
17
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY
|
|
18
|
-
from pygeodesy.named import _Named, _NotImplemented,
|
|
19
|
-
property_RO
|
|
18
|
+
from pygeodesy.named import _Named, _NotImplemented, property_RO
|
|
20
19
|
# from pygeodesy.props import property_RO # from .named
|
|
21
20
|
# from pygeodesy.streprs import Fmt # from .fsums
|
|
22
21
|
|
|
23
22
|
# from math import sqrt # from .fmath
|
|
24
23
|
|
|
25
24
|
__all__ = _ALL_LAZY.fstats
|
|
26
|
-
__version__ = '
|
|
25
|
+
__version__ = '24.04.07'
|
|
27
26
|
|
|
28
27
|
_Floats = Fsum, float
|
|
29
28
|
_Scalar = _Floats + (int,) # XXX basics._Ints is ABCMeta in Python 2
|
|
@@ -114,7 +113,7 @@ class _FstatsBase(_FstatsNamed):
|
|
|
114
113
|
|
|
115
114
|
def fadd(self, xs, sample=False): # PYCHOK no cover
|
|
116
115
|
'''I{Must be overloaded}.'''
|
|
117
|
-
|
|
116
|
+
self._notOverloaded(xs, sample=sample)
|
|
118
117
|
|
|
119
118
|
def fadd_(self, *xs, **sample):
|
|
120
119
|
'''Accumulate and return the current count.
|