pygeodesy 24.5.15__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 (90) hide show
  1. {PyGeodesy-24.5.15.dist-info → PyGeodesy-24.6.1.dist-info}/METADATA +6 -5
  2. PyGeodesy-24.6.1.dist-info/RECORD +116 -0
  3. pygeodesy/__init__.py +4 -4
  4. pygeodesy/albers.py +41 -41
  5. pygeodesy/auxilats/__init__.py +1 -1
  6. pygeodesy/auxilats/__main__.py +2 -2
  7. pygeodesy/auxilats/auxAngle.py +32 -31
  8. pygeodesy/auxilats/auxLat.py +80 -51
  9. pygeodesy/azimuthal.py +123 -124
  10. pygeodesy/basics.py +46 -10
  11. pygeodesy/booleans.py +13 -14
  12. pygeodesy/cartesianBase.py +25 -23
  13. pygeodesy/clipy.py +3 -3
  14. pygeodesy/constants.py +3 -3
  15. pygeodesy/css.py +50 -42
  16. pygeodesy/datums.py +42 -41
  17. pygeodesy/deprecated/functions.py +9 -3
  18. pygeodesy/dms.py +6 -6
  19. pygeodesy/ecef.py +41 -41
  20. pygeodesy/ellipsoidalBase.py +41 -41
  21. pygeodesy/ellipsoidalBaseDI.py +3 -4
  22. pygeodesy/ellipsoidalGeodSolve.py +2 -2
  23. pygeodesy/ellipsoidalKarney.py +3 -3
  24. pygeodesy/ellipsoidalNvector.py +11 -12
  25. pygeodesy/ellipsoids.py +45 -38
  26. pygeodesy/elliptic.py +3 -4
  27. pygeodesy/epsg.py +4 -3
  28. pygeodesy/errors.py +52 -20
  29. pygeodesy/etm.py +68 -65
  30. pygeodesy/fmath.py +44 -49
  31. pygeodesy/formy.py +129 -115
  32. pygeodesy/frechet.py +118 -103
  33. pygeodesy/fstats.py +21 -14
  34. pygeodesy/fsums.py +124 -80
  35. pygeodesy/gars.py +10 -9
  36. pygeodesy/geodesicw.py +19 -17
  37. pygeodesy/geodesicx/__init__.py +1 -1
  38. pygeodesy/geodesicx/__main__.py +2 -2
  39. pygeodesy/geodesicx/gx.py +39 -33
  40. pygeodesy/geodesicx/gxarea.py +12 -9
  41. pygeodesy/geodesicx/gxbases.py +3 -4
  42. pygeodesy/geodesicx/gxline.py +6 -8
  43. pygeodesy/geodsolve.py +29 -28
  44. pygeodesy/geohash.py +60 -57
  45. pygeodesy/geoids.py +34 -32
  46. pygeodesy/hausdorff.py +114 -101
  47. pygeodesy/heights.py +137 -130
  48. pygeodesy/internals.py +16 -11
  49. pygeodesy/interns.py +3 -6
  50. pygeodesy/iters.py +19 -17
  51. pygeodesy/karney.py +21 -17
  52. pygeodesy/ktm.py +25 -18
  53. pygeodesy/latlonBase.py +12 -11
  54. pygeodesy/lazily.py +6 -6
  55. pygeodesy/lcc.py +24 -25
  56. pygeodesy/ltp.py +143 -113
  57. pygeodesy/ltpTuples.py +207 -150
  58. pygeodesy/mgrs.py +26 -26
  59. pygeodesy/named.py +172 -90
  60. pygeodesy/namedTuples.py +33 -25
  61. pygeodesy/nvectorBase.py +8 -8
  62. pygeodesy/osgr.py +40 -48
  63. pygeodesy/points.py +18 -18
  64. pygeodesy/props.py +29 -16
  65. pygeodesy/rhumb/__init__.py +1 -1
  66. pygeodesy/rhumb/aux_.py +13 -15
  67. pygeodesy/rhumb/bases.py +12 -5
  68. pygeodesy/rhumb/ekx.py +24 -18
  69. pygeodesy/rhumb/solve.py +13 -10
  70. pygeodesy/simplify.py +16 -16
  71. pygeodesy/solveBase.py +18 -18
  72. pygeodesy/sphericalBase.py +17 -21
  73. pygeodesy/sphericalTrigonometry.py +21 -21
  74. pygeodesy/streprs.py +5 -5
  75. pygeodesy/trf.py +13 -11
  76. pygeodesy/triaxials.py +68 -64
  77. pygeodesy/units.py +35 -35
  78. pygeodesy/unitsBase.py +24 -11
  79. pygeodesy/ups.py +66 -70
  80. pygeodesy/utily.py +3 -3
  81. pygeodesy/utm.py +183 -187
  82. pygeodesy/utmups.py +38 -38
  83. pygeodesy/utmupsBase.py +104 -106
  84. pygeodesy/vector2d.py +6 -7
  85. pygeodesy/vector3d.py +16 -17
  86. pygeodesy/vector3dBase.py +4 -5
  87. pygeodesy/webmercator.py +43 -51
  88. PyGeodesy-24.5.15.dist-info/RECORD +0 -116
  89. {PyGeodesy-24.5.15.dist-info → PyGeodesy-24.6.1.dist-info}/WHEEL +0 -0
  90. {PyGeodesy-24.5.15.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.15
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 15, 2024.*
162
+ *Last updated: June 01, 2024.*
162
163
 
163
164
  License
164
165
  =======
@@ -0,0 +1,116 @@
1
+ pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
+ pygeodesy/__init__.py,sha256=OjQWLVL3lst38mHti3vDOiO8W1oKhBMV6a9gnDehDvI,41046
3
+ pygeodesy/__main__.py,sha256=UmTd6Qw20g_pgnQjdaHePm-xuOEBi1tUNRLO0eL0-rU,4593
4
+ pygeodesy/albers.py,sha256=2t8EjmoFWmkdTb4DUHMlECkwTPDS1wpNf92WD_UWXds,31081
5
+ pygeodesy/azimuthal.py,sha256=RQdZbHoLlHSamhnJ4GMrrRU6UrYmTpa1yK59nYB-A4o,50252
6
+ pygeodesy/basics.py,sha256=Ez1tApjFnk6vNsYXeZzi28hYsa5AhUYobLS1Anna2g0,29381
7
+ pygeodesy/booleans.py,sha256=24uqW-VvA8sJWIC8PfncPIk6EdknrXHZvg7tbk4ChSY,74143
8
+ pygeodesy/cartesianBase.py,sha256=P3EUMYKad9HxNSQQJTbPu4QehQu5HDxqOo9-xYsTdp4,47366
9
+ pygeodesy/clipy.py,sha256=3ysIEWQ89HjvLnSlZm0nZAt9EN5AQxIs1sLLM8yF9zM,27675
10
+ pygeodesy/constants.py,sha256=-weWOuHwE-qI6pYRLcTucI0KNcNJm6vPNzxwrJzACKs,19192
11
+ pygeodesy/css.py,sha256=RXlLh76tVDFClVh7L1U3FFrLZvjBPFASDf3vq8dHecE,25778
12
+ pygeodesy/datums.py,sha256=GYbtvPyzDChHYgnNleBqsM-MNwLNQqrO2_MMV4Z9kmI,34006
13
+ pygeodesy/dms.py,sha256=VujWxk1L2Kp6OMfnu0XPI-j8bnyJ33sFmtB9_MbHqSU,44455
14
+ pygeodesy/ecef.py,sha256=2wAvnAtDMLw0nNmAnzl_ebm8ISO5JLcy3dPojwDLWk8,59926
15
+ pygeodesy/elevations.py,sha256=1qZM2w0rDF7jHunydpTEmdLwOwF81KUL9L6RALJC7K4,10807
16
+ pygeodesy/ellipsoidalBase.py,sha256=HgZCXrNEji896GuXGfM34w6wdUug4UwEqWCjk4XgnfM,56687
17
+ pygeodesy/ellipsoidalBaseDI.py,sha256=lPUPP5lVsCzI5RIukxmJ5MH6j2Mb7mdvftQ0tsvsW6g,38585
18
+ pygeodesy/ellipsoidalExact.py,sha256=a_2C6S6hGRumavy5giRoC9QAhnjqpujiXyu92od6nKo,16951
19
+ pygeodesy/ellipsoidalGeodSolve.py,sha256=nzT6KOubBOxXRHYafOo5ByQ90VOY1zvaS7byhnwaFqE,16830
20
+ pygeodesy/ellipsoidalKarney.py,sha256=m07XlZKWvBnOzIKV6P7RNttk8G5s2JRBH2RVF_lg0_k,19243
21
+ pygeodesy/ellipsoidalNvector.py,sha256=JuxCUqUtot4e8587Q84Npc1_SdahywTYsybRSMTRtSc,30265
22
+ pygeodesy/ellipsoidalVincenty.py,sha256=Uk93B8GFcMnWiwKUOA84TlLwbBlvzVnsAXAx0cU7cn4,26004
23
+ pygeodesy/ellipsoids.py,sha256=_fbQy9k_k40Li6jAOlHcSlEPPUnliZsqjIR2be3h2QI,120238
24
+ pygeodesy/elliptic.py,sha256=-80MbZvRPk-TeA_ggkfXhjuPv07MzsB4HxNF7gbdhB4,42501
25
+ pygeodesy/epsg.py,sha256=oWHX_QVChE5roktAyXUmPmX49XHiryYmXTHxQzrAprE,8222
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
+ pygeodesy/fstats.py,sha256=4eIhzSCMnn-2nVP3Q-5cCWCI-rvH0CE-zkk9hp3Pvn8,28642
32
+ pygeodesy/fsums.py,sha256=uPsR2HGSq6KT9Tvmai7KYl99ei9UkeA0TDAnXd7VIYo,80451
33
+ pygeodesy/gars.py,sha256=gVnLQIEofyf_dA8dhpLrmhtIxGhBHZVRw8PbWgYUnnY,11400
34
+ pygeodesy/geodesicw.py,sha256=PwUO5jCGExhMt6cKkQwVnPTHMMVadkTrd6pV4UWZYNY,27064
35
+ pygeodesy/geodsolve.py,sha256=_LDW6PSO_z2v77MUuKsYsRbutI2c5ldPZfR_b9GthFw,22021
36
+ pygeodesy/geohash.py,sha256=Z-r58-9nm8M17O7q5qTddS1N3B4eFn6ZgNl9t4dcJY8,32399
37
+ pygeodesy/geoids.py,sha256=25HrOgsCvFnXTjh3ghc1Y1FQKjerPpo_OLlQBNayK_0,80887
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
+ pygeodesy/interns.py,sha256=QoDo_S1qY8IJVqI0pH2jGESLEexEF480PuwWZnTVrRI,23600
42
+ pygeodesy/iters.py,sha256=ML14NjtDpfPRtDJQsUYUtJZ81HH4NPFrCjecxwkcIuM,20309
43
+ pygeodesy/karney.py,sha256=iGoi32hDPdaMR39i6pypcbY2hqvHFVPFROYcjjA-Jrw,35121
44
+ pygeodesy/ktm.py,sha256=itQElJegrfhpAuMujAWFTcyuMSeKIgSyw5qkkHFs7vE,27519
45
+ pygeodesy/latlonBase.py,sha256=DglIfu916vtMV8-wEUs4GrXmk698-j3dkSud8FOBB6o,77762
46
+ pygeodesy/lazily.py,sha256=Oc5J9yuktR9ZBk-Dwn3r2oA0zt1-8oAx2PUmpZ-qOPg,45498
47
+ pygeodesy/lcc.py,sha256=6vGht5JCN_BYYzbU2YCK6jz3PFcVymvY-RK2Uflt7ZE,25745
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
+ pygeodesy/namedTuples.py,sha256=N8fyc6OMdXNHgOk_tK2zhuWwBq6oB-QcAY-PG9xIgWk,27535
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
+ pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
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
+ pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
62
+ pygeodesy/sphericalTrigonometry.py,sha256=SqkFi2_Cy1LOzlZvvO4tpwxkS-AEBhdfRTgopXFTISw,64208
63
+ pygeodesy/streprs.py,sha256=AZzil7Encfb1E7NG7tNHHivuayKQ-LZJJTMVumUhsEQ,23993
64
+ pygeodesy/trf.py,sha256=AP-4s-hGWnrjhYfEfF0SnIVE6vVNwU6s0hNjm6G0GsU,119019
65
+ pygeodesy/triaxials.py,sha256=wK_KGdl3OdYKzbqYD6v1mbjjLE7ICpAfF7eQf1A3kF0,62039
66
+ pygeodesy/units.py,sha256=DIllydnoz4rfw3ST91D_6-K_QGFiCqNcYvf6B_mUJMs,38827
67
+ pygeodesy/unitsBase.py,sha256=FA4DuXUb88YYsDS3aIkd7BGvj70JATMeuBV_efshUx0,13544
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
+ pygeodesy/vector2d.py,sha256=zJq5PB777_mFJpKD-rt_T0Vm4SNbVwF7pc3KxX8uCT8,34994
74
+ pygeodesy/vector3d.py,sha256=danoz3QA90EJjqr2dmLPCYP5UG0m_pgiyNuNBW0aNJ8,45065
75
+ pygeodesy/vector3dBase.py,sha256=GhEq2oFfLoF57cDy6lvsB0b-dgTneMcrtDSyIiGr4mY,35630
76
+ pygeodesy/webmercator.py,sha256=J89VAROczHNpD34AuIWD3vxfogk3ZKoYj1w0lXOCkYA,14968
77
+ pygeodesy/wgrs.py,sha256=AKUrYRCC67lOeJ6vUDAiGb_mY6R3ZwflXpOaP3wauOg,14774
78
+ pygeodesy/auxilats/_CX_4.py,sha256=U41njj8Pu8cHMGuoUUVA20QIvRJAq-VGCnyoKJl0Ylo,8662
79
+ pygeodesy/auxilats/_CX_6.py,sha256=x4hrHxunjqqkEsZbVW1dyn3R5mR8EWYOuX77RzDEyh4,14856
80
+ pygeodesy/auxilats/_CX_8.py,sha256=t-OO48t4cCOsOgMi1FoyPw2DQqybVZFsgQMqAYP-jKY,25304
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
+ pygeodesy/auxilats/auxDLat.py,sha256=U3BHF6AkW5--nrwH9whL5wZVIZLH_keRLfUz6c6KBx4,10950
85
+ pygeodesy/auxilats/auxDST.py,sha256=bdNEh3TdABWH7qW6ngZx5SnzDM3B5rtPLvYhvCnFsKc,10497
86
+ pygeodesy/auxilats/auxLat.py,sha256=GUpK5_rcL8IHjC209dhIibYYBJudFU0Yk7JD-KUApbc,32529
87
+ pygeodesy/auxilats/auxily.py,sha256=ZiCFedYcr32O6TWQ_dcnwMrc9TgogyuhNSbR77WMDpg,8240
88
+ pygeodesy/deprecated/__init__.py,sha256=ZRGqgwSdvtKSYZdw09-LPuGa_i0jMHWKIwrPG3r1hHs,2815
89
+ pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8,1655
90
+ pygeodesy/deprecated/classes.py,sha256=PXgss-2kEu3bzaxvSeVZJGdcRqsdi_6_aRqsESyUQKQ,11662
91
+ pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
92
+ pygeodesy/deprecated/datum.py,sha256=KfuMA64LYGMj1voW2uai2RGcugtWdpvlOL6UHJvpTeQ,1875
93
+ pygeodesy/deprecated/functions.py,sha256=nwYgLqw9Wy6ieDxQGZJ-dIeBaF4IvmNBFx9AcHwiBlE,13907
94
+ pygeodesy/deprecated/nvector.py,sha256=_dZf84RdmPr7e7i8Yi683R-8Mqn0ipTqIsDhNl29hGo,2117
95
+ pygeodesy/deprecated/rhumbBase.py,sha256=d7YKW--dnRpobB2CSvhFsntWF0B5-HYJqID2pv5lD5k,1375
96
+ pygeodesy/deprecated/rhumbaux.py,sha256=n29xazYMbVG4MJkLjAGu8B88bbcFF5xnvuj9xSxjfIk,1428
97
+ pygeodesy/deprecated/rhumbsolve.py,sha256=QprjRfo5T1_C4ovaa1cffAcmNczzkhGIfmybAup9a9w,1431
98
+ pygeodesy/deprecated/rhumbx.py,sha256=OS0p_meaoVrpZe5UhK6qZljjlrGpL0pCHWw8gofw7ks,1425
99
+ pygeodesy/geodesicx/_C4_24.py,sha256=kS4XMR9m7iBs01V8K0Oz9qTYmjN-icIQGpc_8iwVhig,90750
100
+ pygeodesy/geodesicx/_C4_27.py,sha256=bPbj2Ckrn9WJglm3SNTXyMkULNwANM0tCQ-LKxP1L58,134258
101
+ pygeodesy/geodesicx/_C4_30.py,sha256=QZO8p971ztJwDGLOaJYgIhklztz9GlqbtS-xRP_E7o4,201964
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
+ pygeodesy/geodesicx/gxarea.py,sha256=-Kwe6spe2MSQbeLFDd6UN2NOi4JOjYhHAEzonOU3u4A,19409
106
+ pygeodesy/geodesicx/gxbases.py,sha256=nSQpDPuRQFkkzvjOaalBTHOQCYT1fhSOb5uy-5NvvSA,5215
107
+ pygeodesy/geodesicx/gxline.py,sha256=GP7BXfpsePLZy0SLLiIO6ytWKFpBLuPsOaL2Z_-45iU,27373
108
+ pygeodesy/rhumb/__init__.py,sha256=70qKVuNKkddfqMSxZ9c0VCZM1w0_Ka_nBWwtpfxxh2o,2207
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.15'
592
+ __version__ = '24.06.01'
593
593
  # see setup.py for similar logic
594
594
  version = _DOT_(*_version2(__version__, n=3))
595
595
 
pygeodesy/albers.py CHANGED
@@ -24,11 +24,11 @@ from pygeodesy.errors import _ValueError, _xkwds
24
24
  from pygeodesy.fmath import hypot, hypot1, sqrt3
25
25
  from pygeodesy.fsums import Fsum, _Fsum1f_, fsum1f_
26
26
  from pygeodesy.interns import NN, _COMMASPACE_, _datum_, _gamma_, _k0_, \
27
- _lat_, _lat1_, _lat2_, _lon_, _name_, _not_, \
28
- _negative_, _scale_, _SPACE_, _x_, _y_
27
+ _lat_, _lat1_, _lat2_, _lon_, _negative_, \
28
+ _scale_, _SPACE_, _x_, _y_
29
29
  from pygeodesy.karney import _diff182, _norm180, _signBit
30
30
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY
31
- from pygeodesy.named import _NamedBase, _NamedTuple, _Pass
31
+ from pygeodesy.named import _name2__, _NamedBase, _NamedTuple, _Pass
32
32
  from pygeodesy.props import deprecated_Property_RO, Property_RO, _update_all
33
33
  from pygeodesy.streprs import Fmt, strs, unstr
34
34
  from pygeodesy.units import Bearing, Float_, Lat, Lat_, Lon, Meter, Scalar_
@@ -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.05.14'
41
+ __version__ = '24.05.21'
42
42
 
43
43
  _k1_ = 'k1'
44
44
  _NUMIT = 8 # XXX 4?
@@ -111,12 +111,12 @@ class _AlbersBase(_NamedBase):
111
111
  # _sxi0 = None # (INTERNAL) sin(xi)
112
112
  # _txi0 = None # (INTERNAL) tan(xi)
113
113
 
114
- def __init__(self, sa1, ca1, sa2, ca2, k, datum, name):
114
+ def __init__(self, sa1, ca1, sa2, ca2, k, datum, **name):
115
115
  '''(INTERNAL) New C{AlbersEqualArea...} instance.
116
116
  '''
117
117
  qZ = self._qZ
118
118
  if datum not in (None, self._datum):
119
- self._datum = _ellipsoidal_datum(datum, name=name)
119
+ self._datum = _ellipsoidal_datum(datum, **name)
120
120
  qZ = _qZx(self)
121
121
  elif qZ is None:
122
122
  qZ = _qZx(_AlbersBase)
@@ -226,13 +226,13 @@ class _AlbersBase(_NamedBase):
226
226
 
227
227
  f = flattening
228
228
 
229
- def forward(self, lat, lon, lon0=0, name=NN):
229
+ def forward(self, lat, lon, lon0=0, **name):
230
230
  '''Convert a geodetic location to east- and northing.
231
231
 
232
232
  @arg lat: Latitude of the location (C{degrees}).
233
233
  @arg lon: Longitude of the location (C{degrees}).
234
234
  @kwarg lon0: Optional central meridian longitude (C{degrees}).
235
- @kwarg name: Optional name for the location (C{str}).
235
+ @kwarg name: Optional C{B{name}=NN} for the location (C{str}).
236
236
 
237
237
  @return: An L{Albers7Tuple}C{(x, y, lat, lon, gamma, scale, datum)},
238
238
  with C{lon} offset by B{C{lon0}} and reduced C{[-180,180]}.
@@ -277,7 +277,7 @@ class _AlbersBase(_NamedBase):
277
277
  if t:
278
278
  k0 = self._azik(t, ta)
279
279
  return Albers7Tuple(x, y, lat, lon, g, k0, self.datum,
280
- name=name or self.name)
280
+ name=self._name__(name))
281
281
 
282
282
  @Property_RO
283
283
  def ispolar(self):
@@ -343,16 +343,16 @@ class _AlbersBase(_NamedBase):
343
343
  _update_all(self)
344
344
  self._k0s(k0)
345
345
 
346
- def reverse(self, x, y, lon0=0, name=NN, LatLon=None, **LatLon_kwds):
346
+ def reverse(self, x, y, lon0=0, LatLon=None, **name_LatLon_kwds):
347
347
  '''Convert an east- and northing location to geodetic lat- and longitude.
348
348
 
349
349
  @arg x: Easting of the location (C{meter}).
350
350
  @arg y: Northing of the location (C{meter}).
351
351
  @kwarg lon0: Optional central meridian longitude (C{degrees}).
352
- @kwarg name: Optional name for the location (C{str}).
353
352
  @kwarg LatLon: Class to use (C{LatLon}) or C{None}.
354
- @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword
355
- arguments, ignored if C{B{LatLon} is None}.
353
+ @kwarg name_LatLon_kwds: Optional C{B{name}=NN} for the location
354
+ and optional, additional B{C{LatLon}} keyword
355
+ arguments, ignored if C{B{LatLon} is None}.
356
356
 
357
357
  @return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an
358
358
  L{Albers7Tuple}C{(x, y, lat, lon, gamma, scale, datum)}.
@@ -397,7 +397,7 @@ class _AlbersBase(_NamedBase):
397
397
  lon += _norm180(lon0)
398
398
  lon = _norm180(lon)
399
399
 
400
- n = name or self.name
400
+ n, LatLon_kwds = _name2__(name_LatLon_kwds, _or_nameof=self)
401
401
  if LatLon is None:
402
402
  g = degrees360(s * th)
403
403
  if den:
@@ -540,11 +540,11 @@ class _AlbersBase(_NamedBase):
540
540
  (self.lat1,))
