pygeodesy 24.5.15__py2.py3-none-any.whl → 24.5.24__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 (72) hide show
  1. {PyGeodesy-24.5.15.dist-info → PyGeodesy-24.5.24.dist-info}/METADATA +2 -2
  2. PyGeodesy-24.5.24.dist-info/RECORD +116 -0
  3. pygeodesy/__init__.py +1 -1
  4. pygeodesy/albers.py +41 -41
  5. pygeodesy/auxilats/__init__.py +1 -1
  6. pygeodesy/auxilats/auxAngle.py +32 -31
  7. pygeodesy/auxilats/auxLat.py +80 -51
  8. pygeodesy/azimuthal.py +123 -124
  9. pygeodesy/basics.py +8 -6
  10. pygeodesy/booleans.py +11 -12
  11. pygeodesy/cartesianBase.py +25 -23
  12. pygeodesy/clipy.py +3 -3
  13. pygeodesy/css.py +50 -42
  14. pygeodesy/datums.py +42 -41
  15. pygeodesy/dms.py +6 -6
  16. pygeodesy/ecef.py +23 -24
  17. pygeodesy/ellipsoidalBase.py +28 -27
  18. pygeodesy/ellipsoidalBaseDI.py +3 -4
  19. pygeodesy/ellipsoidalNvector.py +11 -12
  20. pygeodesy/ellipsoids.py +41 -35
  21. pygeodesy/elliptic.py +3 -4
  22. pygeodesy/epsg.py +4 -3
  23. pygeodesy/errors.py +34 -12
  24. pygeodesy/etm.py +62 -54
  25. pygeodesy/fmath.py +36 -30
  26. pygeodesy/formy.py +93 -65
  27. pygeodesy/frechet.py +117 -102
  28. pygeodesy/fstats.py +21 -14
  29. pygeodesy/fsums.py +67 -57
  30. pygeodesy/gars.py +10 -9
  31. pygeodesy/geodesicw.py +19 -17
  32. pygeodesy/geodesicx/__init__.py +1 -1
  33. pygeodesy/geodesicx/gx.py +40 -32
  34. pygeodesy/geodesicx/gxarea.py +12 -9
  35. pygeodesy/geodesicx/gxbases.py +3 -4
  36. pygeodesy/geodesicx/gxline.py +6 -8
  37. pygeodesy/geodsolve.py +28 -27
  38. pygeodesy/geohash.py +47 -44
  39. pygeodesy/geoids.py +34 -32
  40. pygeodesy/hausdorff.py +112 -99
  41. pygeodesy/heights.py +134 -127
  42. pygeodesy/internals.py +14 -9
  43. pygeodesy/interns.py +3 -6
  44. pygeodesy/iters.py +19 -17
  45. pygeodesy/karney.py +15 -12
  46. pygeodesy/ktm.py +25 -18
  47. pygeodesy/latlonBase.py +12 -11
  48. pygeodesy/lazily.py +4 -4
  49. pygeodesy/lcc.py +24 -25
  50. pygeodesy/ltp.py +83 -71
  51. pygeodesy/ltpTuples.py +7 -5
  52. pygeodesy/mgrs.py +3 -3
  53. pygeodesy/named.py +126 -42
  54. pygeodesy/namedTuples.py +33 -25
  55. pygeodesy/nvectorBase.py +7 -7
  56. pygeodesy/points.py +9 -9
  57. pygeodesy/rhumb/__init__.py +1 -1
  58. pygeodesy/solveBase.py +5 -5
  59. pygeodesy/sphericalTrigonometry.py +5 -5
  60. pygeodesy/streprs.py +5 -5
  61. pygeodesy/trf.py +5 -5
  62. pygeodesy/triaxials.py +67 -63
  63. pygeodesy/units.py +35 -35
  64. pygeodesy/unitsBase.py +24 -11
  65. pygeodesy/utm.py +53 -53
  66. pygeodesy/utmupsBase.py +10 -8
  67. pygeodesy/vector2d.py +6 -7
  68. pygeodesy/vector3d.py +16 -17
  69. pygeodesy/vector3dBase.py +4 -5
  70. PyGeodesy-24.5.15.dist-info/RECORD +0 -116
  71. {PyGeodesy-24.5.15.dist-info → PyGeodesy-24.5.24.dist-info}/WHEEL +0 -0
  72. {PyGeodesy-24.5.15.dist-info → PyGeodesy-24.5.24.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.5.24
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: May 15, 2024.*
161
+ *Last updated: May 24, 2024.*
162
162
 
163
163
  License
164
164
  =======
@@ -0,0 +1,116 @@
1
+ pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
+ pygeodesy/__init__.py,sha256=dxRGIMc_KFg9rWL9IHUZhVmCD3d_3a7DJpfSsyRS0is,41050
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=QE3Z3JC-BOAyaj_k6pxqwUpVLzkxJx0Ed1Dcjie8lbg,28241
7
+ pygeodesy/booleans.py,sha256=_OMqrm3R8vHHWo3heglKhUCKWdG8HzHmHLGKRNMF0nY,74141
8
+ pygeodesy/cartesianBase.py,sha256=P3EUMYKad9HxNSQQJTbPu4QehQu5HDxqOo9-xYsTdp4,47366
9
+ pygeodesy/clipy.py,sha256=3ysIEWQ89HjvLnSlZm0nZAt9EN5AQxIs1sLLM8yF9zM,27675
10
+ pygeodesy/constants.py,sha256=-KhClvNhehL7UCnqPgZyEnS3cSyYf7EBDRF0Vgmcgks,19190
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=U_vxQKD1HXB-O10Q_9tZ4EiD9SdFYuG__5lqvrhE_0M,59795
15
+ pygeodesy/elevations.py,sha256=1qZM2w0rDF7jHunydpTEmdLwOwF81KUL9L6RALJC7K4,10807
16
+ pygeodesy/ellipsoidalBase.py,sha256=VTzRrHlfZ-VXAEUczQjDNMDbTN9kVYBgCMuOos021Dk,56710
17
+ pygeodesy/ellipsoidalBaseDI.py,sha256=lPUPP5lVsCzI5RIukxmJ5MH6j2Mb7mdvftQ0tsvsW6g,38585
18
+ pygeodesy/ellipsoidalExact.py,sha256=a_2C6S6hGRumavy5giRoC9QAhnjqpujiXyu92od6nKo,16951
19
+ pygeodesy/ellipsoidalGeodSolve.py,sha256=xfNcb70AuPbIiJUqhisIfg6pCQBqXyQffBNuESEGCfU,16833
20
+ pygeodesy/ellipsoidalKarney.py,sha256=FoOsfNf96oHuGa9k4AB42y_UUBuOkh4xMW7PFGF63SA,19246
21
+ pygeodesy/ellipsoidalNvector.py,sha256=JuxCUqUtot4e8587Q84Npc1_SdahywTYsybRSMTRtSc,30265
22
+ pygeodesy/ellipsoidalVincenty.py,sha256=Uk93B8GFcMnWiwKUOA84TlLwbBlvzVnsAXAx0cU7cn4,26004
23
+ pygeodesy/ellipsoids.py,sha256=I-vlTW3hqNK-Joqo8q3f1KxY-Y3yD4mVxo7TBWSGxYw,120212
24
+ pygeodesy/elliptic.py,sha256=-80MbZvRPk-TeA_ggkfXhjuPv07MzsB4HxNF7gbdhB4,42501
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
31
+ pygeodesy/fstats.py,sha256=4eIhzSCMnn-2nVP3Q-5cCWCI-rvH0CE-zkk9hp3Pvn8,28642
32
+ pygeodesy/fsums.py,sha256=VdvK7Z01MNRcknf8hWujvD08WMCgJ98OdUCCbT9Xfqk,79434
33
+ pygeodesy/gars.py,sha256=gVnLQIEofyf_dA8dhpLrmhtIxGhBHZVRw8PbWgYUnnY,11400
34
+ pygeodesy/geodesicw.py,sha256=PwUO5jCGExhMt6cKkQwVnPTHMMVadkTrd6pV4UWZYNY,27064
35
+ pygeodesy/geodsolve.py,sha256=gRwdmjYe2oslt2z2vBnMlh_FURqGm9ai7t4XPrnjCxQ,22019
36
+ pygeodesy/geohash.py,sha256=plBNMHbiQa9E8RPq7rgFYoJAl14mhkgnDucGoXD5YHg,32373
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
41
+ pygeodesy/interns.py,sha256=QoDo_S1qY8IJVqI0pH2jGESLEexEF480PuwWZnTVrRI,23600
42
+ pygeodesy/iters.py,sha256=ML14NjtDpfPRtDJQsUYUtJZ81HH4NPFrCjecxwkcIuM,20309
43
+ pygeodesy/karney.py,sha256=7d0VroQiobcTS5ccaWg99rGRaMUorqRJTaCBaSscKI4,35084
44
+ pygeodesy/ktm.py,sha256=itQElJegrfhpAuMujAWFTcyuMSeKIgSyw5qkkHFs7vE,27519
45
+ pygeodesy/latlonBase.py,sha256=DglIfu916vtMV8-wEUs4GrXmk698-j3dkSud8FOBB6o,77762
46
+ pygeodesy/lazily.py,sha256=FjvgzWyXiM9gJNzTCVWi_RxonR0OrBJOQiFFl0n1Cx4,45478
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
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
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
61
+ pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
62
+ pygeodesy/sphericalTrigonometry.py,sha256=p9sDwyHH441pdPktUE6zrRtGQpwNO8F4ey07QtUW7z0,64209
63
+ pygeodesy/streprs.py,sha256=AZzil7Encfb1E7NG7tNHHivuayKQ-LZJJTMVumUhsEQ,23993
64
+ pygeodesy/trf.py,sha256=r5d_fFHQiPH8HPnBdzLhCju2rKNRCEDZ8UwIBWujR2E,118904
65
+ pygeodesy/triaxials.py,sha256=5WKymGpixPjsgol4ifSl5pH-f7bTfZsMrmcYFuZBtwY,62040
66
+ pygeodesy/units.py,sha256=DIllydnoz4rfw3ST91D_6-K_QGFiCqNcYvf6B_mUJMs,38827
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
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=1IXiAHBXTm5kMCp5gEI67oBJeRXD7BiPVI7bcRRX1U4,14918
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=xLIJ2uAhO-p_NDywrEi0tJxJ7r7jw3yG5B2CfSjNKJw,2881
82
+ pygeodesy/auxilats/__main__.py,sha256=BsNxHMo-VqXL0-kFTrpMUz5SFUO_K4udQLemXgvTxLE,2896
83
+ pygeodesy/auxilats/auxAngle.py,sha256=ybW0FMGaf69V5FYgVoqZENU-5b43FsmCPSYXcOu2fT8,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=-Ckor43KBiCDa7rbwY5kHvrs5xwuixTlw1TZpNSBgrU,13647
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=b5pOZbSBjN9WVP7fOMSBzTIbx1H0omHMXzOgf6rAgvs,2446
103
+ pygeodesy/geodesicx/__main__.py,sha256=FVlmJft__Utk30zYwCbvrJpmAFi_jmyigzbm4An3Wws,3167
104
+ pygeodesy/geodesicx/gx.py,sha256=reyK3UrooZmXTrwPcU36kO0R_ffZ5cMjPZoQ1qWHaO0,61729
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=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,,
pygeodesy/__init__.py CHANGED
@@ -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.05.24'
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.24'
33
33
 
34
34
  # **) MIT License
35
35
  #
@@ -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.24'
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, **aux_name):
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 aux_name: 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__(**aux_name)
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,