pygeodesy 24.6.24__py2.py3-none-any.whl → 24.7.24__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyGeodesy
3
- Version: 24.6.24
3
+ Version: 24.7.24
4
4
  Summary: Pure Python geodesy tools
5
5
  Home-page: https://GitHub.com/mrJean1/PyGeodesy
6
6
  Author: Jean M. Brouwers
@@ -8,7 +8,7 @@ Author-email: mrJean1@Gmail.com
8
8
  Maintainer: Jean M. Brouwers
9
9
  Maintainer-email: mrJean1@Gmail.com
10
10
  License: MIT
11
- Keywords: AER Albers altitude Andoyer annulus antipode area attitude Authalic auxiliary azimuth azimuthal azimuth-elevation-range bearing bank Barsky Barth beta boolean cached Cagnoli cartesian Cassini Cassini-Soldner chord circle-intersections circumcenter circumcircle circumradius clip Cohen Cohen-Sutherland Collins composite conformal conic constants contact-triangle Cook Correia cosines-law coverage curvature cylindrical datum deprecation deficit development discrete distance Douglas earth east-north-up eccentricity ECEF elevation ellipsoid ellipsoidal-latitude-beta ellipsoidal-longitude-omega elliptic ENU EPSG equal-area equidistant equirectangular ETM ETRF Euclidean even-odd-rule ExactTM excess Farrell Farrell-Barth flattening Field-Of-View fmath footprint Forster Forster-Hormann-Popa Forsythe FOV fractional Frechet Fréchet frustum Fsum GARS geocentric GeoConvert GeodesicExact geodesy geodetic GeodSolve GeodTest geographiclib geohash geoid geoidHeight GeoidHeights georef Girard gnomonic gons grades gradians Greiner Greiner-Hormann Hartzell Hausdorff Haversine heading height Heron Hodgman horizon Hormann Hubeny IDW incenter incirle infix_@_operator inradius intermediate interpolate intersect intersection intersection3d intersections Inverse-Distance-Weighting Isometric ITRF Jacobi Jacobi-Conformal Jarque-Bera Jekel Karney Krueger Krüger kurtosis Lambert latitude law-of-cosines least-squares Lesh L_Huilier LHuilier Liang Liang-Barsky linearize Line-Of-Sight LocalCartesian local-tangent-plane local-x-y-z longitude LOS loxodrome lstsq LTP lune LV03 LV95 mean memoize memoized Mercator Meeus MGRS nearest NED normalize Norrdine north-east-down numpy n-vector Nvector oblate omega orthographic orthometric-height OSGB OSGR overlap parallel parallel-of-latitude Parametric path-intersection perimeter Peucker Pierlot pitch plumb Point-Of-View polar Popa POV precision-cubic-root precision-hypotenuse precision-powers precision-running-summation precision-square-root precision-summation prolate Pseudo-Mercator PyGeodesy PyInstaller PyPy radical radii radius Ramer Ramer-Douglas-Peucker Rectifying Reduced resect resection Rey-Jer Reumann Reumann-Witkam rhumb RhumbSolve running-linear-regression running-statistics running-stats running-summation scipy secant semi-perimeter sexagecimal simplify skewness Snellius Snellius-Pothenot Snyder Soddy Soddy-circles Soldner sphere sphere-intersections spherical-deficit spherical-excess spherical-triangle standard-deviation stereographic Sudano surface-area Sutherland Sutherland-Hodgman tangent-circles Terrestrial-Reference-Frame Thomas Tienstra tilt TMcoords TMExact toise transverse TransverseMercatorExact TRF triangle triangulate triaxial triaxial-ellipsoid trigonometry trilaterate trilaterate-2d trilaterate-3d umbilic-point unit unroll UPS UTM UTM/UPS variance velocities Veness Vermeille viewing-frustum Vincenty Visvalingam Visvalingam-Whyatt volume volumetric Web-Mercator Welford WGRS WGS Whyatt Wildberger Witkam winding-number XYZ yaw You
11
+ Keywords: AER Albers altitude Andoyer annulus antipode area attitude Authalic auxiliary azimuth azimuthal azimuth-elevation-range bearing bank Barsky Barth beta boolean cached Cagnoli cartesian Cassini Cassini-Soldner chord circle-intersections circumcenter circumcircle circumradius clip Cohen Cohen-Sutherland Collins composite conformal conic constants contact-triangle Cook Correia cosines-law coverage curvature cylindrical datum deprecation deficit development discrete distance Douglas earth east-north-up eccentricity ECEF elevation ellipsoid ellipsoidal-latitude-beta ellipsoidal-longitude-omega elliptic ENU EPSG equal-area equidistant equirectangular ETM ETRF Euclidean even-odd-rule ExactTM excess Farrell Farrell-Barth flattening Field-Of-View fmath footprint Forster Forster-Hormann-Popa Forsythe FOV fractional Frechet Fréchet frustum Fsum GARS geocentric GeoConvert GeodesicExact geodesy geodetic GeodSolve GeodTest geographiclib geohash geoid geoidHeight GeoidHeights georef Girard gnomonic gons grades gradians Greiner Greiner-Hormann Hartzell Hausdorff Haversine heading height Heron Hodgman horizon Hormann Hubeny IDW incenter incirle infix_@_operator inradius intermediate interpolate intersect intersection intersection3d intersections IntersectTool Inverse-Distance-Weighting Isometric ITRF Jacobi Jacobi-Conformal Jarque-Bera Jekel Karney Krueger Krüger kurtosis Lambert latitude law-of-cosines least-squares Lesh L_Huilier LHuilier Liang Liang-Barsky linearize Line-Of-Sight LocalCartesian local-tangent-plane local-x-y-z longitude LOS loxodrome lstsq LTP lune LV03 LV95 mean memoize memoized Mercator Meeus MGRS nearest NED normalize Norrdine north-east-down numpy n-vector Nvector oblate omega orthographic orthometric-height OSGB OSGR overlap parallel parallel-of-latitude Parametric path-intersection perimeter Peucker Pierlot pitch plumb Point-Of-View polar Popa POV precision-cubic-root precision-hypotenuse precision-powers precision-running-summation precision-square-root precision-summation prolate Pseudo-Mercator PyGeodesy PyInstaller PyPy radical radii radius Ramer Ramer-Douglas-Peucker Rectifying Reduced resect resection Rey-Jer Reumann Reumann-Witkam rhumb RhumbSolve running-linear-regression running-statistics running-stats running-summation scipy secant semi-perimeter sexagecimal simplify skewness Snellius Snellius-Pothenot Snyder Soddy Soddy-circles Soldner sphere sphere-intersections spherical-deficit spherical-excess spherical-triangle standard-deviation stereographic Sudano surface-area Sutherland Sutherland-Hodgman tangent-circles Terrestrial-Reference-Frame Thomas Tienstra tilt TMcoords TMExact toise transverse TransverseMercatorExact TRF triangle triangulate triaxial triaxial-ellipsoid trigonometry trilaterate trilaterate-2d trilaterate-3d umbilic-point unit unroll UPS UTM UTM/UPS variance velocities Veness Vermeille viewing-frustum Vincenty Visvalingam Visvalingam-Whyatt volume volumetric Web-Mercator Welford WGRS WGS Whyatt Wildberger Witkam winding-number XYZ yaw You
12
12
  Classifier: Development Status :: 5 - Production/Stable
13
13
  Classifier: Environment :: Console
14
14
  Classifier: Intended Audience :: Developers
@@ -41,13 +41,13 @@ classes`_ by *Charles F.F. Karney (C) 2008-2023* and published under the same `M
41
41
 