541
541
  t = strs(t, prec=prec)
542
542
  if k:
543
- t = t[:-1] + (Fmt.EQUAL(k, t[-1]),)
543
+ t = t[:-1] + (Fmt.EQUAL(k, t[-1]),)
544
544
  if self.datum != _WGS84:
545
- t += (Fmt.EQUAL(_datum_, self.datum),)
545
+ t += Fmt.EQUAL(datum=self.datum),
546
546
  if self.name:
547
- t += (Fmt.EQUAL(_name_, repr(self.name)),)
547
+ t += Fmt.EQUAL(name=repr(self.name)),
548
548
  return t if sep is None else sep.join(t)
549
549
 
550
550
  def _txif(self, ta): # in .Ellipsoid.auxAuthalic
@@ -575,20 +575,20 @@ class AlbersEqualArea(_AlbersBase):
575
575
  '''
576
576
  _k = _k0_
577
577
 
578
- def __init__(self, lat, k0=1, datum=_WGS84, name=NN):
578
+ def __init__(self, lat, k0=1, datum=_WGS84, **name):
579
579
  '''New L{AlbersEqualArea} projection.
580
580
 
581
581
  @arg lat: Standard parallel (C{degrees}).
582
582
  @kwarg k0: Azimuthal scale on the standard parallel (C{scalar}).
