pygeodesy 25.11.5__py2.py3-none-any.whl → 25.12.12__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. pygeodesy/__init__.py +25 -12
  2. pygeodesy/__main__.py +1 -1
  3. pygeodesy/albers.py +1 -1
  4. pygeodesy/angles.py +960 -0
  5. pygeodesy/auxilats/_CX_4.py +1 -1
  6. pygeodesy/auxilats/_CX_6.py +1 -1
  7. pygeodesy/auxilats/_CX_8.py +1 -1
  8. pygeodesy/auxilats/_CX_Rs.py +1 -1
  9. pygeodesy/auxilats/__init__.py +2 -2
  10. pygeodesy/auxilats/__main__.py +1 -1
  11. pygeodesy/auxilats/auxAngle.py +7 -8
  12. pygeodesy/auxilats/auxDLat.py +1 -1
  13. pygeodesy/auxilats/auxDST.py +1 -1
  14. pygeodesy/auxilats/auxLat.py +1 -1
  15. pygeodesy/auxilats/auxily.py +1 -1
  16. pygeodesy/azimuthal.py +6 -5
  17. pygeodesy/basics.py +14 -10
  18. pygeodesy/booleans.py +1 -1
  19. pygeodesy/cartesianBase.py +7 -7
  20. pygeodesy/clipy.py +1 -1
  21. pygeodesy/constants.py +27 -24
  22. pygeodesy/css.py +1 -1
  23. pygeodesy/datums.py +1 -1
  24. pygeodesy/deprecated/__init__.py +1 -1
  25. pygeodesy/deprecated/bases.py +1 -1
  26. pygeodesy/deprecated/classes.py +14 -7
  27. pygeodesy/deprecated/consterns.py +1 -1
  28. pygeodesy/deprecated/datum.py +1 -1
  29. pygeodesy/deprecated/functions.py +1 -1
  30. pygeodesy/deprecated/nvector.py +1 -1
  31. pygeodesy/deprecated/rhumbBase.py +1 -1
  32. pygeodesy/deprecated/rhumbaux.py +1 -1
  33. pygeodesy/deprecated/rhumbsolve.py +1 -1
  34. pygeodesy/deprecated/rhumbx.py +1 -1
  35. pygeodesy/dms.py +1 -1
  36. pygeodesy/ecef.py +1 -1
  37. pygeodesy/ecefLocals.py +1 -1
  38. pygeodesy/elevations.py +1 -1
  39. pygeodesy/ellipsoidalBase.py +1 -1
  40. pygeodesy/ellipsoidalBaseDI.py +1 -1
  41. pygeodesy/ellipsoidalExact.py +1 -1
  42. pygeodesy/ellipsoidalGeodSolve.py +1 -1
  43. pygeodesy/ellipsoidalKarney.py +1 -1
  44. pygeodesy/ellipsoidalNvector.py +1 -1
  45. pygeodesy/ellipsoidalVincenty.py +1 -1
  46. pygeodesy/ellipsoids.py +7 -6
  47. pygeodesy/elliptic.py +1 -1
  48. pygeodesy/epsg.py +1 -1
  49. pygeodesy/errors.py +8 -4
  50. pygeodesy/etm.py +1 -1
  51. pygeodesy/fmath.py +15 -8
  52. pygeodesy/formy.py +107 -5
  53. pygeodesy/frechet.py +1 -1
  54. pygeodesy/fstats.py +1 -1
  55. pygeodesy/fsums.py +1 -1
  56. pygeodesy/gars.py +1 -1
  57. pygeodesy/geod3solve.py +488 -0
  58. pygeodesy/geodesici.py +4 -4
  59. pygeodesy/geodesicw.py +1 -1
  60. pygeodesy/geodesicx/_C4_24.py +1 -1
  61. pygeodesy/geodesicx/_C4_27.py +1 -1
  62. pygeodesy/geodesicx/_C4_30.py +1 -1
  63. pygeodesy/geodesicx/__init__.py +1 -1
  64. pygeodesy/geodesicx/__main__.py +1 -1
  65. pygeodesy/geodesicx/gx.py +1 -1
  66. pygeodesy/geodesicx/gxarea.py +1 -1
  67. pygeodesy/geodesicx/gxbases.py +1 -1
  68. pygeodesy/geodesicx/gxline.py +1 -1
  69. pygeodesy/geodsolve.py +70 -102
  70. pygeodesy/geohash.py +1 -1
  71. pygeodesy/geoids.py +1 -1
  72. pygeodesy/hausdorff.py +1 -1
  73. pygeodesy/heights.py +1 -1
  74. pygeodesy/internals.py +1 -1
  75. pygeodesy/interns.py +3 -3
  76. pygeodesy/iters.py +1 -1
  77. pygeodesy/karney.py +132 -116
  78. pygeodesy/ktm.py +1 -1
  79. pygeodesy/latlonBase.py +1 -1
  80. pygeodesy/lazily.py +23 -12
  81. pygeodesy/lcc.py +1 -1
  82. pygeodesy/ltp.py +1 -1
  83. pygeodesy/ltpTuples.py +1 -1
  84. pygeodesy/mgrs.py +3 -3
  85. pygeodesy/named.py +14 -9
  86. pygeodesy/namedTuples.py +1 -1
  87. pygeodesy/nvectorBase.py +1 -1
  88. pygeodesy/osgr.py +1 -1
  89. pygeodesy/points.py +1 -1
  90. pygeodesy/props.py +1 -1
  91. pygeodesy/resections.py +1 -1
  92. pygeodesy/rhumb/__init__.py +8 -6
  93. pygeodesy/rhumb/aux_.py +1 -1
  94. pygeodesy/rhumb/bases.py +1 -1
  95. pygeodesy/rhumb/ekx.py +1 -1
  96. pygeodesy/rhumb/solve.py +91 -84
  97. pygeodesy/simplify.py +1 -1
  98. pygeodesy/solveBase.py +72 -49
  99. pygeodesy/sphericalBase.py +1 -1
  100. pygeodesy/sphericalNvector.py +1 -1
  101. pygeodesy/sphericalTrigonometry.py +1 -1
  102. pygeodesy/streprs.py +6 -4
  103. pygeodesy/trf.py +1 -1
  104. pygeodesy/triaxials/__init__.py +70 -0
  105. pygeodesy/triaxials/bases.py +935 -0
  106. pygeodesy/triaxials/conformal3.py +617 -0
  107. pygeodesy/triaxials/triaxial3.py +969 -0
  108. pygeodesy/{triaxials.py → triaxials/triaxial5.py} +353 -781
  109. pygeodesy/units.py +1 -1
  110. pygeodesy/unitsBase.py +1 -1
  111. pygeodesy/ups.py +2 -3
  112. pygeodesy/utily.py +17 -14
  113. pygeodesy/utm.py +1 -1
  114. pygeodesy/utmups.py +1 -1
  115. pygeodesy/utmupsBase.py +1 -1
  116. pygeodesy/vector2d.py +1 -1
  117. pygeodesy/vector3d.py +1 -1
  118. pygeodesy/vector3dBase.py +1 -1
  119. pygeodesy/webmercator.py +1 -1
  120. pygeodesy/wgrs.py +1 -1
  121. {pygeodesy-25.11.5.dist-info → pygeodesy-25.12.12.dist-info}/METADATA +12 -12
  122. pygeodesy-25.12.12.dist-info/RECORD +125 -0
  123. pygeodesy-25.11.5.dist-info/RECORD +0 -119
  124. {pygeodesy-25.11.5.dist-info → pygeodesy-25.12.12.dist-info}/WHEEL +0 -0
  125. {pygeodesy-25.11.5.dist-info → pygeodesy-25.12.12.dist-info}/top_level.txt +0 -0
