pygeodesy 24.4.4__py2.py3-none-any.whl → 24.4.18__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyGeodesy
3
- Version: 24.4.4
3
+ Version: 24.4.18
4
4
  Summary: Pure Python geodesy tools
5
5
  Home-page: https://GitHub.com/mrJean1/PyGeodesy
6
6
  Author: Jean M. Brouwers
@@ -158,7 +158,7 @@ and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64
158
158
 
159
159
  For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
160
160
 
161
- *Last updated: April 04, 2024.*
161
+ *Last updated: April 18, 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=3Zu_6m7CtOUuHraPspTn-gTN03b8oW_SyNpfhSibkTI,40824
2
+ pygeodesy/__init__.py,sha256=Wx1Zo8hUxl6CV1eZZvLbrQSQ6VSB8mHBTmPqxcG0Mpc,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
4
+ pygeodesy/albers.py,sha256=g2AVlpV8JO2AYFCthoIbRC2h1OJqjb9P3hpwF0C3TI8,30994
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,65 +11,65 @@ 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=SxMsivNnE9ibUjQGd0d24H0SzoSjh6jfhLWjasOWpao,119946
24
+ pygeodesy/elliptic.py,sha256=XRVpmpdm3hbztM4P-qhWKQizbgsXDUxWujgmOrIpgiQ,42428
25
25
  pygeodesy/epsg.py,sha256=ldHoLWqJWR4FUiBVnDTtrI_e7TNjjtr9OkxDlri1g5E,8165
26
- pygeodesy/errors.py,sha256=fRGrdnb81Y9KB4Y1ua1nvB9zuuiv8IL6c6YN_cb3kBo,27280
27
- pygeodesy/etm.py,sha256=ADIMY8zxVu3cAiP9rUGj3Mq3LyO2C5w3ejdW2YY1eJ8,44583
28
- pygeodesy/fmath.py,sha256=cmObX2axb8BfPyhaSDGFFVRs63kBP4ZWhWzGzPhl6OQ,30286
26
+ pygeodesy/errors.py,sha256=mUaacHJKcSCowlcbzamaBMDqjI2dqsTM5O4ozIITtAk,27233
27
+ pygeodesy/etm.py,sha256=joEhU2lw9ehRv101nRpZvXq8hOYAEzdcYFpif9_obfk,44585
28
+ pygeodesy/fmath.py,sha256=9jjm_QxrQKNtOUxgNk02j-UVMFVjC1cDPaEqXznKgzk,30716
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=a2rhCX73eZbyiKYvk06T4q9l1QkGxYQ50T7N21oGRl8,68591
30
+ pygeodesy/frechet.py,sha256=qgee-ISBtT7Ov3rJkcd_t-WeXTbeNoMSQuMa0j3MyQc,33512
31
+ pygeodesy/fstats.py,sha256=r8O2aIknHuoHsW8gZUIY42zpHZy7syHvCB7uCVtPpkc,25559
32
+ pygeodesy/fsums.py,sha256=QjV9B-YGbhFALMPEQMKT8-1j7JFDWnabakAdZDvFsSs,72501
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=4ZxBVj1Yu4Db-dw_e6oxXx7EtDSrgdGBV-ypUefMPGY,48633
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=8se8dYG7LG__Ru0FoK939DJBF9GCQGeJik_Un1Im8Xw,48609
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
53
- pygeodesy/osgr.py,sha256=5JB6b_nvyZ6rFMlC7ZB45mvYtjc_aiLb4DPdeaui-KY,30995
54
- pygeodesy/points.py,sha256=8LiAH1dMiNN6mLmBZAisI0VsccD9PSy97XhDtJUfBuw,64441
52
+ pygeodesy/nvectorBase.py,sha256=WJY5ylZ_HCeM1wGL7ryEecJphEYibp-EAWL0piKlMG8,28766
53
+ pygeodesy/osgr.py,sha256=voC1rbOe4dnS_EjaDaRDRUQ4MoG7puMBEMV6lcAuIBI,31029
54
+ pygeodesy/points.py,sha256=QNAAF0r7iqSXFr_6aQm-wW7f6vU3KusWVhXEMVeVo58,64442
55
55
  pygeodesy/props.py,sha256=ZnXRuSOkfkeJY3Of-iT06FNWZkTYgLZQBPBNF6aS0jE,21421