583
583
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
584
584
  L{Ellipsoid2} or L{a_f2Tuple}).
585
- @kwarg name: Optional name for the projection (C{str}).
585
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
586
586
 
587
587
  @raise AlbersError: Invalid B{C{lat}}, B{C{k0}} or no convergence.
588
588
  '''
589
589
  self._lat1 = self._lat2 = lat = _Lat(lat1=lat)
590
- args = tuple(sincos2d(lat)) * 2 + (_Ks(k0=k0), datum, name)
591
- _AlbersBase.__init__(self, *args)
590
+ args = tuple(sincos2d(lat)) * 2 + (_Ks(k0=k0), datum)
591
+ _AlbersBase.__init__(self, *args, **name)
592
592
 
593
593
 
594
594
  class AlbersEqualArea2(_AlbersBase):
@@ -598,7 +598,7 @@ class AlbersEqualArea2(_AlbersBase):
598
598
  '''
599
599
  _k = _k1_
600
600
 
601
- def __init__(self, lat1, lat2, k1=1, datum=_WGS84, name=NN):
601
+ def __init__(self, lat1, lat2, k1=1, datum=_WGS84, **name):
602
602
  '''New L{AlbersEqualArea2} projection.
603
603
 
604
604
  @arg lat1: First standard parallel (C{degrees}).
@@ -606,14 +606,14 @@ class AlbersEqualArea2(_AlbersBase):
606
606
  @kwarg k1: Azimuthal scale on the standard parallels (C{scalar}).
607
607
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
608
608
  L{Ellipsoid2} or L{a_f2Tuple}).
609
- @kwarg name: Optional name for the projection (C{str}).
609
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
610
610
 
611
611
  @raise AlbersError: Invalid B{C{lat1}}m B{C{lat2}}, B{C{k1}}
612
612
  or no convergence.
613
613
  '''
