pygeodesy 24.6.9__py2.py3-none-any.whl → 24.7.7__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.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/METADATA +2 -2
- PyGeodesy-24.7.7.dist-info/RECORD +117 -0
- pygeodesy/__init__.py +39 -32
- pygeodesy/__main__.py +6 -1
- pygeodesy/albers.py +2 -2
- pygeodesy/auxilats/__init__.py +1 -1
- pygeodesy/auxilats/auxAngle.py +40 -39
- pygeodesy/auxilats/auxDLat.py +3 -2
- pygeodesy/auxilats/auxLat.py +16 -18
- pygeodesy/auxilats/auxily.py +1 -1
- pygeodesy/azimuthal.py +10 -10
- pygeodesy/basics.py +16 -4
- pygeodesy/booleans.py +4 -4
- pygeodesy/cartesianBase.py +11 -14
- pygeodesy/css.py +14 -18
- pygeodesy/datums.py +6 -6
- pygeodesy/deprecated/__init__.py +1 -1
- pygeodesy/deprecated/classes.py +25 -4
- pygeodesy/deprecated/datum.py +3 -3
- pygeodesy/deprecated/functions.py +6 -8
- pygeodesy/dms.py +23 -27
- pygeodesy/ecef.py +4 -4
- pygeodesy/elevations.py +4 -4
- pygeodesy/ellipsoidalBase.py +23 -28
- pygeodesy/ellipsoidalBaseDI.py +19 -23
- pygeodesy/ellipsoidalExact.py +3 -3
- pygeodesy/ellipsoidalGeodSolve.py +15 -23
- pygeodesy/ellipsoidalKarney.py +37 -60
- pygeodesy/ellipsoidalNvector.py +38 -44
- pygeodesy/ellipsoidalVincenty.py +11 -14
- pygeodesy/ellipsoids.py +107 -101
- pygeodesy/errors.py +109 -48
- pygeodesy/etm.py +32 -44
- pygeodesy/formy.py +55 -58
- pygeodesy/frechet.py +18 -20
- pygeodesy/fsums.py +3 -3
- pygeodesy/gars.py +3 -4
- pygeodesy/geodesici.py +1696 -0
- pygeodesy/geodesicw.py +15 -15
- pygeodesy/geodesicx/__init__.py +4 -4
- pygeodesy/geodesicx/gx.py +34 -55
- pygeodesy/geodesicx/gxbases.py +20 -8
- pygeodesy/geodesicx/gxline.py +93 -88
- pygeodesy/geodsolve.py +108 -59
- pygeodesy/geohash.py +26 -34
- pygeodesy/geoids.py +28 -37
- pygeodesy/hausdorff.py +17 -18
- pygeodesy/heights.py +2 -2
- pygeodesy/internals.py +46 -13
- pygeodesy/interns.py +2 -2
- pygeodesy/karney.py +78 -15
- pygeodesy/ktm.py +13 -16
- pygeodesy/latlonBase.py +17 -19
- pygeodesy/lazily.py +28 -25
- pygeodesy/lcc.py +28 -31
- pygeodesy/ltp.py +7 -8
- pygeodesy/ltpTuples.py +71 -73
- pygeodesy/mgrs.py +8 -9
- pygeodesy/named.py +19 -10
- pygeodesy/nvectorBase.py +9 -10
- pygeodesy/osgr.py +9 -9
- pygeodesy/points.py +6 -6
- pygeodesy/rhumb/__init__.py +1 -1
- pygeodesy/rhumb/aux_.py +5 -5
- pygeodesy/rhumb/bases.py +30 -31
- pygeodesy/rhumb/ekx.py +3 -4
- pygeodesy/rhumb/solve.py +21 -22
- pygeodesy/solveBase.py +177 -123
- pygeodesy/sphericalBase.py +10 -11
- pygeodesy/sphericalNvector.py +13 -13
- pygeodesy/sphericalTrigonometry.py +86 -97
- pygeodesy/streprs.py +4 -34
- pygeodesy/triaxials.py +48 -43
- pygeodesy/units.py +208 -275
- pygeodesy/unitsBase.py +115 -107
- pygeodesy/ups.py +26 -31
- pygeodesy/utily.py +8 -8
- pygeodesy/utm.py +35 -40
- pygeodesy/utmups.py +43 -46
- pygeodesy/utmupsBase.py +8 -9
- pygeodesy/vector3d.py +26 -27
- pygeodesy/vector3dBase.py +6 -7
- pygeodesy/webmercator.py +19 -21
- pygeodesy/wgrs.py +18 -20
- PyGeodesy-24.6.9.dist-info/RECORD +0 -116
- {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.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.7.7
|
|
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:
|
|
162
|
+
*Last updated: July 07, 2024.*
|
|
163
163
|
|
|
164
164
|
License
|
|
165
165
|
=======
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
+
pygeodesy/__init__.py,sha256=Ig2DWbIX8WlxpVNviEhbft-iQ2xgVWvnOmbGWrpvV8c,41787
|
|
3
|
+
pygeodesy/__main__.py,sha256=VWxepzxGqR5wsHYyIHFSsRMlZ27keX3xyEhBuGDRXxk,4727
|
|
4
|
+
pygeodesy/albers.py,sha256=JXqeWAteV2N601e5R-D7bCsa8qAYv3oWm7M3R4uszXM,31078
|
|
5
|
+
pygeodesy/azimuthal.py,sha256=5tMMKlzKyfGnreOHChrquBi241ZvIOBTUn_pbZCIJWc,50231
|
|
6
|
+
pygeodesy/basics.py,sha256=mSim8pSrRLMFYTnTrJDvkthfrw2MWBmMya3hOHWX4co,29785
|
|
7
|
+
pygeodesy/booleans.py,sha256=5IeA6QWihiPWSv2JnCbMT53ey1WYIU7od5VQ1YUFqX8,73529
|
|
8
|
+
pygeodesy/cartesianBase.py,sha256=WaAod_-nwgX8MjNhu4rr_V9PmEaI0F8gKPCUH4-Olyc,46968
|
|
9
|
+
pygeodesy/clipy.py,sha256=3ysIEWQ89HjvLnSlZm0nZAt9EN5AQxIs1sLLM8yF9zM,27675
|
|
10
|
+
pygeodesy/constants.py,sha256=-weWOuHwE-qI6pYRLcTucI0KNcNJm6vPNzxwrJzACKs,19192
|
|
11
|
+
pygeodesy/css.py,sha256=B_EKq757XdQSUy83HAxEf3H5Iyd7mw3DbJB5Wi3obAc,25651
|
|
12
|
+
pygeodesy/datums.py,sha256=-m9-cvUVOaJ92eeFgc3O54lel3WqnVYcS7o6WCXkNyw,34043
|
|
13
|
+
pygeodesy/dms.py,sha256=QxiRtyc8QSiW-egm6Mrcrgmi_deWz3YnYwIm82JS4TU,44443
|
|
14
|
+
pygeodesy/ecef.py,sha256=yRydxBDiyvfrTTrQLawo-x2eGNcbd8CNQjBWfd3oSI8,59677
|
|
15
|
+
pygeodesy/elevations.py,sha256=4FuVcVNb_D09gmcvUlck344N4f7Jms76SIRrdutvKjk,10801
|
|
16
|
+
pygeodesy/ellipsoidalBase.py,sha256=olFcHvMeoW8Z_0T-Bn3XOpGGatoluaOZ50Fzm-ByAVg,55126
|
|
17
|
+
pygeodesy/ellipsoidalBaseDI.py,sha256=OxbSBntV9xiOgsb-0un0cUYIVoPiIiH-lt3baBkbaS8,38400
|
|
18
|
+
pygeodesy/ellipsoidalExact.py,sha256=GnSMNVnSG4VyORMcQZKxpA-R6HA0gWbTBkEIg1qrVaE,16945
|
|
19
|
+
pygeodesy/ellipsoidalGeodSolve.py,sha256=CqdNNqdwuUNIwZvYVMsk3rnW0U3KMgEoSQj_VIcFBEI,16665
|
|
20
|
+
pygeodesy/ellipsoidalKarney.py,sha256=XIvmSmMt0CGd0LtXxcDHX3KXXR2Mn8cRukefNQErJFU,18720
|
|
21
|
+
pygeodesy/ellipsoidalNvector.py,sha256=BbCWTZr9he3ayC8YEtLRXWVJ-g4HqHBuTVJsM33JKhw,30038
|
|
22
|
+
pygeodesy/ellipsoidalVincenty.py,sha256=gsUFMKgqMZKT02jDm7TEJ_jSHX8d-KJCz91iCfku5kg,25951
|
|
23
|
+
pygeodesy/ellipsoids.py,sha256=fraKj3NPStXablvzejt-LgQsghcp-MgMUvU6nh4L2YI,108034
|
|
24
|
+
pygeodesy/elliptic.py,sha256=-80MbZvRPk-TeA_ggkfXhjuPv07MzsB4HxNF7gbdhB4,42501
|
|
25
|
+
pygeodesy/epsg.py,sha256=oWHX_QVChE5roktAyXUmPmX49XHiryYmXTHxQzrAprE,8222
|
|
26
|
+
pygeodesy/errors.py,sha256=-UnQ1GhkiTR6uBd0z0vd_pFEmjWXlOESRDwMdxY_JD0,30605
|
|
27
|
+
pygeodesy/etm.py,sha256=y3dAqS-iWnbWzmsu4zB7kryAp_I17XEdzNRRk0klTww,44696
|
|
28
|
+
pygeodesy/fmath.py,sha256=EOHD0uZ8VULZtXAk8tVeuPaSTozPDCN8GJcemCo-jqg,33709
|
|
29
|
+
pygeodesy/formy.py,sha256=ZpPaQBQvaFiA-UcrgaiiV_iGxlfTqNdlR1Ngx-1oinY,75032
|
|
30
|
+
pygeodesy/frechet.py,sha256=F6TYbOEYSOFcll6nvp4GhqafUWXh1umAKb1QaMYQtuM,34372
|
|
31
|
+
pygeodesy/fstats.py,sha256=4eIhzSCMnn-2nVP3Q-5cCWCI-rvH0CE-zkk9hp3Pvn8,28642
|
|
32
|
+
pygeodesy/fsums.py,sha256=LzsPQHY3bByOFFXPSo7E8lbYKWy5cif02WJk2JfnMvA,80455
|
|
33
|
+
pygeodesy/gars.py,sha256=gJKZuGPKw8rlRLx1hywZrpGucpHXLvMe8fr8izgSW2s,11370
|
|
34
|
+
pygeodesy/geodesici.py,sha256=SiC7GX1d3rswXL24kuxs6acxMx95lxgIZkhCJ_W0MKA,69988
|
|
35
|
+
pygeodesy/geodesicw.py,sha256=apDkq2MwLCuEccRx39_P2vSqkW8aFaHX-aigj3fbU8Q,27186
|
|
36
|
+
pygeodesy/geodsolve.py,sha256=luJCtc5pfNoSSKZ-OgXIMUjgRH2jo8skskvsy2sAJRA,23171
|
|
37
|
+
pygeodesy/geohash.py,sha256=rOOGOHcTnxIPX2p5ieA1gQ_ZcRlUxjIcroPHa7a85ak,31876
|
|
38
|
+
pygeodesy/geoids.py,sha256=oxn0MSgbvwBkrwyg1vS7PhhYZ_zbjLxC50W-8FTIxeU,80680
|
|
39
|
+
pygeodesy/hausdorff.py,sha256=-aKtRbMefDSoIk4V3wCvNrXPZ7Bqk1P6-XuGuI7o8Zc,34770
|
|
40
|
+
pygeodesy/heights.py,sha256=9kvyJj0-D3syZMdHNDXIfZT3MyhHH2fcqW_y-u7Tn2M,43197
|
|
41
|
+
pygeodesy/internals.py,sha256=YUcf9wWXT7XztviEBN2uBww8Bt7gnqks2sAZt7k_j3w,20426
|
|
42
|
+
pygeodesy/interns.py,sha256=kReVkCWA_rw8GyaYFVRI9dfdXu7MF9nD1MgoXsdsK7I,23273
|
|
43
|
+
pygeodesy/iters.py,sha256=xPH0ytomvJeKHu717Fjzi3QbRrEikO6n7vqkY_IDz1k,20311
|
|
44
|
+
pygeodesy/karney.py,sha256=e11p40pfXocdmFpVROjv4NTowxjAmL4bNeNTDmF095I,37745
|
|
45
|
+
pygeodesy/ktm.py,sha256=u0xjvqhG2k18jg7bNclRr3D9umiZXKXQGRjmL_VX4yY,27437
|
|
46
|
+
pygeodesy/latlonBase.py,sha256=M-Xe4KK8aOnQUxNJkODlTa5ApzhqXCggc_d8HlMdnIc,78987
|
|
47
|
+
pygeodesy/lazily.py,sha256=HCrqdp_ZT_aTREO47nmlOch5kNHyL0IOfij40HL5hig,46842
|
|
48
|
+
pygeodesy/lcc.py,sha256=oDooTzFHnqsMtSKmmmfEbypHpdlPltfo7Mt0pAO4-_A,25669
|
|
49
|
+
pygeodesy/ltp.py,sha256=gQLZwcSIiXJrbRlaWnxAX8AK2VzH9l3jDqoNb3jcVD4,50773
|
|
50
|
+
pygeodesy/ltpTuples.py,sha256=r3uHMBCxr31IsCMp_OtpevQPmULJhucn8JZ2bGjuiVI,58338
|
|
51
|
+
pygeodesy/mgrs.py,sha256=w50bvM3qDtHDBDBRQ_EgZnPn7vxVXgoFnleeZgefkVk,29679
|
|
52
|
+
pygeodesy/named.py,sha256=_2zgvL0cPg2JL3JpyWMZ7cc9e_I0y_4XPVYb2e7zEZg,52243
|
|
53
|
+
pygeodesy/namedTuples.py,sha256=UDmL4kCihvf8tIUVXzGzRLzL_1BLuyqm04pite6YUuk,28495
|
|
54
|
+
pygeodesy/nvectorBase.py,sha256=7BvbRQbtTpDsE7BMHt3vpbuCQZUV_k79HvygbG7ak10,28683
|
|
55
|
+
pygeodesy/osgr.py,sha256=O8mLlmnQkcyXU4xczLGD1zhSyt8RQ3EsXctUnCIjO8U,30819
|
|
56
|
+
pygeodesy/points.py,sha256=GirmbiqjD7Q0Z4SDySQO__Jgun-i8vMdJ81U2Kz8V0w,64408
|
|
57
|
+
pygeodesy/props.py,sha256=8dGmTpdEABnLbBngmaOIpM0h4NYiBteMOHc_r4iNpAg,21988
|
|
58
|
+
pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
|
|
59
|
+
pygeodesy/simplify.py,sha256=NybC-pfze0ObEm4ZCz6ZQrjJlQ-QyA83E6mSJqCuKq4,25223
|
|
60
|
+
pygeodesy/solveBase.py,sha256=SRxXd7M3e3VCe9om5XEYuIJ_AoDlP26AnRzDuDbIgUs,18726
|
|
61
|
+
pygeodesy/sphericalBase.py,sha256=YvjMZmmfy9pZeKHbY-ca0oi-Jy-OxsG9dhefy5LTjRA,32237
|
|
62
|
+
pygeodesy/sphericalNvector.py,sha256=MiWcCy5CdvXsCa3963GeUMEnSYGhBiXzkoAEX_tGX4Q,56952
|
|
63
|
+
pygeodesy/sphericalTrigonometry.py,sha256=Jf3FUUYEWXbNkiagr0HyMJ6E-cNghnTjcdgntTm28RE,64076
|
|
64
|
+
pygeodesy/streprs.py,sha256=xudQ6zi5jFT_CmstSPysjxpZKyLBQNkUk1ETh0uvQ04,23030
|
|
65
|
+
pygeodesy/trf.py,sha256=CRFHmu0lFNtc41fddXavEkHmgnTFWEqR4RTFodcFKsw,119022
|
|
66
|
+
pygeodesy/triaxials.py,sha256=SLAlzdpOa8kFSkpP-lhL-swzsZkuqufZET_gJtoA_54,62750
|
|
67
|
+
pygeodesy/units.py,sha256=mTn0APS0SW9fKn3IYf5usV63Xaw2B9DzkwefPNVu-Es,34607
|
|
68
|
+
pygeodesy/unitsBase.py,sha256=yT7dgfwxtd1hHEn02NwPAdStsVWDfPH-Qdfrhvje7Yw,14057
|
|
69
|
+
pygeodesy/ups.py,sha256=zapIvzoVuj_FDGC6sr8O8ynPhfqXwUg-EFCVnJdM9Eo,23329
|
|
70
|
+
pygeodesy/utily.py,sha256=Zb6L9unzHHhp67znmQLLdizvyX6p4eczR1PDtcyWH-s,36189
|
|
71
|
+
pygeodesy/utm.py,sha256=lCp7mNEaJNrAYnbdPaNUKkhbsX_GdssTEkp68uYdMLI,31091
|
|
72
|
+
pygeodesy/utmups.py,sha256=g2Z_aEOt6fhV9f4fASlW4_K_O_P4zBsBbWfQV11mIKo,13196
|
|
73
|
+
pygeodesy/utmupsBase.py,sha256=TJJeHSASjggUpzdpxwrOTH1tfHvDBxly47GJL27D8zY,18729
|
|
74
|
+
pygeodesy/vector2d.py,sha256=zJq5PB777_mFJpKD-rt_T0Vm4SNbVwF7pc3KxX8uCT8,34994
|
|
75
|
+
pygeodesy/vector3d.py,sha256=uDNnYSj4BL_Nec6SkyxXDbYaNjvI15HQX0xh25dRLI8,44883
|
|
76
|
+
pygeodesy/vector3dBase.py,sha256=Om0Uq1zgjuJ6slj12KiFus_tobjYTPxgVZejNd0YzFI,35729
|
|
77
|
+
pygeodesy/webmercator.py,sha256=stO_thswe_D4uxXWH43YWSN6-WWWpv_uIuOwvBIp8Ug,14932
|
|
78
|
+
pygeodesy/wgrs.py,sha256=k2OhMue84yH_xaezo0sdxL1-X7fZRqZZ4-Rl1reDYSM,14792
|
|
79
|
+
pygeodesy/auxilats/_CX_4.py,sha256=U41njj8Pu8cHMGuoUUVA20QIvRJAq-VGCnyoKJl0Ylo,8662
|
|
80
|
+
pygeodesy/auxilats/_CX_6.py,sha256=x4hrHxunjqqkEsZbVW1dyn3R5mR8EWYOuX77RzDEyh4,14856
|
|
81
|
+
pygeodesy/auxilats/_CX_8.py,sha256=t-OO48t4cCOsOgMi1FoyPw2DQqybVZFsgQMqAYP-jKY,25304
|
|
82
|
+
pygeodesy/auxilats/__init__.py,sha256=YNp41rRC5DmAhBx4RPqoqh4yxD9Vjf9Wk_USwqeZYcE,2881
|
|
83
|
+
pygeodesy/auxilats/__main__.py,sha256=Vuj1YSp1LV0zejVzi6EYauka1Dv8kwOHI_aeHxQEVYk,2899
|
|
84
|
+
pygeodesy/auxilats/auxAngle.py,sha256=8Gsae1URFCfD6t0oNI1ZJmgtik_EOvSAwrNmAZSMm2I,16729
|
|
85
|
+
pygeodesy/auxilats/auxDLat.py,sha256=3sq7Wc-ykpVbldNh10IZ3tIlJ7DcQFDlmZ4nOhJEgo0,10969
|
|
86
|
+
pygeodesy/auxilats/auxDST.py,sha256=bdNEh3TdABWH7qW6ngZx5SnzDM3B5rtPLvYhvCnFsKc,10497
|
|
87
|
+
pygeodesy/auxilats/auxLat.py,sha256=QeTx8dqov1NwNSEam9VC_wq36nRCUpbJpY4hH1NvyNg,32493
|
|
88
|
+
pygeodesy/auxilats/auxily.py,sha256=spSRS9beouT-qH98QhqMk9sm2qKubW8kwNYVWkFu3iU,8234
|
|
89
|
+
pygeodesy/deprecated/__init__.py,sha256=cBYqbh5Njkd5SnaJDaMUP6PL66HfLWii_JoLjnKfnP4,2815
|
|
90
|
+
pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8,1655
|
|
91
|
+
pygeodesy/deprecated/classes.py,sha256=gktUr5qYXCm8ztH6lfzFgaHKqMiw1tHc1Vw6i6DEvNA,12377
|
|
92
|
+
pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
|
|
93
|
+
pygeodesy/deprecated/datum.py,sha256=s8Hke053RucP5ACvg3gdX8weQfGM0x59pQyHpY11eOs,1875
|
|
94
|
+
pygeodesy/deprecated/functions.py,sha256=EZMZe9WGkcbwmLDoWO2xKJyFlUkWAAMxmlbtCLa28lM,13866
|
|
95
|
+
pygeodesy/deprecated/nvector.py,sha256=_dZf84RdmPr7e7i8Yi683R-8Mqn0ipTqIsDhNl29hGo,2117
|
|
96
|
+
pygeodesy/deprecated/rhumbBase.py,sha256=d7YKW--dnRpobB2CSvhFsntWF0B5-HYJqID2pv5lD5k,1375
|
|
97
|
+
pygeodesy/deprecated/rhumbaux.py,sha256=n29xazYMbVG4MJkLjAGu8B88bbcFF5xnvuj9xSxjfIk,1428
|
|
98
|
+
pygeodesy/deprecated/rhumbsolve.py,sha256=QprjRfo5T1_C4ovaa1cffAcmNczzkhGIfmybAup9a9w,1431
|
|
99
|
+
pygeodesy/deprecated/rhumbx.py,sha256=OS0p_meaoVrpZe5UhK6qZljjlrGpL0pCHWw8gofw7ks,1425
|
|
100
|
+
pygeodesy/geodesicx/_C4_24.py,sha256=kS4XMR9m7iBs01V8K0Oz9qTYmjN-icIQGpc_8iwVhig,90750
|
|
101
|
+
pygeodesy/geodesicx/_C4_27.py,sha256=bPbj2Ckrn9WJglm3SNTXyMkULNwANM0tCQ-LKxP1L58,134258
|
|
102
|
+
pygeodesy/geodesicx/_C4_30.py,sha256=QZO8p971ztJwDGLOaJYgIhklztz9GlqbtS-xRP_E7o4,201964
|
|
103
|
+
pygeodesy/geodesicx/__init__.py,sha256=4qAIrE-cnOvi1B38iK-52PB2BpB1zxsVYEryHm4QTJk,2478
|
|
104
|
+
pygeodesy/geodesicx/__main__.py,sha256=JnKrYmg1q9J5wRRqUy-dQ9abj2-2jpWtrolMMaFfWiY,3176
|
|
105
|
+
pygeodesy/geodesicx/gx.py,sha256=0ohLWR_xllBfHyMzcwHTSgKE8FW4IH22IEXo3uAI-eI,60585
|
|
106
|
+
pygeodesy/geodesicx/gxarea.py,sha256=-Kwe6spe2MSQbeLFDd6UN2NOi4JOjYhHAEzonOU3u4A,19409
|
|
107
|
+
pygeodesy/geodesicx/gxbases.py,sha256=Awt9zc1lyPS0vp4df2u4H_rhMeFu1pJaZPhb1iMoc-Q,5693
|
|
108
|
+
pygeodesy/geodesicx/gxline.py,sha256=ZmRIO08IY4s0xJnCRrx2rF3z6XZ9_joUom77P_TsRaA,27514
|
|
109
|
+
pygeodesy/rhumb/__init__.py,sha256=kTuNSKiiQyXvQdYc5KUd5admuKJ2QmDCWQwkIobnM-w,2207
|
|
110
|
+
pygeodesy/rhumb/aux_.py,sha256=lOjpEU3Pe2I5DwC933UCf-SW73l5NMuDACeZhbVs3lE,16657
|
|
111
|
+
pygeodesy/rhumb/bases.py,sha256=awpP60K6EOzS753oXM-h9S6paS6FwoCnco8Zt8n81jY,54162
|
|
112
|
+
pygeodesy/rhumb/ekx.py,sha256=JsmdCatWKqsffF8jCh4HDu5IKt_kHq1qUdmP1LMuofY,24044
|
|
113
|
+
pygeodesy/rhumb/solve.py,sha256=bnmoPZUUw6sPhZ2HDigvPaE-L5M7ddEPf3ZdWvfBX5k,24043
|
|
114
|
+
PyGeodesy-24.7.7.dist-info/METADATA,sha256=22FKDjrVIiF_zPFqvlpXLoJ4QTv58ARwic_X9u639as,19411
|
|
115
|
+
PyGeodesy-24.7.7.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
116
|
+
PyGeodesy-24.7.7.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
117
|
+
PyGeodesy-24.7.7.dist-info/RECORD,,
|
pygeodesy/__init__.py
CHANGED
|
@@ -101,6 +101,11 @@ and L{GnomonicGeodSolve} depend on I{Karney}'s C++ utility U{GeodSolve
|
|
|
101
101
|
<https://GeographicLib.SourceForge.io/C++/doc/GeodSolve.1.html>} to be executable and set with
|
|
102
102
|
env variable C{PYGEODESY_GEODSOLVE} or with property L{Ellipsoid.geodsolve}.
|
|
103
103
|
|
|
104
|
+
Class L{Intersectool} and module L{geodesici} need I{Karney}'s C++ utility U{IntersectTool
|
|
105
|
+
<https://GeographicLib.SourceForge.io/C++/doc/IntersectTool.1.html>} to be executable and set with
|
|
106
|
+
env variable C{PYGEODESY_INTERSECTTOOL}.
|
|
107
|
+
|
|
108
|
+
|
|
104
109
|
To compare C{MGRS} results from modules L{mgrs} and C{testMgrs} with I{Karney}'s C++ utility
|
|
105
110
|
U{GeoConvert<https://GeographicLib.SourceForge.io/C++/doc/GeoConvert.1.html>}, the latter must
|
|
106
111
|
be executable and set with env variable C{PYGEODESY_GEOCONVERT}.
|
|
@@ -145,7 +150,7 @@ Test coverage has been measured with U{coverage<https://PyPI.org/project/coverag
|
|
|
145
150
|
|
|
146
151
|
PyPy 7.3.12 (Python 3.10.12), Python 3.11.5, 3.10.8 and 3.9.6 ran on Apple M1 Silicon (C{arm64}), I{natively}.
|
|
147
152
|
Python 3.8.10 and 2.7.18 ran on Intel (C{x86_64}) or Intel I{emulation} ("C{arm64_x86_64}", see function
|
|
148
|
-
L{pygeodesy.machine}).
|
|
153
|
+
L{machine<pygeodesy.machine>}).
|
|
149
154
|
|
|
150
155
|
The tests also ran with Python 3.11.5 (and U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0) on
|
|
151
156
|
U{Debian 11<https://Cirrus-CI.com/github/mrJean1/PyGeodesy/master>} in 64-bit only and with Python 3.11.5,
|
|
@@ -192,34 +197,35 @@ Env variables
|
|
|
192
197
|
|
|
193
198
|
The following environment variables are observed by C{PyGeodesy}:
|
|
194
199
|
|
|
195
|
-
- C{PYGEODESY_EXCEPTION_CHAINING} - see module L{pygeodesy.errors}.
|
|
196
|
-
- C{PYGEODESY_FMT_FORM} - see module L{pygeodesy.dms}.
|
|
197
|
-
- C{PYGEODESY_FSUM_RESIDUAL} - see module L{pygeodesy.fsums} and class L{pygeodesy.Fsum}.
|
|
198
|
-
- C{PYGEODESY_GEOCONVERT} - see module L{pygeodesy.mgrs}.
|
|
199
|
-
- C{PYGEODESY_GEODSOLVE} - see module L{pygeodesy.geodsolve}.
|
|
200
|
-
- C{
|
|
201
|
-
- C{
|
|
202
|
-
- C{
|
|
203
|
-
- C{
|
|
200
|
+
- C{PYGEODESY_EXCEPTION_CHAINING} - see module L{errors<pygeodesy.errors>}.
|
|
201
|
+
- C{PYGEODESY_FMT_FORM} - see module L{dms<pygeodesy.dms>}.
|
|
202
|
+
- C{PYGEODESY_FSUM_RESIDUAL} - see module L{fsums<pygeodesy.fsums>} and class L{Fsum<pygeodesy.Fsum>}.
|
|
203
|
+
- C{PYGEODESY_GEOCONVERT} - see module L{mgrs<pygeodesy.mgrs>}.
|
|
204
|
+
- C{PYGEODESY_GEODSOLVE} - see module L{geodsolve<pygeodesy.geodsolve>}.
|
|
205
|
+
- C{PYGEODESY_INTERSECTTOOL} - see modules L{geodesici<pygeodesy.geodesici>}.
|
|
206
|
+
- C{PYGEODESY_LAZY_IMPORT} - see module L{lazily<pygeodesy.lazily>} and variable L{isLazy<pygeodesy.isLazy>}.
|
|
207
|
+
- C{PYGEODESY_NOTIMPLEMENTED} - C{__special__} methods return C{NotImplemented} if set to "std".
|
|
208
|
+
- C{PYGEODESY_RHUMBSOLVE} - see module L{rhumb.solve<pygeodesy.rhumb.solve>}.
|
|
209
|
+
- C{PYGEODESY_UPS_POLES} - see modules L{ups<pygeodesy.ups>} and L{mgrs<pygeodesy.mgrs>}.
|
|
204
210
|
|
|
205
211
|
and these to control standard or I{named} C{repr}esentations:
|
|
206
212
|
|
|
207
|
-
- C{PYGEODESY_BEARING_STD_REPR} - see method L{pygeodesy.Bearing}C{.__repr__}.
|
|
208
|
-
- C{PYGEODESY_BOOL_STD_REPR} - see method L{pygeodesy.Bool}C{.__repr__}.
|
|
209
|
-
- C{PYGEODESY_DEGREES_STD_REPR} - see method L{pygeodesy.Degrees}C{.__repr__}.
|
|
210
|
-
- C{PYGEODESY_FLOAT_STD_REPR} - see method L{pygeodesy.Float}C{.__repr__}.
|
|
211
|
-
- C{PYGEODESY_INT_STD_REPR} - see method L{pygeodesy.Int}C{.__repr__}.
|
|
212
|
-
- C{PYGEODESY_METER_STD_REPR} - see method L{pygeodesy.Meter}C{.__repr__}.
|
|
213
|
-
- C{PYGEODESY_RADIANS_STD_REPR} - see method L{pygeodesy.Radians}C{.__repr__}.
|
|
214
|
-
- C{PYGEODESY_STR_STD_REPR} - see method L{pygeodesy.Str}C{.__repr__}.
|
|
213
|
+
- C{PYGEODESY_BEARING_STD_REPR} - see method L{Bearing<pygeodesy.Bearing>}C{.__repr__}.
|
|
214
|
+
- C{PYGEODESY_BOOL_STD_REPR} - see method L{Bool<pygeodesy.Bool>}C{.__repr__}.
|
|
215
|
+
- C{PYGEODESY_DEGREES_STD_REPR} - see method L{Degrees<pygeodesy.Degrees>}C{.__repr__}.
|
|
216
|
+
- C{PYGEODESY_FLOAT_STD_REPR} - see method L{Float<pygeodesy.Float>}C{.__repr__}.
|
|
217
|
+
- C{PYGEODESY_INT_STD_REPR} - see method L{Int<pygeodesy.Int>}C{.__repr__}.
|
|
218
|
+
- C{PYGEODESY_METER_STD_REPR} - see method L{Meter<pygeodesy.Meter>}C{.__repr__}.
|
|
219
|
+
- C{PYGEODESY_RADIANS_STD_REPR} - see method L{Radians<pygeodesy.Radians>}C{.__repr__}.
|
|
220
|
+
- C{PYGEODESY_STR_STD_REPR} - see method L{Str<pygeodesy.Str>}C{.__repr__}.
|
|
215
221
|
|
|
216
222
|
plus during development:
|
|
217
223
|
|
|
218
224
|
- C{PYGEODESY_FOR_DOCS} - for extended documentation by C{epydoc}.
|
|
219
|
-
- C{PYGEODESY_GEOGRAPHICLIB} - see module L{pygeodesy.karney}.
|
|
220
|
-
- C{PYGEODESY_WARNINGS} - see module L{pygeodesy.props} and function L{pygeodesy.DeprecationWarnings}.
|
|
221
|
-
- C{PYGEODESY_XPACKAGES} - see module L{pygeodesy.basics}.
|
|
222
|
-
- C{PYTHONDEVMODE} - see modules L{pygeodesy.errors} and L{pygeodesy.props}.
|
|
225
|
+
- C{PYGEODESY_GEOGRAPHICLIB} - see module L{karney<pygeodesy.karney>}.
|
|
226
|
+
- C{PYGEODESY_WARNINGS} - see module L{props<pygeodesy.props>} and function L{DeprecationWarnings<pygeodesy.DeprecationWarnings>}.
|
|
227
|
+
- C{PYGEODESY_XPACKAGES} - see module L{basics<pygeodesy.basics>}.
|
|
228
|
+
- C{PYTHONDEVMODE} - see modules L{errors<pygeodesy.errors>} and L{props<pygeodesy.props>}.
|
|
223
229
|
|
|
224
230
|
and:
|
|
225
231
|
|
|
@@ -233,8 +239,7 @@ and:
|
|
|
233
239
|
License
|
|
234
240
|
=======
|
|
235
241
|
|
|
236
|
-
**) U{Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
237
|
-
<https://OpenSource.org/licenses/MIT>}
|
|
242
|
+
**) U{Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.<https://OpenSource.org/licenses/MIT>}
|
|
238
243
|
|
|
239
244
|
C{Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
|
240
245
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
|
@@ -298,14 +303,14 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.}
|
|
|
298
303
|
@var F_RAD__: Convert degrees to radians and format as signed "-/+RR" I{without} symbol, I{without} suffix (C{str}).
|
|
299
304
|
|
|
300
305
|
@var DIG: System's M{float decimal digits} = 15 (C{int}).
|
|
301
|
-
@var INF: Infinity (C{float}), see functions L{pygeodesy.isinf} and L{pygeodesy.isfinite} and C{NINF}.
|
|
302
|
-
@var INT0: C{int(0)}, missing Z-components, C{if B{z}=B{INT0}}, see functions L{pygeodesy.isint0}, L{pygeodesy.meeus2}
|
|
306
|
+
@var INF: Infinity (C{float}), see functions L{isinf<pygeodesy.isinf>} and L{isfinite<pygeodesy.isfinite>} and C{NINF}.
|
|
307
|
+
@var INT0: C{int(0)}, missing Z-components, C{if B{z}=B{INT0}}, see functions L{isint0<pygeodesy.isint0>}, L{meeus2<pygeodesy.meeus2>}
|
|
303
308
|
@var MANT_DIG: System's M{float mantissa bits} = 53 (C{int}).
|
|
304
309
|
@var MAX: System's M{float max} ≈ 1.798e+308 (C{float}).
|
|
305
310
|
@var MIN: System's M{float min} ≈ 2.225e-308 (C{float}).
|
|
306
|
-
@var NAN: Not-A-Number (C{float}), see function L{pygeodesy.isnan}.
|
|
307
|
-
@var NEG0: Negative 0.0 (C{float}), see function L{pygeodesy.isneg0}.
|
|
308
|
-
@var NINF: Negative infinity (C{float}), see function L{pygeodesy.isninf} and C{INF}.
|
|
311
|
+
@var NAN: Not-A-Number (C{float}), see function L{isnan<pygeodesy.isnan>}.
|
|
312
|
+
@var NEG0: Negative 0.0 (C{float}), see function L{isneg0<pygeodesy.isneg0>}.
|
|
313
|
+
@var NINF: Negative infinity (C{float}), see function L{isninf<pygeodesy.isninf>} and C{INF}.
|
|
309
314
|
@var NN: Empty (C{str}), U{I{Nomen Nescio}<https://Wiktionary.org/wiki/N.N.>}.
|
|
310
315
|
|
|
311
316
|
@var PI: Constant M{math.pi} (C{float}).
|
|
@@ -331,9 +336,9 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.}
|
|
|
331
336
|
@var S_DEG: Degrees symbol, default C{"°"}
|
|
332
337
|
@var S_MIN: Minutes symbol, default C{"′"} aka I{PRIME}
|
|
333
338
|
@var S_SEC: Seconds symbol, default C{"″"} aka I{DOUBLE_PRIME}
|
|
334
|
-
@var S_RAD: Radians symbol, default C{""} aka L{pygeodesy.NN}
|
|
339
|
+
@var S_RAD: Radians symbol, default C{""} aka L{NN<pygeodesy.NN>}
|
|
335
340
|
@var S_DMS: If C{True} include, otherwise cancel all DMS symbols, default C{True}.
|
|
336
|
-
@var S_SEP: Separator between C{deg°|min′|sec″|suffix}, default C{""} aka L{pygeodesy.NN}
|
|
341
|
+
@var S_SEP: Separator between C{deg°|min′|sec″|suffix}, default C{""} aka L{NN<pygeodesy.NN>}
|
|
337
342
|
|
|
338
343
|
@var Conics: Registered, predefined conics (C{enum-like}).
|
|
339
344
|
@var Datums: Registered, predefined datums (C{enum-like}).
|
|
@@ -413,6 +418,7 @@ if _init__all__ and not _lazy_import2: # import and set __all__
|
|
|
413
418
|
import pygeodesy.fstats as fstats # PYCHOK exported
|
|
414
419
|
import pygeodesy.fsums as fsums # PYCHOK exported
|
|
415
420
|
import pygeodesy.gars as gars # PYCHOK exported
|
|
421
|
+
import pygeodesy.geodesici as geodesici # PYCHOK exported
|
|
416
422
|
import pygeodesy.geodesicw as geodesicw # PYCHOK exported
|
|
417
423
|
import pygeodesy.geodesicx as geodesicx # PYCHOK exported
|
|
418
424
|
import pygeodesy.geodsolve as geodsolve # PYCHOK exported
|
|
@@ -497,6 +503,7 @@ if _init__all__ and not _lazy_import2: # import and set __all__
|
|
|
497
503
|
from pygeodesy.fstats import * # PYCHOK __all__
|
|
498
504
|
from pygeodesy.fsums import * # PYCHOK __all__
|
|
499
505
|
from pygeodesy.gars import Garef, GARSError # PYCHOK lazily
|
|
506
|
+
from pygeodesy.geodesici import * # PYCHOK __all__
|
|
500
507
|
from pygeodesy.geodesicw import * # PYCHOK __all__
|
|
501
508
|
from pygeodesy.geodesicx import * # PYCHOK __all__
|
|
502
509
|
from pygeodesy.geodsolve import * # PYCHOK __all__
|
|
@@ -589,7 +596,7 @@ else:
|
|
|
589
596
|
|
|
590
597
|
from pygeodesy.internals import _version2, _DOT_ # PYCHOK import
|
|
591
598
|
# from pygeodesy.interns import _DOT_ # from .internals
|
|
592
|
-
__version__ = '24.
|
|
599
|
+
__version__ = '24.07.07'
|
|
593
600
|
# see setup.py for similar logic
|
|
594
601
|
version = _DOT_(*_version2(__version__, n=3))
|
|
595
602
|
|
pygeodesy/__main__.py
CHANGED
|
@@ -5,7 +5,7 @@ u'''Print L{pygeodesy} version, etc. using C{python -m pygeodesy}.
|
|
|
5
5
|
'''
|
|
6
6
|
|
|
7
7
|
__all__ = ()
|
|
8
|
-
__version__ = '24.
|
|
8
|
+
__version__ = '24.07.07'
|
|
9
9
|
|
|
10
10
|
from os.path import basename, dirname
|
|
11
11
|
|
|
@@ -42,6 +42,11 @@ def _main(): # PYCHOK no cover
|
|
|
42
42
|
v.append(_name_version(pkg))
|
|
43
43
|
|
|
44
44
|
v = _Pythonarchine()
|
|
45
|
+
try:
|
|
46
|
+
import coverage as pkg
|
|
47
|
+
v.append(_name_version(pkg))
|
|
48
|
+
except ImportError:
|
|
49
|
+
pass
|
|
45
50
|
_nv(_xgeographiclib, v)
|
|
46
51
|
_nv(_xnumpy, v)
|
|
47
52
|
_nv(_xscipy, v)
|
pygeodesy/albers.py
CHANGED
|
@@ -38,7 +38,7 @@ from pygeodesy.utily import atan1, atan1d, degrees360, sincos2, sincos2d, \
|
|
|
38
38
|
from math import atan2, atanh, degrees, fabs, radians, sqrt
|
|
39
39
|
|
|
40
40
|
__all__ = _ALL_LAZY.albers
|
|
41
|
-
__version__ = '24.
|
|
41
|
+
__version__ = '24.06.11'
|
|
42
42
|
|
|
43
43
|
_k1_ = 'k1'
|
|
44
44
|
_NUMIT = 8 # XXX 4?
|
|
@@ -354,7 +354,7 @@ class _AlbersBase(_NamedBase):
|
|
|
354
354
|
and optional, additional B{C{LatLon}} keyword
|
|
355
355
|
arguments, ignored if C{B{LatLon} is None}.
|
|
356
356
|
|
|
357
|
-
@return: The geodetic (C{LatLon}) or if B{
|
|
357
|
+
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
358
358
|
L{Albers7Tuple}C{(x, y, lat, lon, gamma, scale, datum)}.
|
|
359
359
|
|
|
360
360
|
@note: The origin latitude is returned by C{property lat0}. No
|
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.
|
|
32
|
+
__version__ = '24.06.16'
|
|
33
33
|
|
|
34
34
|
# **) MIT License
|
|
35
35
|
#
|
pygeodesy/auxilats/auxAngle.py
CHANGED
|
@@ -14,14 +14,14 @@ under the MIT/X11 License. For more information, see the U{GeographicLib
|
|
|
14
14
|
# make sure int/int division yields float quotient, see .basics
|
|
15
15
|
from __future__ import division as _; del _ # PYCHOK semicolon
|
|
16
16
|
|
|
17
|
-
from pygeodesy.auxilats.auxily import Aux, _Aux2Greek
|
|
18
|
-
from pygeodesy.basics import _xinstanceof
|
|
17
|
+
from pygeodesy.auxilats.auxily import Aux, _Aux2Greek, AuxError
|
|
18
|
+
from pygeodesy.basics import map1, map2, _xinstanceof
|
|
19
19
|
from pygeodesy.constants import EPS, _INF_NAN_NINF, MAX, NAN, _0_0, _0_5, _1_0, \
|
|
20
20
|
_copysign_1_0, _over, _pos_self, isfinite, isnan
|
|
21
|
-
from pygeodesy.errors import AuxError
|
|
21
|
+
# from pygeodesy.errors import AuxError # from .auxilats.auxily
|
|
22
22
|
from pygeodesy.fmath import hypot, unstr
|
|
23
23
|
from pygeodesy.fsums import _add_op_, _iadd_op_, _isub_op_, _sub_op_
|
|
24
|
-
from pygeodesy.named import
|
|
24
|
+
from pygeodesy.named import _Named, _ALL_DOCS, _MODS
|
|
25
25
|
# from pygeodesy.lazily import _ALL_DOCS, _ALL_MODS as _MODS # from .named
|
|
26
26
|
from pygeodesy.props import Property, Property_RO, property_RO, _update_all
|
|
27
27
|
# from pygeodesy.streprs import unstr # from .fmath
|
|
@@ -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.
|
|
34
|
+
__version__ = '24.06.16'
|
|
35
35
|
|
|
36
36
|
_0_INF_NAN_NINF = (0, _0_0) + _INF_NAN_NINF
|
|
37
37
|
_MAX_2 = MAX * _0_5 # PYCHOK used!
|
|
@@ -44,38 +44,37 @@ class AuxAngle(_Named):
|
|
|
44
44
|
'''
|
|
45
45
|
_AUX = None # overloaded/-ridden
|
|
46
46
|
_diff = NAN # default
|
|
47
|
-
_iter = None # like .
|
|
47
|
+
_iter = None # like ._NamedBase
|
|
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, aux=None, **name):
|
|
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
|
-
@kwarg x: The X component,
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
@kwarg x: The X component, required if C{B{y_angle}} is C{scalar},
|
|
57
|
+
ignored otherwise.
|
|
58
|
+
@kwarg aux: I{Auxiliary} kind (C{Aux.KIND}), like B{C{x}}.
|
|
59
|
+
@kwarg name: Optional C{B{name}=NN} see (C{str}).
|
|
59
60
|
|
|
60
61
|
@raise AuxError: Invalid B{C{y_angle}}, B{C{x}} or B{C{aux}}.
|
|
61
62
|
'''
|
|
62
|
-
name, aux = _name2__(**name_aux)
|
|
63
63
|
try:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if aux:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
self._AUX = a
|
|
64
|
+
try:
|
|
65
|
+
yx = y_angle._yx
|
|
66
|
+
aux = y_angle._AUX
|
|
67
|
+
if self._diff != y_angle._diff:
|
|
68
|
+
self._diff = y_angle._diff
|
|
69
|
+
except AttributeError:
|
|
70
|
+
yx = y_angle, x
|
|
71
|
+
if aux in _AUXClass:
|
|
72
|
+
if self._AUX != aux:
|
|
73
|
+
self._AUX = aux
|
|
74
|
+
elif aux is not None:
|
|
75
|
+
raise ValueError() # _invalid_
|
|
76
|
+
except Exception as X:
|
|
77
|
+
raise AuxError(y=y_angle, x=x, aux=aux, cause=X)
|
|
79
78
|
self._y, self._x = _yx2(yx)
|
|
80
79
|
if name:
|
|
81
80
|
self.name = name
|
|
@@ -84,7 +83,7 @@ class AuxAngle(_Named):
|
|
|
84
83
|
'''Return this angle's absolute value (L{AuxAngle}).
|
|
85
84
|
'''
|
|
86
85
|
a = self._copy_2(self.__abs__)
|
|
87
|
-
a._yx =
|
|
86
|
+
a._yx = map2(fabs, self._yx)
|
|
88
87
|
return a
|
|
89
88
|
|
|
90
89
|
def __add__(self, other):
|
|
@@ -230,28 +229,28 @@ class AuxAngle(_Named):
|
|
|
230
229
|
return self._diff
|
|
231
230
|
|
|
232
231
|
@staticmethod
|
|
233
|
-
def fromDegrees(deg, **
|
|
232
|
+
def fromDegrees(deg, **aux_name):
|
|
234
233
|
'''Get an L{AuxAngle} from degrees.
|
|
235
234
|
'''
|
|
236
|
-
return _AuxClass(**
|
|
235
|
+
return _AuxClass(**aux_name)(*sincos2d(deg), **aux_name)
|
|
237
236
|
|
|
238
237
|
@staticmethod
|
|
239
|
-
def fromLambertianDegrees(psi, **
|
|
238
|
+
def fromLambertianDegrees(psi, **aux_name):
|
|
240
239
|
'''Get an L{AuxAngle} from I{Lambertian} degrees.
|
|
241
240
|
'''
|
|
242
|
-
return _AuxClass(**
|
|
241
|
+
return _AuxClass(**aux_name)(sinh(radians(psi)), **aux_name)
|
|
243
242
|
|
|
244
243
|
@staticmethod
|
|
245
|
-
def fromLambertianRadians(psi, **
|
|
244
|
+
def fromLambertianRadians(psi, **aux_name):
|
|
246
245
|
'''Get an L{AuxAngle} from I{Lambertian} radians.
|
|
247
246
|
'''
|
|
248
|
-
return _AuxClass(**
|
|
247
|
+
return _AuxClass(**aux_name)(sinh(psi), **aux_name)
|
|
249
248
|
|
|
250
249
|
@staticmethod
|
|
251
|
-
def fromRadians(rad, **
|
|
250
|
+
def fromRadians(rad, **aux_name):
|
|
252
251
|
'''Get an L{AuxAngle} from radians.
|
|
253
252
|
'''
|
|
254
|
-
return _AuxClass(**
|
|
253
|
+
return _AuxClass(**aux_name)(*sincos2(rad), **aux_name)
|
|
255
254
|
|
|
256
255
|
@Property_RO
|
|
257
256
|
def iteration(self):
|
|
@@ -514,13 +513,15 @@ def _AuxClass(aux=None, **unused): # PYCHOK C{classof(aux)}
|
|
|
514
513
|
|
|
515
514
|
|
|
516
515
|
def _yx2(yx):
|
|
516
|
+
'''(INTERNAL) Validate 2-tuple C{(y, x)}.
|
|
517
|
+
'''
|
|
517
518
|
try:
|
|
518
|
-
y, x =
|
|
519
|
+
y, x = yx
|
|
520
|
+
y, x = map1(float, y, x)
|
|
519
521
|
if y in _0_INF_NAN_NINF:
|
|
520
522
|
x = _copysign_1_0(x)
|
|
521
|
-
except (TypeError, ValueError) as
|
|
522
|
-
y, x =
|
|
523
|
-
raise AuxError(y=y, x=x, cause=e)
|
|
523
|
+
except (TypeError, ValueError) as X:
|
|
524
|
+
raise AuxError(y=y, x=x, cause=X)
|
|
524
525
|
return y, x
|
|
525
526
|
|
|
526
527
|
|
pygeodesy/auxilats/auxDLat.py
CHANGED
|
@@ -26,7 +26,7 @@ from pygeodesy.elliptic import Elliptic as _Ef, Fsum
|
|
|
26
26
|
from math import atan2, cos, sin, sqrt
|
|
27
27
|
|
|
28
28
|
__all__ = ()
|
|
29
|
-
__version__ = '
|
|
29
|
+
__version__ = '24.06.16'
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class AuxDLat(AuxLat):
|
|
@@ -138,7 +138,8 @@ class AuxDLat(AuxLat):
|
|
|
138
138
|
txy = tx * ty
|
|
139
139
|
if txy < 0 or (isinf(ty) and not tx):
|
|
140
140
|
_a = atan1
|
|
141
|
-
r =
|
|
141
|
+
r = _a(fm1 * ty) - _a(fm1 * tx)
|
|
142
|
+
r = _over(r, _a(ty) - _a(tx))
|
|
142
143
|
elif tx == ty: # includes tx = ty = inf
|
|
143
144
|
if txy > 1: # == tx**2
|
|
144
145
|
txy = _1_over(txy)
|
pygeodesy/auxilats/auxLat.py
CHANGED
|
@@ -22,8 +22,9 @@ from pygeodesy.basics import _reverange, _xinstanceof, _passarg
|
|
|
22
22
|
from pygeodesy.constants import INF, MAX_EXP, MIN_EXP, NAN, PI_2, PI_4, _EPSqrt, \
|
|
23
23
|
_0_0, _0_0s, _0_1, _0_25, _0_5, _1_0, _2_0, _3_0, \
|
|
24
24
|
_360_0, isfinite, isinf, isnan, _log2, _over
|
|
25
|
-
from pygeodesy.datums import _ellipsoidal_datum, _WGS84,
|
|
26
|
-
|
|
25
|
+
from pygeodesy.datums import _ellipsoidal_datum, _WGS84, \
|
|
26
|
+
Ellipsoid, _name__, _EWGS84
|
|
27
|
+
# from pygeodesy.ellipsoids import Ellipsoid, _EWGS84 # from .datums
|
|
27
28
|
from pygeodesy.elliptic import Elliptic as _Ef
|
|
28
29
|
from pygeodesy.errors import AuxError, _xkwds_not, _xkwds_pop2, _Xorder
|
|
29
30
|
# from pygeodesy.fmath import cbrt # from .karney
|
|
@@ -46,7 +47,7 @@ except ImportError: # Python 3.11-
|
|
|
46
47
|
return pow(_2_0, x)
|
|
47
48
|
|
|
48
49
|
__all__ = ()
|
|
49
|
-
__version__ = '24.
|
|
50
|
+
__version__ = '24.06.16'
|
|
50
51
|
|
|
51
52
|
_TRIPS = 1024 # XXX 2 or 3?
|
|
52
53
|
|
|
@@ -64,24 +65,21 @@ class AuxLat(AuxAngle):
|
|
|
64
65
|
<https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1AuxLatitude.html>}.
|
|
65
66
|
'''
|
|
66
67
|
_csc = dict() # global coeffs cache: [aL][k], upto max(k) * (4 + 6 + 8) floats
|
|
67
|
-
_E =
|
|
68
|
+
_E = _EWGS84
|
|
68
69
|
# _Lmax = 0 # overwritten below
|
|
69
70
|
_mAL = 6 # 4, 6 or 8 aka Lmax
|
|
70
71
|
|
|
71
|
-
def __init__(self, a_earth=
|
|
72
|
+
def __init__(self, a_earth=_EWGS84, f=None, b=None, **ALorder_name):
|
|
72
73
|
'''New L{AuxLat} instance on an ellipsoid or datum.
|
|
73
74
|
|
|
74
|
-
@arg a_earth: Equatorial radius, semi-axis (C{meter}) or an
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
@kwarg ALorder_name: Optional C{B{name}=NN} (C{str}) and optional
|
|
83
|
-
keyword argument C{B{ALorder}=6} for the order of
|
|
84
|
-
this L{AuxLat}, see property C{ALorder}.
|
|
75
|
+
@arg a_earth: Equatorial radius, semi-axis (C{meter}) or an ellipsoid or
|
|
76
|
+
datum (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}).
|
|
77
|
+
@kwarg f: Flattening: M{(a - b) / a} (C{float}, near zero for spherical),
|
|
78
|
+
required if B{C{a_earth}} is C{scalar} and C{B{b}=None}.
|
|
79
|
+
@kwarg b: Optional polar radius, semi-axis (C{meter}, required if B{C{a_earth}}
|
|
80
|
+
is C{scalar} and C{B{f}=None}.
|
|
81
|
+
@kwarg ALorder_name: Optional C{B{name}=NN} (C{str}) and optional order of
|
|
82
|
+
this L{AuxLat} C{B{ALorder}=6}, see property C{ALorder}.
|
|
85
83
|
'''
|
|
86
84
|
if ALorder_name:
|
|
87
85
|
M = self._mAL
|
|
@@ -91,7 +89,7 @@ class AuxLat(AuxAngle):
|
|
|
91
89
|
else:
|
|
92
90
|
name = NN
|
|
93
91
|
try:
|
|
94
|
-
if a_earth
|
|
92
|
+
if a_earth not in (_EWGS84, _WGS84):
|
|
95
93
|
n = _name__(name, name__=AuxLat)
|
|
96
94
|
if b is f is None:
|
|
97
95
|
E = _ellipsoidal_datum(a_earth, name=n).ellipsoid # XXX raiser=_earth_
|
|
@@ -101,7 +99,7 @@ class AuxLat(AuxAngle):
|
|
|
101
99
|
raise ValueError(_not_scalar_)
|
|
102
100
|
self._E = E
|
|
103
101
|
elif not (b is f is None):
|
|
104
|
-
# _UnexpectedError into AuxError
|
|
102
|
+
# turn _UnexpectedError into AuxError
|
|
105
103
|
name = _name__(name, **_xkwds_not(None, b=b, f=f))
|
|
106
104
|
|
|
107
105
|
if name:
|
pygeodesy/auxilats/auxily.py
CHANGED