56
- pygeodesy/resections.py,sha256=WGGsWgN9LCcJ9YCo-lbgtuA9VqEWnYvoe3OFOJ4nYFk,43619
56
+ pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
57
57
  pygeodesy/simplify.py,sha256=FT3AzXiFjFfvwJ-X2q8iA9cQOUVdBT1vD_BIskM3gK8,25223
58
58
  pygeodesy/solveBase.py,sha256=cBe3QQWEaJlPWUlXoiYo1eFMh4z6GDZbQyt8ZiwMfos,16687
59
59
  pygeodesy/sphericalBase.py,sha256=sH2WwmY_RL0STyr1OhtCDKvGhO0Ks7o3V-MHLddpiHQ,31944
60
- 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
- pygeodesy/triaxials.py,sha256=Yet0J9Fr4FbTEIL9_p3ziollRR3PzUN2-qt7Z9ZSODU,61537
64
+ pygeodesy/triaxials.py,sha256=fkUcWkXkykZNbTq62LcdnEjhNu9q-e2UaSpRotdzuu8,61546
65
65
  pygeodesy/units.py,sha256=ofFTYc7mF9wOpfvpYHN83dGszMM18rTdsxfEXVzaIko,38705
66
66
  pygeodesy/unitsBase.py,sha256=xRZlNlO7S47Mwy0FGBg_cefvB4fEtWFM5dAE-Nlw-NE,13111
67
67
  pygeodesy/ups.py,sha256=07AG-Rb1D4EvmN3g-xk3ZxKzyaNYvOzztcyYbx7t8jc,23229
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=5mKmo2cGSCJM8Q5oRQ7tmGJgRTdIgRVncCwG_BqB030,18816
72
- pygeodesy/vector2d.py,sha256=7li4n13cpEm6qNVqlwoE7RH6Cjs9HpbAXBrPX8F4QmI,34963
71
+ pygeodesy/utmupsBase.py,sha256=KetB8R0uRYU6X8nLG3JkBHUr1OfNlChKa0isgvm8Yq8,18807
72
+ pygeodesy/vector2d.py,sha256=IAgmn-9-P6zxh4rond2k0tuf26miVwe-eHqm5f7sWTU,35003
73
73
  pygeodesy/vector3d.py,sha256=Q_brX_URZg_Eln01y8G8_NAEuPbbOI_IgO2wBJk1N0U,44970
74
74
  pygeodesy/vector3dBase.py,sha256=wJpEcgHlJ5Qu0Us7CKuNDepZQzo6a-RvqZbA2-O4-ko,35583
75
75
  pygeodesy/webmercator.py,sha256=1IXiAHBXTm5kMCp5gEI67oBJeRXD7BiPVI7bcRRX1U4,14918
@@ -82,11 +82,11 @@ pygeodesy/auxilats/__main__.py,sha256=TVN8evCKEzBKdANU5-Ucps8bZySqBTQmEGU4hy_U1c
82
82
  pygeodesy/auxilats/auxAngle.py,sha256=3tTYEuiX2YmEOmoyqGPYrSN3gLXbcKWKFH1TNt3NqbI,16738
83
83
  pygeodesy/auxilats/auxDLat.py,sha256=U3BHF6AkW5--nrwH9whL5wZVIZLH_keRLfUz6c6KBx4,10950
84
84
  pygeodesy/auxilats/auxDST.py,sha256=bdNEh3TdABWH7qW6ngZx5SnzDM3B5rtPLvYhvCnFsKc,10497