614
614
  self._lat1, self._lat2 = lats = _Lat(lat1=lat1), _Lat(lat2=lat2)
615
- args = tuple(sincos2d_(*lats)) + (_Ks(k1=k1), datum, name)
616
- _AlbersBase.__init__(self, *args)
615
+ args = tuple(sincos2d_(*lats)) + (_Ks(k1=k1), datum)
616
+ _AlbersBase.__init__(self, *args, **name)
617
617
 
618
618
 
619
619
  class AlbersEqualArea4(_AlbersBase):
@@ -624,7 +624,7 @@ class AlbersEqualArea4(_AlbersBase):
624
624
  '''
625
625
  _k = _k1_
626
626
 
627
- def __init__(self, slat1, clat1, slat2, clat2, k1=1, datum=_WGS84, name=NN):
627
+ def __init__(self, slat1, clat1, slat2, clat2, k1=1, datum=_WGS84, **name):
628
628
  '''New L{AlbersEqualArea4} projection.
629
629
 
630
630
  @arg slat1: Sine of first standard parallel (C{scalar}).
@@ -634,20 +634,20 @@ class AlbersEqualArea4(_AlbersBase):
634
634
  @kwarg k1: Azimuthal scale on the standard parallels (C{scalar}).
635
635
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
636
636
  L{Ellipsoid2} or L{a_f2Tuple}).
