pygeodesy 24.6.1__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyGeodesy
3
- Version: 24.6.1
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
@@ -159,7 +159,7 @@ and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64
159
159
 
160
160
  For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
161
161
 
162
- *Last updated: June 01, 2024.*
162
+ *Last updated: June 09, 2024.*
163
163
 
164
164
  License
165
165
  =======
@@ -1,78 +1,78 @@
1
1
  pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
- pygeodesy/__init__.py,sha256=OjQWLVL3lst38mHti3vDOiO8W1oKhBMV6a9gnDehDvI,41046
2
+ pygeodesy/__init__.py,sha256=MliQ7bvn1U4dND9REeqtweBQF8d_LWeWIliPvZwBkeg,41046
3
3
  pygeodesy/__main__.py,sha256=UmTd6Qw20g_pgnQjdaHePm-xuOEBi1tUNRLO0eL0-rU,4593
4
4
  pygeodesy/albers.py,sha256=2t8EjmoFWmkdTb4DUHMlECkwTPDS1wpNf92WD_UWXds,31081
5
5
  pygeodesy/azimuthal.py,sha256=RQdZbHoLlHSamhnJ4GMrrRU6UrYmTpa1yK59nYB-A4o,50252
6
6
  pygeodesy/basics.py,sha256=Ez1tApjFnk6vNsYXeZzi28hYsa5AhUYobLS1Anna2g0,29381
7
- pygeodesy/booleans.py,sha256=24uqW-VvA8sJWIC8PfncPIk6EdknrXHZvg7tbk4ChSY,74143
8
- pygeodesy/cartesianBase.py,sha256=P3EUMYKad9HxNSQQJTbPu4QehQu5HDxqOo9-xYsTdp4,47366
7
+ pygeodesy/booleans.py,sha256=_19jhaMqcPdaOfKdSElh50y2JQemXcu9Xcx0CqJ90ZE,73533
8
+ pygeodesy/cartesianBase.py,sha256=-n3g68SO-3399cqyzgDXAolQnQfyOhzFYixhATpWZVI,47216
9
9
  pygeodesy/clipy.py,sha256=3ysIEWQ89HjvLnSlZm0nZAt9EN5AQxIs1sLLM8yF9zM,27675
10
10
  pygeodesy/constants.py,sha256=-weWOuHwE-qI6pYRLcTucI0KNcNJm6vPNzxwrJzACKs,19192
11
11
  pygeodesy/css.py,sha256=RXlLh76tVDFClVh7L1U3FFrLZvjBPFASDf3vq8dHecE,25778
12
12
  pygeodesy/datums.py,sha256=GYbtvPyzDChHYgnNleBqsM-MNwLNQqrO2_MMV4Z9kmI,34006
13
13
  pygeodesy/dms.py,sha256=VujWxk1L2Kp6OMfnu0XPI-j8bnyJ33sFmtB9_MbHqSU,44455
14
- pygeodesy/ecef.py,sha256=2wAvnAtDMLw0nNmAnzl_ebm8ISO5JLcy3dPojwDLWk8,59926
14
+ pygeodesy/ecef.py,sha256=35lTlGfCM4t45IFpjfXHSUXJSyGUEjuqUK-YWRRplLs,59680
15
15
  pygeodesy/elevations.py,sha256=1qZM2w0rDF7jHunydpTEmdLwOwF81KUL9L6RALJC7K4,10807
16
- pygeodesy/ellipsoidalBase.py,sha256=HgZCXrNEji896GuXGfM34w6wdUug4UwEqWCjk4XgnfM,56687
16
+ pygeodesy/ellipsoidalBase.py,sha256=ljWfrFENRFFWxhyvptfipEWM8xKeTs329F2OP4lZvKI,55297
17
17
  pygeodesy/ellipsoidalBaseDI.py,sha256=lPUPP5lVsCzI5RIukxmJ5MH6j2Mb7mdvftQ0tsvsW6g,38585
18
18
  pygeodesy/ellipsoidalExact.py,sha256=a_2C6S6hGRumavy5giRoC9QAhnjqpujiXyu92od6nKo,16951
19
19
  pygeodesy/ellipsoidalGeodSolve.py,sha256=nzT6KOubBOxXRHYafOo5ByQ90VOY1zvaS7byhnwaFqE,16830
20
20
  pygeodesy/ellipsoidalKarney.py,sha256=m07XlZKWvBnOzIKV6P7RNttk8G5s2JRBH2RVF_lg0_k,19243
21
- pygeodesy/ellipsoidalNvector.py,sha256=JuxCUqUtot4e8587Q84Npc1_SdahywTYsybRSMTRtSc,30265
21
+ pygeodesy/ellipsoidalNvector.py,sha256=kRmWclV0NFnEJv3m3TxBNJMu7wyrZZO2iUrNrr-_m9g,30261
22
22
  pygeodesy/ellipsoidalVincenty.py,sha256=Uk93B8GFcMnWiwKUOA84TlLwbBlvzVnsAXAx0cU7cn4,26004
23
23
  pygeodesy/ellipsoids.py,sha256=_fbQy9k_k40Li6jAOlHcSlEPPUnliZsqjIR2be3h2QI,120238
24
24
  pygeodesy/elliptic.py,sha256=-80MbZvRPk-TeA_ggkfXhjuPv07MzsB4HxNF7gbdhB4,42501
25
25
  pygeodesy/epsg.py,sha256=oWHX_QVChE5roktAyXUmPmX49XHiryYmXTHxQzrAprE,8222
