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.
- {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.9.dist-info}/METADATA +6 -5
- PyGeodesy-24.6.9.dist-info/RECORD +116 -0
- pygeodesy/__init__.py +4 -4
- pygeodesy/auxilats/__init__.py +1 -1
- pygeodesy/auxilats/__main__.py +2 -2
- pygeodesy/auxilats/auxAngle.py +4 -4
- pygeodesy/basics.py +39 -5
- pygeodesy/booleans.py +54 -67
- pygeodesy/cartesianBase.py +138 -147
- pygeodesy/constants.py +3 -3
- pygeodesy/deprecated/functions.py +9 -3
- pygeodesy/ecef.py +67 -72
- pygeodesy/ellipsoidalBase.py +18 -56
- pygeodesy/ellipsoidalGeodSolve.py +2 -2
- pygeodesy/ellipsoidalKarney.py +3 -3
- pygeodesy/ellipsoidalNvector.py +7 -7
- pygeodesy/ellipsoids.py +6 -5
- pygeodesy/errors.py +20 -10
- pygeodesy/etm.py +16 -21
- pygeodesy/fmath.py +9 -20
- pygeodesy/formy.py +60 -74
- pygeodesy/frechet.py +13 -14
- pygeodesy/fsums.py +60 -26
- pygeodesy/geodesicx/__init__.py +1 -1
- pygeodesy/geodesicx/__main__.py +2 -2
- pygeodesy/geodesicx/gx.py +3 -5
- pygeodesy/geodsolve.py +24 -26
- pygeodesy/geohash.py +27 -40
- pygeodesy/geoids.py +1 -1
- pygeodesy/hausdorff.py +17 -18
- pygeodesy/heights.py +17 -30
- pygeodesy/internals.py +15 -14
- pygeodesy/interns.py +3 -9
- pygeodesy/iters.py +2 -2
- pygeodesy/karney.py +8 -7
- pygeodesy/latlonBase.py +189 -176
- pygeodesy/lazily.py +92 -56
- pygeodesy/lcc.py +2 -2
- pygeodesy/ltp.py +93 -55
- pygeodesy/ltpTuples.py +304 -240
- pygeodesy/mgrs.py +51 -24
- pygeodesy/named.py +159 -136
- pygeodesy/namedTuples.py +43 -14
- pygeodesy/nvectorBase.py +20 -23
- pygeodesy/osgr.py +40 -48
- pygeodesy/points.py +11 -11
- pygeodesy/props.py +29 -16
- pygeodesy/rhumb/aux_.py +13 -15
- pygeodesy/rhumb/bases.py +12 -5
- pygeodesy/rhumb/ekx.py +24 -18
- pygeodesy/rhumb/solve.py +20 -70
- pygeodesy/simplify.py +16 -16
- pygeodesy/solveBase.py +35 -32
- pygeodesy/sphericalBase.py +33 -31
- pygeodesy/sphericalTrigonometry.py +17 -17
- pygeodesy/streprs.py +6 -4
- pygeodesy/trf.py +11 -9
- pygeodesy/triaxials.py +71 -50
- pygeodesy/units.py +40 -65
- pygeodesy/unitsBase.py +2 -2
- pygeodesy/ups.py +66 -70
- pygeodesy/utily.py +7 -6
- pygeodesy/utm.py +152 -156
- pygeodesy/utmups.py +38 -38
- pygeodesy/utmupsBase.py +102 -106
- pygeodesy/vector3d.py +34 -36
- pygeodesy/vector3dBase.py +12 -9
- pygeodesy/webmercator.py +43 -51
- PyGeodesy-24.5.24.dist-info/RECORD +0 -116
- {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.9.dist-info}/WHEEL +0 -0
- {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.
|
|
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.
|
|
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-
|
|
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.
|
|
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:
|
|
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.
|
|
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-
|
|
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.
|
|
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.
|
|
592
|
+
__version__ = '24.06.09'
|
|
593
593
|
# see setup.py for similar logic
|
|
594
594
|
version = _DOT_(*_version2(__version__, n=3))
|
|
595
595
|
|
pygeodesy/auxilats/__init__.py
CHANGED
|
@@ -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.
|
|
32
|
+
__version__ = '24.05.31'
|
|
33
33
|
|
|
34
34
|
# **) MIT License
|
|
35
35
|
#
|
pygeodesy/auxilats/__main__.py
CHANGED
|
@@ -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.
|
|
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.
|
|
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)
|
pygeodesy/auxilats/auxAngle.py
CHANGED
|
@@ -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.
|
|
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, **
|
|
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
|
|
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__(**
|
|
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
|
-
|
|
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.
|
|
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
|
|
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 =
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
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=
|
|
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,
|
|
305
|
-
'''New C{LatLonFHP} from separate C{lat}, C{lon}, C{h}eight
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
@arg lat_ll: Latitude (C{scalar}) or a lat
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
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
|
-
|
|
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:
|
|
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,
|
|
466
|
-
'''New C{LatLonGH} from separate C{lat}, C{lon}, C{h}eight
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
@arg lat_ll: Latitude (C{scalar}) or a lat
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
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,
|
|
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:
|
|
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
|
-
|
|
810
|
-
return all(v._label not in
|
|
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, **
|
|
1000
|
+
def _10eps(self, **eps_):
|
|
1013
1001
|
# Get eps for _LatLonBool._2Abs
|
|
1014
|
-
e = _xkwds_get(
|
|
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
|
-
|
|
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
|
|