637
- @kwarg name: Optional name for the projection (C{str}).
637
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
638
638
 
639
639
  @raise AlbersError: Negative B{C{clat1}} or B{C{clat2}}, B{C{slat1}}
640
640
  and B{C{slat2}} have opposite signs (hemispheres),
641
641
  invalid B{C{k1}} or no convergence.
642
642
  '''
643
- def _Lat_s_c3(name, s, c):
644
- r = Float_(hypot(s, c), name=name, Error=AlbersError)
645
- L = _Lat(atan1d(s, c), name=name)
643
+ def _Lat_s_c3(n, s, c):
644
+ r = Float_(hypot(s, c), name=n, Error=AlbersError)
645
+ L = _Lat( atan1d(s, c), name=n)
646
646
  return L, (s / r), (c / r)
647
647
 
648
648
  self._lat1, sa1, ca1 = _Lat_s_c3(_lat1_, slat1, clat1)
649
649
  self._lat2, sa2, ca2 = _Lat_s_c3(_lat2_, slat2, clat2)
650
- _AlbersBase.__init__(self, sa1, ca1, sa2, ca2, _Ks(k1=k1), datum, name)
650
+ _AlbersBase.__init__(self, sa1, ca1, sa2, ca2, _Ks(k1=k1), datum, **name)
651
651
 
652
652
 
653
653
  class AlbersEqualAreaCylindrical(_AlbersBase):
@@ -656,16 +656,16 @@ class AlbersEqualAreaCylindrical(_AlbersBase):
656
656
  '''