85
- pygeodesy/auxilats/auxLat.py,sha256=nefYrJK7C_SlzGX2ju2_0l1lJzCWtJVeoY9YV0saxeU,31271
85
+ pygeodesy/auxilats/auxLat.py,sha256=U6thEwMEoUm4OFb2_JviEtEn2-nqyVjNbII7oyMf0hM,31282
86
86
  pygeodesy/auxilats/auxily.py,sha256=ZiCFedYcr32O6TWQ_dcnwMrc9TgogyuhNSbR77WMDpg,8240
87
- pygeodesy/deprecated/__init__.py,sha256=FJz1aCk2T2ta2S0iA6F92mIA1NlHW2nIzm5kY2oVzNA,2815
87
+ pygeodesy/deprecated/__init__.py,sha256=ZRGqgwSdvtKSYZdw09-LPuGa_i0jMHWKIwrPG3r1hHs,2815
88
88
  pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8,1655
89
- pygeodesy/deprecated/classes.py,sha256=NvZsfSzpdNPTBOA0H02-yYZBdnUBSenGFase2ABu-yg,11202
89
+ pygeodesy/deprecated/classes.py,sha256=PXgss-2kEu3bzaxvSeVZJGdcRqsdi_6_aRqsESyUQKQ,11662
90
90
  pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
91
91
  pygeodesy/deprecated/datum.py,sha256=KfuMA64LYGMj1voW2uai2RGcugtWdpvlOL6UHJvpTeQ,1875
92
92
  pygeodesy/deprecated/functions.py,sha256=-Ckor43KBiCDa7rbwY5kHvrs5xwuixTlw1TZpNSBgrU,13647
@@ -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.4.dist-info/METADATA,sha256=pWgDCMFWPNFawFtWPa1q4SpV_5XDSJx4r5MvNyFpXjE,19365
113
- PyGeodesy-24.4.4.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
114
- PyGeodesy-24.4.4.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
115
- PyGeodesy-24.4.4.dist-info/RECORD,,
112
+ PyGeodesy-24.4.18.dist-info/METADATA,sha256=kwVbSazBaM7cCqqiNZ0-SQbbnG7-Y3vLtmAh_yGMK3s,19366
113
+ PyGeodesy-24.4.18.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
114
+ PyGeodesy-24.4.18.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
115
+ PyGeodesy-24.4.18.dist-info/RECORD,,
pygeodesy/__init__.py CHANGED
@@ -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.04'
589
+ __version__ = '24.04.18'
590
590
  # see setup.py for similar logic
591
591
  version = _DOT_(*_version2(__version__, n=3))
592
592
 
pygeodesy/albers.py CHANGED
@@ -22,7 +22,7 @@ from pygeodesy.constants import EPS0, EPS02, _EPSqrt as _TOL, \
22
22
  from pygeodesy.datums import _ellipsoidal_datum, _WGS84
23
23
  from pygeodesy.errors import _ValueError, _xkwds
24
24
  from pygeodesy.fmath import hypot, hypot1, sqrt3
25
- from pygeodesy.fsums import Fsum, fsum1f_
25
+ from pygeodesy.fsums import Fsum, _Fsum1f_, fsum1f_
26
26
  from pygeodesy.interns import NN, _COMMASPACE_, _datum_, _gamma_, _k0_, \
27
27
  _lat_, _lat1_, _lat2_, _lon_, _name_, _not_, \
28
28
  _negative_, _scale_, _SPACE_, _x_, _y_
@@ -38,7 +38,7 @@ from pygeodesy.utily import atan1, atan1d, degrees360, sincos2, sincos2d, \
38
38
  from math import atan2, atanh, degrees, fabs, radians, sqrt
39
39
 
40
40
  __all__ = _ALL_LAZY.albers
41
- __version__ = '24.03.22'
41
+ __version__ = '24.04.14'
42
42
 
43
43
  _k1_ = 'k1'
44
44
  _NUMIT = 8 # XXX 4?
@@ -54,14 +54,6 @@ def _ct2(s, c):
54
54
  return c, (s / c)
55
55
 
56
56
 