42
42
  There are four modules for ellipsoidal earth models, *ellipsoidalExact*, *-Karney*, *-Vincenty*
43
43
  and *-Nvector* and two for spherical ones, *sphericalTrigonometry* and *-Nvector*. Each module
44
- provides a geodetic LatLon_ and a geocentric Cartesian_ class with methods and functions to
45
- compute distance, surface area, perimeter, initial and final bearing, intermediate and nearest
46
- points, circle intersections and secants, path intersections, `3-point resections`_, rhumb and
47
- rhumb lines, triangulation, trilateration (by intersection, by overlap and in 3d), conversions
48
- and unrolling, among other things. For more information and further details see the documentation_,
49
- the descriptions of `Latitude/Longitude`_, Vincenty_ and `Vector-based`_ geodesy, the original
50
- `JavaScript source`_ or docs_ and *Karney*\'s Python geographiclib_ and `C++ GeographicLib`_.
44
+ provides a geodetic LatLon_ and a geocentric Cartesian_ class with methods and functions to compute
45
+ distance, surface area, perimeter, forward and reverse azimuth, initial and final bearing, intermediate
46
+ and nearest points, intersections of geodesic, great circle and rhumb lines, circle intersections and
47
+ secants, `3-point resections`_, triangulation, trilateration (by intersection, by overlap and in
48
+ 3d), conversions and unrolling, among other things. For more information and further details see the
49
+ documentation_, the descriptions of `Latitude/Longitude`_, Vincenty_ and `Vector-based`_ geodesy, the
50
+ original `JavaScript source`_ or docs_ and *Karney*\'s Python geographiclib_ and `C++ GeographicLib`_.
51
51
 