657
657
  _lat1 = _lat2 = _Lat(lat1=_0_0)
658
658
 
659
- def __init__(self, lat=_0_0, datum=_WGS84, name=NN):
659
+ def __init__(self, lat=_0_0, datum=_WGS84, **name):
660
660
  '''New L{AlbersEqualAreaCylindrical} projection.
661
661
 
662
662
  @kwarg lat: Standard parallel (C{0 degrees} I{fixed}).
663
663
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
664
664
  L{Ellipsoid2} or L{a_f2Tuple}).
665
- @kwarg name: Optional name for the projection (C{str}).
665
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
666
666
  '''
667
667
  _xlat(lat, _0_0, AlbersEqualAreaCylindrical)
668
- _AlbersBase.__init__(self, _0_0, _1_0, _0_0, _1_0, 1, datum, name)
668
+ _AlbersBase.__init__(self, _0_0, _1_0, _0_0, _1_0, 1, datum, **name)
669
669
 
670
670
 
671
671
  class AlbersEqualAreaNorth(_AlbersBase):
@@ -674,16 +674,16 @@ class AlbersEqualAreaNorth(_AlbersBase):
674
674
  '''
675
675
  _lat1 = _lat2 = _Lat(lat1=_90_0)
676
676
 
677
- def __init__(self, lat=_90_0, datum=_WGS84, name=NN):
677
+ def __init__(self, lat=_90_0, datum=_WGS84, **name):
678
678
  '''New L{AlbersEqualAreaNorth} projection.
679
679
 
680
680
  @kwarg lat: Standard parallel (C{90 degrees} I{fixed}).
681
681
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
682
682
  L{Ellipsoid2} or L{a_f2Tuple}).