57
- def _Fsum1(a, b, c=_0_0): # floats=True
58
- '''(INTERNAL) C{Fsum} 1-primed.
59
- '''
60
- S = Fsum()
61
- S._facc_(_1_0, a, b, c, _N_1_0, up=False)
62
- return S
63
-
64
-
65
57
  def _Ks(**name_k):
66
58
  '''(INTERNAL) Scale C{B{k} >= EPS0}.
67
59
  '''
@@ -388,12 +380,13 @@ class _AlbersBase(_NamedBase):
388
380
 
389
381
  den = hypot(nx, y1) + nrho0 # 0 implies origin with polar aspect
390
382
  if den:
391
- drho = _Fsum1(x * nx, y_ * nrho0 * _N_2_0, y_ * ny).fover(den / k0)
383
+ drho = _Fsum1f_(x * nx, y_ * nrho0 * _N_2_0, y_ * ny).fover(den / k0)
392
384
  # dsxia = scxi0 * dsxi
393
- t += drho * n0
385
+ t += drho * n0 # k0 below
394
386
  d_ = (nrho0 + t) * drho * self._scxi0_ # / (qZ * E.a2)
395
- d_2 = (txi * _2_0 - d_) * d_ + _1_0
396
- txi = (txi - d_) / (sqrt(d_2) if d_2 > EPS02 else EPS0)
387
+ t_ = txi - d_
388
+ d_ = (txi + t_) * d_ + _1_0
389
+ txi = t_ / (sqrt(d_) if d_ > EPS02 else EPS0)
397
390
 
398
391
  ta = self._tanf(txi)
399
392
  lat = atan1d(s * ta)
@@ -431,7 +424,7 @@ class _AlbersBase(_NamedBase):
431
424
  e21 = E.e21
432
425
  e22 = E.e22 # == e2 / e21
433
426
  tol = _tol(_TOL0, ta0)
434
- _Ta02 = Fsum(ta0).fsum2_
427
+ _Ta02 = Fsum(ta0).fsum2f_
435
428
  _fabs = fabs
436
429
  _fsum1 = fsum1f_
437
430
  _sqrt = sqrt
@@ -487,11 +480,11 @@ class _AlbersBase(_NamedBase):
487
480
  (ca2, sa2, ta2, scb22))
488
481
 
489
482
  dsxi = ((esa12 / esa1_2) + _DatanheE(sa2, sa1, E)) * dsn_2 / self._qx
490
- C = _Fsum1(sxi * dtb12 / dsxi, scb22, scb12).fover(scb22 * scb12 * _2_0)
483
+ C = _Fsum1f_(sxi * dtb12 / dsxi, scb22, scb12).fover(scb22 * scb12 * _2_0)
491
484
 
492
- sa12 = fsum1f_(sa1, sa2, sa12)
493
- axi *= (sa12 * e2 + _1) / (sa12 + _1)
494
- bxi *= _Fsum1(sa1, sa2, esa12).fover(esa1_2) * e2 + _D2atanheE(sa1, sa2, E) * E.e21
485
+ S = _Fsum1f_(sa1, sa2, sa12)
486
+ axi *= (S * e2 + _1).fover(S + _1, raiser=False)
487
+ bxi *= _Fsum1f_(sa1, sa2, esa12).fover(esa1_2) * e2 + _D2atanheE(sa1, sa2, E) * E.e21
495
488
  s1_qZ = (axi * self._qZ - bxi) * dsn_2 / dtb12
496
489
  ta0 = self._ta0(s1_qZ, (ta1 + ta2) * _0_5, E)
497
490
  return ta0, C
@@ -504,7 +497,7 @@ class _AlbersBase(_NamedBase):
504
497
  qx = self._qx
505
498
 
506
499
  ta = txi
507
- _Ta2 = Fsum(ta).fsum2_
500
+ _Ta2 = Fsum(ta).fsum2f_
508
501
  _fabs = fabs
509
502
  _sqrt3 = sqrt3
510
503
  _txif = self._txif