52
52
  Also included are modules for conversions to and from `Cassini-Soldner`_, ECEF_ (Earth-Centered,
53
53
  Earth-Fixed cartesian), UTM_ (Universal Transverse Mercator and Exact_), UPS_ (Universal Polar
@@ -115,30 +115,30 @@ line: ``epydoc --html --no-private --no-source --name=PyGeodesy --url=... -v pyg
115
115
  Tests
116
116
  =====
117
117
 
118
- The tests ran with Python 3.12.3 (with geographiclib_ 2.0), 3.11.5 (with geographiclib_ 2.0, numpy_
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,
120
- GeoConvert_ 2.2, GeodSolve_ 2.2 and RhumbSolve_ 2.2), Python 3.9.6 and Python 2.7.18 (with geographiclib_
121
- 1.50, numpy_ 1.16.6, scipy_ 1.2.2, GeoConvert_ 2.2, GeodSolve_ 2.2 and RhumbSolve_ 2.2), all on macOS
122
- 14.5 Sonoma and in 64-bit only.
118
+ The tests ran with Python 3.13.0b4, 3.12.4 (with geographiclib_ 2.0, GeodSolve_ 2.3, IntersectTool_ 2.3
119
+ and RhumbSolve_ 2.3), 3.11.5 (with geographiclib_ 2.0, numpy_ 1.24.2 and scipy_ 1.10.1), Python 3.10.8
120
+ (with geographiclib_ 2.0, numpy_ 1.23.3, scipy_ 1.9.1, GeoConvert_ 2.3, GeodSolve_ 2.3), Python 3.9.6
121
+ and Python 2.7.18 (with geographiclib_ 1.50, numpy_ 1.16.6, scipy_ 1.2.2, GeoConvert_ 2.3, GeodSolve_
122
+ 2.3, IntersectTool_ 2.3 and RhumbSolve_ 2.3), all on macOS 14.5 Sonoma in 64-bit.
123
123
 
124
124
  All tests ran with and without ``lazy import`` for Python 3 and with command line option ``-W default``
125
125
  and env variable ``PYGEODESY_WARNINGS=on`` for all Python versions. The results of those tests are
126
126
  included in the distribution files.
127
127
 
128
- PyPy_ 7.3.12 (Python 3.10.12), Python 3.11.5, 3.10.8 and 3.9.6 run on Apple M1 Silicon (``arm64``),
129
- *natively*. Python 3.8.10 and 2.7.18 run on Intel (``x86_64``) or Intel *emulation* (\"``arm64_x86_64``\",
130
- see function `pygeodesy.machine`_).
128
+ Python 3.13.0b4, 3.12.4, 3.11.5 and 3.10.8 run on Apple M1 Silicon (``arm64``), *natively*. Python 2.7.18
129
+ runs on Intel (``x86_64``) or Intel *emulation* (\"``arm64_x86_64``\", see function `pygeodesy.machine`_).
131
130
 
132
- Test coverage has been measured with coverage_ 7.2.2 using only Python 3.11.5 and 3.10.8. The complete
131
+ Test coverage has been measured with coverage_ 7.6.0 using Python 3.12.4, 3.11.5 and 3.10.8. The complete
133
132
  coverage report in HTML and a PDF summary are included in the distribution files.
134
133
 
135
- The tests also ran with Python 3.11.5 (and geographiclib_ 2.0) on `Debian 11`_ in 64-bit only and with
136
- Python 3.11.5, 3.10.10 and 2.7.18 (all with geographiclib_ 1.52) on `Windows 10`_ in 64- and/or 32-bit.
134
+ The tests also ran with Python 3.12.4 (and geographiclib_ 2.0) on `Debian 12`_ in 64-bit only and with
135
+ Python 3.12.3 (and geographiclib_ 2.0) on `Windows 2019Server`_ in 64-bit only and with Python 2.7.18
136
+ (and with geographiclib_ 1.52) on `Windows 10`_ in 64- and 32-bit.
137
137
 
138
138
  A single-File and single-Directory application with ``pygeodesy`` has been bundled using PyInstaller_
139
139
  3.4 and 64-bit Python 3.7.4 and 3.7.3 on macOS 10.13.6 High Sierra.
140
140
 
141
- Previously, the tests were run with Python 3.12.0-2, 3.11.2-4, 3.10.1-7, 3.9.1, 3.8.7, 3.7.1, 2.7.15, PyPy_
141
+ Previously, the tests were run with Python 3.12.0-3, 3.11.2-4, 3.10.1-7, 3.9.1, 3.8.7, 3.7.1, 2.7.15, PyPy_
142
142
  7.3.12 (Python 3.10.12), 7.3.1 (Python 3.6.9) and PyPy_ 7.1.1 (Python 2.7.13) (and geographiclib_ 1.52,
143
143
  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, 1.4.1, 1.5.2 or 1.8.1)
144
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,
@@ -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 24, 2024.*
162
+ *Last updated: July 24, 2024.*
163
163
 
164
164
  License
165
165
  =======
@@ -205,7 +205,7 @@ DEALINGS IN THE SOFTWARE.
205
205
  .. _checked: https://GitHub.com/ActiveState/code/tree/master/recipes/Python/546532_PyChecker_postprocessor
206
206
  .. _Cohen-Sutherland: https://WikiPedia.org/wiki/Cohen-Sutherland_algorithm
207
207
  .. _coverage: https://PyPI.org/project/coverage
208
- .. _Debian 11: https://Cirrus-CI.com/github/mrJean1/PyGeodesy/master
208
+ .. _Debian 12: https://Cirrus-CI.com/github/mrJean1/PyGeodesy/master
209
209
  .. _distribution files: https://GitHub.com/mrJean1/PyGeodesy/tree/master/dist
210
210
  .. _docs: https://www.Movable-Type.co.UK/scripts/geodesy/docs
211
211
  .. _documentation: https://mrJean1.GitHub.io/PyGeodesy
@@ -231,6 +231,7 @@ DEALINGS IN THE SOFTWARE.
231
231
  .. _Height: https://mrJean1.GitHub.io/PyGeodesy/docs/pygeodesy.heights-module.html
232
232
  .. _Intel-Python: https://software.Intel.com/en-us/distribution-for-python
233
233
  .. _interpolate: https://docs.SciPy.org/doc/scipy/reference/interpolate.html
234
+ .. _IntersectTool: https://GeographicLib.SourceForge.io/C++/doc/utilities.html
234
235
  .. _JavaScript originals: https://GitHub.com/ChrisVeness/geodesy
235
236
  .. _JavaScript source: https://GitHub.com/ChrisVeness/geodesy
236
237
  .. _John P. Snyder: https://pubs.er.USGS.gov/djvu/PP/PP_1395.pdf
@@ -271,3 +272,4 @@ DEALINGS IN THE SOFTWARE.
271
272
  .. _Visvalingam-Whyatt: https://hydra.Hull.ac.UK/resources/hull:8338
272
273
  .. _Web Mercator: https://WikiPedia.org/wiki/Web_Mercator
273
274
  .. _Windows 10: https://CI.AppVeyor.com/project/mrJean1/pygeodesy
275
+ .. _Windows 2019Server: https://CI.AppVeyor.com/project/mrJean1/pygeodesy
@@ -1,17 +1,17 @@
1
1
  pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
- pygeodesy/__init__.py,sha256=QKI7NviUtivEdGiX532XzHBvGfTLEul0e0lBo7gMbDA,41475
3
- pygeodesy/__main__.py,sha256=UmTd6Qw20g_pgnQjdaHePm-xuOEBi1tUNRLO0eL0-rU,4593
2
+ pygeodesy/__init__.py,sha256=uYrhqWUaNgzSKAETWoDZc9AqmYmIDtug9wVvfyEH_Aw,42191
3
+ pygeodesy/__main__.py,sha256=VWxepzxGqR5wsHYyIHFSsRMlZ27keX3xyEhBuGDRXxk,4727
4
4
  pygeodesy/albers.py,sha256=JXqeWAteV2N601e5R-D7bCsa8qAYv3oWm7M3R4uszXM,31078
5
5
  pygeodesy/azimuthal.py,sha256=5tMMKlzKyfGnreOHChrquBi241ZvIOBTUn_pbZCIJWc,50231
6
- pygeodesy/basics.py,sha256=YgrXYea-m47l0_cAeyWlEvCzpzvfZDKpkievC77qJdY,29590
6
+ pygeodesy/basics.py,sha256=mSim8pSrRLMFYTnTrJDvkthfrw2MWBmMya3hOHWX4co,29785
7
7
  pygeodesy/booleans.py,sha256=5IeA6QWihiPWSv2JnCbMT53ey1WYIU7od5VQ1YUFqX8,73529
8
- pygeodesy/cartesianBase.py,sha256=WaAod_-nwgX8MjNhu4rr_V9PmEaI0F8gKPCUH4-Olyc,46968
8
+ pygeodesy/cartesianBase.py,sha256=nn2JNYbPJhL0lzkUvDEQDR_omNgmMIYuS1nCwYtlXnQ,46927
9
9
  pygeodesy/clipy.py,sha256=3ysIEWQ89HjvLnSlZm0nZAt9EN5AQxIs1sLLM8yF9zM,27675
10
10
  pygeodesy/constants.py,sha256=-weWOuHwE-qI6pYRLcTucI0KNcNJm6vPNzxwrJzACKs,19192
11
11
  pygeodesy/css.py,sha256=B_EKq757XdQSUy83HAxEf3H5Iyd7mw3DbJB5Wi3obAc,25651
12
12
  pygeodesy/datums.py,sha256=-m9-cvUVOaJ92eeFgc3O54lel3WqnVYcS7o6WCXkNyw,34043
13
13
  pygeodesy/dms.py,sha256=QxiRtyc8QSiW-egm6Mrcrgmi_deWz3YnYwIm82JS4TU,44443
14
- pygeodesy/ecef.py,sha256=yRydxBDiyvfrTTrQLawo-x2eGNcbd8CNQjBWfd3oSI8,59677
14
+ pygeodesy/ecef.py,sha256=_yy_TIUGsXmEZ7aRcmchbJwTp7x__edx6EPiS3Xznes,59587
15
15
  pygeodesy/elevations.py,sha256=4FuVcVNb_D09gmcvUlck344N4f7Jms76SIRrdutvKjk,10801
16
16
  pygeodesy/ellipsoidalBase.py,sha256=olFcHvMeoW8Z_0T-Bn3XOpGGatoluaOZ50Fzm-ByAVg,55126
17
17
  pygeodesy/ellipsoidalBaseDI.py,sha256=OxbSBntV9xiOgsb-0un0cUYIVoPiIiH-lt3baBkbaS8,38400
@@ -20,51 +20,51 @@ pygeodesy/ellipsoidalGeodSolve.py,sha256=CqdNNqdwuUNIwZvYVMsk3rnW0U3KMgEoSQj_VIc
20
20
  pygeodesy/ellipsoidalKarney.py,sha256=XIvmSmMt0CGd0LtXxcDHX3KXXR2Mn8cRukefNQErJFU,18720
21
21
  pygeodesy/ellipsoidalNvector.py,sha256=BbCWTZr9he3ayC8YEtLRXWVJ-g4HqHBuTVJsM33JKhw,30038
22
22
  pygeodesy/ellipsoidalVincenty.py,sha256=gsUFMKgqMZKT02jDm7TEJ_jSHX8d-KJCz91iCfku5kg,25951
23
- pygeodesy/ellipsoids.py,sha256=fraKj3NPStXablvzejt-LgQsghcp-MgMUvU6nh4L2YI,108034
23
+ pygeodesy/ellipsoids.py,sha256=GbLZPLkSYGAE7JlGFhhZ4inhH501yNJ60jpMM_cVoNA,108003
24
24
  pygeodesy/elliptic.py,sha256=-80MbZvRPk-TeA_ggkfXhjuPv07MzsB4HxNF7gbdhB4,42501
25
25
  pygeodesy/epsg.py,sha256=oWHX_QVChE5roktAyXUmPmX49XHiryYmXTHxQzrAprE,8222
26
- pygeodesy/errors.py,sha256=4LmkeCrslywBbLzCJ07A1LPFjbUHkkJrcscSzROxNZs,30300
26
+ pygeodesy/errors.py,sha256=-UnQ1GhkiTR6uBd0z0vd_pFEmjWXlOESRDwMdxY_JD0,30605
27
27
  pygeodesy/etm.py,sha256=y3dAqS-iWnbWzmsu4zB7kryAp_I17XEdzNRRk0klTww,44696
28
28
  pygeodesy/fmath.py,sha256=EOHD0uZ8VULZtXAk8tVeuPaSTozPDCN8GJcemCo-jqg,33709
29
29
  pygeodesy/formy.py,sha256=ZpPaQBQvaFiA-UcrgaiiV_iGxlfTqNdlR1Ngx-1oinY,75032
30
30
  pygeodesy/frechet.py,sha256=F6TYbOEYSOFcll6nvp4GhqafUWXh1umAKb1QaMYQtuM,34372
31
31
  pygeodesy/fstats.py,sha256=4eIhzSCMnn-2nVP3Q-5cCWCI-rvH0CE-zkk9hp3Pvn8,28642
32
- pygeodesy/fsums.py,sha256=LzsPQHY3bByOFFXPSo7E8lbYKWy5cif02WJk2JfnMvA,80455
32
+ pygeodesy/fsums.py,sha256=VbI_1i-0BCeRpPnG58EDPVKossR7JORZzFXEspoaiJU,80839
33
33
  pygeodesy/gars.py,sha256=gJKZuGPKw8rlRLx1hywZrpGucpHXLvMe8fr8izgSW2s,11370
34
- pygeodesy/geodesici.py,sha256=C2yVPoczJJOWwOH7Yk3zmIdL-PpN28pkjHIfqP1LC3U,33462
35
- pygeodesy/geodesicw.py,sha256=g7eJ9HHj47ob08X385aceTg3SHX3utTudp0KVOacgcA,27040
36
- pygeodesy/geodsolve.py,sha256=VL7h8NUMyBviBot_sHuSGVOhDq3PP6WSGdx2oz7QmEI,24298
34
+ pygeodesy/geodesici.py,sha256=U-hxztCvASJTnvDJxMI2jgeZOIwTalX-xFsfJWWG-Wg,75023
35
+ pygeodesy/geodesicw.py,sha256=oEs96Epw839BH3rVpxVdpXuQRBudbOftUsSBUid8fcc,28710
36
+ pygeodesy/geodsolve.py,sha256=M1kU9HOKnvf8agv_V4fN0QcNh40N6dExuCd0pPTKsoM,23540
37
37
  pygeodesy/geohash.py,sha256=rOOGOHcTnxIPX2p5ieA1gQ_ZcRlUxjIcroPHa7a85ak,31876
38
- pygeodesy/geoids.py,sha256=oxn0MSgbvwBkrwyg1vS7PhhYZ_zbjLxC50W-8FTIxeU,80680
38
+ pygeodesy/geoids.py,sha256=PVTYfSe67SRZtII9Qi1FXTDtRPoabwEtRbFXkgiKjdI,80639
39
39
  pygeodesy/hausdorff.py,sha256=-aKtRbMefDSoIk4V3wCvNrXPZ7Bqk1P6-XuGuI7o8Zc,34770
40
40
  pygeodesy/heights.py,sha256=9kvyJj0-D3syZMdHNDXIfZT3MyhHH2fcqW_y-u7Tn2M,43197
41
- pygeodesy/internals.py,sha256=LSDiYfCMs6zEzWPiQyRrg-XkH14B6IlSQwFbf40XKJM,19522
41
+ pygeodesy/internals.py,sha256=YUcf9wWXT7XztviEBN2uBww8Bt7gnqks2sAZt7k_j3w,20426
42
42
  pygeodesy/interns.py,sha256=kReVkCWA_rw8GyaYFVRI9dfdXu7MF9nD1MgoXsdsK7I,23273
43
43
  pygeodesy/iters.py,sha256=xPH0ytomvJeKHu717Fjzi3QbRrEikO6n7vqkY_IDz1k,20311
44
- pygeodesy/karney.py,sha256=EUyt_vcPjY0bTbNahq-nshkKdJPdHv2RI2GjdJpa8gg,35725
45
- pygeodesy/ktm.py,sha256=u0xjvqhG2k18jg7bNclRr3D9umiZXKXQGRjmL_VX4yY,27437
46
- pygeodesy/latlonBase.py,sha256=M-Xe4KK8aOnQUxNJkODlTa5ApzhqXCggc_d8HlMdnIc,78987
47
- pygeodesy/lazily.py,sha256=T_TmKqLJi_-IC6nHn_MqTfNxI8WJT4kobWwfVYJ5V5U,46616
44
+ pygeodesy/karney.py,sha256=nuuc49Crv3Rt2tKtn8rizyfvKhyQiMekfTFEcyfj-sk,38035
45
+ pygeodesy/ktm.py,sha256=EJ52Llx5DPFNNl2DEH8rL1-k955qOxYZLAg4-UpnlbA,27246
46
+ pygeodesy/latlonBase.py,sha256=8DxTwivt3SG6wCLJLXBesY6hlNFgLCksdH3AdQFz2G0,78949
47
+ pygeodesy/lazily.py,sha256=GZuV0nXH2-jrBxKqKuD839fJFtUFDHsPh4mA7p5uJZI,46932
48
48
  pygeodesy/lcc.py,sha256=oDooTzFHnqsMtSKmmmfEbypHpdlPltfo7Mt0pAO4-_A,25669
49
- pygeodesy/ltp.py,sha256=gQLZwcSIiXJrbRlaWnxAX8AK2VzH9l3jDqoNb3jcVD4,50773
50
- pygeodesy/ltpTuples.py,sha256=bi1lJIbQ8lIX3vDgugQmG-mQN0EZIRe0TZlPAu8GUC8,58338
49
+ pygeodesy/ltp.py,sha256=4ElW1AsN_k_jppvp9Mv2RFs5Q97yhJSnCStcmg9Rl-k,50765
50
+ pygeodesy/ltpTuples.py,sha256=r3uHMBCxr31IsCMp_OtpevQPmULJhucn8JZ2bGjuiVI,58338
51
51
  pygeodesy/mgrs.py,sha256=w50bvM3qDtHDBDBRQ_EgZnPn7vxVXgoFnleeZgefkVk,29679
52
- pygeodesy/named.py,sha256=_2zgvL0cPg2JL3JpyWMZ7cc9e_I0y_4XPVYb2e7zEZg,52243
52
+ pygeodesy/named.py,sha256=T0LPPhCKJFu2S5IaQmUUbwTS21JbXmkHsvKRgTpT2Nk,52267
53
53
  pygeodesy/namedTuples.py,sha256=UDmL4kCihvf8tIUVXzGzRLzL_1BLuyqm04pite6YUuk,28495
54
- pygeodesy/nvectorBase.py,sha256=7BvbRQbtTpDsE7BMHt3vpbuCQZUV_k79HvygbG7ak10,28683
54
+ pygeodesy/nvectorBase.py,sha256=rClYu26Bof9DsM1F60i0eccktNo8xYA_vkThwoY7N4o,28644
55
55
  pygeodesy/osgr.py,sha256=O8mLlmnQkcyXU4xczLGD1zhSyt8RQ3EsXctUnCIjO8U,30819
56
56
  pygeodesy/points.py,sha256=GirmbiqjD7Q0Z4SDySQO__Jgun-i8vMdJ81U2Kz8V0w,64408
57
- pygeodesy/props.py,sha256=8dGmTpdEABnLbBngmaOIpM0h4NYiBteMOHc_r4iNpAg,21988
57
+ pygeodesy/props.py,sha256=2vQD2PoHy1f7osxEf9H0hNvg7gDPd0t8rCy-EuezcI4,23725
58
58
  pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
59
59
  pygeodesy/simplify.py,sha256=NybC-pfze0ObEm4ZCz6ZQrjJlQ-QyA83E6mSJqCuKq4,25223
60
- pygeodesy/solveBase.py,sha256=FGuvHvloiyBdE0H50o8rOxtD_n6gCx1Gp31Ckn-N7hk,16852
60
+ pygeodesy/solveBase.py,sha256=oI_-FFjSPI1_yQ598hF6HFKUa4tLsAfbnWtKoQ-TJgE,19206
61
61
  pygeodesy/sphericalBase.py,sha256=YvjMZmmfy9pZeKHbY-ca0oi-Jy-OxsG9dhefy5LTjRA,32237
62
62
  pygeodesy/sphericalNvector.py,sha256=MiWcCy5CdvXsCa3963GeUMEnSYGhBiXzkoAEX_tGX4Q,56952
63
63
  pygeodesy/sphericalTrigonometry.py,sha256=Jf3FUUYEWXbNkiagr0HyMJ6E-cNghnTjcdgntTm28RE,64076
64
64
  pygeodesy/streprs.py,sha256=xudQ6zi5jFT_CmstSPysjxpZKyLBQNkUk1ETh0uvQ04,23030
65
65
  pygeodesy/trf.py,sha256=CRFHmu0lFNtc41fddXavEkHmgnTFWEqR4RTFodcFKsw,119022
66
- pygeodesy/triaxials.py,sha256=SLAlzdpOa8kFSkpP-lhL-swzsZkuqufZET_gJtoA_54,62750
67
- pygeodesy/units.py,sha256=2ZFrFOB__jjs8OYkSGyusYB60fs3FihubydriBdSNYg,34607
66
+ pygeodesy/triaxials.py,sha256=ixDpZ3RdZmHV8RcmPnXxiPCoinno4Qj4JcYuS1EKD04,62722
67
+ pygeodesy/units.py,sha256=mTn0APS0SW9fKn3IYf5usV63Xaw2B9DzkwefPNVu-Es,34607
68
68
  pygeodesy/unitsBase.py,sha256=yT7dgfwxtd1hHEn02NwPAdStsVWDfPH-Qdfrhvje7Yw,14057
69
69
  pygeodesy/ups.py,sha256=zapIvzoVuj_FDGC6sr8O8ynPhfqXwUg-EFCVnJdM9Eo,23329
70
70
  pygeodesy/utily.py,sha256=Zb6L9unzHHhp67znmQLLdizvyX6p4eczR1PDtcyWH-s,36189
@@ -81,14 +81,14 @@ pygeodesy/auxilats/_CX_6.py,sha256=x4hrHxunjqqkEsZbVW1dyn3R5mR8EWYOuX77RzDEyh4,1
81
81
  pygeodesy/auxilats/_CX_8.py,sha256=t-OO48t4cCOsOgMi1FoyPw2DQqybVZFsgQMqAYP-jKY,25304
82
82
  pygeodesy/auxilats/__init__.py,sha256=YNp41rRC5DmAhBx4RPqoqh4yxD9Vjf9Wk_USwqeZYcE,2881
83
83
  pygeodesy/auxilats/__main__.py,sha256=Vuj1YSp1LV0zejVzi6EYauka1Dv8kwOHI_aeHxQEVYk,2899
84
- pygeodesy/auxilats/auxAngle.py,sha256=8Gsae1URFCfD6t0oNI1ZJmgtik_EOvSAwrNmAZSMm2I,16729
84
+ pygeodesy/auxilats/auxAngle.py,sha256=eRkUhML8_a6NKlC3SZvPE7gjMden_TR9_KkhBfLszj8,16744
85
85
  pygeodesy/auxilats/auxDLat.py,sha256=3sq7Wc-ykpVbldNh10IZ3tIlJ7DcQFDlmZ4nOhJEgo0,10969
86
- pygeodesy/auxilats/auxDST.py,sha256=bdNEh3TdABWH7qW6ngZx5SnzDM3B5rtPLvYhvCnFsKc,10497
86
+ pygeodesy/auxilats/auxDST.py,sha256=lKEgUlnJ3JNHLu_ZPBn7eKgwxK9yAHa77r9OCUiLdds,10466
87
87
  pygeodesy/auxilats/auxLat.py,sha256=QeTx8dqov1NwNSEam9VC_wq36nRCUpbJpY4hH1NvyNg,32493
88
- pygeodesy/auxilats/auxily.py,sha256=spSRS9beouT-qH98QhqMk9sm2qKubW8kwNYVWkFu3iU,8234
89
- pygeodesy/deprecated/__init__.py,sha256=sGIgKL1Kmpz9upmGSxZEDdsGHNZhkpYAgsRw3FdI574,2815
88
+ pygeodesy/auxilats/auxily.py,sha256=evkD4NGJPGdy3QtP7zI76IY2uDTGc1YjsVG4-BwzZIg,8235
89
+ pygeodesy/deprecated/__init__.py,sha256=cBYqbh5Njkd5SnaJDaMUP6PL66HfLWii_JoLjnKfnP4,2815
90
90
  pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8,1655
91
- pygeodesy/deprecated/classes.py,sha256=ietjn0Jvil-moZwIlQLDdo5ehSPQ28RsmiLKkwI9v50,12124
91
+ pygeodesy/deprecated/classes.py,sha256=gktUr5qYXCm8ztH6lfzFgaHKqMiw1tHc1Vw6i6DEvNA,12377
92
92
  pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
93
93
  pygeodesy/deprecated/datum.py,sha256=s8Hke053RucP5ACvg3gdX8weQfGM0x59pQyHpY11eOs,1875
94
94
  pygeodesy/deprecated/functions.py,sha256=EZMZe9WGkcbwmLDoWO2xKJyFlUkWAAMxmlbtCLa28lM,13866
@@ -100,18 +100,18 @@ pygeodesy/deprecated/rhumbx.py,sha256=OS0p_meaoVrpZe5UhK6qZljjlrGpL0pCHWw8gofw7k
100
100
  pygeodesy/geodesicx/_C4_24.py,sha256=kS4XMR9m7iBs01V8K0Oz9qTYmjN-icIQGpc_8iwVhig,90750
101
101
  pygeodesy/geodesicx/_C4_27.py,sha256=bPbj2Ckrn9WJglm3SNTXyMkULNwANM0tCQ-LKxP1L58,134258
102
102
  pygeodesy/geodesicx/_C4_30.py,sha256=QZO8p971ztJwDGLOaJYgIhklztz9GlqbtS-xRP_E7o4,201964
103
- pygeodesy/geodesicx/__init__.py,sha256=T_cX27kXyapbKcfsO6oMQMxYktXpV8i8PEWfKnxByPM,2478
103
+ pygeodesy/geodesicx/__init__.py,sha256=4qAIrE-cnOvi1B38iK-52PB2BpB1zxsVYEryHm4QTJk,2478
104
104
  pygeodesy/geodesicx/__main__.py,sha256=JnKrYmg1q9J5wRRqUy-dQ9abj2-2jpWtrolMMaFfWiY,3176
105
- pygeodesy/geodesicx/gx.py,sha256=Liyp9UFJi2ZeN5J_2SCV2ia3ZcqvOC2hNdOcfcnXZdc,61121
105
+ pygeodesy/geodesicx/gx.py,sha256=ovPbV2kIR7rtoAVUxm4PXNUKUTbkzulNyqSi8bQpGQU,60595
106
106
  pygeodesy/geodesicx/gxarea.py,sha256=-Kwe6spe2MSQbeLFDd6UN2NOi4JOjYhHAEzonOU3u4A,19409
107
107
  pygeodesy/geodesicx/gxbases.py,sha256=Awt9zc1lyPS0vp4df2u4H_rhMeFu1pJaZPhb1iMoc-Q,5693
108
- pygeodesy/geodesicx/gxline.py,sha256=_3l84g-RHoYIuOCMbvGiIY3CJuauSEcJwrZqp2n1J3s,27001
108
+ pygeodesy/geodesicx/gxline.py,sha256=zNQF8lz9caHZlsUcL8NfjG02KIza39Q6Qd6XizDp_UI,27537
109
109
  pygeodesy/rhumb/__init__.py,sha256=kTuNSKiiQyXvQdYc5KUd5admuKJ2QmDCWQwkIobnM-w,2207
110
110
  pygeodesy/rhumb/aux_.py,sha256=lOjpEU3Pe2I5DwC933UCf-SW73l5NMuDACeZhbVs3lE,16657
111
111
  pygeodesy/rhumb/bases.py,sha256=awpP60K6EOzS753oXM-h9S6paS6FwoCnco8Zt8n81jY,54162
112
112
  pygeodesy/rhumb/ekx.py,sha256=JsmdCatWKqsffF8jCh4HDu5IKt_kHq1qUdmP1LMuofY,24044
113
- pygeodesy/rhumb/solve.py,sha256=EDlLpbnw2FiNANOTau0emk29AEAaJpmckjK_cprvLNA,24035
114
- PyGeodesy-24.6.24.dist-info/METADATA,sha256=LldxAeBs_4-a7sOoy6-xCGSoGE9p8_vSxzFvcXewufo,19412
115
- PyGeodesy-24.6.24.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
116
- PyGeodesy-24.6.24.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
117
- PyGeodesy-24.6.24.dist-info/RECORD,,
113
+ pygeodesy/rhumb/solve.py,sha256=3bzvHfvHtgq_rc7iiTL6h7yjtdGNutvJUYn9K9MpFKM,24046
114
+ PyGeodesy-24.7.24.dist-info/METADATA,sha256=eAD31ElQO-EdA8Ko3O5OLhFI59h7qky1Fjnke2urSLg,19717
115
+ PyGeodesy-24.7.24.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
116
+ PyGeodesy-24.7.24.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
117
+ PyGeodesy-24.7.24.dist-info/RECORD,,
pygeodesy/__init__.py CHANGED
@@ -7,24 +7,22 @@ methods for geodetic (lat-/longitude), geocentric (U{ECEF<https://WikiPedia.org/
7
7
  cartesian) and certain U{triaxial ellipsoidal<https://GeographicLib.SourceForge.io/1.44/triaxial.html>}
8
8
  coordinates.
9
9
 
10
- Transcoded from U{JavaScript originals<https://GitHub.com/ChrisVeness/geodesy>} by I{Chris Veness
11
- (C) 2005-2022} and from several U{C++ classes<https://GeographicLib.SourceForge.io/C++/doc/annotated.html>}
12
- by I{Charles F. F. Karney (C) 2008-2023} and published under the same U{MIT License
13
- <https://OpenSource.org/licenses/MIT>}**.
14
-
15
- There are four modules for ellipsoidal earth models, C{ellipsoidalExact}, C{-Karney},
16
- C{-Vincenty} and C{-Nvector} and two for spherical ones, C{sphericalTrigonometry}
17
- and C{-Nvector}. Each module provides a geodetic B{C{LatLon}} and a geocentric
18
- B{C{Cartesian}} class with methods and functions to compute distance, surface area,
19
- perimeter, initial and final bearing, intermediate and nearest points, circle intersections
20
- and secants, path intersections, U{3-point resections<https://WikiPedia.org/wiki/
21
- Position_resection_and_intersection>}, rhumb and rhumb lines, triangulation, trilateration
22
- (by intersection, by overlap and in 3d), conversions and unrolling, among other things. For
23
- more information and further details see the U{documentation<https://mrJean1.GitHub.io/PyGeodesy>},
24
- the descriptions of U{Latitude/Longitude<https://www.Movable-Type.co.UK/scripts/latlong.html>},
25
- U{Vincenty<https://www.Movable-Type.co.UK/scripts/latlong-vincenty.html>} and U{Vector-based
26
- <https://www.Movable-Type.co.UK/scripts/latlong-vectors.html>} geodesy, the original U{JavaScript
27
- source<https://GitHub.com/ChrisVeness/geodesy>} or U{docs<https://www.Movable-Type.co.UK/scripts/geodesy/docs>}
10
+ Transcoded from U{JavaScript originals<https://GitHub.com/ChrisVeness/geodesy>} by I{Chris Veness (C) 2005-2022}
11
+ and from several U{C++ classes<https://GeographicLib.SourceForge.io/C++/doc/annotated.html>} by I{Charles F. F.
12
+ Karney (C) 2008-2023} and published under the same U{MIT License<https://OpenSource.org/licenses/MIT>}**.
13
+
14
+ There are four modules for ellipsoidal earth models, C{ellipsoidalExact}, C{-Karney}, C{-Vincenty} and C{-Nvector}
15
+ and two for spherical ones, C{sphericalTrigonometry} and C{-Nvector}. Each module provides a geodetic B{C{LatLon}}
16
+ and a geocentric B{C{Cartesian}} class with methods and functions to compute distance, surface area, perimeter,
17
+ forward and reverse azimuth, initial and final bearing, intermediate and nearest points, intersections of geodesic,
18
+ great circle and rhumb lines, circle intersections and secants, U{3-point resections
19
+ <https://WikiPedia.org/wiki/Position_resection_and_intersection>}, triangulation, trilateration (by intersection,
20
+ by overlap and in 3d), conversions and unrolling, among other things. For more information and further details see
21
+ the U{documentation<https://mrJean1.GitHub.io/PyGeodesy>}, the descriptions of U{Latitude/Longitude
22
+ <https://www.Movable-Type.co.UK/scripts/latlong.html>}, U{Vincenty
23
+ <https://www.Movable-Type.co.UK/scripts/latlong-vincenty.html>} and U{Vector-based
24
+ <https://www.Movable-Type.co.UK/scripts/latlong-vectors.html>} geodesy, the original U{JavaScript source
25
+ <https://GitHub.com/ChrisVeness/geodesy>} or U{docs<https://www.Movable-Type.co.UK/scripts/geodesy/docs>}
28
26
  and I{Karney}'s Python U{geographiclib<https://PyPI.org/project/geographiclib>} and U{C++ GeographicLib
29
27
  <https://GeographicLib.SourceForge.io/C++/doc/index.html>}.
30
28
 
@@ -101,6 +99,11 @@ and L{GnomonicGeodSolve} depend on I{Karney}'s C++ utility U{GeodSolve
101
99
  <https://GeographicLib.SourceForge.io/C++/doc/GeodSolve.1.html>} to be executable and set with
102
100
  env variable C{PYGEODESY_GEODSOLVE} or with property L{Ellipsoid.geodsolve}.
103
101
 
102
+ Class L{Intersectool} and module L{geodesici} need I{Karney}'s C++ utility U{IntersectTool
103
+ <https://GeographicLib.SourceForge.io/C++/doc/IntersectTool.1.html>} to be executable and set with
104
+ env variable C{PYGEODESY_INTERSECTTOOL}.
105
+
106
+
104
107
  To compare C{MGRS} results from modules L{mgrs} and C{testMgrs} with I{Karney}'s C++ utility
105
108
  U{GeoConvert<https://GeographicLib.SourceForge.io/C++/doc/GeoConvert.1.html>}, the latter must
106
109
  be executable and set with env variable C{PYGEODESY_GEOCONVERT}.
@@ -121,41 +124,44 @@ C{epydoc --html --no-private --no-source --name=PyGeodesy --url=... -v pygeodesy
121
124
  Tests
122
125
  =====
123
126
 
124
- The tests ran with Python 3.12.3 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0,
125
- Python 3.11.5 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0, U{numpy
126
- <https://PyPI.org/project/numpy>} 1.24.2 and U{scipy<https://PyPI.org/project/scipy>} 1.10.1), Python
127
- 3.10.8 (with U{geographiclib <https://PyPI.org/project/geographiclib>} 2.0, U{numpy
128
- <https://PyPI.org/project/numpy>} 1.23.3, U{scipy<https://PyPI.org/project/scipy>} 1.9.1, U{GeoConvert
129
- <https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2, U{GeodSolve
130
- <https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2 and U{RhumbSolve
131
- <https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2), Python 3.9.6 and Python 2.7.18 (with
132
- U{geographiclib<https://PyPI.org/project/geographiclib>} 1.50, U{numpy<https://PyPI.org/project/numpy>}
133
- 1.16.6, U{scipy<https://PyPI.org/project/scipy>} 1.2.2, U{GeoConvert
134
- <https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2, U{GeodSolve
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.5 Sonoma and
137
- in 64-bit only.
127
+ The tests ran with Python 3.13.0b4, Python 3.12.4 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0,
128
+ U{GeodSolve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.3,
129
+ U{IntersectTool<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.3 and
130
+ U{RhumbSolve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.3),
131
+ Python 3.11.5 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0,
132
+ U{numpy<https://PyPI.org/project/numpy>} 1.24.2 and U{scipy<https://PyPI.org/project/scipy>} 1.10.1),
133
+ Python 3.10.8 (with U{geographiclib <https://PyPI.org/project/geographiclib>} 2.0,
134
+ U{numpy<https://PyPI.org/project/numpy>} 1.23.3, U{scipy<https://PyPI.org/project/scipy>} 1.9.1,
135
+ U{GeoConvert<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.3,
136
+ U{GeodSolve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.3) and
137
+ Python 2.7.18 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 1.50,
138
+ U{numpy<https://PyPI.org/project/numpy>} 1.16.6, U{scipy<https://PyPI.org/project/scipy>} 1.2.2,
139
+ U{GeoConvert<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.3,
140
+ U{GeodSolve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.3,
141
+ U{IntersectTool<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.3 and
142
+ U{RhumbSolve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.3), all in 64-bit on macOS 14.5 Sonoma.
138
143
 
139
144
  All tests ran with and without C{lazy import} for Python 3 and with command line option C{-W default} and
140
145
  env variable C{PYGEODESY_WARNINGS=on} for all Python versions. The results of those tests are included in
141
146
  the distribution files.
142
147
 
143
- Test coverage has been measured with U{coverage<https://PyPI.org/project/coverage>} 7.2.2 using only Python
148
+ Test coverage has been measured with U{coverage<https://PyPI.org/project/coverage>} 7.6.0 using Python 3.12.4,
144
149
  3.11.5 and 3.10.8. The complete coverage report in HTML and a PDF summary are included in the distribution files.
145
150
 
146
- 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
- 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{machine<pygeodesy.machine>}).
151
+ Python 3.13.0b4, 3.12.4, 3.11.5 and 3.10.8 run on Apple M1 Silicon (C{arm64}), I{natively}. Python 2.7.18 runs on
152
+ Intel (C{x86_64}) or Intel I{emulation} ("C{arm64_x86_64}", see function L{machine<pygeodesy.machine>}).
149
153
 
150
- The tests also ran with Python 3.11.5 (and U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0) on
151
- U{Debian 11<https://Cirrus-CI.com/github/mrJean1/PyGeodesy/master>} in 64-bit only and with Python 3.11.5,
152
- 3.10.10 and 2.7.18 (all with U{geographiclib<https://PyPI.org/project/geographiclib>} 1.52) on U{Windows 10
153
- <https://CI.AppVeyor.com/project/mrJean1/pygeodesy>} in 64- and/or 32-bit.
154
+ The tests also ran with Python 3.12.4 (and U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0) on U{Debian
155
+ 12<https://Cirrus-CI.com/github/mrJean1/PyGeodesy/master>} in 64-bit only, with Python 3.12.3 (and
156
+ U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0) on U{Windows
157
+ 2019Server<https://CI.AppVeyor.com/project/mrJean1/pygeodesy>} in 64-bit only and with Python 2.7.18 (and
158
+ U{geographiclib<https://PyPI.org/project/geographiclib>} 1.52) on U{Windows
159
+ 10<https://CI.AppVeyor.com/project/mrJean1/pygeodesy>} in 64- and 32-bit.
154
160
 
155
161
  A single-File and single-Directory application with C{pygeodesy} has been bundled using U{PyInstaller
156
162
  <https://PyPI.org/project/pyinstaller>} 3.4 and 64-bit Python 3.7.3 on macOS 10.13.6 High Sierra.
157
163
 
158
- Previously, the tests were run with Python 3.12.0-2, 3.11.2-4, 3.10.1-7, 3.9.1, 3.8.7, 3.7.1, 2.7.15, U{PyPy
164
+ Previously, the tests were run with Python 3.12.0-3, 3.11.2-4, 3.10.1-7, 3.9.6, 3.9.1, 3.8.7, 3.7.1, 2.7.15, U{PyPy
159
165
  <https://PyPy.org>} 7.3.12 (Python 3.10.12), 7.3.1 (Python 3.6.9) and U{PyPy<https://PyPy.org>} 7.1.1 (Python
160
166
  2.7.13) (and U{geographiclib <https://PyPI.org/project/geographiclib>} 1.52, U{numpy<https://PyPI.org/project/numpy>}
161
167
  1.16.3, 1.16.4, 1.16.6, 1.19.0, 1.19.4, 1.19.5 or 1.22.4 and U{scipy<https://PyPI.org/project/scipy>} 1.2.1, 1.4.1,
@@ -197,6 +203,7 @@ The following environment variables are observed by C{PyGeodesy}:
197
203
  - C{PYGEODESY_FSUM_RESIDUAL} - see module L{fsums<pygeodesy.fsums>} and class L{Fsum<pygeodesy.Fsum>}.
198
204
  - C{PYGEODESY_GEOCONVERT} - see module L{mgrs<pygeodesy.mgrs>}.
199
205
  - C{PYGEODESY_GEODSOLVE} - see module L{geodsolve<pygeodesy.geodsolve>}.
206
+ - C{PYGEODESY_INTERSECTTOOL} - see module L{geodesici<pygeodesy.geodesici>}.
200
207
  - C{PYGEODESY_LAZY_IMPORT} - see module L{lazily<pygeodesy.lazily>} and variable L{isLazy<pygeodesy.isLazy>}.
201
208
  - C{PYGEODESY_NOTIMPLEMENTED} - C{__special__} methods return C{NotImplemented} if set to "std".
202
209
  - C{PYGEODESY_RHUMBSOLVE} - see module L{rhumb.solve<pygeodesy.rhumb.solve>}.
@@ -364,10 +371,9 @@ else:
364
371
  __path__ = [pygeodesy_abspath]
365
372
  try: # ... make this import work, ...
366
373
  import pygeodesy.lazily as _
367
- except ImportError: # ... if it doesn't, extend
368
- # _sys.path to include this very directory such
369
- # that all public and private sub-modules can
370
- # be imported (and checked by PyChecker, etc.)
374
+ except ImportError: # ... if it doesn't, extend _sys.path to include
375
+ # this very directory such that all public and private sub-modules
376
+ # can be imported (by epydoc, checked by PyChecker, etc.)
371
377
  _sys.path.insert(0, pygeodesy_abspath) # XXX __path__[0]
372
378
 
373
379
  try: # lazily requires Python 3.7+, see lazily.__doc__
@@ -590,7 +596,7 @@ else:
590
596
 
591
597
  from pygeodesy.internals import _version2, _DOT_ # PYCHOK import
592
598
  # from pygeodesy.interns import _DOT_ # from .internals
593
- __version__ = '24.06.24'
599
+ __version__ = '24.07.24'
594
600
  # see setup.py for similar logic
595
601
  version = _DOT_(*_version2(__version__, n=3))
596
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.05.15'
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)
@@ -23,7 +23,8 @@ from pygeodesy.fmath import hypot, unstr
23
23
  from pygeodesy.fsums import _add_op_, _iadd_op_, _isub_op_, _sub_op_
24
24
  from pygeodesy.named import _Named, _ALL_DOCS, _MODS
25
25
  # from pygeodesy.lazily import _ALL_DOCS, _ALL_MODS as _MODS # from .named
26
- from pygeodesy.props import Property, Property_RO, property_RO, _update_all
26
+ from pygeodesy.props import Property, Property_RO, property_RO, property_ROver, \
27
+ _update_all
27
28
  # from pygeodesy.streprs import unstr # from .fmath
28
29
  from pygeodesy.units import Degrees, Radians
29
30
  from pygeodesy.utily import atan2d, sincos2, sincos2d
@@ -31,7 +32,7 @@ from pygeodesy.utily import atan2d, sincos2, sincos2d
31
32
  from math import asinh, atan2, copysign, degrees, fabs, radians, sinh
32
33
 
33
34
  __all__ = ()
34
- __version__ = '24.06.16'
35
+ __version__ = '24.07.12'
35
36
 
36
37
  _0_INF_NAN_NINF = (0, _0_0) + _INF_NAN_NINF
37
38
  _MAX_2 = MAX * _0_5 # PYCHOK used!
@@ -273,12 +274,11 @@ class AuxAngle(_Named):
273
274
  y, x = self._yx_normalized
274
275
  return self.classof(y, x, name=self.name, aux=self._AUX)
275
276
 
276
- @property_RO
277
+ @property_ROver
277
278
  def _RhumbAux(self):
278
279
  '''(INTERNAL) Import the L{RhumbAux} class, I{once}.
279
280
  '''
280
- AuxAngle._RhumbAux = R = _MODS.rhumb.aux_.RhumbAux # overwrite property_RO
281
- return R
281
+ return _MODS.rhumb.aux_.RhumbAux # overwrite propertyROver
282
282
 
283
283
  @Property_RO
284
284
  def tan(self):
@@ -18,13 +18,13 @@ from __future__ import division as _; del _ # PYCHOK semicolon
18
18
  from pygeodesy.auxilats.auxily import _Dm
19
19
  from pygeodesy.basics import isodd, neg, _reverange, _xnumpy
20
20
  from pygeodesy.constants import PI_2, PI_4, isfinite, _0_0, _0_5, _naninf
21
- from pygeodesy.fsums import Fsum, property_RO
21
+ from pygeodesy.fsums import Fsum as _Fsum
22
22
  from pygeodesy.karney import _2cos2x, _ALL_DOCS
23
23
  # from pygeodesy.lazily import _ALL_DOCS # from .karney
24
- # from pygeodesy.props import property_RO # from .fsums
24
+ from pygeodesy.props import property_RO, property_ROver
25
25
 
26
26
  __all__ = ()
27
- __version__ = '23.12.02'
27
+ __version__ = '24.07.12'
28
28
 
29
29
 
30
30
  class AuxDST(object):
@@ -60,7 +60,7 @@ class AuxDST(object):
60
60
  '''
61
61
  a = -_2cos2x(cosx, sinx)
62
62
  if isfinite(a):
63
- Y0, Y1 = Fsum(), Fsum()
63
+ Y0, Y1 = _Fsum(), _Fsum()
64
64
  n = _len_N(F, *N)
65
65
  Fn = list(F[:n])
66
66
  _F = Fn.pop
@@ -74,12 +74,11 @@ class AuxDST(object):
74
74
  r = _naninf(-a)
75
75
  return r
76
76
 
77
- @property_RO
77
+ @property_ROver
78
78
  def _fft_numpy(self):
79
79
  '''(INTERNAL) Get the C{numpy.fft} module, I{once}.
80
80
  '''
81
- AuxDST._fft_numpy = fft = _xnumpy(AuxDST, 1, 16).fft # overwrite property_RO
82
- return fft
81
+ return _xnumpy(AuxDST, 1, 16).fft # overwrite propertyROver
83
82
 
84
83
  def _fft_real(self, data):
85
84
  '''(INTERNAL) NumPy's I{kissfft}-like C{transform_real} function,
@@ -160,7 +159,7 @@ class AuxDST(object):
160
159
  '''
161
160
  a = _2cos2x(cosx - sinx, cosx + sinx)
162
161
  if isfinite(a):
163
- Y0, Y1 = Fsum(), Fsum()
162
+ Y0, Y1 = _Fsum(), _Fsum()
164
163
  for r in _reverscaled(F, *N):
165
164
  Y1 -= Y0 * a + r
166
165
  Y1, Y0 = Y0, -Y1
@@ -192,8 +191,8 @@ class AuxDST(object):
192
191
  # -2 * sin(y - x) * sin(y + x) -> 0
193
192
  s = -_2cos2x(siny * cosx, cosy * sinx)
194
193
  if isfinite(c) and isfinite(s):
195
- Y0, Y1 = Fsum(), Fsum()
196
- Z0, Z1 = Fsum(), Fsum()
194
+ Y0, Y1 = _Fsum(), _Fsum()
195
+ Z0, Z1 = _Fsum(), _Fsum()
197
196
  for r in _reverscaled(F, *N):
198
197
  Y1 -= Y0 * c + Z0 * s + r
199
198
  Z1 -= Y0 * s + Z0 * c
@@ -19,7 +19,7 @@ from pygeodesy.constants import INF, NAN, isinf, isnan, _0_0, _0_5, \
19
19
  from pygeodesy.errors import AuxError, NN
20
20
  from pygeodesy.fmath import hypot1 as _sc, hypot2_
21
21
  # from pygeodesy.interns import NN # from .errors
22
- from pygeodesy.karney import ADict, _ALL_DOCS, _MODS # PYCHOK used!
22
+ from pygeodesy.karney import ADict, _ALL_DOCS, _MODS # PYCHOK used!
23
23
  # from pygeodesy.lazily import _ALL_DOCS, _ALL_MODS as _MODS # from .karney
24
24
  # from pygeodesy.named import ADict # from .karney
25
25
  from pygeodesy.utily import atan1
@@ -27,7 +27,7 @@ from pygeodesy.utily import atan1
27
27
  from math import asinh, copysign
28
28
 
29
29
  __all__ = ()
30
- __version__ = '24.03.20'
30
+ __version__ = '24.07.12'
31
31
 
32
32
 
33
33
  class Aux(object):
pygeodesy/basics.py CHANGED
@@ -37,7 +37,7 @@ from math import copysign as _copysign
37
37
  import inspect as _inspect
38
38
 
39
39
  __all__ = _ALL_LAZY.basics
40
- __version__ = '24.06.15'
40
+ __version__ = '24.07.06'
41
41
 
42
42
  _below_ = 'below'
43
43
  _list_tuple_types = (list, tuple)
@@ -160,19 +160,23 @@ def _args_kwds_names(func, splast=False):
160
160
  return tuple(args_kwds)
161
161
 
162
162
 
163
- def clips(sb, limit=50, white=NN):
163
+ def clips(sb, limit=50, white=NN, length=False):
164
164
  '''Clip a string to the given length limit.
165
165
 
166
166
  @arg sb: String (C{str} or C{bytes}).
167
167
  @kwarg limit: Length limit (C{int}).
168
168
  @kwarg white: Optionally, replace all whitespace (C{str}).
169
+ @kwarg len: IF C{True} append the original I{[length]} (C{bool}).
169
170
 
170
171
  @return: The clipped or unclipped B{C{sb}}.
171
172
  '''
172
- T = type(sb)
173
- if len(sb) > limit > 8:
173
+ T, n = type(sb), len(sb)
174
+ if n > limit > 8:
174
175
  h = limit // 2
175
176
  sb = T(_ELLIPSIS4_).join((sb[:h], sb[-h:]))
177
+ if length:
178
+ n = _MODS.streprs.Fmt.SQUARE(n)
179
+ sb = T(NN).join((sb, n))
176
180
  if white: # replace whitespace
177
181
  sb = T(white).join(sb.split())
178
182
  return sb