pygeodesy 24.5.24__py2.py3-none-any.whl → 24.6.9__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 (71) hide show
  1. {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.9.dist-info}/METADATA +6 -5
  2. PyGeodesy-24.6.9.dist-info/RECORD +116 -0
  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 +54 -67
  9. pygeodesy/cartesianBase.py +138 -147
  10. pygeodesy/constants.py +3 -3
  11. pygeodesy/deprecated/functions.py +9 -3
  12. pygeodesy/ecef.py +67 -72
  13. pygeodesy/ellipsoidalBase.py +18 -56
  14. pygeodesy/ellipsoidalGeodSolve.py +2 -2
  15. pygeodesy/ellipsoidalKarney.py +3 -3
  16. pygeodesy/ellipsoidalNvector.py +7 -7
  17. pygeodesy/ellipsoids.py +6 -5
  18. pygeodesy/errors.py +20 -10
  19. pygeodesy/etm.py +16 -21
  20. pygeodesy/fmath.py +9 -20
  21. pygeodesy/formy.py +60 -74
  22. pygeodesy/frechet.py +13 -14
  23. pygeodesy/fsums.py +60 -26
  24. pygeodesy/geodesicx/__init__.py +1 -1
  25. pygeodesy/geodesicx/__main__.py +2 -2
  26. pygeodesy/geodesicx/gx.py +3 -5
  27. pygeodesy/geodsolve.py +24 -26
  28. pygeodesy/geohash.py +27 -40
  29. pygeodesy/geoids.py +1 -1
  30. pygeodesy/hausdorff.py +17 -18
  31. pygeodesy/heights.py +17 -30
  32. pygeodesy/internals.py +15 -14
  33. pygeodesy/interns.py +3 -9
  34. pygeodesy/iters.py +2 -2
  35. pygeodesy/karney.py +8 -7
  36. pygeodesy/latlonBase.py +189 -176
  37. pygeodesy/lazily.py +92 -56
  38. pygeodesy/lcc.py +2 -2
  39. pygeodesy/ltp.py +93 -55
  40. pygeodesy/ltpTuples.py +304 -240
  41. pygeodesy/mgrs.py +51 -24
  42. pygeodesy/named.py +159 -136
  43. pygeodesy/namedTuples.py +43 -14
  44. pygeodesy/nvectorBase.py +20 -23
  45. pygeodesy/osgr.py +40 -48
  46. pygeodesy/points.py +11 -11
  47. pygeodesy/props.py +29 -16
  48. pygeodesy/rhumb/aux_.py +13 -15
  49. pygeodesy/rhumb/bases.py +12 -5
  50. pygeodesy/rhumb/ekx.py +24 -18
  51. pygeodesy/rhumb/solve.py +20 -70
  52. pygeodesy/simplify.py +16 -16
  53. pygeodesy/solveBase.py +35 -32
  54. pygeodesy/sphericalBase.py +33 -31
  55. pygeodesy/sphericalTrigonometry.py +17 -17
  56. pygeodesy/streprs.py +6 -4
  57. pygeodesy/trf.py +11 -9
  58. pygeodesy/triaxials.py +71 -50
  59. pygeodesy/units.py +40 -65
  60. pygeodesy/unitsBase.py +2 -2
  61. pygeodesy/ups.py +66 -70
  62. pygeodesy/utily.py +7 -6
  63. pygeodesy/utm.py +152 -156
  64. pygeodesy/utmups.py +38 -38
  65. pygeodesy/utmupsBase.py +102 -106
  66. pygeodesy/vector3d.py +34 -36
  67. pygeodesy/vector3dBase.py +12 -9
  68. pygeodesy/webmercator.py +43 -51
  69. PyGeodesy-24.5.24.dist-info/RECORD +0 -116
  70. {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.9.dist-info}/WHEEL +0 -0
  71. {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.9.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.9
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 09, 2024.*
162
163
 
163
164
  License
164
165
  =======
@@ -0,0 +1,116 @@
1
+ pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
+ pygeodesy/__init__.py,sha256=MliQ7bvn1U4dND9REeqtweBQF8d_LWeWIliPvZwBkeg,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=_19jhaMqcPdaOfKdSElh50y2JQemXcu9Xcx0CqJ90ZE,73533
8
+ pygeodesy/cartesianBase.py,sha256=-n3g68SO-3399cqyzgDXAolQnQfyOhzFYixhATpWZVI,47216
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=35lTlGfCM4t45IFpjfXHSUXJSyGUEjuqUK-YWRRplLs,59680
15
+ pygeodesy/elevations.py,sha256=1qZM2w0rDF7jHunydpTEmdLwOwF81KUL9L6RALJC7K4,10807
16
+ pygeodesy/ellipsoidalBase.py,sha256=ljWfrFENRFFWxhyvptfipEWM8xKeTs329F2OP4lZvKI,55297
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=kRmWclV0NFnEJv3m3TxBNJMu7wyrZZO2iUrNrr-_m9g,30261
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=3GPp5Axnbnch93VWO-E7uEAAfVnRzbByafNCtKR6g_I,28443
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=GL4R26drObd1qFyg4hV-L9btdXaIj7xzrKjQUA-7JKc,34342
31
+ pygeodesy/fstats.py,sha256=4eIhzSCMnn-2nVP3Q-5cCWCI-rvH0CE-zkk9hp3Pvn8,28642
32
+ pygeodesy/fsums.py,sha256=35PAG1f5DO1KgnEWujH5TSbaas6a6eETAeeJxGcUW1A,80453
33
+ pygeodesy/gars.py,sha256=gVnLQIEofyf_dA8dhpLrmhtIxGhBHZVRw8PbWgYUnnY,11400
34
+ pygeodesy/geodesicw.py,sha256=PwUO5jCGExhMt6cKkQwVnPTHMMVadkTrd6pV4UWZYNY,27064
35
+ pygeodesy/geodsolve.py,sha256=lC-81_56RUpgyJPDTXv0ih73tEuMNp3evDvyP4CDKSs,21974
36
+ pygeodesy/geohash.py,sha256=hAgcl8p4DSswBdrNj-SzmWYMU2q6h5yczeLKtpRvmZA,32080
37
+ pygeodesy/geoids.py,sha256=ztWLvRLpOPqC_52sxJVzVk7_g4o2REVxx5d3hh7jZ8g,80887
38
+ pygeodesy/hausdorff.py,sha256=bhxy8_3dAoR1syc-X90AbANNrulMFdwRyvNxjYfcw6I,34713
39
+ pygeodesy/heights.py,sha256=3-4ESUw7s7fggRRTXIR1YpV3K-Qk8x3nlt7BkNa54lw,43191
40
+ pygeodesy/internals.py,sha256=0y4Wwx7bGife4-quIyAf7l6MR91Tmfjrie1FuqNSM5Y,19354
41
+ pygeodesy/interns.py,sha256=njF6hxFJRhhWLsrfx21XX8V3ZvS59ujfzk2spWBGSBM,23258
42
+ pygeodesy/iters.py,sha256=xPH0ytomvJeKHu717Fjzi3QbRrEikO6n7vqkY_IDz1k,20311
43
+ pygeodesy/karney.py,sha256=iGoi32hDPdaMR39i6pypcbY2hqvHFVPFROYcjjA-Jrw,35121
44
+ pygeodesy/ktm.py,sha256=itQElJegrfhpAuMujAWFTcyuMSeKIgSyw5qkkHFs7vE,27519
45
+ pygeodesy/latlonBase.py,sha256=EK7hM0GrLrpfCrtYc0frdS_hF1UxSo8KkqP0Bg5nq24,79072
46
+ pygeodesy/lazily.py,sha256=b6x3Dfob6HCoiwHaF8lhtnFQei3w2qW8yoMURPdr7tA,46519
47
+ pygeodesy/lcc.py,sha256=H6HTbruMKwboVxAnM1EsieBJHKqWhdd47bCYDzTIioE,25746
48
+ pygeodesy/ltp.py,sha256=oFuGZgWFKI7YjldlyTNhbLLOS7AVixLf5iemEhHhRbA,50857
49
+ pygeodesy/ltpTuples.py,sha256=VFJWeGJ96NUPaxwc1JT82dMYgE3NpnUwzu0osaaHfVE,58414
50
+ pygeodesy/mgrs.py,sha256=cKYnLKUorr_27Rca4V5I1-R6RPGnTlzrlYFuENnnjnI,29707
51
+ pygeodesy/named.py,sha256=oZEqvA1rORBY44J8oi2I6XpBchCnyi_QgAvd-zlx25A,51885
52
+ pygeodesy/namedTuples.py,sha256=UDmL4kCihvf8tIUVXzGzRLzL_1BLuyqm04pite6YUuk,28495
53
+ pygeodesy/nvectorBase.py,sha256=jT_tmA7JW_C66h7zbgP4mKxcYnmLVVpv6j-ZTvZC3NI,28744
54
+ pygeodesy/osgr.py,sha256=g-uCTy735aUNh5odTp27PY8CLDnTaquc1_oTs8Qv6zg,30827
55
+ pygeodesy/points.py,sha256=whMm-9Nzlhr19nPNVkXB0nIg52iMvQ4q2Xg_Eor_Yz0,64415
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=FGuvHvloiyBdE0H50o8rOxtD_n6gCx1Gp31Ckn-N7hk,16852
60
+ pygeodesy/sphericalBase.py,sha256=eIvQz573LR9xPFZK4t5Z0TEVz4aPKI9MdMtgFDbm7Zo,32284
61
+ pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
62
+ pygeodesy/sphericalTrigonometry.py,sha256=SqkFi2_Cy1LOzlZvvO4tpwxkS-AEBhdfRTgopXFTISw,64208
63
+ pygeodesy/streprs.py,sha256=jZigK7DeHAFi2HTbvA5sXE1bJ8jeyJC1spBnzz7nTSs,24018
64
+ pygeodesy/trf.py,sha256=CRFHmu0lFNtc41fddXavEkHmgnTFWEqR4RTFodcFKsw,119022
65
+ pygeodesy/triaxials.py,sha256=klirzOo6yxTmd-eQM4PHMnszUo71JR0VKIUy9mYUam8,62860
66
+ pygeodesy/units.py,sha256=gHmNw5HO78zeG3zUPfwf3wrV9LKQxBLOPPzbLivMiWA,38196
67
+ pygeodesy/unitsBase.py,sha256=9WC7GgLJWc9MMKX1xFIlgXNKGpK9k0Do1lA6vAkLE8s,13539
68
+ pygeodesy/ups.py,sha256=p9F49qQ9tGGf18fnFWJ5DdqQA-FdNe_BcuIGAi5tIoE,23419
69
+ pygeodesy/utily.py,sha256=u5yGJvNKiNtafrokDaydHzBPe8vAGuy7WXrPP7yNSnk,36149
70
+ pygeodesy/utm.py,sha256=ZxBvDcCkdnmTRzMOHyhADHdZJSUo0U0xBAsg0rEeTHk,31148
71
+ pygeodesy/utmups.py,sha256=_GCrF3TljW4k5W9uKwilO1ivPLAbOArxlzi7jPJ4rbc,13226
72
+ pygeodesy/utmupsBase.py,sha256=rRTSGgBbZiIp_C1v2elAjHKEIjYN1rt27lECXc55hH8,18764
73
+ pygeodesy/vector2d.py,sha256=zJq5PB777_mFJpKD-rt_T0Vm4SNbVwF7pc3KxX8uCT8,34994
74
+ pygeodesy/vector3d.py,sha256=t1MVIYCfnP-EdHiV3PAuVDcjLrDNZ3E48UOW-2rw5js,44953
75
+ pygeodesy/vector3dBase.py,sha256=R6rQlqoO8pvzhfjz6jK1llL74c9SldafPXHbdBrPCIA,35732
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=EDlLpbnw2FiNANOTau0emk29AEAaJpmckjK_cprvLNA,24035
113
+ PyGeodesy-24.6.9.dist-info/METADATA,sha256=9j-xNRochKcXdPvnUAMAvuX3teuN-uBTTweCnqr7af0,19411
114
+ PyGeodesy-24.6.9.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
115
+ PyGeodesy-24.6.9.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
116
+ PyGeodesy-24.6.9.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.09'
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
@@ -20,7 +20,7 @@ from __future__ import division as _; del _ # PYCHOK semicolon
20
20
  from pygeodesy.basics import isodd, issubclassof, map2, _xscalar
21
21
  from pygeodesy.constants import EPS, EPS2, INT0, _0_0, _0_5, _1_0
22
22
  from pygeodesy.errors import ClipError, _IsnotError, _TypeError, \
23
- _ValueError, _xattr, _xkwds_get
23
+ _ValueError, _xattr, _xkwds_get, _xkwds_pop2
24
24
  from pygeodesy.fmath import favg, hypot, hypot2
25
25
  # from pygeodesy.fsums import fsum1 # _MODS
26
26
  from pygeodesy.interns import NN, _BANG_, _clip_, _clipid_, _COMMASPACE_, \
@@ -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.06.06'
47
47
 
48
48
  _0_EPS = EPS # near-zero, positive
49
49
  _EPS_0 = -EPS # near-zero, negative
@@ -124,30 +124,28 @@ class _LatLonBool(_Named):
124
124
  _next = None # link to the next vertex
125
125
  _prev = None # link to the previous vertex
126
126
 
127
- def __init__(self, lat_ll, lon=None, height=0, clipid=INT0,
128
- wrap=False, **name):
129
- '''New C{LatLon[FHP|GH]} from separate C{lat}, C{lon}, C{height}
130
- and C{clipid} scalars or from a previous C{LatLon[FHP|GH]},
131
- a C{Clip[FHP|GH]4Tuple} or some other C{LatLon} instance.
132
-
133
- @arg lat_ll: Latitude (C{scalar}) or a lat/longitude
134
- (C{LatLon[FHP|GH]}, aC{Clip[FHP|GH]4Tuple}
135
- or some other C{LatLon}).
136
- @kwarg lon: Longitude (C{scalar}), iff B{C{lat_ll}} is
137
- scalar, ignored otherwise.
127
+ def __init__(self, lat_ll, lon=None, height=0, clipid=INT0, wrap=False, **name):
128
+ '''New C{LatLon[FHP|GH]} from separate C{lat}, C{lon}, C{height} and C{clipid}
129
+ scalars or from a previous C{LatLon[FHP|GH]}, C{Clip[FHP|GH]4Tuple} or some
130
+ other C{LatLon} instance.
131
+
132
+ @arg lat_ll: Latitude (C{scalar}) or a lat-/longitude (C{LatLon[FHP|GH]},
133
+ C{Clip[FHP|GH]4Tuple} or some other C{LatLon}).
134
+ @kwarg lon: Longitude (C{scalar}), iff B{C{lat_ll}} is scalar, ignored
135
+ otherwise.
138
136
  @kwarg height: Height (C{scalar}), conventionally C{meter}.
139
137
  @kwarg clipid: Clip identifier (C{int}).
140
- @kwarg wrap: If C{True}, wrap or I{normalize} B{C{lat}}
141
- and B{C{lon}} (C{bool}).
142
- @kwarg name: Optional name (C{str}).
138
+ @kwarg wrap: If C{True}, wrap or I{normalize} B{C{lat}} and B{C{lon}} (C{bool}).
139
+ @kwarg name: Optional C{B{name}=NN} (C{str}).
143
140
  '''
141
+ h, name = _xkwds_pop2(name, h=height) if name else (height, name)
142
+
144
143
  if lon is None:
145
144
  y, x = lat_ll.lat, lat_ll.lon
146
- h = _xattr(lat_ll, height=height)
145
+ h = _xattr(lat_ll, height=h)
147
146
  c = _xattr(lat_ll, clipid=clipid)
148
147
  else:
149
- y, x = lat_ll, lon
150
- h, c = height, clipid
148
+ y, x, c = lat_ll, lon, clipid
151
149
  self.y, self.x = _Wrap.latlon(y, x) if wrap else (y, x)
152
150
  # don't duplicate defaults
153
151
  if self._height != h:
@@ -301,22 +299,17 @@ class LatLonFHP(_LatLonBool):
301
299
  _2split = None # or C{._Clip}
302
300
  _2xing = False
303
301
 
304
- def __init__(self, lat_ll, *lon_h_clipid, **wrap_name):
305
- '''New C{LatLonFHP} from separate C{lat}, C{lon}, C{h}eight
306
- and C{clipid} scalars, or from a previous L{LatLonFHP},
307
- a L{ClipFHP4Tuple} or some other C{LatLon} instance.
308
-
309
- @arg lat_ll: Latitude (C{scalar}) or a lat/longitude
310
- (L{LatLonFHP}, C{LatLon} or L{ClipFHP4Tuple}).
311
- @arg lon_h_clipid: Longitude (C{scalar}), C{h}eight and
312
- C{clipid} iff B{C{lat_ll}} is scalar,
313
- ignored otherwise.
314
- @kwarg wrap_name: Keyword arguments C{B{wrap}=False} and
315
- C{B{name}=NN}. If C{B{wrap} is True}, wrap
316
- or I{normalize} the lat- and longitude
317
- (C{bool}). Optional B{C{name}} (C{str}).
318
- '''
319
- _LatLonBool.__init__(self, lat_ll, *lon_h_clipid, **wrap_name)
302
+ def __init__(self, lat_ll, lon=None, height=0, clipid=INT0, **wrap_name):
303
+ '''New C{LatLonFHP} from separate C{lat}, C{lon}, C{h}eight and C{clipid}
304
+ scalars, or from a previous L{LatLonFHP}, L{ClipFHP4Tuple} or some other
305
+ C{LatLon} instance.
306
+
307
+ @arg lat_ll: Latitude (C{scalar}) or a lat-/longitude (L{LatLonFHP},
308
+ L{ClipFHP4Tuple} or some other C{LatLon}).
309
+
310
+ @see: L{Here<_LatLonBool.__init__>} for further details.
311
+ '''
312
+ _LatLonBool.__init__(self, lat_ll, lon, height, clipid, **wrap_name)
320
313
 
321
314
  def __add__(self, other):
322
315
  _other(self, other)
@@ -364,15 +357,15 @@ class LatLonFHP(_LatLonBool):
364
357
  # return d
365
358
 
366
359
  def isenclosedBy(self, *composites_points, **wrap):
367
- '''Is this point inside one or more composites or polygons based
368
- the U{winding number<https://www.ScienceDirect.com/science/
369
- article/pii/S0925772101000128>}?
360
+ '''Is this point inside one or more composites or polygons based on
361
+ the U{winding number<https://www.ScienceDirect.com/science/article/
362
+ pii/S0925772101000128>}?
370
363
 
371
364
  @arg composites_points: Composites and/or iterables of points
372
365
  (L{ClipFHP4Tuple}, L{ClipGH4Tuple}, L{LatLonFHP},
373
366
  L{LatLonGH} or any C{LatLon}).
374
- @kwarg wrap: If C{True}, wrap or I{normalize} and unroll the
375
- C{points} (C{bool}).
367
+ @kwarg wrap: Optional keyword argument C{B{wrap}=False}, if C{True},
368
+ wrap or I{normalize} and unroll all C{points} (C{bool}).
376
369
 
377
370
  @raise ValueError: Some C{points} invalid.
378
371
 
@@ -462,22 +455,17 @@ class LatLonGH(_LatLonBool):
462
455
  '''
463
456
  _entry = None # entry or exit iff intersection
464
457
 
465
- def __init__(self, lat_ll, *lon_h_clipid, **wrap_name):
466
- '''New C{LatLonGH} from separate C{lat}, C{lon}, C{h}eight
467
- and C{clipid} scalars, or from a previous L{LatLonGH},
468
- L{ClipGH4Tuple} or some other C{LatLon} instance.
469
-
470
- @arg lat_ll: Latitude (C{scalar}) or a lat/longitude
471
- (L{LatLonGH}, C{LatLon} or L{ClipGH4Tuple}).
472
- @arg lon_h_clipid: Longitude (C{scalar}), C{h}eight and
473
- C{clipid} iff B{C{lat_ll}} is scalar,
474
- ignored otherwise.
475
- @kwarg wrap_name: Keyword arguments C{B{wrap}=False} and
476
- C{B{name}=NN}. If C{B{wrap} is True}, wrap
477
- or I{normalize} the lat- and longitude
478
- (C{bool}). Optional B{C{name}} (C{str}).
458
+ def __init__(self, lat_ll, lon=None, height=0, clipid=INT0, **wrap_name):
459
+ '''New C{LatLonGH} from separate C{lat}, C{lon}, C{h}eight and C{clipid}
460
+ scalars, or from a previous L{LatLonGH}, L{ClipGH4Tuple} or some other
461
+ C{LatLon} instance.
462
+
463
+ @arg lat_ll: Latitude (C{scalar}) or a lat-/longitude (L{LatLonGH},
464
+ L{ClipGH4Tuple} or some other C{LatLon}).
465
+
466
+ @see: L{Here<_LatLonBool.__init__>} for further details.
479
467
  '''
480
- _LatLonBool.__init__(self, lat_ll, *lon_h_clipid, **wrap_name)
468
+ _LatLonBool.__init__(self, lat_ll, lon, height, clipid, **wrap_name)
481
469
 
482
470
  def _check(self):
483
471
  # Check-mark this vertex and its link.
@@ -498,8 +486,8 @@ class LatLonGH(_LatLonBool):
498
486
  @arg composites_points: Composites and/or iterables of points
499
487
  (L{ClipFHP4Tuple}, L{ClipGH4Tuple}, L{LatLonFHP},
500
488
  L{LatLonGH} or any C{LatLon}).
501
- @kwarg wrap: If C{True}, wrap or I{normalize} and unroll the
502
- C{points} (C{bool}).
489
+ @kwarg wrap: Optional keyword argument C{B{wrap}=False}, if C{True},
490
+ wrap or I{normalize} and unroll all C{points} (C{bool}).
503
491
 
504
492
  @raise ValueError: Some B{C{points}} invalid.
505
493
  '''
@@ -667,7 +655,7 @@ class _Clip(_Named):
667
655
  return map2(float, _MODS.points.boundsOf(self, wrap=False))
668
656
 
669
657
  def _bltr4eps(self, eps):
670
- # Get the ._bltr4 bounds tuple, oversized.
658
+ # Get the ._bltr4 bounds tuple, slightly oversized.
671
659
  if eps > 0: # > EPS
672
660
  yb, xl, yt, xr = self._bltr4
673
661
  yb, yt = _low_high_eps2(yb, yt, eps)
@@ -806,8 +794,8 @@ class _Clip(_Named):
806
794
 
807
795
  def _noXings(self, Union):
808
796
  # Are all intersections non-CROSSINGs, -BOUNCINGs?
809
- Ls = _L.BOUNCINGs if Union else _L.CROSSINGs
810
- return all(v._label not in Ls for v in self._intersections())
797
+ Xings = _L.BOUNCINGs if Union else _L.CROSSINGs
798
+ return all(v._label not in Xings for v in self._intersections())
811
799
 
812
800
  def _OpenClipError(self, s, e): # PYCHOK no cover
813
801
  # Return a C{CloseError} instance
@@ -1009,9 +997,9 @@ class _CompositeBase(_Named):
1009
997
  '''
1010
998
  self._eps = eps
1011
999
 
1012
- def _10eps(self, **eps):
1000
+ def _10eps(self, **eps_):
1013
1001
  # Get eps for _LatLonBool._2Abs
1014
- e = _xkwds_get(eps, eps=self._eps)
1002
+ e = _xkwds_get(eps_, eps=self._eps)
1015
1003
  if e != EPS:
1016
1004
  e *= _10EPS / EPS
1017
1005
  else:
@@ -1810,7 +1798,7 @@ class BooleanFHP(_CompositeFHP, _BooleanBase):
1810
1798
  @kwarg raiser: If C{True}, throw L{ClipError} exceptions (C{bool}).
1811
1799
  @kwarg esp: Tolerance for eliminating null edges (C{degrees}, same
1812
1800
  units as the B{C{lls}} coordinates).
1813
- @kwarg name: Optional name (C{str}).
1801
+ @kwarg name: Optional C{B{name}=NN} (C{str}).
1814
1802
  '''
1815
1803
  _CompositeFHP.__init__(self, lls, raiser=raiser, eps=eps, **name)
1816
1804
 
@@ -1874,7 +1862,7 @@ class BooleanGH(_CompositeGH, _BooleanBase):
1874
1862
  attempt to handle the latter (C{bool}).
1875
1863
  @kwarg esp: Tolerance for eliminating null edges (C{degrees}, same
1876
1864
  units as the B{C{lls}} coordinates).
1877
- @kwarg name: Optional name (C{str}).
1865
+ @kwarg name: Optional C{B{name}=NN} (C{str}).
1878
1866
  '''
1879
1867
  _CompositeGH.__init__(self, lls, raiser=raiser, xtend=xtend, eps=eps, **name)
1880
1868
 
@@ -1937,9 +1925,8 @@ def isBoolean(obj):
1937
1925
 
1938
1926
  @arg obj: The object (any C{type}).
1939
1927
 
1940
- @return: C{True} if B{C{obj}} is L{BooleanFHP},
1941
- L{BooleanGH} oe some other composite,
1942
- C{False} otherwise.
1928
+ @return: C{True} if B{C{obj}} is L{BooleanFHP}, L{BooleanGH}
1929
+ or some other composite, C{False} otherwise.
1943
1930
  '''
1944
1931
  return isinstance(obj, _CompositeBase)
1945
1932