pygeodesy/__init__.py CHANGED
@@ -125,8 +125,8 @@ C{epydoc --html --no-private --no-source --name=pygeodesy --url=... -v pygeodesy
125
125
  Tests
126
126
  =====
127
127
 
128
- The tests ran with Python 3.14 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.1),
129
- Python 3.13.7 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.1),
128
+ The tests ran with Python 3.14.2 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.1),
129
+ Python 3.13.9 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.1),
130
130
  U{numpy<https://PyPI.org/project/numpy>} 2.3.3, U{scipy<https://PyPI.org/project/scipy>} 1.16.2,
131
131
  U{GeoConvert<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.5 and
132
132
  U{GeodSolve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.5),
@@ -143,20 +143,20 @@ U{GeoConvert<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.5,
143
143
  U{GeodSolve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.5,
144
144
  U{IntersectTool<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.5 and
145
145
  U{RhumbSolve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.5), all in 64-bit on
146
- macOS 26.0.1 Tahoe.
146
+ macOS 26.1 Tahoe.
147
147
 
148
148
  All tests ran with and without C{lazy import} for Python 3 and with command line option C{-W default} and
149
149
  env variable C{PYGEODESY_WARNINGS=on} for all Python versions. The results of those tests are included in
150
150
  the distribution files.
151
151
 
152
152
  Test coverage has been measured with U{coverage<https://PyPI.org/project/coverage>} 7.10.7 using Python
153
- 3.14, 3.13.7 and 3.12.7. The complete coverage report in HTML and a PDF summary are included in the
153
+ 3.14.2, 3.13.9 and 3.12.7. The complete coverage report in HTML and a PDF summary are included in the
154
154
  distribution files.
155
155
 
156
- Python 3.14, 3.13.7, 3.12.7 and 3.11.5 run on Apple M4 Si (C{arm64}), I{natively}. Python 2.7.18 runs
156
+ Python 3.14.2, 3.13.9, 3.12.7 and 3.11.5 run on Apple M4 Si (C{arm64}), I{natively}. Python 2.7.18 runs
157
157
  on Intel (C{x86_64}) or Intel I{emulation} ("C{arm64_x86_64}", see function L{machine<pygeodesy.machine>}).
158
158
 
159
- The tests also ran with Python 3.13.7 (and U{geographiclib<https://PyPI.org/project/geographiclib>} 2.1) on
159
+ The tests also ran with Python 3.13.9 (and U{geographiclib<https://PyPI.org/project/geographiclib>} 2.1) on
160
160
  U{Debian 12<https://Cirrus-CI.com/github/mrJean1/PyGeodesy/master>} in 64-bit only, with Python 3.12.8 (and
161
161
  U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0) on U{Windows 2019Server
162
162
  <https://CI.AppVeyor.com/project/mrJean1/pygeodesy>} in 64-bit only and with Python 2.7.18 (and U{geographiclib
@@ -166,7 +166,7 @@ in 64- and 32-bit.
166
166
  A single-File and single-Directory application with C{pygeodesy} has been bundled using U{PyInstaller
167
167
  <https://PyPI.org/project/pyinstaller>} 3.4 and 64-bit Python 3.7.3 on macOS 10.13.6 High Sierra.
168
168
 
169
- Previously, the tests were run with Python 3.13.0-6, 3.12.0-6, 3.11.2-4, 3.10.1-7, 3.9.6, 3.9.1, 3.8.7, 3.7.1, 2.7.15,
169
+ Previously, the tests were run with Python 3.13.0-7, 3.12.0-6, 3.11.2-4, 3.10.1-7, 3.9.6, 3.9.1, 3.8.7, 3.7.1, 2.7.15,
170
170
  U{PyPy<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
171
171
  2.7.13) (and U{geographiclib <https://PyPI.org/project/geographiclib>} 1.52, U{numpy<https://PyPI.org/project/numpy>}
172
172
  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,
@@ -187,10 +187,10 @@ Notes
187
187
  =====
188
188
 
189
189
  All Python source code has been statically U{checked<https://GitHub.com/ActiveState/code/tree/master/recipes/Python/
190
- 546532_PyChecker_postprocessor>} with U{Ruff<https://GitHub.com/astral-sh/ruff>} using Python 3.13.7 and with
190
+ 546532_PyChecker_postprocessor>} with U{Ruff<https://GitHub.com/astral-sh/ruff>} using Python 3.13.9 and with
191
191
  U{PyChecker<https://PyPI.org/project/pychecker>}, U{PyFlakes<https://PyPI.org/project/pyflakes>}, U{PyCodeStyle
192
192
  <https://PyPI.org/project/pycodestyle>} (formerly Pep8) and U{McCabe<https://PyPI.org/project/mccabe>} using Python
193
- 2.7.18, both in 64-bit on macOS 26.0.1 Tahoe.
193
+ 2.7.18, both in 64-bit on macOS 26.1 Tahoe.
194
194
 
195
195
  For a summary of all I{Karney}-based functionality in C{pygeodesy}, see module U{karney
196
196
  <https://mrJean1.GitHub.io/PyGeodesy/docs/pygeodesy.karney-module.html>}.
@@ -210,6 +210,7 @@ The following environment variables are observed by C{pygeodesy}:
210
210
  - C{PYGEODESY_FSUM_RESIDUAL} - see module L{fsums<pygeodesy.fsums>} and method L{RESIDUAL<pygeodesy.Fsum.RESIDUAL>}.
211
211
  - C{PYGEODESY_GEOCONVERT} - see module L{mgrs<pygeodesy.mgrs>}.
212
212
  - C{PYGEODESY_GEODSOLVE} - see module L{geodsolve<pygeodesy.geodsolve>}.
213
+ - C{PYGEODESY_GEOD3SOLVE} - see module L{geodsolve<pygeodesy.geod3solve>}.
213
214
  - C{PYGEODESY_INTERSECTTOOL} - see module L{geodesici<pygeodesy.geodesici>}.
214
215
  - C{PYGEODESY_LAZY_IMPORT} - see module L{lazily<pygeodesy.lazily>} and variable L{isLazy<pygeodesy.isLazy>}.
215
216
  - C{PYGEODESY_NOTIMPLEMENTED} - C{__special__} methods return C{NotImplemented} if set to "std".
@@ -247,7 +248,7 @@ and:
247
248
  License
248
249
  =======
249
250
 
250
- **) U{Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.<https://OpenSource.org/licenses/MIT>}
251
+ **) U{Copyright (C) 2016-2026 -- mrJean1 at Gmail -- All Rights Reserved.<https://OpenSource.org/licenses/MIT>}
251
252
 
252
253
  C{Permission is hereby granted, free of charge, to any person obtaining a copy of this software
253
254
  and associated documentation files (the "Software"), to deal in the Software without restriction,
@@ -273,6 +274,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.}
273
274
  @var EPS2: M{EPS * 2} ≈ 4.440892098501e-16 (C{float}).
274
275
  @var EPS_2: M{EPS / 2} ≈ 1.110223024625e-16 (C{float}).
275
276
  @var EPS4: M{EPS * 4} ≈ 8.881784197001e-16 (C{float}).
277
+ @var EPS8: M{EPS * 8} ≈ 1.776356839400e-15 (C{float}).
276
278
 
277
279
  @var F_D: Format degrees as unsigned "deg°" with symbol, plus compass point suffix C{N, S, E} or C{W} (C{str}).
278
280
  @var F_DM: Format degrees as unsigned "deg°min′" with symbols, plus suffix (C{str}).
@@ -321,6 +323,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.}
321
323
  @var NINF: Negative infinity (C{float}), see function L{isninf<pygeodesy.isninf>} and C{INF}.
322
324
  @var NN: Empty (C{str}), U{I{Nomen Nescio}<https://Wiktionary.org/wiki/N.N.>}.
323
325
 
326
+ @var OVERFLOW: Object representing C{overflow} (1 / L{EPS0<pygeodesy.constants.EPS0>} = 4.9e+32).
327
+
324
328
  @var PI: Constant M{math.pi} (C{float}).
325
329
  @var PI2: Two PI, M{PI * 2}, aka I{Tau} (C{float}).
326
330
  @var PI_2: Half PI, M{PI / 2} (C{float}).
@@ -395,6 +399,7 @@ if _init__all__ and not _lazy_import2: # import and set __all__
395
399
 
396
400
  # import all public modules and export as such
397
401
  import pygeodesy.albers as albers # noqa: F401
402
+ import pygeodesy.angles as angles # noqa: F401
398
403
  import pygeodesy.auxilats as auxilats # noqa: F401
399
404
  import pygeodesy.azimuthal as azimuthal # noqa: F401
400
405
  import pygeodesy.basics as basics # noqa: F401
@@ -431,6 +436,7 @@ if _init__all__ and not _lazy_import2: # import and set __all__
431
436
  import pygeodesy.geodesicw as geodesicw # noqa: F401
432
437
  import pygeodesy.geodesicx as geodesicx # noqa: F401
433
438
  import pygeodesy.geodsolve as geodsolve # noqa: F401
439
+ import pygeodesy.geod3solve as geod3solve # noqa: F401
434
440
  import pygeodesy.geohash as geohash # noqa: F401
435
441
  import pygeodesy.geoids as geoids # noqa: F401
436
442
  import pygeodesy.hausdorff as hausdorff # noqa: F401
@@ -481,6 +487,7 @@ if _init__all__ and not _lazy_import2: # import and set __all__
481
487
  # NOT modules ellipsoidal*, epsg, gars, geohash, spherical*,
482
488
  # vector and wgrs ... in order keep those as modules ONLY
483
489
  from pygeodesy.albers import * # noqa: F403
490
+ from pygeodesy.angles import * # noqa: F403
484
491
  from pygeodesy.azimuthal import * # noqa: F403
485
492
  # from pygeodesy.auxilats import * # noqa: F403
486
493
  from pygeodesy.basics import * # noqa: F403
@@ -517,6 +524,7 @@ if _init__all__ and not _lazy_import2: # import and set __all__
517
524
  from pygeodesy.geodesicw import * # noqa: F403
518
525
  from pygeodesy.geodesicx import * # noqa: F403
519
526
  from pygeodesy.geodsolve import * # noqa: F403
527
+ from pygeodesy.geod3solve import * # noqa: F403
520
528
  from pygeodesy.geohash import * # noqa: F403
521
529
  from pygeodesy.geoids import * # noqa: F403
522
530
  from pygeodesy.hausdorff import * # noqa: F403
@@ -548,6 +556,11 @@ if _init__all__ and not _lazy_import2: # import and set __all__
548
556
  from pygeodesy.streprs import * # noqa: F403
549
557
  from pygeodesy.trf import * # noqa: F403
550
558
  from pygeodesy.triaxials import * # noqa: F403
559
+ # from pygeodesy.triaxials.bases import * # noqa: F403
560
+ # from pygeodesy.triaxials.conformals import * # noqa: F403
561
+ # from pygeodesy.triaxials.spheres import * # noqa: F403
562
+ # from pygeodesy.triaxials.triaxial3 import * # noqa: F403
563
+ # from pygeodesy.triaxials.triaxial5 import * # noqa: F403
551
564
  from pygeodesy.units import * # noqa: F403
552
565
  from pygeodesy.unitsBase import * # noqa: F403 Float, ...
553
566
  from pygeodesy.ups import * # noqa: F403
@@ -605,7 +618,7 @@ else:
605
618
 
606
619
  from pygeodesy.internals import _version2, _DOT_ # noqa: E402
607
620
  # from pygeodesy.interns import _DOT_ # from .internals
608
- __version__ = '25.11.05'
621
+ __version__ = '25.12.12'
609
622
  # see setup.py for similar logic
610
623
  version = _DOT_(*_version2(__version__, n=3))
611
624
 
@@ -613,7 +626,7 @@ del _DOT_, _lazy_import2, _os_path, _sys, _version2
613
626
 
614
627
  # **) MIT License
615
628
  #
616
- # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
629
+ # Copyright (C) 2016-2026 -- mrJean1 at Gmail -- All Rights Reserved.
617
630
  #
618
631
  # Permission is hereby granted, free of charge, to any person obtaining a
619
632
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/__main__.py CHANGED
@@ -86,7 +86,7 @@ except ImportError:
86
86
 
87
87
  # **) MIT License
88
88
  #
89
- # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
89
+ # Copyright (C) 2016-2026 -- mrJean1 at Gmail -- All Rights Reserved.
90
90
  #
91
91
  # Permission is hereby granted, free of charge, to any person obtaining a
92
92
  # copy of this software and associated documentation files (the "Software"),
pygeodesy/albers.py CHANGED
@@ -827,7 +827,7 @@ __all__ += _ALL_DOCS(_AlbersBase)
827
827
 
828
828
  # **) MIT License
829
829
  #
830
- # Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
830
+ # Copyright (C) 2016-2026 -- mrJean1 at Gmail -- All Rights Reserved.
831
831
  #
832
832
  # Permission is hereby granted, free of charge, to any person obtaining a
833
833
  # copy of this software and associated documentation files (the "Software"),