26
- pygeodesy/errors.py,sha256=iKiloJ1wvI7v_DZi-yE9f7zWuBlZrw9brCyb9UVIejs,28441
26
+ pygeodesy/errors.py,sha256=3GPp5Axnbnch93VWO-E7uEAAfVnRzbByafNCtKR6g_I,28443
27
27
  pygeodesy/etm.py,sha256=DeX0mZQcHK0KbmOZodp2iv2TEFtRjYziSL9oUEV2YxU,44952
28
28
  pygeodesy/fmath.py,sha256=EOHD0uZ8VULZtXAk8tVeuPaSTozPDCN8GJcemCo-jqg,33709
29
29
  pygeodesy/formy.py,sha256=JKFqC7OlxBvB9sOH9OaWJX4bLkf0dMqW3LcVrwdnt7A,75121
30
- pygeodesy/frechet.py,sha256=YAEWRJbX2rYjB94tvBlBUWK2g1eOHgk1t1dtoi9wtAY,34363
30
+ pygeodesy/frechet.py,sha256=GL4R26drObd1qFyg4hV-L9btdXaIj7xzrKjQUA-7JKc,34342
31
31
  pygeodesy/fstats.py,sha256=4eIhzSCMnn-2nVP3Q-5cCWCI-rvH0CE-zkk9hp3Pvn8,28642
32
- pygeodesy/fsums.py,sha256=uPsR2HGSq6KT9Tvmai7KYl99ei9UkeA0TDAnXd7VIYo,80451
32
+ pygeodesy/fsums.py,sha256=35PAG1f5DO1KgnEWujH5TSbaas6a6eETAeeJxGcUW1A,80453
33
33
  pygeodesy/gars.py,sha256=gVnLQIEofyf_dA8dhpLrmhtIxGhBHZVRw8PbWgYUnnY,11400
34
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
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
43
  pygeodesy/karney.py,sha256=iGoi32hDPdaMR39i6pypcbY2hqvHFVPFROYcjjA-Jrw,35121
44
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
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
54
  pygeodesy/osgr.py,sha256=g-uCTy735aUNh5odTp27PY8CLDnTaquc1_oTs8Qv6zg,30827
55
- pygeodesy/points.py,sha256=izCcYGX09v7Lv7_pDIP4mJMfEXbgFzHdw0LIsW5R3qE,64412
55
+ pygeodesy/points.py,sha256=whMm-9Nzlhr19nPNVkXB0nIg52iMvQ4q2Xg_Eor_Yz0,64415
56
56
  pygeodesy/props.py,sha256=8dGmTpdEABnLbBngmaOIpM0h4NYiBteMOHc_r4iNpAg,21988
57
57
  pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
58
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
59
+ pygeodesy/solveBase.py,sha256=FGuvHvloiyBdE0H50o8rOxtD_n6gCx1Gp31Ckn-N7hk,16852
60
+ pygeodesy/sphericalBase.py,sha256=eIvQz573LR9xPFZK4t5Z0TEVz4aPKI9MdMtgFDbm7Zo,32284
61
61
  pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
62
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
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
68
  pygeodesy/ups.py,sha256=p9F49qQ9tGGf18fnFWJ5DdqQA-FdNe_BcuIGAi5tIoE,23419
69
- pygeodesy/utily.py,sha256=qT7J7kv4CO0vSz705cXIHr4d6muT6xi5ZhR3cjvYXfo,36143
69
+ pygeodesy/utily.py,sha256=u5yGJvNKiNtafrokDaydHzBPe8vAGuy7WXrPP7yNSnk,36149
70
70
  pygeodesy/utm.py,sha256=ZxBvDcCkdnmTRzMOHyhADHdZJSUo0U0xBAsg0rEeTHk,31148
71
71
  pygeodesy/utmups.py,sha256=_GCrF3TljW4k5W9uKwilO1ivPLAbOArxlzi7jPJ4rbc,13226
72
- pygeodesy/utmupsBase.py,sha256=dO7jX0MunLZykTkvN47HuNhHTZNN1OOhNOdC-qxoAk0,18762
72
+ pygeodesy/utmupsBase.py,sha256=rRTSGgBbZiIp_C1v2elAjHKEIjYN1rt27lECXc55hH8,18764
73
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
74
+ pygeodesy/vector3d.py,sha256=t1MVIYCfnP-EdHiV3PAuVDcjLrDNZ3E48UOW-2rw5js,44953
75
+ pygeodesy/vector3dBase.py,sha256=R6rQlqoO8pvzhfjz6jK1llL74c9SldafPXHbdBrPCIA,35732
76
76
  pygeodesy/webmercator.py,sha256=J89VAROczHNpD34AuIWD3vxfogk3ZKoYj1w0lXOCkYA,14968
77
77
  pygeodesy/wgrs.py,sha256=AKUrYRCC67lOeJ6vUDAiGb_mY6R3ZwflXpOaP3wauOg,14774
78
78
  pygeodesy/auxilats/_CX_4.py,sha256=U41njj8Pu8cHMGuoUUVA20QIvRJAq-VGCnyoKJl0Ylo,8662
@@ -109,8 +109,8 @@ pygeodesy/rhumb/__init__.py,sha256=70qKVuNKkddfqMSxZ9c0VCZM1w0_Ka_nBWwtpfxxh2o,2
109
109
  pygeodesy/rhumb/aux_.py,sha256=UJEnoam_MLx2dBxgzjn_zU59f9wwDDNotdsV3ccWZFU,16652
110
110
  pygeodesy/rhumb/bases.py,sha256=J8fXg42CcAI1VR4Hz-MctOwUs029PWRTRIo6sSZYo8I,54089
111
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,,
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
@@ -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.06.01'
592
+ __version__ = '24.06.09'
593
593
  # see setup.py for similar logic
594
594
  version = _DOT_(*_version2(__version__, n=3))
595
595
 
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.29'
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
@@ -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