683
- @kwarg name: Optional name for the projection (C{str}).
683
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
684
684
  '''
685
685
  _xlat(lat, _90_0, AlbersEqualAreaNorth)
686
- _AlbersBase.__init__(self, _1_0, _0_0, _1_0, _0_0, 1, datum, name)
686
+ _AlbersBase.__init__(self, _1_0, _0_0, _1_0, _0_0, 1, datum, **name)
687
687
 
688
688
 
689
689
  class AlbersEqualAreaSouth(_AlbersBase):
@@ -692,16 +692,16 @@ class AlbersEqualAreaSouth(_AlbersBase):
692
692
  '''
693
693
  _lat1 = _lat2 = _Lat(lat1=_N_90_0)
694
694
 
695
- def __init__(self, lat=_N_90_0, datum=_WGS84, name=NN):
695
+ def __init__(self, lat=_N_90_0, datum=_WGS84, **name):
696
696
  '''New L{AlbersEqualAreaSouth} projection.
697
697
 
698
698
  @kwarg lat: Standard parallel (C{-90 degrees} I{fixed}).
699
699
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
700
700
  L{Ellipsoid2} or L{a_f2Tuple}).
701
- @kwarg name: Optional name for the projection (C{str}).
701
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
702
702
  '''
703
703
  _xlat(lat, _N_90_0, AlbersEqualAreaSouth)
704
- _AlbersBase.__init__(self, _N_1_0, _0_0, _N_1_0, _0_0, 1, datum, name)
704
+ _AlbersBase.__init__(self, _N_1_0, _0_0, _N_1_0, _0_0, 1, datum, **name)
705
705
 
706
706
 
707
707
  class Albers7Tuple(_NamedTuple):
@@ -832,7 +832,7 @@ def _xlat(lat, f, where):
832
832
  '''
833
833
  if lat is not f and _Lat(lat=lat) != f:
834
834
  t = unstr(where, lat=lat)
835
- raise AlbersError(t, txt=_not_(f))
835
+ raise AlbersError(t, txt_not_=f)
836
836
 
837
837
 
838
838
  __all__ += _ALL_DOCS(_AlbersBase)
@@ -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__ = '23.12.07'
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)
@@ -14,16 +14,15 @@ under the MIT/X11 License. For more information, see the U{GeographicLib
14
14
  # make sure int/int division yields float quotient, see .basics
15
15
  from __future__ import division as _; del _ # PYCHOK semicolon
16
16
 
17
- from pygeodesy.auxilats.auxily import Aux, _Aux2Greek, AuxError
18
- from pygeodesy.basics import _xinstanceof, _xkwds_get
17
+ from pygeodesy.auxilats.auxily import Aux, _Aux2Greek
18
+ from pygeodesy.basics import _xinstanceof
19
19
  from pygeodesy.constants import EPS, _INF_NAN_NINF, MAX, NAN, _0_0, _0_5, _1_0, \
20
20
  _copysign_1_0, _over, _pos_self, isfinite, isnan
21
- # from pygeodesy.errors import AuxError, _xkwds_get # from .auxily, .basics
21
+ from pygeodesy.errors import AuxError, _UnexpectedError, _xkwds_pop2
22
22
  from pygeodesy.fmath import hypot, unstr
23
- from pygeodesy.fsums import _add_op_, _iadd_op_, _isub_op_, _sub_op_, _Named, NN
24
- # from pygeodesy.interns import NN # from .fsums
25
- # from pygeodesy.named import _Named # from .fsums
26
- from pygeodesy.lazily import _ALL_DOCS, _ALL_MODS as _MODS
23
+ from pygeodesy.fsums import _add_op_, _iadd_op_, _isub_op_, _sub_op_
24
+ from pygeodesy.named import _name2__, _Named, _ALL_DOCS, _MODS
25
+ # from pygeodesy.lazily import _ALL_DOCS, _ALL_MODS as _MODS # from .named
27
26
  from pygeodesy.props import Property, Property_RO, property_RO, _update_all
28
27
  # from pygeodesy.streprs import unstr # from .fmath
29
28
  from pygeodesy.units import Degrees, Radians
@@ -32,7 +31,7 @@ from pygeodesy.utily import atan2d, sincos2, sincos2d
32
31
  from math import asinh, atan2, copysign, degrees, fabs, radians, sinh
33
32
 
34
33
  __all__ = ()
35
- __version__ = '24.04.26'
34
+ __version__ = '24.05.25'
36
35
 
37
36
  _0_INF_NAN_NINF = (0, _0_0) + _INF_NAN_NINF
38
37
  _MAX_2 = MAX * _0_5 # PYCHOK used!
@@ -49,18 +48,18 @@ class AuxAngle(_Named):
49
48
  _y = _0_0
50
49
  _x = _1_0
51
50
 
52
- def __init__(self, y_angle=_0_0, x=_1_0, name=NN, **aux):
51
+ def __init__(self, y_angle=_0_0, x=_1_0, **name_aux):
53
52
  '''New L{AuxAngle}.
54
53
 
55
54
  @kwarg y_angle: The Y component (C{scalar}, including C{INF}, C{NAN}
56
55
  and C{NINF}) or a previous L{AuxAngle} instance.
57
56
  @kwarg x: The X component, ignored if C{B{y_angle}} is non-C{scalar}.