@@ -571,7 +564,7 @@ class _AlbersBase(_NamedBase):
571
564
  es2m1a = es2m1 * E.e21 # e2m
572
565
  s = sqrt((ca2 / (es1p1 * es2m1a) + _atanheE(ca2 / es1m1, E))
573
566
  * (es1m1 / es2m1a + _atanheE(es1p1, E)))
574
- t = _Fsum1(sa / es2m1, _atanheE(sa, E)).fover(s)
567
+ t = _Fsum1f_(sa / es2m1, _atanheE(sa, E)).fover(s)
575
568
  return neg(t) if ta < 0 else t
576
569
 
577
570
 
@@ -732,7 +725,7 @@ def _atanh1(x):
732
725
  # x < E.e^2 == 2 * E.f use ...
733
726
  # x / 3 + x^2 / 5 + x^3 / 7 + ...
734
727
  y, k = x, 3
735
- _S2 = Fsum(y / k).fsum2_
728
+ _S2 = Fsum(y / k).fsum2f_
736
729
  for _ in range(_TERMS): # 9 terms
737
730
  y *= x # x**n
738
731
  k += 2 # 2*n + 1
@@ -781,15 +774,15 @@ def _D2atanheE(x, y, E):
781
774
  e = z = _1_0
782
775
  k = 1
783
776
  T = Fsum() # Taylor expansion
784
- _T = T.fsum_
785
- _C = Fsum().fsum_
777
+ _T = T.Fsumf_
778
+ _C = Fsum().Fsum_
786
779
  _S2 = Fsum().fsum2_
787
780
  for _ in range(_TERMS): # 15 terms
788
- T *= y; p = _T(z); z *= x # PYCHOK ;
789
- T *= y; t = _T(z); z *= x # PYCHOK ;
781
+ T *= y; P = _T(z); z *= x # PYCHOK ;
782
+ T *= y; Q = _T(z); z *= x # PYCHOK ;
790
783
  e *= e2
791
784
  k += 2
792
- s, d = _S2(_C(p, t) * e / k)
785
+ s, d = _S2(_C(P, Q) * e / k)
793
786
  if not d:
794
787
  break
795
788
  else: # PYCHOK no cover
@@ -27,7 +27,7 @@ from pygeodesy.datums import _ellipsoidal_datum, _WGS84, Ellipsoid
27
27
  from pygeodesy.elliptic import Elliptic as _Ef
28
28
  from pygeodesy.errors import AuxError, _xkwds, _xkwds_get, _Xorder
29
29
  # from pygeodesy.fmath import cbrt # from .karney
30
- from pygeodesy.fsums import Fsum, _sum
30
+ from pygeodesy.fsums import Fsum, _Fsumf_, _sum
31
31
  from pygeodesy.karney import _2cos2x, _polynomial, _ALL_DOCS, cbrt, _MODS
32
32
  from pygeodesy.interns import NN, _DOT_, _UNDER_ # _earth_
33
33
  # from pygeodesy.lazily import _ALL_DOCS, _ALL_MODS as _MODS # from .karney
@@ -44,7 +44,7 @@ except ImportError: # Python 3.11-
44
44
  return pow(_2_0, x)
45
45
 
46
46
  __all__ = ()
47
- __version__ = '23.12.10'
47
+ __version__ = '24.04.14'
48
48
 
49
49
  _TRIPS = 1024 # XXX 2 or 3?
50
50
 
@@ -286,7 +286,7 @@ class AuxLat(AuxAngle):
286
286
  atphi = _asinh_2(tphi) # atanh(sphi)
287
287
  t = _asinh_2(em1 * (tphi * scphib)) / em1
288
288
  try:
289
- Dg = Fsum(atphi, atphib, t, e * t)
289
+ Dg = _Fsumf_(atphi, atphib, t, e * t)
290
290
  except ValueError: # Fsum(NAN) exception
291
291
  Dg = _sum((atphi, atphib, t, e * t))
292
292
  e *= atphib
