pygeodesy 24.5.24__py2.py3-none-any.whl → 24.6.1__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.
Files changed (57) hide show
  1. {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.1.dist-info}/METADATA +6 -5
  2. {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.1.dist-info}/RECORD +57 -57
  3. pygeodesy/__init__.py +4 -4
  4. pygeodesy/auxilats/__init__.py +1 -1
  5. pygeodesy/auxilats/__main__.py +2 -2
  6. pygeodesy/auxilats/auxAngle.py +4 -4
  7. pygeodesy/basics.py +39 -5
  8. pygeodesy/booleans.py +3 -3
  9. pygeodesy/constants.py +3 -3
  10. pygeodesy/deprecated/functions.py +9 -3
  11. pygeodesy/ecef.py +22 -21
  12. pygeodesy/ellipsoidalBase.py +15 -16
  13. pygeodesy/ellipsoidalGeodSolve.py +2 -2
  14. pygeodesy/ellipsoidalKarney.py +3 -3
  15. pygeodesy/ellipsoids.py +6 -5
  16. pygeodesy/errors.py +19 -9
  17. pygeodesy/etm.py +16 -21
  18. pygeodesy/fmath.py +9 -20
  19. pygeodesy/formy.py +60 -74
  20. pygeodesy/frechet.py +11 -11
  21. pygeodesy/fsums.py +59 -25
  22. pygeodesy/geodesicx/__init__.py +1 -1
  23. pygeodesy/geodesicx/__main__.py +2 -2
  24. pygeodesy/geodesicx/gx.py +3 -5
  25. pygeodesy/geodsolve.py +2 -2
  26. pygeodesy/geohash.py +14 -14
  27. pygeodesy/hausdorff.py +12 -12
  28. pygeodesy/heights.py +5 -5
  29. pygeodesy/internals.py +3 -3
  30. pygeodesy/karney.py +8 -7
  31. pygeodesy/lazily.py +2 -2
  32. pygeodesy/ltp.py +62 -44
  33. pygeodesy/ltpTuples.py +202 -147
  34. pygeodesy/mgrs.py +24 -24
  35. pygeodesy/named.py +68 -70
  36. pygeodesy/nvectorBase.py +2 -2
  37. pygeodesy/osgr.py +40 -48
  38. pygeodesy/points.py +10 -10
  39. pygeodesy/props.py +29 -16
  40. pygeodesy/rhumb/aux_.py +13 -15
  41. pygeodesy/rhumb/bases.py +12 -5
  42. pygeodesy/rhumb/ekx.py +24 -18
  43. pygeodesy/rhumb/solve.py +13 -10
  44. pygeodesy/simplify.py +16 -16
  45. pygeodesy/solveBase.py +14 -14
  46. pygeodesy/sphericalBase.py +17 -21
  47. pygeodesy/sphericalTrigonometry.py +17 -17
  48. pygeodesy/trf.py +9 -7
  49. pygeodesy/triaxials.py +2 -2
  50. pygeodesy/ups.py +66 -70
  51. pygeodesy/utily.py +3 -3
  52. pygeodesy/utm.py +152 -156
  53. pygeodesy/utmups.py +38 -38
  54. pygeodesy/utmupsBase.py +102 -106
  55. pygeodesy/webmercator.py +43 -51
  56. {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.1.dist-info}/WHEEL +0 -0
  57. {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyGeodesy
3
- Version: 24.5.24
3
+ Version: 24.6.1
4
4
  Summary: Pure Python geodesy tools
5
5
  Home-page: https://GitHub.com/mrJean1/PyGeodesy
6
6
  Author: Jean M. Brouwers
@@ -22,6 +22,7 @@ Classifier: Programming Language :: Python :: 3.9
22
22
  Classifier: Programming Language :: Python :: 3.10
23
23
  Classifier: Programming Language :: Python :: 3.11
24
24
  Classifier: Programming Language :: Python :: 3.12
25
+ Classifier: Programming Language :: Python :: 3.13
25
26
  Classifier: Topic :: Software Development
26
27
  Classifier: Topic :: Scientific/Engineering :: GIS
27
28
 
@@ -118,7 +119,7 @@ The tests ran with Python 3.12.3 (with geographiclib_ 2.0), 3.11.5 (with geograp
118
119
  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
120
  GeoConvert_ 2.2, GeodSolve_ 2.2 and RhumbSolve_ 2.2), Python 3.9.6 and Python 2.7.18 (with geographiclib_
120
121
  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.4.1 Sonoma and in 64-bit only.
122
+ 14.5 Sonoma and in 64-bit only.
122
123
 
123
124
  All tests ran with and without ``lazy import`` for Python 3 and with command line option ``-W default``
124
125
  and env variable ``PYGEODESY_WARNINGS=on`` for all Python versions. The results of those tests are
@@ -143,7 +144,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
144
  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
145
  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
146
  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-3.1 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1 Big
147
+ 3.5.3 (and numpy_ 1.11.3) on macOS 14.0-4.1 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1 Big
147
148
  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
149
  10.11 El Capitan and/or MacOS X 10.10 Yosemite, with Pythonista_ 3.2 (with geographiclib 1.50 or 1.49 and
149
150
  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 +155,11 @@ Notes
154
155
  =====
155
156
 
156
157
  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.4.1 Sonoma.
158
+ and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64-bit on macOS 14.5 Sonoma.
158
159
 
159
160
  For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
160
161
 
161
- *Last updated: May 24, 2024.*
162
+ *Last updated: June 01, 2024.*
162
163
 
163
164
  License
164
165
  =======
@@ -1,86 +1,86 @@
1
1
  pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
- pygeodesy/__init__.py,sha256=dxRGIMc_KFg9rWL9IHUZhVmCD3d_3a7DJpfSsyRS0is,41050
2
+ pygeodesy/__init__.py,sha256=OjQWLVL3lst38mHti3vDOiO8W1oKhBMV6a9gnDehDvI,41046
3
3
  pygeodesy/__main__.py,sha256=UmTd6Qw20g_pgnQjdaHePm-xuOEBi1tUNRLO0eL0-rU,4593
4
4
  pygeodesy/albers.py,sha256=2t8EjmoFWmkdTb4DUHMlECkwTPDS1wpNf92WD_UWXds,31081
5
5
  pygeodesy/azimuthal.py,sha256=RQdZbHoLlHSamhnJ4GMrrRU6UrYmTpa1yK59nYB-A4o,50252
6
- pygeodesy/basics.py,sha256=QE3Z3JC-BOAyaj_k6pxqwUpVLzkxJx0Ed1Dcjie8lbg,28241
7
- pygeodesy/booleans.py,sha256=_OMqrm3R8vHHWo3heglKhUCKWdG8HzHmHLGKRNMF0nY,74141
6
+ pygeodesy/basics.py,sha256=Ez1tApjFnk6vNsYXeZzi28hYsa5AhUYobLS1Anna2g0,29381
7
+ pygeodesy/booleans.py,sha256=24uqW-VvA8sJWIC8PfncPIk6EdknrXHZvg7tbk4ChSY,74143
8
8
  pygeodesy/cartesianBase.py,sha256=P3EUMYKad9HxNSQQJTbPu4QehQu5HDxqOo9-xYsTdp4,47366
9
9
  pygeodesy/clipy.py,sha256=3ysIEWQ89HjvLnSlZm0nZAt9EN5AQxIs1sLLM8yF9zM,27675
10
- pygeodesy/constants.py,sha256=-KhClvNhehL7UCnqPgZyEnS3cSyYf7EBDRF0Vgmcgks,19190
10
+ pygeodesy/constants.py,sha256=-weWOuHwE-qI6pYRLcTucI0KNcNJm6vPNzxwrJzACKs,19192
11
11
  pygeodesy/css.py,sha256=RXlLh76tVDFClVh7L1U3FFrLZvjBPFASDf3vq8dHecE,25778
12
12
  pygeodesy/datums.py,sha256=GYbtvPyzDChHYgnNleBqsM-MNwLNQqrO2_MMV4Z9kmI,34006
13
13
  pygeodesy/dms.py,sha256=VujWxk1L2Kp6OMfnu0XPI-j8bnyJ33sFmtB9_MbHqSU,44455
14
- pygeodesy/ecef.py,sha256=U_vxQKD1HXB-O10Q_9tZ4EiD9SdFYuG__5lqvrhE_0M,59795
14
+ pygeodesy/ecef.py,sha256=2wAvnAtDMLw0nNmAnzl_ebm8ISO5JLcy3dPojwDLWk8,59926
15
15
  pygeodesy/elevations.py,sha256=1qZM2w0rDF7jHunydpTEmdLwOwF81KUL9L6RALJC7K4,10807
16
- pygeodesy/ellipsoidalBase.py,sha256=VTzRrHlfZ-VXAEUczQjDNMDbTN9kVYBgCMuOos021Dk,56710
16
+ pygeodesy/ellipsoidalBase.py,sha256=HgZCXrNEji896GuXGfM34w6wdUug4UwEqWCjk4XgnfM,56687
17
17
  pygeodesy/ellipsoidalBaseDI.py,sha256=lPUPP5lVsCzI5RIukxmJ5MH6j2Mb7mdvftQ0tsvsW6g,38585
18
18
  pygeodesy/ellipsoidalExact.py,sha256=a_2C6S6hGRumavy5giRoC9QAhnjqpujiXyu92od6nKo,16951
19
- pygeodesy/ellipsoidalGeodSolve.py,sha256=xfNcb70AuPbIiJUqhisIfg6pCQBqXyQffBNuESEGCfU,16833
20
- pygeodesy/ellipsoidalKarney.py,sha256=FoOsfNf96oHuGa9k4AB42y_UUBuOkh4xMW7PFGF63SA,19246
19
+ pygeodesy/ellipsoidalGeodSolve.py,sha256=nzT6KOubBOxXRHYafOo5ByQ90VOY1zvaS7byhnwaFqE,16830
20
+ pygeodesy/ellipsoidalKarney.py,sha256=m07XlZKWvBnOzIKV6P7RNttk8G5s2JRBH2RVF_lg0_k,19243
21
21
  pygeodesy/ellipsoidalNvector.py,sha256=JuxCUqUtot4e8587Q84Npc1_SdahywTYsybRSMTRtSc,30265
22
22
  pygeodesy/ellipsoidalVincenty.py,sha256=Uk93B8GFcMnWiwKUOA84TlLwbBlvzVnsAXAx0cU7cn4,26004
23
- pygeodesy/ellipsoids.py,sha256=I-vlTW3hqNK-Joqo8q3f1KxY-Y3yD4mVxo7TBWSGxYw,120212
23
+ pygeodesy/ellipsoids.py,sha256=_fbQy9k_k40Li6jAOlHcSlEPPUnliZsqjIR2be3h2QI,120238
24
24
  pygeodesy/elliptic.py,sha256=-80MbZvRPk-TeA_ggkfXhjuPv07MzsB4HxNF7gbdhB4,42501
25
25
  pygeodesy/epsg.py,sha256=oWHX_QVChE5roktAyXUmPmX49XHiryYmXTHxQzrAprE,8222
26
- pygeodesy/errors.py,sha256=A8eOE3ddsH9kFP6O60cA5ZuQMjBWpmbRDdWKM2Onvng,28187
27
- pygeodesy/etm.py,sha256=w0_8tF6p54K2dBAhsOW9YZTTWHJY7BnFnqh34PKm8PU,45075
28
- pygeodesy/fmath.py,sha256=71kngkiWgwFoLbJ6JKb2dJ0ZBmTFd_mdsGZkU_m-8Ts,34103
29
- pygeodesy/formy.py,sha256=CmQlz2I1KNXeIU73T9zzHNvTnenMFvfnZVCJCxhSwZg,75693
30
- pygeodesy/frechet.py,sha256=MwOC2VvOL4lNcvpF-kUaN5FYNp6xudYP5dyBtSwKz3Y,34338
26
+ pygeodesy/errors.py,sha256=iKiloJ1wvI7v_DZi-yE9f7zWuBlZrw9brCyb9UVIejs,28441
27
+ pygeodesy/etm.py,sha256=DeX0mZQcHK0KbmOZodp2iv2TEFtRjYziSL9oUEV2YxU,44952
28
+ pygeodesy/fmath.py,sha256=EOHD0uZ8VULZtXAk8tVeuPaSTozPDCN8GJcemCo-jqg,33709
29
+ pygeodesy/formy.py,sha256=JKFqC7OlxBvB9sOH9OaWJX4bLkf0dMqW3LcVrwdnt7A,75121
30
+ pygeodesy/frechet.py,sha256=YAEWRJbX2rYjB94tvBlBUWK2g1eOHgk1t1dtoi9wtAY,34363
31
31
  pygeodesy/fstats.py,sha256=4eIhzSCMnn-2nVP3Q-5cCWCI-rvH0CE-zkk9hp3Pvn8,28642
32
- pygeodesy/fsums.py,sha256=VdvK7Z01MNRcknf8hWujvD08WMCgJ98OdUCCbT9Xfqk,79434
32
+ pygeodesy/fsums.py,sha256=uPsR2HGSq6KT9Tvmai7KYl99ei9UkeA0TDAnXd7VIYo,80451
33
33
  pygeodesy/gars.py,sha256=gVnLQIEofyf_dA8dhpLrmhtIxGhBHZVRw8PbWgYUnnY,11400
34
34
  pygeodesy/geodesicw.py,sha256=PwUO5jCGExhMt6cKkQwVnPTHMMVadkTrd6pV4UWZYNY,27064
35
- pygeodesy/geodsolve.py,sha256=gRwdmjYe2oslt2z2vBnMlh_FURqGm9ai7t4XPrnjCxQ,22019
36
- pygeodesy/geohash.py,sha256=plBNMHbiQa9E8RPq7rgFYoJAl14mhkgnDucGoXD5YHg,32373
35
+ pygeodesy/geodsolve.py,sha256=_LDW6PSO_z2v77MUuKsYsRbutI2c5ldPZfR_b9GthFw,22021
36
+ pygeodesy/geohash.py,sha256=Z-r58-9nm8M17O7q5qTddS1N3B4eFn6ZgNl9t4dcJY8,32399
37
37
  pygeodesy/geoids.py,sha256=25HrOgsCvFnXTjh3ghc1Y1FQKjerPpo_OLlQBNayK_0,80887
38
- pygeodesy/hausdorff.py,sha256=3mC7QbRZawpqFaguTieHMCaDzVt22PNhJ0s9ZPgQA1k,34712
39
- pygeodesy/heights.py,sha256=ZqRy20ZUVatumPWWS-j7Vvq3BA7HaRWMOd6BvbMhHm8,43575
40
- pygeodesy/internals.py,sha256=iTOhd3Lb96JuaeR9BFDv0ixGRktn7O_HpHrp5W_1LTY,19344
38
+ pygeodesy/hausdorff.py,sha256=fSGq6mHPpY8_uC_dZz4lLc7gZmViHU6TzFjZ03YpMzA,34737
39
+ pygeodesy/heights.py,sha256=n5BnaF5smUBOOGk8-veAv9jOGycjTwhl5gJWkGRwejg,43575
40
+ pygeodesy/internals.py,sha256=INfBdSTWaHJf5xcSaddJEtqE8TJLcUIe8tHeORMRK64,19346
41
41
  pygeodesy/interns.py,sha256=QoDo_S1qY8IJVqI0pH2jGESLEexEF480PuwWZnTVrRI,23600
42
42
  pygeodesy/iters.py,sha256=ML14NjtDpfPRtDJQsUYUtJZ81HH4NPFrCjecxwkcIuM,20309
43
- pygeodesy/karney.py,sha256=7d0VroQiobcTS5ccaWg99rGRaMUorqRJTaCBaSscKI4,35084
43
+ pygeodesy/karney.py,sha256=iGoi32hDPdaMR39i6pypcbY2hqvHFVPFROYcjjA-Jrw,35121
44
44
  pygeodesy/ktm.py,sha256=itQElJegrfhpAuMujAWFTcyuMSeKIgSyw5qkkHFs7vE,27519
45
45
  pygeodesy/latlonBase.py,sha256=DglIfu916vtMV8-wEUs4GrXmk698-j3dkSud8FOBB6o,77762
46
- pygeodesy/lazily.py,sha256=FjvgzWyXiM9gJNzTCVWi_RxonR0OrBJOQiFFl0n1Cx4,45478
46
+ pygeodesy/lazily.py,sha256=Oc5J9yuktR9ZBk-Dwn3r2oA0zt1-8oAx2PUmpZ-qOPg,45498
47
47
  pygeodesy/lcc.py,sha256=6vGht5JCN_BYYzbU2YCK6jz3PFcVymvY-RK2Uflt7ZE,25745
48
- pygeodesy/ltp.py,sha256=QcDoeOXBQLto2vXTWhKUFKre7bfGN4lZLcgLsZLKwMY,49258
49
- pygeodesy/ltpTuples.py,sha256=bZjcmj4Ug42d2gjofhfzr2Min_A8M62vZOOSINY1K9s,55771
50
- pygeodesy/mgrs.py,sha256=zddMOnUIs8VSk0c3muTaljTl7OViCgX6JB28gWPdmVM,29029
51
- pygeodesy/named.py,sha256=SOlbmB6Ned9TacOSTwchi8hcOmvCNAy6A2M_DMhDusM,51204
48
+ pygeodesy/ltp.py,sha256=ciPmdUv8Z5z-wr8kmU7AKxO8d2nYx3mmjnnaWJVN74w,50135
49
+ pygeodesy/ltpTuples.py,sha256=secLaYIdGYXg1wcOivzjY9tpPsHzu4ckphjkygeZrL8,58424
50
+ pygeodesy/mgrs.py,sha256=2uuWL56hWpip6lJa071WXe5_hILlo5RaNW3sfCV25NQ,29059
51
+ pygeodesy/named.py,sha256=C75ZNJZ2B0EF3EmAGbuUhziPgdGHACRalVycLR0Nt5s,51195
52
52
  pygeodesy/namedTuples.py,sha256=N8fyc6OMdXNHgOk_tK2zhuWwBq6oB-QcAY-PG9xIgWk,27535
53
- pygeodesy/nvectorBase.py,sha256=Z6tA3XthUu990UOUv0o8l5gjnmE7e2Cqkob69spoXYE,28831
54
- pygeodesy/osgr.py,sha256=s_-21bYhXUv37thzgIQjGmMmMdT46RlecOixHRufW4o,31044
55
- pygeodesy/points.py,sha256=9VfKDo9rt935WW61k4PpXSKzSx02demxhLVpf9DRcNk,64412
56
- pygeodesy/props.py,sha256=o6x5XDCtq3nW17dZtQnNsqlc6FVpf2xjy6JKbdZsbBw,21493
53
+ pygeodesy/nvectorBase.py,sha256=ZSIzieN2gN3ZWbJJ0TM_5Jqv5tXqpGHlwnD90kjgtY4,28830
54
+ pygeodesy/osgr.py,sha256=g-uCTy735aUNh5odTp27PY8CLDnTaquc1_oTs8Qv6zg,30827
55
+ pygeodesy/points.py,sha256=izCcYGX09v7Lv7_pDIP4mJMfEXbgFzHdw0LIsW5R3qE,64412
56
+ pygeodesy/props.py,sha256=8dGmTpdEABnLbBngmaOIpM0h4NYiBteMOHc_r4iNpAg,21988
57
57
  pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
58
- pygeodesy/simplify.py,sha256=FT3AzXiFjFfvwJ-X2q8iA9cQOUVdBT1vD_BIskM3gK8,25223
59
- pygeodesy/solveBase.py,sha256=W7qF_dW24Dd9aS2wh0nD9Lj8BgOSImsACxR1-iNRuyQ,16709
60
- pygeodesy/sphericalBase.py,sha256=sH2WwmY_RL0STyr1OhtCDKvGhO0Ks7o3V-MHLddpiHQ,31944
58
+ pygeodesy/simplify.py,sha256=NybC-pfze0ObEm4ZCz6ZQrjJlQ-QyA83E6mSJqCuKq4,25223
59
+ pygeodesy/solveBase.py,sha256=wKOrVyULKf4SFBMcgWw03sCVhPnHZ9fSlJwGEMF85_w,16759
60
+ pygeodesy/sphericalBase.py,sha256=CuLD4lVKPGnYg71UFHJz_BbJj3FNxxyzFZCnadfuUy0,31873
61
61
  pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
62
- pygeodesy/sphericalTrigonometry.py,sha256=p9sDwyHH441pdPktUE6zrRtGQpwNO8F4ey07QtUW7z0,64209
62
+ pygeodesy/sphericalTrigonometry.py,sha256=SqkFi2_Cy1LOzlZvvO4tpwxkS-AEBhdfRTgopXFTISw,64208
63
63
  pygeodesy/streprs.py,sha256=AZzil7Encfb1E7NG7tNHHivuayKQ-LZJJTMVumUhsEQ,23993
64
- pygeodesy/trf.py,sha256=r5d_fFHQiPH8HPnBdzLhCju2rKNRCEDZ8UwIBWujR2E,118904
65
- pygeodesy/triaxials.py,sha256=5WKymGpixPjsgol4ifSl5pH-f7bTfZsMrmcYFuZBtwY,62040
64
+ pygeodesy/trf.py,sha256=AP-4s-hGWnrjhYfEfF0SnIVE6vVNwU6s0hNjm6G0GsU,119019
65
+ pygeodesy/triaxials.py,sha256=wK_KGdl3OdYKzbqYD6v1mbjjLE7ICpAfF7eQf1A3kF0,62039
66
66
  pygeodesy/units.py,sha256=DIllydnoz4rfw3ST91D_6-K_QGFiCqNcYvf6B_mUJMs,38827
67
67
  pygeodesy/unitsBase.py,sha256=FA4DuXUb88YYsDS3aIkd7BGvj70JATMeuBV_efshUx0,13544
68
- pygeodesy/ups.py,sha256=Rw4cO7Q20w-y7DKEHiuX7BkansDZnm8uvQRApFJ-USo,23287
69
- pygeodesy/utily.py,sha256=AOEHXi7H5QsTmgxcp0qOGC2qvIdqS01Mfu0Y8m3Bp6w,36141
70
- pygeodesy/utm.py,sha256=p1MH5qm5Fi9nWEfY7ww-y1O4FcuQuuR08mNlHp7MLKk,31135
71
- pygeodesy/utmups.py,sha256=u2hlWSnmZKwR-ApgKw16R9p75sW_yaqQAmbcBUE8Zfg,13007
72
- pygeodesy/utmupsBase.py,sha256=x9LHKi44aYB473ukVvxt1rRJ68MOAQGWiiOhzRskiio,18974
68
+ pygeodesy/ups.py,sha256=p9F49qQ9tGGf18fnFWJ5DdqQA-FdNe_BcuIGAi5tIoE,23419
69
+ pygeodesy/utily.py,sha256=qT7J7kv4CO0vSz705cXIHr4d6muT6xi5ZhR3cjvYXfo,36143
70
+ pygeodesy/utm.py,sha256=ZxBvDcCkdnmTRzMOHyhADHdZJSUo0U0xBAsg0rEeTHk,31148
71
+ pygeodesy/utmups.py,sha256=_GCrF3TljW4k5W9uKwilO1ivPLAbOArxlzi7jPJ4rbc,13226
72
+ pygeodesy/utmupsBase.py,sha256=dO7jX0MunLZykTkvN47HuNhHTZNN1OOhNOdC-qxoAk0,18762
73
73
  pygeodesy/vector2d.py,sha256=zJq5PB777_mFJpKD-rt_T0Vm4SNbVwF7pc3KxX8uCT8,34994
74
74
  pygeodesy/vector3d.py,sha256=danoz3QA90EJjqr2dmLPCYP5UG0m_pgiyNuNBW0aNJ8,45065
75
75
  pygeodesy/vector3dBase.py,sha256=GhEq2oFfLoF57cDy6lvsB0b-dgTneMcrtDSyIiGr4mY,35630
76
- pygeodesy/webmercator.py,sha256=1IXiAHBXTm5kMCp5gEI67oBJeRXD7BiPVI7bcRRX1U4,14918
76
+ pygeodesy/webmercator.py,sha256=J89VAROczHNpD34AuIWD3vxfogk3ZKoYj1w0lXOCkYA,14968
77
77
  pygeodesy/wgrs.py,sha256=AKUrYRCC67lOeJ6vUDAiGb_mY6R3ZwflXpOaP3wauOg,14774
78
78
  pygeodesy/auxilats/_CX_4.py,sha256=U41njj8Pu8cHMGuoUUVA20QIvRJAq-VGCnyoKJl0Ylo,8662
79
79
  pygeodesy/auxilats/_CX_6.py,sha256=x4hrHxunjqqkEsZbVW1dyn3R5mR8EWYOuX77RzDEyh4,14856
80
80
  pygeodesy/auxilats/_CX_8.py,sha256=t-OO48t4cCOsOgMi1FoyPw2DQqybVZFsgQMqAYP-jKY,25304
81
- pygeodesy/auxilats/__init__.py,sha256=xLIJ2uAhO-p_NDywrEi0tJxJ7r7jw3yG5B2CfSjNKJw,2881
82
- pygeodesy/auxilats/__main__.py,sha256=BsNxHMo-VqXL0-kFTrpMUz5SFUO_K4udQLemXgvTxLE,2896
83
- pygeodesy/auxilats/auxAngle.py,sha256=ybW0FMGaf69V5FYgVoqZENU-5b43FsmCPSYXcOu2fT8,16740
81
+ pygeodesy/auxilats/__init__.py,sha256=tj9fglSENe7whplLC9YCl--EQNyMNd1g26BPLT2JNr0,2881
82
+ pygeodesy/auxilats/__main__.py,sha256=Vuj1YSp1LV0zejVzi6EYauka1Dv8kwOHI_aeHxQEVYk,2899
83
+ pygeodesy/auxilats/auxAngle.py,sha256=rljkFpqLhCMZVMo9u0xNBmGZV0KxsmIbI41d5itcZ3E,16740
84
84
  pygeodesy/auxilats/auxDLat.py,sha256=U3BHF6AkW5--nrwH9whL5wZVIZLH_keRLfUz6c6KBx4,10950
85
85
  pygeodesy/auxilats/auxDST.py,sha256=bdNEh3TdABWH7qW6ngZx5SnzDM3B5rtPLvYhvCnFsKc,10497
86
86
  pygeodesy/auxilats/auxLat.py,sha256=GUpK5_rcL8IHjC209dhIibYYBJudFU0Yk7JD-KUApbc,32529
@@ -90,7 +90,7 @@ pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8
90
90
  pygeodesy/deprecated/classes.py,sha256=PXgss-2kEu3bzaxvSeVZJGdcRqsdi_6_aRqsESyUQKQ,11662
91
91
  pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
92
92
  pygeodesy/deprecated/datum.py,sha256=KfuMA64LYGMj1voW2uai2RGcugtWdpvlOL6UHJvpTeQ,1875
93
- pygeodesy/deprecated/functions.py,sha256=-Ckor43KBiCDa7rbwY5kHvrs5xwuixTlw1TZpNSBgrU,13647
93
+ pygeodesy/deprecated/functions.py,sha256=nwYgLqw9Wy6ieDxQGZJ-dIeBaF4IvmNBFx9AcHwiBlE,13907
94
94
  pygeodesy/deprecated/nvector.py,sha256=_dZf84RdmPr7e7i8Yi683R-8Mqn0ipTqIsDhNl29hGo,2117
95
95
  pygeodesy/deprecated/rhumbBase.py,sha256=d7YKW--dnRpobB2CSvhFsntWF0B5-HYJqID2pv5lD5k,1375
96
96
  pygeodesy/deprecated/rhumbaux.py,sha256=n29xazYMbVG4MJkLjAGu8B88bbcFF5xnvuj9xSxjfIk,1428
@@ -99,18 +99,18 @@ pygeodesy/deprecated/rhumbx.py,sha256=OS0p_meaoVrpZe5UhK6qZljjlrGpL0pCHWw8gofw7k
99
99
  pygeodesy/geodesicx/_C4_24.py,sha256=kS4XMR9m7iBs01V8K0Oz9qTYmjN-icIQGpc_8iwVhig,90750
100
100
  pygeodesy/geodesicx/_C4_27.py,sha256=bPbj2Ckrn9WJglm3SNTXyMkULNwANM0tCQ-LKxP1L58,134258
101
101
  pygeodesy/geodesicx/_C4_30.py,sha256=QZO8p971ztJwDGLOaJYgIhklztz9GlqbtS-xRP_E7o4,201964
102
- pygeodesy/geodesicx/__init__.py,sha256=b5pOZbSBjN9WVP7fOMSBzTIbx1H0omHMXzOgf6rAgvs,2446
103
- pygeodesy/geodesicx/__main__.py,sha256=FVlmJft__Utk30zYwCbvrJpmAFi_jmyigzbm4An3Wws,3167
104
- pygeodesy/geodesicx/gx.py,sha256=reyK3UrooZmXTrwPcU36kO0R_ffZ5cMjPZoQ1qWHaO0,61729
102
+ pygeodesy/geodesicx/__init__.py,sha256=0_wTYAkvfJ2xVTzw5Zo9qQlSQIT7Q_PUwC_IqFQkrWA,2446
103
+ pygeodesy/geodesicx/__main__.py,sha256=JnKrYmg1q9J5wRRqUy-dQ9abj2-2jpWtrolMMaFfWiY,3176
104
+ pygeodesy/geodesicx/gx.py,sha256=Luu-bmgX9WAJ7sVNkeLRuWUUj-ndp4FGafe71xC3H2k,61650
105
105
  pygeodesy/geodesicx/gxarea.py,sha256=-Kwe6spe2MSQbeLFDd6UN2NOi4JOjYhHAEzonOU3u4A,19409
106
106
  pygeodesy/geodesicx/gxbases.py,sha256=nSQpDPuRQFkkzvjOaalBTHOQCYT1fhSOb5uy-5NvvSA,5215
107
107
  pygeodesy/geodesicx/gxline.py,sha256=GP7BXfpsePLZy0SLLiIO6ytWKFpBLuPsOaL2Z_-45iU,27373
108
108
  pygeodesy/rhumb/__init__.py,sha256=70qKVuNKkddfqMSxZ9c0VCZM1w0_Ka_nBWwtpfxxh2o,2207
109
- pygeodesy/rhumb/aux_.py,sha256=W4HkgoHAQz_aWaysfsmOA5010nCGvBfUs2Q-bymnHYU,16660
110
- pygeodesy/rhumb/bases.py,sha256=ZK-t5BHf4LyGypSfH-yaIHol0N9uWioMzUYzp0GI03M,53882
111
- pygeodesy/rhumb/ekx.py,sha256=lF3tZ-ZY9fPJV8y1kgHW-7EOZCyb3gJr-kR-jj5Fbf8,23871
112
- pygeodesy/rhumb/solve.py,sha256=nih_QmAjOQNb5PNNXJGWkAZuGrXDTXtlxRKPZj8ZA7c,27795
113
- PyGeodesy-24.5.24.dist-info/METADATA,sha256=b7AJM6eBNwRiyOCN0orAkHqGorz9KpaFu18NxBuTs48,19364
114
- PyGeodesy-24.5.24.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
115
- PyGeodesy-24.5.24.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
116
- PyGeodesy-24.5.24.dist-info/RECORD,,
109
+ pygeodesy/rhumb/aux_.py,sha256=UJEnoam_MLx2dBxgzjn_zU59f9wwDDNotdsV3ccWZFU,16652
110
+ pygeodesy/rhumb/bases.py,sha256=J8fXg42CcAI1VR4Hz-MctOwUs029PWRTRIo6sSZYo8I,54089
111
+ pygeodesy/rhumb/ekx.py,sha256=GZLJOqAEy_120q27rdt7kyEvkuoBPk6LOhOzjPOTOr8,24084
112
+ pygeodesy/rhumb/solve.py,sha256=a0ynvD3MI-i3-8gSYcUojyYfkc_e7BqOxAOX-b2KFNQ,27982
113
+ PyGeodesy-24.6.1.dist-info/METADATA,sha256=SUy_uel3BJloCDLkVOyxIc83clB0Zhao6vQtageyyKg,19411
114
+ PyGeodesy-24.6.1.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
115
+ PyGeodesy-24.6.1.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
116
+ PyGeodesy-24.6.1.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.4.1 Sonoma and
136
+ <https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2), all on macOS 14.5 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-2, 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-3.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-4.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.4.1 Sonoma.
182
+ using Python 3.11.5, both in 64-bit on macOS 14.5 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>}.
@@ -589,7 +589,7 @@ else:
589
589
 
590
590
  from pygeodesy.internals import _version2, _DOT_ # PYCHOK import
591
591
  # from pygeodesy.interns import _DOT_ # from .internals
592
- __version__ = '24.05.24'
592
+ __version__ = '24.06.01'
593
593
  # see setup.py for similar logic
594
594
  version = _DOT_(*_version2(__version__, n=3))
595
595
 
@@ -29,7 +29,7 @@ from pygeodesy.lazily import _ALL_OTHER
29
29
  # no modules: auxAngle, auxDLat, auxDST, auxily, auxLat
30
30
  __all__ = _ALL_OTHER(Aux, AuxAngle, AuxDLat, AuxDST, AuxLat,
31
31
  AuxBeta, AuxChi, AuxMu, AuxPhi, AuxTheta, AuxXi)
32
- __version__ = '24.05.24'
32
+ __version__ = '24.05.31'
33
33
 
34
34
  # **) MIT License
35
35
  #
@@ -5,7 +5,7 @@ u'''Print L{auxilats} version, etc. using C{python -m pygeodesy.auxilats}.
5
5
  '''
6
6
 
7
7
  __all__ = ()
8
- __version__ = '24.05.15'
8
+ __version__ = '24.05.31'
9
9
 
10
10
 
11
11
  def _CXstats(): # PYCHOK no cover
@@ -80,4 +80,4 @@ _main()
80
80
  # OTHER DEALINGS IN THE SOFTWARE.
81
81
 
82
82
  # % python3 -m pygeodesy.geodesicx
83
- # pygeodesy.geodesicx.version=21.05.30, .C4Order=None, .C4len=5425, .C4set=5107, .C4set100=94, .C4x=465 (Python 3.9.5, 64bit, geographiclib 1.52)
83
+ # pygeodesy.auxilats.version=24.05.31, .ALorder=6, .CXlen=522, .CXset=418, .CXset_len=80.1%, .CXx=6 (Python 3.12.3, 64bit, arm64, geographiclib 2.0)
@@ -31,7 +31,7 @@ from pygeodesy.utily import atan2d, sincos2, sincos2d
31
31
  from math import asinh, atan2, copysign, degrees, fabs, radians, sinh
32
32
 
33
33
  __all__ = ()
34
- __version__ = '24.05.24'
34
+ __version__ = '24.05.25'
35
35
 
36
36
  _0_INF_NAN_NINF = (0, _0_0) + _INF_NAN_NINF
37
37
  _MAX_2 = MAX * _0_5 # PYCHOK used!
@@ -48,18 +48,18 @@ class AuxAngle(_Named):
48
48
  _y = _0_0
49
49
  _x = _1_0
50
50
 
51
- def __init__(self, y_angle=_0_0, x=_1_0, **aux_name):
51
+ def __init__(self, y_angle=_0_0, x=_1_0, **name_aux):
52
52
  '''New L{AuxAngle}.
53
53
 
54
54
  @kwarg y_angle: The Y component (C{scalar}, including C{INF}, C{NAN}
55
55
  and C{NINF}) or a previous L{AuxAngle} instance.
56
56
  @kwarg x: The X component, ignored if C{B{y_angle}} is non-C{scalar}.
57
- @kwarg aux_name: Optional C{B{name}=NN} (C{str}) and I{Auxiliary} kind
57
+ @kwarg name_aux: Optional C{B{name}=NN} (C{str}) and I{Auxiliary} kind
58
58
  (C{B{aux}=Aux.KIND}), ignored if B{C{y_angle}} is L{AuxAngle}.
59
59
 
60
60
  @raise AuxError: Invalid B{C{y_angle}}, B{C{x}} or B{C{aux}}.
61
61
  '''
62
- name, aux = _name2__(**aux_name)
62
+ name, aux = _name2__(**name_aux)
63
63
  try:
64
64
  yx = y_angle._yx
65
65
  if self._AUX is None:
pygeodesy/basics.py CHANGED
@@ -18,7 +18,7 @@ del division
18
18
  # from pygeodesy.constants import isneg0, NEG0 # _MODS
19
19
  from pygeodesy.errors import _AttributeError, _ImportError, _NotImplementedError, \
20
20
  _TypeError, _TypesError, _ValueError, _xAssertionError, \
21
- _xkwds_get
21
+ _xkwds_get1
22
22
  from pygeodesy.internals import _0_0, _enquote, _passarg, _version_info
23
23
  from pygeodesy.interns import MISSING, NN, _1_, _by_, _COMMA_, _DOT_, _DEPRECATED_, \
24
24
  _ELLIPSIS4_, _EQUAL_, _in_, _invalid_, _N_A_, _not_, \
@@ -36,7 +36,7 @@ from math import copysign as _copysign
36
36
  import inspect as _inspect
37
37
 
38
38
  __all__ = _ALL_LAZY.basics
39
- __version__ = '24.05.21'
39
+ __version__ = '24.05.29'
40
40
 
41
41
  _below_ = 'below'
42
42
  _list_tuple_types = (list, tuple)
@@ -111,10 +111,37 @@ except NameError: # Python 3+
111
111
  return ub
112
112
 
113
113
 
114
- def _args_kwds_names(func):
114
+ def _args_kwds_count2(func, exelf=True):
115
+ '''(INTERNAL) Get a C{func}'s args and kwds count as 2-tuple
116
+ C{(nargs, nkwds)}, including arg C{self} for methods.
117
+
118
+ @kwarg exelf: If C{True}, exclude C{self} in the C{args}
119
+ of a method (C{bool}).
120
+ '''
121
+ try:
122
+ a = k = 0
123
+ for _, p in _inspect.signature(func).parameters.items():
124
+ if p.kind is p.POSITIONAL_OR_KEYWORD:
125
+ if p.default is p.empty:
126
+ a += 1
127
+ else:
128
+ k += 1
129
+ except AttributeError: # .signature new Python 3+
130
+ s = _inspect.getargspec(func)
131
+ k = len(s.defaults or ())
132
+ a = len(s.args) - k
133
+ if exelf and a > 0 and _inspect.ismethod(func):
134
+ a -= 1
135
+ return a, k
136
+
137
+
138
+ def _args_kwds_names(func, splast=False):
115
139
  '''(INTERNAL) Get a C{func}'s args and kwds names, including
116
140
  C{self} for methods.
117
141
 
142
+ @kwarg splast: If C{True}, split the last keyword argument
143
+ at UNDERscores (C{bool}).
144
+
118
145
  @note: Python 2 may I{not} include the C{*args} nor the
119
146
  C{**kwds} names.
120
147
  '''
@@ -122,6 +149,13 @@ def _args_kwds_names(func):
122
149
  args_kwds = _inspect.signature(func).parameters.keys()
123
150
  except AttributeError: # .signature new Python 3+
124
151
  args_kwds = _inspect.getargspec(func).args
152
+ if splast and args_kwds:
153
+ args_kwds = list(args_kwds)
154
+ t = args_kwds[-1:]
155
+ if t:
156
+ s = t[0].strip(_UNDER_).split(_UNDER_)
157
+ if len(s) > 1 or s != t:
158
+ args_kwds += s
125
159
  return tuple(args_kwds)
126
160
 
127
161
 
@@ -654,7 +688,7 @@ def splice(iterable, n=2, **fill):
654
688
 
655
689
  if n > 1:
656
690
  if fill:
657
- fill = _xkwds_get(fill, fill=MISSING)
691
+ fill = _xkwds_get1(fill, fill=MISSING)
658
692
  if fill is not MISSING:
659
693
  m = len(t) % n
660
694
  if m > 0: # same type fill
@@ -860,7 +894,7 @@ def _xversion(package, where, *required, **name):
860
894
  def _xzip(*args, **strict): # PYCHOK no cover
861
895
  '''(INTERNAL) Standard C{zip(..., strict=True)}.
862
896
  '''
863
- s = _xkwds_get(strict, strict=True)
897
+ s = _xkwds_get1(strict, strict=True)
864
898
  if s:
865
899
  if _zip is zip: # < (3, 10)
866
900
  t = _MODS.streprs.unstr(_xzip, *args, strict=s)
pygeodesy/booleans.py CHANGED
@@ -43,7 +43,7 @@ from pygeodesy.utily import fabs, _unrollon, _Wrap
43
43
  # from math import fabs # from .utily
44
44
 
45
45
  __all__ = _ALL_LAZY.booleans
46
- __version__ = '24.05.24'
46
+ __version__ = '24.05.29'
47
47
 
48
48
  _0_EPS = EPS # near-zero, positive
49
49
  _EPS_0 = -EPS # near-zero, negative
@@ -1009,9 +1009,9 @@ class _CompositeBase(_Named):
1009
1009
  '''
1010
1010
  self._eps = eps
1011
1011
 
1012
- def _10eps(self, **eps):
1012
+ def _10eps(self, **eps_):
1013
1013
  # Get eps for _LatLonBool._2Abs
1014
- e = _xkwds_get(eps, eps=self._eps)
1014
+ e = _xkwds_get(eps_, eps=self._eps)
1015
1015
  if e != EPS:
1016
1016
  e *= _10EPS / EPS
1017
1017
  else:
pygeodesy/constants.py CHANGED
@@ -10,7 +10,7 @@ L{pygeodesy.isnon0} and L{pygeodesy.remainder}.
10
10
  from __future__ import division as _; del _ # PYCHOK semicolon
11
11
 
12
12
  from pygeodesy.basics import _copysign, isbool, iscomplex, isint, _0_0
13
- from pygeodesy.errors import _xError, _xError2, _xkwds_get, _xkwds_item2
13
+ from pygeodesy.errors import _xError, _xError2, _xkwds_get1, _xkwds_item2
14
14
  # from pygeodesy.internals import _0_0 # from .basics
15
15
  from pygeodesy.interns import _INF_, _NAN_, _UNDER_
16
16
  # from pygeodesy.lazily import _ALL_LAZY # from .unitsBase
@@ -24,7 +24,7 @@ except ImportError: # Python 2-
24
24
  _inf, _nan = float(_INF_), float(_NAN_)
25
25
 
26
26
  __all__ = _ALL_LAZY.constants
27
- __version__ = '24.05.14'
27
+ __version__ = '24.05.29'
28
28
 
29
29
 
30
30
  def _copysign_0_0(y):
@@ -73,7 +73,7 @@ def float_(*fs, **sets): # sets=False
73
73
  '''
74
74
  fl = []
75
75
  _a = fl.append
76
- _f = _floats.setdefault if _xkwds_get(sets, sets=False) else \
76
+ _f = _floats.setdefault if _xkwds_get1(sets, sets=False) else \
77
77
  _floats.get
78
78
  try:
79
79
  for i, f in enumerate(fs):
@@ -14,7 +14,7 @@ from pygeodesy.props import deprecated_function
14
14
  from pygeodesy.units import Number_, Scalar_
15
15
 
16
16
  __all__ = _ALL_DEPRECATED.deprecated_functions
17
- __version__ = '24.02.08'
17
+ __version__ = '24.05.25'
18
18
 
19
19
  _WGS84 = _UTM = object()
20
20
 
@@ -109,13 +109,19 @@ def enStr2(easting, northing, prec, *extras): # PYCHOK no cover
109
109
  return _MODS.streprs.enstr2(easting, northing, (int(prec) // 2 - 5), *extras)
110
110
 
111
111
 
112
+ @deprecated_function
113
+ def equirectangular_(lat1, lon1, lat2, lon2, **options): # PYCHOK no cover
114
+ '''DEPRECATED on 2024.05.25, use function L{pygeodesy.equirectangular4}.'''
115
+ return _MODS.formy.equirectangular4(lat1, lon1, lat2, lon2, **options)
116
+
117
+
112
118
  @deprecated_function
113
119
  def equirectangular3(lat1, lon1, lat2, lon2, **options): # PYCHOK no cover
114
- '''DEPRECATED, use function L{pygeodesy.equirectangular_}.
120
+ '''DEPRECATED, use function L{pygeodesy.equirectangular4}.
115
121
 
116
122
  @return: 3-Tuple C{(distance2, delta_lat, delta_lon)}.
117
123
  '''
118
- return tuple(_MODS.formy.equirectangular_(lat1, lon1, lat2, lon2, **options)[:3])
124
+ return tuple(_MODS.formy.equirectangular4(lat1, lon1, lat2, lon2, **options)[:3])
119
125
 
120
126
 
121
127
  @deprecated_function
pygeodesy/ecef.py CHANGED
@@ -58,7 +58,7 @@ plane} as opposed to I{geocentric} (ECEF) ones.
58
58
  '''
59
59
 
60
60
  from pygeodesy.basics import copysign0, isscalar, issubclassof, neg, map1, \
61
- _xinstanceof, _xsubclassof
61
+ _xinstanceof, _xsubclassof # _args_kwds_names
62
62
  from pygeodesy.constants import EPS, EPS0, EPS02, EPS1, EPS2, EPS_2, INT0, PI, PI_2, \
63
63
  _0_0, _0_0001, _0_01, _0_5, _1_0, _1_0_1T, _N_1_0, \
64
64
  _2_0, _N_2_0, _3_0, _4_0, _6_0, _60_0, _90_0, _N_90_0, \
@@ -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 _name__, _NamedBase, _NamedTuple, _Pass, _xnamed
76
+ from pygeodesy.named import _name__, _name1__, _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.05.21'
89
+ __version__ = '24.05.31'
90
90
 
91
91
  _Ecef_ = 'Ecef'
92
92
  _prolate_ = 'prolate'
@@ -209,7 +209,7 @@ class _EcefBase(_NamedBase):
209
209
  m = self._Matrix(sa, ca, sb, cb) if M else None
210
210
  return Ecef9Tuple(x * cb, x * sb, z, lat, lon, h,
211
211
  0, m, self.datum,
212
- name=name or self.name)
212
+ name=self._name__(name))
213
213
 
214
214
  def forward(self, latlonh, lon=None, height=0, M=False, **name):
215
215
  '''Convert from geodetic C{(lat, lon, height)} to geocentric C{(x, y, z)}.
@@ -390,7 +390,7 @@ class EcefFarrell21(_EcefBase):
390
390
 
391
391
  return Ecef9Tuple(x, y, z, lat, lon, h,
392
392
  1, None, self.datum,
393
- name=name or self.name)
393
+ name=self._name__(name))
394
394
 
395
395
 
396
396
  class EcefFarrell22(_EcefBase):
@@ -451,7 +451,7 @@ class EcefFarrell22(_EcefBase):
451
451
 
452
452
  return Ecef9Tuple(x, y, z, lat, lon, h,
453
453
  1, None, self.datum,
454
- name=name or self.name)
454
+ name=self._name__(name))
455
455
 
456
456
 
457
457
  class EcefKarney(_EcefBase):
@@ -606,8 +606,7 @@ class EcefKarney(_EcefBase):
606
606
  lon = self._polon(sb, cb, R, **name_lon00)
607
607
  m = self._Matrix(sa, ca, sb, cb) if M else None
608
608
  return Ecef9Tuple(x, y, z, atan1d(sa, ca), lon, h,
609
- C, m, self.datum,
610
- name=name or self.name)
609
+ C, m, self.datum, name=self._name__(name))
611
610
 
612
611
 
613
612
  class EcefSudano(_EcefBase):
@@ -686,7 +685,7 @@ class EcefSudano(_EcefBase):
686
685
  # h = (fabs(z) + R - E.a * cos(a + E.e21) * sa / ca) / (ca + sa)
687
686
  return Ecef9Tuple(x, y, z, lat, lon, h,
688
687
  i, None, self.datum, # C=i, M=None
689
- iteration=i, name=name or self.name)
688
+ iteration=i, name=self._name__(name))
690
689
 
691
690
  @property_doc_(''' the convergence tolerance (C{float}).''')
692
691
  def tolerance(self):
@@ -782,7 +781,7 @@ class EcefVeness(_EcefBase):
782
781
  lon = self._polon(y, x, p, **name_lon00)
783
782
  return Ecef9Tuple(x, y, z, lat, lon, h,
784
783
  C, None, self.datum, # M=None
785
- name=name or self.name)
784
+ name=self._name__(name))
786
785
 
787
786
 
788
787
  class EcefYou(_EcefBase):
@@ -862,7 +861,7 @@ class EcefYou(_EcefBase):
862
861
  h = neg(h) # inside ellipsoid
863
862
  return Ecef9Tuple(x, y, z, lat, lon, h,
864
863
  1, None, self.datum, # C=1, M=None
865
- name=name or self.name)
864
+ name=self._name__(name))
866
865
 
867
866
 
868
867
  class EcefMatrix(_NamedTuple):
@@ -1160,22 +1159,24 @@ class Ecef9Tuple(_NamedTuple):
1160
1159
  r = self.xyz
1161
1160
  else:
1162
1161
  _xsubclassof(self._CartesianBase, Cartesian=Cartesian)
1163
- r = Cartesian(self, **_xkwds(Cartesian_kwds, name=self.name))
1162
+ r = Cartesian(self, **_name1__(Cartesian_kwds, _or_nameof=self))
1164
1163
  return r
1165
1164
 
1166
- def toDatum(self, datum2):
1165
+ def toDatum(self, datum2, **name):
1167
1166
  '''Convert this C{Ecef9Tuple} to an other datum.
1168
1167
 
1169
1168
  @arg datum2: Datum to convert I{to} (L{Datum}).
1169
+ @kwarg name: Optional C{B{name}=NN} (C{str}).
1170
1170
 
1171
1171
  @return: The converted 9-Tuple (C{Ecef9Tuple}).
1172
1172
 
1173
1173
  @raise TypeError: The B{C{datum2}} is not a L{Datum}.
1174
1174
  '''
1175
+ n = _name__(name, _or_nameof=self)
1175
1176
  if self.datum in (None, datum2): # PYCHOK _Names_
1176
- r = self.copy()
1177
+ r = self.copy(name=n)
1177
1178
  else:
1178
- c = self._CartesianBase(self, datum=self.datum, name=self.name) # PYCHOK _Names_
1179
+ c = self._CartesianBase(self, datum=self.datum, name=n) # PYCHOK _Names_
1179
1180
  # c.toLatLon converts datum, x, y, z, lat, lon, etc.
1180
1181
  # and returns another Ecef9Tuple iff LatLon is None
1181
1182
  r = c.toLatLon(datum=datum2, LatLon=None)
@@ -1197,8 +1198,9 @@ class Ecef9Tuple(_NamedTuple):
1197
1198
  @raise TypeError: Invalid B{C{LatLon}} or B{C{LatLon_kwds}}.
1198
1199
  '''
1199
1200
  lat, lon, D = self.lat, self.lon, self.datum # PYCHOK Ecef9Tuple
1200
- kwds = _xkwds(LatLon_kwds, height=self.height, datum=D, name=self.name) # PYCHOK Ecef9Tuple
1201
- d = kwds.get(_datum_, LatLon)
1201
+ kwds = _name1__(LatLon_kwds, _or_nameof=self)
1202
+ kwds = _xkwds(kwds, height=self.height, datum=D) # PYCHOK Ecef9Tuple
1203
+ d = kwds.get(_datum_, LatLon)
1202
1204
  if LatLon is None:
1203
1205
  r = LatLon3Tuple(lat, lon, kwds[_height_], name=kwds[_name_])
1204
1206
  if d is not None:
@@ -1242,7 +1244,7 @@ class Ecef9Tuple(_NamedTuple):
1242
1244
  @see: Propertes C{xyz} and C{xyzh}
1243
1245
  '''
1244
1246
  return self.xyz if Vector is None else Vector(
1245
- *self.xyz, **_xkwds(Vector_kwds, name=self.name)) # PYCHOK Ecef9Tuple
1247
+ *self.xyz, **_name1__(Vector_kwds, _or_nameof=self)) # PYCHOK Ecef9Tuple
1246
1248
 
1247
1249
  # def _T_x_M(self, T):
1248
1250
  # '''(INTERNAL) Update M{self.M = T.multiply(self.M)}.
@@ -1281,7 +1283,6 @@ def _llhn4(latlonh, lon, height, suffix=NN, Error=EcefError, **name): # in .ltp
1281
1283
  n = _name__(name, _or_nameof=latlonh) # == latlonh._name__(name)
1282
1284
  except AttributeError:
1283
1285
  lat, h, n = latlonh, height, _name__(**name)
1284
-
1285
1286
  try:
1286
1287
  return Lat(lat), Lon(lon), Height(h), n
1287
1288
  except (TypeError, ValueError) as x:
@@ -1313,11 +1314,11 @@ def _xyzn4(xyz, y, z, Types, Error=EcefError, lon00=0, # PYCHOK unused
1313
1314
  raise _TypesError(_xyz_y_z_names[0], xyz, *Types)
1314
1315
  except AttributeError:
1315
1316
  t = map1(float, xyz, y, z) + (n,)
1316
- return t
1317
1317
  except (TypeError, ValueError) as x:
1318
1318
  d = dict(zip(_xyz_y_z_names, (xyz, y, z)))
1319
1319
  raise Error(cause=x, **d)
1320
- # assert _xyz_y_z == _MODS.basics._args_kwds_names(_xyzn4)[:3]
1320
+ return t
1321
+ # assert _xyz_y_z == _args_kwds_names(_xyzn4)[:3]
1321
1322
 
1322
1323
 
1323
1324
  _Ecefs = (EcefKarney, EcefSudano, EcefVeness, EcefYou,