58
- @kwarg name: Optional name (C{str}).
59
- @kwarg aux: I{Auxiliary} kind (C{Aux.KIND}), ignored if B{C{y_angle}}
60
- is non-C{scalar}.
57
+ @kwarg name_aux: Optional C{B{name}=NN} (C{str}) and I{Auxiliary} kind
58
+ (C{B{aux}=Aux.KIND}), ignored if B{C{y_angle}} is L{AuxAngle}.
61
59
 
62
60
  @raise AuxError: Invalid B{C{y_angle}}, B{C{x}} or B{C{aux}}.
63
61
  '''
62
+ name, aux = _name2__(**name_aux)
64
63
  try:
65
64
  yx = y_angle._yx
66
65
  if self._AUX is None:
@@ -70,11 +69,13 @@ class AuxAngle(_Named):
70
69
  except AttributeError:
71
70
  yx = y_angle, x
72
71
  if aux:
73
- aux = _xkwds_get(aux, aux=self._AUX)
74
- if self._AUX is not aux:
75
- if aux not in _AUXClass:
76
- raise AuxError(aux=aux)
77
- self._AUX = aux
72
+ a, kwds = _xkwds_pop2(aux, aux=self._AUX)
73
+ if kwds:
74
+ raise _UnexpectedError(**kwds)
75
+ if a is not self._AUX:
76
+ if a not in _AUXClass:
77
+ raise AuxError(aux=a)
78
+ self._AUX = a
78
79
  self._y, self._x = _yx2(yx)
79
80
  if name:
80
81
  self.name = name
@@ -428,16 +429,16 @@ class AuxBeta(AuxAngle):
428
429
  _AUX = Aux.BETA
429
430
 
430
431
  @staticmethod
431
- def fromDegrees(deg, name=NN):
432
+ def fromDegrees(deg, **name):
432
433
  '''Get an L{AuxBeta} from degrees.
433
434
  '''
434
- return AuxBeta(*sincos2d(deg), name=name)
435
+ return AuxBeta(*sincos2d(deg), **name)
435
436
 
436
437
  @staticmethod
437
- def fromRadians(rad, name=NN):
438
+ def fromRadians(rad, **name):
438
439
  '''Get an L{AuxBeta} from radians.
439
440
  '''
440
- return AuxBeta(*sincos2(rad), name=name)
441
+ return AuxBeta(*sincos2(rad), **name)
441
442
 
442
443
 
443
444
  class AuxChi(AuxAngle):
@@ -446,10 +447,10 @@ class AuxChi(AuxAngle):
446
447
  _AUX = Aux.CHI
447
448
 
448
449
  @staticmethod
449
- def fromDegrees(deg, name=NN):
450
+ def fromDegrees(deg, **name):
450
451
  '''Get an L{AuxChi} from degrees.
451
452
  '''
452
- return AuxChi(*sincos2d(deg), name=name)
453
+ return AuxChi(*sincos2d(deg), **name)
453
454
 
454
455
 
455
456
  class AuxMu(AuxAngle):
@@ -458,10 +459,10 @@ class AuxMu(AuxAngle):
458
459
  _AUX = Aux.MU
459
460
 
460
461
  @staticmethod
461
- def fromDegrees(deg, name=NN):
462
+ def fromDegrees(deg, **name):
462
463
  '''Get an L{AuxMu} from degrees.
463
464
  '''
464
- return AuxMu(*sincos2d(deg), name=name)
465
+ return AuxMu(*sincos2d(deg), **name)
465
466
 
466
467
 
467
468
  class AuxPhi(AuxAngle):
@@ -471,10 +472,10 @@ class AuxPhi(AuxAngle):
471
472
  _diff = _1_0 # see .auxLat._Newton
472
473
 
473
474
  @staticmethod
474
- def fromDegrees(deg, name=NN):
475
+ def fromDegrees(deg, **name):
475
476
  '''Get an L{AuxPhi} from degrees.
476
477
  '''
477
- return AuxPhi(*sincos2d(deg), name=name)
478
+ return AuxPhi(*sincos2d(deg), **name)
478
479
 
479
480
 
480
481
  class AuxTheta(AuxAngle):
@@ -483,10 +484,10 @@ class AuxTheta(AuxAngle):
483
484
  _AUX = Aux.THETA
484
485
 
485
486
  @staticmethod
486
- def fromDegrees(deg, name=NN):
487
+ def fromDegrees(deg, **name):
487
488
  '''Get an L{AuxTheta} from degrees.
488
489
  '''
489
- return AuxTheta(*sincos2d(deg), name=name)
490
+ return AuxTheta(*sincos2d(deg), **name)
490
491
 
491
492
 
492
493
  class AuxXi(AuxAngle):
@@ -495,10 +496,10 @@ class AuxXi(AuxAngle):
495
496
  _AUX = Aux.XI
496
497
 
497
498
  @staticmethod
498
- def fromDegrees(deg, name=NN):
499
+ def fromDegrees(deg, **name):
499
500
  '''Get an L{AuxXi} from degrees.
500
501
  '''
501
- return AuxXi(*sincos2d(deg), name=name)
502
+ return AuxXi(*sincos2d(deg), **name)
502
503
 
503
504
 
504
505
  _AUXClass = {Aux.BETA: AuxBeta,