pygeodesy/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
@@ -27,7 +27,7 @@ __all__ = (_ALL_DEPRECATED.deprecated_bases +
27
27
  _ALL_DEPRECATED.deprecated_classes +
28
28
  _ALL_DEPRECATED.deprecated_consterns +
29
29
  _ALL_DEPRECATED.deprecated_functions)
30
- __version__ = '24.02.08'
30
+ __version__ = '24.04.17'
31
31
 
32
32
  if _unLazy0:
33
33
  from pygeodesy.deprecated import bases, datum, nvector, rhumbBase, \
@@ -22,7 +22,7 @@ from pygeodesy.trf import TRFXform7Tuple as _TRFXform7Tuple
22
22
  from pygeodesy.units import Bearing, Int, Lat, Lon, Meter
23
23
 
24
24
  __all__ = _ALL_DEPRECATED.deprecated_classes
25
- __version__ = '24.02.02'
25
+ __version__ = '24.04.17'
26
26
 
27
27
 
28
28
  class _Deprecated_NamedTuple(_NamedTuple):
@@ -98,6 +98,19 @@ def EcefCartesian(*args, **kwds):
98
98
  return EcefCartesian_(*args, **kwds)
99
99
 
100
100
 
101
+ def Fn_rt(root, *xs, **name_RESIDUAL_raiser): # PYCHOK no cover
102
+ '''DEPRECATED on 2024.04.17, use class L{Froot}.
103
+ '''
104
+ Froot = _MODS.fmath.Froot
105
+
106
+ class Fn_rt(Froot): # PYCHOK no cover
107
+ '''DEPRECATED on 2024.04.17, use class L{Froot}.
108
+ '''
109
+ def __init__(self, root, *xs, **name_RESIDUAL_raiser):
110
+ deprecated_class(self.__class__)
111
+ Froot.__init__(self, root, *xs, **name_RESIDUAL_raiser)
112
+
113
+
101
114
  def HeightIDW(knots, **kwds): # PYCHOK no cover
102
115
  '''DEPRECATED, use class L{HeightIDWeuclidean}.'''
103
116
  HeightIDWeuclidean = _MODS.heights.HeightIDWeuclidean
pygeodesy/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
@@ -70,8 +70,8 @@ from pygeodesy.constants import EPS, EPS0, EPS02, EPS1, INF, NINF, PI4, PI_2, PI
70
70
  _0_0s, _0_0, _0_5, _1_0, _1_EPS, _2_0, _4_0, _90_0, \
71
71
  _0_25, _3_0 # PYCHOK used!
72
72
  from pygeodesy.errors import _AssertionError, IntersectionError, _ValueError, _xattr, _xkwds_not
73
- from pygeodesy.fmath import cbrt, cbrt2, fdot, Fhorner, fpowers, Fsum, hypot, hypot_, \
74
- hypot1, hypot2, sqrt3
73
+ from pygeodesy.fmath import cbrt, cbrt2, fdot, Fhorner, fpowers, hypot, hypot_, \
74
+ hypot1, hypot2, sqrt3, Fsum
75
75
  # from pygeodesy.fsums import Fsum # from .fmath
76
76
  from pygeodesy.interns import NN, _a_, _Airy1830_, _AiryModified_, _b_, _Bessel1841_, _beta_, \
77
77
  _Clarke1866_, _Clarke1880IGN_, _DOT_, _f_, _GRS80_, _height_, \
@@ -93,7 +93,7 @@ from pygeodesy.utily import atan1, atan1d, atan2b, degrees90, m2radians, radians
93
93
  from math import asinh, atan, atanh, cos, degrees, exp, fabs, radians, sin, sinh, sqrt, tan
94
94
 
95
95
  __all__ = _ALL_LAZY.ellipsoids
96
- __version__ = '24.03.22'
96
+ __version__ = '24.04.14'
97
97
 
98
98
  _f_0_0 = Float(f =_0_0) # zero flattening
99
99
  _f__0_0 = Float(f_=_0_0) # zero inverse flattening
@@ -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)