pygeodesy 25.5.5__py2.py3-none-any.whl → 25.5.25__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/__init__.py +186 -186
- pygeodesy/__main__.py +2 -2
- pygeodesy/albers.py +4 -4
- pygeodesy/auxilats/_CX_Rs.py +3 -3
- pygeodesy/auxilats/auxAngle.py +2 -2
- pygeodesy/auxilats/auxDLat.py +2 -2
- pygeodesy/auxilats/auxDST.py +2 -2
- pygeodesy/auxilats/auxLat.py +2 -2
- pygeodesy/auxilats/auxily.py +2 -2
- pygeodesy/azimuthal.py +2 -2
- pygeodesy/booleans.py +2 -2
- pygeodesy/cartesianBase.py +2 -2
- pygeodesy/clipy.py +2 -2
- pygeodesy/constants.py +2 -2
- pygeodesy/datums.py +2 -2
- pygeodesy/deprecated/__init__.py +8 -8
- pygeodesy/deprecated/bases.py +2 -2
- pygeodesy/deprecated/rhumbBase.py +2 -2
- pygeodesy/deprecated/rhumbaux.py +2 -2
- pygeodesy/deprecated/rhumbsolve.py +2 -2
- pygeodesy/deprecated/rhumbx.py +2 -2
- pygeodesy/ecef.py +3 -4
- pygeodesy/ellipsoidalBase.py +2 -2
- pygeodesy/ellipsoidalBaseDI.py +7 -6
- pygeodesy/ellipsoidalExact.py +3 -3
- pygeodesy/ellipsoidalNvector.py +4 -4
- pygeodesy/ellipsoidalVincenty.py +15 -14
- pygeodesy/ellipsoids.py +4 -4
- pygeodesy/elliptic.py +2 -2
- pygeodesy/errors.py +1 -1
- pygeodesy/etm.py +2 -2
- pygeodesy/fmath.py +9 -9
- pygeodesy/formy.py +2 -2
- pygeodesy/frechet.py +5 -5
- pygeodesy/fstats.py +2 -2
- pygeodesy/fsums.py +37 -28
- pygeodesy/gars.py +2 -3
- pygeodesy/geodesici.py +4 -4
- pygeodesy/geodesicx/__init__.py +3 -3
- pygeodesy/geodesicx/gx.py +2 -2
- pygeodesy/geodesicx/gxarea.py +2 -2
- pygeodesy/geodesicx/gxline.py +2 -2
- pygeodesy/geoids.py +5 -5
- pygeodesy/hausdorff.py +4 -4
- pygeodesy/heights.py +2 -2
- pygeodesy/iters.py +1 -1
- pygeodesy/karney.py +2 -2
- pygeodesy/ktm.py +2 -2
- pygeodesy/latlonBase.py +3 -4
- pygeodesy/lazily.py +1 -1
- pygeodesy/lcc.py +2 -2
- pygeodesy/ltp.py +5 -5
- pygeodesy/mgrs.py +3 -3
- pygeodesy/namedTuples.py +3 -3
- pygeodesy/nvectorBase.py +2 -2
- pygeodesy/osgr.py +2 -2
- pygeodesy/points.py +2 -3
- pygeodesy/props.py +16 -16
- pygeodesy/resections.py +30 -24
- pygeodesy/rhumb/aux_.py +2 -2
- pygeodesy/rhumb/bases.py +3 -3
- pygeodesy/rhumb/ekx.py +3 -4
- pygeodesy/rhumb/solve.py +2 -2
- pygeodesy/simplify.py +2 -2
- pygeodesy/solveBase.py +2 -2
- pygeodesy/sphericalBase.py +6 -6
- pygeodesy/sphericalNvector.py +2 -2
- pygeodesy/sphericalTrigonometry.py +6 -5
- pygeodesy/trf.py +4 -4
- pygeodesy/triaxials.py +2 -2
- pygeodesy/units.py +7 -8
- pygeodesy/utily.py +2 -2
- pygeodesy/utmupsBase.py +2 -2
- pygeodesy/vector2d.py +13 -7
- pygeodesy/vector3d.py +3 -3
- pygeodesy/webmercator.py +2 -2
- {pygeodesy-25.5.5.dist-info → pygeodesy-25.5.25.dist-info}/METADATA +16 -16
- pygeodesy-25.5.25.dist-info/RECORD +119 -0
- pygeodesy-25.5.5.dist-info/RECORD +0 -119
- {pygeodesy-25.5.5.dist-info → pygeodesy-25.5.25.dist-info}/WHEEL +0 -0
- {pygeodesy-25.5.5.dist-info → pygeodesy-25.5.25.dist-info}/top_level.txt +0 -0
pygeodesy/frechet.py
CHANGED
|
@@ -90,9 +90,9 @@ from pygeodesy.interns import _DMAIN_, _DOT_, _n_, NN, _units_
|
|
|
90
90
|
# from pygeodesy.iters import points2 as _points2 # from .points
|
|
91
91
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _FOR_DOCS
|
|
92
92
|
from pygeodesy.named import _name2__, _Named, _NamedTuple, _Pass
|
|
93
|
-
|
|
94
|
-
from pygeodesy.points import _distanceTo, _fractional,
|
|
95
|
-
points2 as _points2,
|
|
93
|
+
from pygeodesy.namedTuples import PhiLam2Tuple
|
|
94
|
+
from pygeodesy.points import _distanceTo, _fractional, \
|
|
95
|
+
points2 as _points2, radians
|
|
96
96
|
from pygeodesy.props import Property, property_doc_, property_RO
|
|
97
97
|
from pygeodesy.units import FIx, Float, Number_
|
|
98
98
|
from pygeodesy import unitsBase as _unitsBase # _Str_..., _xUnit, _xUnits
|
|
@@ -101,7 +101,7 @@ from collections import defaultdict as _defaultdict
|
|
|
101
101
|
# from math import radians # from .points
|
|
102
102
|
|
|
103
103
|
__all__ = _ALL_LAZY.frechet
|
|
104
|
-
__version__ = '25.
|
|
104
|
+
__version__ = '25.05.21'
|
|
105
105
|
|
|
106
106
|
_formy = _MODS.into(formy=__name__)
|
|
107
107
|
|
|
@@ -129,7 +129,7 @@ class Frechet(_Named):
|
|
|
129
129
|
be overloaded.
|
|
130
130
|
'''
|
|
131
131
|
_datum = _WGS84
|
|
132
|
-
|
|
132
|
+
# _func = None # formy function/property
|
|
133
133
|
_f1 = 1
|
|
134
134
|
_kwds = {} # func_ options
|
|
135
135
|
_n1 = 0
|
pygeodesy/fstats.py
CHANGED
|
@@ -6,7 +6,7 @@ L{pygeodesy.Fsum}, precision floating point summation and accurate
|
|
|
6
6
|
multiplication.
|
|
7
7
|
'''
|
|
8
8
|
# make sure int/int division yields float quotient, see .basics
|
|
9
|
-
from __future__ import division as _; del _ #
|
|
9
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
10
10
|
|
|
11
11
|
from pygeodesy.basics import isscalar, isodd, _xinstanceof, \
|
|
12
12
|
_xiterable, _xsubclassof, _zip, typename
|
|
@@ -24,7 +24,7 @@ from pygeodesy.named import _name__, _Named, _NotImplemented, \
|
|
|
24
24
|
# from pygeodesy.streprs import Fmt # from .fmath
|
|
25
25
|
|
|
26
26
|
__all__ = _ALL_LAZY.fstats
|
|
27
|
-
__version__ = '25.
|
|
27
|
+
__version__ = '25.05.12'
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
def _sampled(n, sample):
|
pygeodesy/fsums.py
CHANGED
|
@@ -37,7 +37,7 @@ respectively C{ValueError} exceptions. However, in that case I{non-finite}
|
|
|
37
37
|
results may differ from Python's C{math.fsum} results.
|
|
38
38
|
'''
|
|
39
39
|
# make sure int/int division yields float quotient, see .basics
|
|
40
|
-
from __future__ import division as _; del _ #
|
|
40
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
41
41
|
|
|
42
42
|
from pygeodesy.basics import _gcd, isbool, iscomplex, isint, isscalar, \
|
|
43
43
|
_signOf, itemsorted, signOf, _xiterable
|
|
@@ -48,7 +48,7 @@ from pygeodesy.errors import _AssertionError, _OverflowError, _TypeError, \
|
|
|
48
48
|
_ValueError, _xError, _xError2, _xkwds, \
|
|
49
49
|
_xkwds_get, _xkwds_get1, _xkwds_not, \
|
|
50
50
|
_xkwds_pop, _xsError
|
|
51
|
-
from pygeodesy.internals import _enquote, _envPYGEODESY, _passarg, typename
|
|
51
|
+
from pygeodesy.internals import _enquote, _envPYGEODESY, _passarg, typename # _sizeof
|
|
52
52
|
from pygeodesy.interns import NN, _arg_, _COMMASPACE_, _DMAIN_, _DOT_, _from_, \
|
|
53
53
|
_not_finite_, _SPACE_, _std_, _UNDER_
|
|
54
54
|
# from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS # from .named
|
|
@@ -64,7 +64,7 @@ from math import fabs, isinf, isnan, \
|
|
|
64
64
|
ceil as _ceil, floor as _floor # PYCHOK used! .ltp
|
|
65
65
|
|
|
66
66
|
__all__ = _ALL_LAZY.fsums
|
|
67
|
-
__version__ = '25.
|
|
67
|
+
__version__ = '25.05.12'
|
|
68
68
|
|
|
69
69
|
from pygeodesy.interns import (
|
|
70
70
|
_PLUS_ as _add_op_, # in .auxilats.auxAngle
|
|
@@ -230,13 +230,13 @@ def f2product(two=None):
|
|
|
230
230
|
def _Fsumf_(*xs): # in .auxLat, ...
|
|
231
231
|
'''(INTERNAL) An C{Fsum(xs)}, all C{scalar}, an L{Fsum} or L{Fsum2Tuple}.
|
|
232
232
|
'''
|
|
233
|
-
return Fsum().
|
|
233
|
+
return Fsum()._facc_xsum(xs, up=False)
|
|
234
234
|
|
|
235
235
|
|
|
236
236
|
def _Fsum1f_(*xs): # in .albers
|
|
237
237
|
'''(INTERNAL) An C{Fsum(xs)}, all C{scalar}, an L{Fsum} or L{Fsum2Tuple}, 1-primed.
|
|
238
238
|
'''
|
|
239
|
-
return Fsum().
|
|
239
|
+
return Fsum()._facc_xsum(_1primed(xs), origin=-1, up=False)
|
|
240
240
|
|
|
241
241
|
|
|
242
242
|
def _halfeven(s, r, p):
|
|
@@ -585,7 +585,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
585
585
|
with quotient C{div} an C{int} in Python 3+ or C{float}
|
|
586
586
|
in Python 2- and remainder C{mod} an L{Fsum} instance.
|
|
587
587
|
|
|
588
|
-
@arg other:
|
|
588
|
+
@arg other: Modulus (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
|
|
589
589
|
@kwarg raiser_RESIDUAL: Use C{B{raiser}=False} to ignore
|
|
590
590
|
L{ResidualError}s (C{bool}) and C{B{RESIDUAL}=scalar}
|
|
591
591
|
to override the current L{RESIDUAL<Fsum.RESIDUAL>}.
|
|
@@ -623,7 +623,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
623
623
|
def __floordiv__(self, other):
|
|
624
624
|
'''Return C{B{self} // B{other}} as an L{Fsum}.
|
|
625
625
|
|
|
626
|
-
@arg other:
|
|
626
|
+
@arg other: Divisor (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
|
|
627
627
|
|
|
628
628
|
@return: The C{floor} quotient (L{Fsum}).
|
|
629
629
|
|
|
@@ -632,6 +632,10 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
632
632
|
f = self._copyd(self.__floordiv__)
|
|
633
633
|
return f._floordiv(other, _floordiv_op_)
|
|
634
634
|
|
|
635
|
+
# def __format__(self, *other): # PYCHOK no cover
|
|
636
|
+
# '''Not implemented.'''
|
|
637
|
+
# return _NotImplemented(self, *other)
|
|
638
|
+
|
|
635
639
|
def __ge__(self, other):
|
|
636
640
|
'''Return C{(B{self} >= B{other})}, see C{__eq__}.
|
|
637
641
|
'''
|
|
@@ -672,7 +676,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
672
676
|
def __ifloordiv__(self, other):
|
|
673
677
|
'''Apply C{B{self} //= B{other}} to this instance.
|
|
674
678
|
|
|
675
|
-
@arg other:
|
|
679
|
+
@arg other: Divisor (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
|
|
676
680
|
|
|
677
681
|
@return: This instance, updated (L{Fsum}).
|
|
678
682
|
|
|
@@ -696,7 +700,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
696
700
|
def __imod__(self, other):
|
|
697
701
|
'''Apply C{B{self} %= B{other}} to this instance.
|
|
698
702
|
|
|
699
|
-
@arg other:
|
|
703
|
+
@arg other: Modulus (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
|
|
700
704
|
|
|
701
705
|
@return: This instance, updated (L{Fsum}).
|
|
702
706
|
|
|
@@ -707,7 +711,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
707
711
|
def __imul__(self, other):
|
|
708
712
|
'''Apply C{B{self} *= B{other}} to this instance.
|
|
709
713
|
|
|
710
|
-
@arg other:
|
|
714
|
+
@arg other: Factor (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
|
|
711
715
|
|
|
712
716
|
@return: This instance, updated (L{Fsum}).
|
|
713
717
|
|
|
@@ -736,7 +740,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
736
740
|
def __ipow__(self, other, *mod, **raiser_RESIDUAL): # PYCHOK 2 vs 3 args
|
|
737
741
|
'''Apply C{B{self} **= B{other}} to this instance.
|
|
738
742
|
|
|
739
|
-
@arg other:
|
|
743
|
+
@arg other: Exponent (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
|
|
740
744
|
@arg mod: Optional modulus (C{int} or C{None}) for the 3-argument
|
|
741
745
|
C{pow(B{self}, B{other}, B{mod})} version.
|
|
742
746
|
@kwarg raiser_RESIDUAL: Use C{B{raiser}=False} to ignore
|
|
@@ -798,7 +802,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
798
802
|
def __itruediv__(self, other, **raiser_RESIDUAL):
|
|
799
803
|
'''Apply C{B{self} /= B{other}} to this instance.
|
|
800
804
|
|
|
801
|
-
@arg other:
|
|
805
|
+
@arg other: Divisor (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
|
|
802
806
|
@kwarg raiser_RESIDUAL: Use C{B{raiser}=False} to ignore
|
|
803
807
|
L{ResidualError}s (C{bool}) and C{B{RESIDUAL}=scalar}
|
|
804
808
|
to override the current L{RESIDUAL<Fsum.RESIDUAL>}.
|
|
@@ -917,7 +921,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
917
921
|
f = self._rcopyd(other, self.__rfloordiv__)
|
|
918
922
|
return f._floordiv(self, _floordiv_op_)
|
|
919
923
|
|
|
920
|
-
def __rmatmul__(self, other): # PYCHOK no
|
|
924
|
+
def __rmatmul__(self, other): # PYCHOK no cover
|
|
921
925
|
'''Not implemented.'''
|
|
922
926
|
return _NotImplemented(self, other)
|
|
923
927
|
|
|
@@ -970,6 +974,11 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
970
974
|
f = self._rcopyd(other, self.__rtruediv__)
|
|
971
975
|
return f._ftruediv(self, _truediv_op_, **raiser_RESIDUAL)
|
|
972
976
|
|
|
977
|
+
# def __sizeof__(self):
|
|
978
|
+
# '''Return the size of this instance (C{int} bytes}).
|
|
979
|
+
# '''
|
|
980
|
+
# return _sizeof(self._ps) + _sizeof(self._n)
|
|
981
|
+
|
|
973
982
|
def __str__(self):
|
|
974
983
|
'''Return the default C{str(self)}.
|
|
975
984
|
'''
|
|
@@ -990,7 +999,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
990
999
|
def __truediv__(self, other, **raiser_RESIDUAL):
|
|
991
1000
|
'''Return C{B{self} / B{other}} as an L{Fsum}.
|
|
992
1001
|
|
|
993
|
-
@arg other:
|
|
1002
|
+
@arg other: Divisor (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
|
|
994
1003
|
@kwarg raiser_RESIDUAL: Use C{B{raiser}=False} to ignore
|
|
995
1004
|
L{ResidualError}s (C{bool}) and C{B{RESIDUAL}=scalar}
|
|
996
1005
|
to override the current L{RESIDUAL<Fsum.RESIDUAL>}.
|
|
@@ -1221,14 +1230,6 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
1221
1230
|
'''
|
|
1222
1231
|
return self._facc_scalar(xs, **up)
|
|
1223
1232
|
|
|
1224
|
-
def _facc_scalarf(self, xs, up=True, **origin_which):
|
|
1225
|
-
'''(INTERNAL) Accumulate all C{xs}, each C{scalar}, an L{Fsum} or
|
|
1226
|
-
L{Fsum2Tuple}, like function C{_xsum}.
|
|
1227
|
-
'''
|
|
1228
|
-
fs = _xs(xs, **_x_isfine(self.nonfinitesOK, _Cdot=type(self),
|
|
1229
|
-
**origin_which)) # PYCHOK yield
|
|
1230
|
-
return self._facc_scalar(fs, up=up)
|
|
1231
|
-
|
|
1232
1233
|
# def _facc_up(self, up=True):
|
|
1233
1234
|
# '''(INTERNAL) Update the C{partials}, by removing
|
|
1234
1235
|
# and re-accumulating the final C{partial}.
|
|
@@ -1243,6 +1244,14 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
1243
1244
|
# break
|
|
1244
1245
|
# return self._update() if up else self
|
|
1245
1246
|
|
|
1247
|
+
def _facc_xsum(self, xs, up=True, **origin_which):
|
|
1248
|
+
'''(INTERNAL) Accumulate all C{xs}, each C{scalar}, an L{Fsum}
|
|
1249
|
+
or L{Fsum2Tuple}, like function C{_xsum}.
|
|
1250
|
+
'''
|
|
1251
|
+
fs = _xs(xs, **_x_isfine(self.nonfinitesOK, _Cdot=type(self),
|
|
1252
|
+
**origin_which)) # PYCHOK yield
|
|
1253
|
+
return self._facc_scalar(fs, up=up)
|
|
1254
|
+
|
|
1246
1255
|
def fadd(self, xs=()):
|
|
1247
1256
|
'''Add an iterable's items to this instance.
|
|
1248
1257
|
|
|
@@ -1533,17 +1542,17 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
1533
1542
|
def fover(self, over, **raiser_RESIDUAL):
|
|
1534
1543
|
'''Apply C{B{self} /= B{over}} and summate.
|
|
1535
1544
|
|
|
1536
|
-
@arg over:
|
|
1545
|
+
@arg over: Divisor (C{scalar}, an L{Fsum} or L{Fsum2Tuple}).
|
|
1537
1546
|
@kwarg raiser_RESIDUAL: Use C{B{raiser}=False} to ignore
|
|
1538
1547
|
L{ResidualError}s (C{bool}) and C{B{RESIDUAL}=scalar}
|
|
1539
1548
|
to override the current L{RESIDUAL<Fsum.RESIDUAL>}.
|
|
1540
1549
|
|
|
1541
|
-
@return: Precision running sum (C{float}).
|
|
1550
|
+
@return: Precision running quotient sum (C{float}).
|
|
1542
1551
|
|
|
1543
1552
|
@raise ResidualError: Non-zero, significant residual or invalid
|
|
1544
1553
|
B{C{RESIDUAL}}.
|
|
1545
1554
|
|
|
1546
|
-
@see: Methods L{Fsum.
|
|
1555
|
+
@see: Methods L{Fsum.fdiv}, L{Fsum.__itruediv__} and L{Fsum.fsum}.
|
|
1547
1556
|
'''
|
|
1548
1557
|
return float(self.fdiv(over, **raiser_RESIDUAL)._fprs)
|
|
1549
1558
|
|
|
@@ -1837,19 +1846,19 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase, .fstats
|
|
|
1837
1846
|
'''Like method L{Fsum.fsum_} iff I{all} C{B{xs}}, each I{known to be}
|
|
1838
1847
|
C{scalar}, an L{Fsum} or L{Fsum2Tuple}.
|
|
1839
1848
|
'''
|
|
1840
|
-
return self.
|
|
1849
|
+
return self._facc_xsum(xs, which=self.fsumf_)._fprs # origin=1?
|
|
1841
1850
|
|
|
1842
1851
|
def Fsumf_(self, *xs):
|
|
1843
1852
|
'''Like method L{Fsum.Fsum_} iff I{all} C{B{xs}}, each I{known to be}
|
|
1844
1853
|
C{scalar}, an L{Fsum} or L{Fsum2Tuple}.
|
|
1845
1854
|
'''
|
|
1846
|
-
return self.
|
|
1855
|
+
return self._facc_xsum(xs, which=self.Fsumf_)._copyd(self.Fsumf_) # origin=1?
|
|
1847
1856
|
|
|
1848
1857
|
def fsum2f_(self, *xs):
|
|
1849
1858
|
'''Like method L{Fsum.fsum2_} iff I{all} C{B{xs}}, each I{known to be}
|
|
1850
1859
|
C{scalar}, an L{Fsum} or L{Fsum2Tuple}.
|
|
1851
1860
|
'''
|
|
1852
|
-
return self._fsum2(xs, self.
|
|
1861
|
+
return self._fsum2(xs, self._facc_xsum, which=self.fsum2f_) # origin=1?
|
|
1853
1862
|
|
|
1854
1863
|
# ftruediv = __itruediv__ # for naming consistency?
|
|
1855
1864
|
|
pygeodesy/gars.py
CHANGED
|
@@ -15,8 +15,7 @@ Transcoded from I{Charles Karney}'s C++ class U{GARS
|
|
|
15
15
|
'''
|
|
16
16
|
|
|
17
17
|
from pygeodesy.basics import isstr, _splituple, typename
|
|
18
|
-
from pygeodesy.constants import _off90, _1_over, _0_5
|
|
19
|
-
_1_0 # PYCHOK used!
|
|
18
|
+
from pygeodesy.constants import _off90, _1_over, _0_5
|
|
20
19
|
from pygeodesy.errors import _ValueError, _xkwds, _xStrError
|
|
21
20
|
# from pygeodesy.internals import typename # from .basics
|
|
22
21
|
from pygeodesy.interns import NN, _0to9_, _AtoZnoIO_, _INV_
|
|
@@ -30,7 +29,7 @@ from pygeodesy.units import Int_, Lat, Lon, Precision_, Scalar_, Str
|
|
|
30
29
|
from math import floor
|
|
31
30
|
|
|
32
31
|
__all__ = _ALL_LAZY.gars
|
|
33
|
-
__version__ = '25.
|
|
32
|
+
__version__ = '25.05.07'
|
|
34
33
|
|
|
35
34
|
_Digits = _0to9_
|
|
36
35
|
_LatLen = 2
|
pygeodesy/geodesici.py
CHANGED
|
@@ -23,7 +23,7 @@ and I{S. Baselga Moreno & J.C. Martinez-Llario}'s U{Intersection and point-to-li
|
|
|
23
23
|
on the ellipsoid<https://riunet.UPV.ES/bitstream/handle/10251/122902/Revised_Manuscript.pdf>}.
|
|
24
24
|
'''
|
|
25
25
|
# make sure int/int division yields float quotient
|
|
26
|
-
from __future__ import division as _; del _ #
|
|
26
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
27
27
|
|
|
28
28
|
from pygeodesy.basics import _copy, _enumereverse, map1, \
|
|
29
29
|
_xinstanceof, _xor, typename
|
|
@@ -57,7 +57,7 @@ from pygeodesy.utily import atan2, sincos2, fabs, radians
|
|
|
57
57
|
# from math import ceil as _ceil, fabs, radians # .fsums, .utily
|
|
58
58
|
|
|
59
59
|
__all__ = _ALL_LAZY.geodesici
|
|
60
|
-
__version__ = '25.
|
|
60
|
+
__version__ = '25.05.12'
|
|
61
61
|
|
|
62
62
|
_0t = 0, # int
|
|
63
63
|
_1_1t = -1, +1
|
|
@@ -1560,7 +1560,7 @@ if __name__ == _DMAIN_: # MCCABE 14
|
|
|
1560
1560
|
|
|
1561
1561
|
_isopt = re.compile('^[-]+[a-z]*$', flags=re.IGNORECASE).match
|
|
1562
1562
|
|
|
1563
|
-
I = Intersector(GeodesicExact()) #
|
|
1563
|
+
I = Intersector(GeodesicExact()) # noqa: E741 I is eye
|
|
1564
1564
|
M = m = _R = None
|
|
1565
1565
|
_T = _V = _h = _C = False
|
|
1566
1566
|
|
|
@@ -1584,7 +1584,7 @@ if __name__ == _DMAIN_: # MCCABE 14
|
|
|
1584
1584
|
elif arg == _R__ and args:
|
|
1585
1585
|
_R = args.pop(0)
|
|
1586
1586
|
elif _starts('--Tool', arg):
|
|
1587
|
-
I = Intersectool() #
|
|
1587
|
+
I = Intersectool() # noqa: E741 I is eye
|
|
1588
1588
|
if _V:
|
|
1589
1589
|
I.verbose = True
|
|
1590
1590
|
if not _Xables.X_OK(I.IntersectTool):
|
pygeodesy/geodesicx/__init__.py
CHANGED
|
@@ -17,13 +17,13 @@ respectively C{GeodesicLine} from I{Karney}'s Python implementation U{geographic
|
|
|
17
17
|
L{pygeodesy.geodesicw} and L{pygeodesy.karney}.
|
|
18
18
|
'''
|
|
19
19
|
|
|
20
|
-
from pygeodesy.geodesicx.gx import GeodesicExact, GeodesicLineExact #
|
|
21
|
-
from pygeodesy.geodesicx.gxarea import GeodesicAreaExact, PolygonArea #
|
|
20
|
+
from pygeodesy.geodesicx.gx import GeodesicExact, GeodesicLineExact # noqa: F401
|
|
21
|
+
from pygeodesy.geodesicx.gxarea import GeodesicAreaExact, PolygonArea # noqa: F401
|
|
22
22
|
from pygeodesy.karney import Caps, GeodesicError
|
|
23
23
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY
|
|
24
24
|
|
|
25
25
|
__all__ = _ALL_LAZY.geodesicx + _ALL_DOCS(Caps, GeodesicError)
|
|
26
|
-
__version__ = '25.
|
|
26
|
+
__version__ = '25.05.12'
|
|
27
27
|
|
|
28
28
|
# **) MIT License
|
|
29
29
|
#
|
pygeodesy/geodesicx/gx.py
CHANGED
|
@@ -13,7 +13,7 @@ and licensed under the MIT/X11 License. For more information, see the
|
|
|
13
13
|
U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
|
|
14
14
|
'''
|
|
15
15
|
# make sure int/int division yields float quotient
|
|
16
|
-
from __future__ import division as _; del _ #
|
|
16
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
17
17
|
|
|
18
18
|
# A copy of comments from Karney's C{GeodesicExact.cpp}:
|
|
19
19
|
#
|
|
@@ -65,7 +65,7 @@ from pygeodesy.utily import atan2, atan2d as _atan2d_reverse, _unrollon, \
|
|
|
65
65
|
from math import copysign, cos, degrees, fabs, radians, sqrt
|
|
66
66
|
|
|
67
67
|
__all__ = ()
|
|
68
|
-
__version__ = '25.
|
|
68
|
+
__version__ = '25.05.12'
|
|
69
69
|
|
|
70
70
|
_MAXIT1 = 20
|
|
71
71
|
_MAXIT2 = 10 + _MAXIT1 + MANT_DIG # MANT_DIG == C++ digits
|
pygeodesy/geodesicx/gxarea.py
CHANGED
|
@@ -15,7 +15,7 @@ and licensed under the MIT/X11 License. For more information, see the
|
|
|
15
15
|
U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
|
|
16
16
|
'''
|
|
17
17
|
# make sure int/int division yields float quotient
|
|
18
|
-
from __future__ import division as _; del _ #
|
|
18
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
19
19
|
|
|
20
20
|
from pygeodesy.basics import isodd, unsigned0
|
|
21
21
|
from pygeodesy.constants import NAN, _0_0, _0_5, _720_0
|
|
@@ -31,7 +31,7 @@ from pygeodesy.props import Property, Property_RO, property_RO
|
|
|
31
31
|
from math import fmod as _fmod
|
|
32
32
|
|
|
33
33
|
__all__ = ()
|
|
34
|
-
__version__ = '
|
|
34
|
+
__version__ = '25.05.12'
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
class GeodesicAreaExact(_NamedBase):
|
pygeodesy/geodesicx/gxline.py
CHANGED
|
@@ -13,7 +13,7 @@ and licensed under the MIT/X11 License. For more information, see the
|
|
|
13
13
|
U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
|
|
14
14
|
'''
|
|
15
15
|
# make sure int/int division yields float quotient
|
|
16
|
-
from __future__ import division as _; del _ #
|
|
16
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
17
17
|
|
|
18
18
|
# A copy of comments from Karney's C{GeodesicLineExact.cpp}:
|
|
19
19
|
#
|
|
@@ -55,7 +55,7 @@ from pygeodesy.utily import atan2, atan2d as _atan2d_reverse, sincos2
|
|
|
55
55
|
from math import cos, degrees, fabs, floor, radians, sin
|
|
56
56
|
|
|
57
57
|
__all__ = ()
|
|
58
|
-
__version__ = '25.
|
|
58
|
+
__version__ = '25.05.12'
|
|
59
59
|
|
|
60
60
|
_glXs = [] # instances of C{[_]GeodesicLineExact} to be updated
|
|
61
61
|
|
pygeodesy/geoids.py
CHANGED
|
@@ -87,7 +87,7 @@ courtesy of SBFRF.
|
|
|
87
87
|
Above Mean Sea Level<https://Wiki.ROS.org/mavros>}.
|
|
88
88
|
'''
|
|
89
89
|
# make sure int/int division yields float quotient, see .basics
|
|
90
|
-
from __future__ import division as _; del _ #
|
|
90
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
91
91
|
|
|
92
92
|
from pygeodesy.basics import _isin, len2, min2, isodd, _splituple, \
|
|
93
93
|
ub2str as _ub2str
|
|
@@ -126,7 +126,7 @@ except ImportError: # Python 3+
|
|
|
126
126
|
from io import BytesIO as _BytesIO # PYCHOK expected
|
|
127
127
|
|
|
128
128
|
__all__ = _ALL_LAZY.geoids
|
|
129
|
-
__version__ = '25.
|
|
129
|
+
__version__ = '25.05.21'
|
|
130
130
|
|
|
131
131
|
_assert_ = 'assert'
|
|
132
132
|
_bHASH_ = b'#'
|
|
@@ -148,7 +148,7 @@ class GeoidError(HeightError):
|
|
|
148
148
|
class _GeoidBase(_HeightBase):
|
|
149
149
|
'''(INTERNAL) Base class for C{Geoid...}s.
|
|
150
150
|
'''
|
|
151
|
-
|
|
151
|
+
# _center = None # (lat, lon, height)
|
|
152
152
|
_cropped = None
|
|
153
153
|
# _datum = _WGS84 # from _HeightBase
|
|
154
154
|
_egm = None # open C{egm*.pgm} geoid file
|
|
@@ -297,7 +297,7 @@ class _GeoidBase(_HeightBase):
|
|
|
297
297
|
|
|
298
298
|
@Property_RO
|
|
299
299
|
def _center(self):
|
|
300
|
-
''' Cache for method L{center}.
|
|
300
|
+
'''(INTERNAL) Cache for method L{center}.
|
|
301
301
|
'''
|
|
302
302
|
return self._llh3(favg(self._lat_lo, self._lat_hi),
|
|
303
303
|
favg(self._lon_lo, self._lon_hi))
|
|
@@ -907,7 +907,7 @@ def _I(i):
|
|
|
907
907
|
'''(INTERNAL) Cache a single C{int} constant.
|
|
908
908
|
'''
|
|
909
909
|
i = int(i)
|
|
910
|
-
return _intCs.setdefault(i, i) #
|
|
910
|
+
return _intCs.setdefault(i, i) # noqa: F821 del
|
|
911
911
|
|
|
912
912
|
|
|
913
913
|
def _T(cs):
|
pygeodesy/hausdorff.py
CHANGED
|
@@ -75,8 +75,8 @@ from pygeodesy.interns import NN, _i_, _j_, _units_
|
|
|
75
75
|
# from pygeodesy.iters import points2 as _points2 # from .points
|
|
76
76
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _FOR_DOCS
|
|
77
77
|
from pygeodesy.named import _name2__, _Named, _NamedTuple, _Pass
|
|
78
|
-
|
|
79
|
-
from pygeodesy.points import _distanceTo,
|
|
78
|
+
from pygeodesy.namedTuples import PhiLam2Tuple
|
|
79
|
+
from pygeodesy.points import _distanceTo, points2 as _points2, radians
|
|
80
80
|
from pygeodesy.props import Property, Property_RO, property_doc_, property_RO
|
|
81
81
|
from pygeodesy.units import Float, Number_
|
|
82
82
|
from pygeodesy import unitsBase as _unitsBase # _Str_..., _xUnit, _xUnits
|
|
@@ -85,7 +85,7 @@ from pygeodesy import unitsBase as _unitsBase # _Str_..., _xUnit, _xUnits
|
|
|
85
85
|
from random import Random
|
|
86
86
|
|
|
87
87
|
__all__ = _ALL_LAZY.hausdorff
|
|
88
|
-
__version__ = '25.
|
|
88
|
+
__version__ = '25.05.21'
|
|
89
89
|
|
|
90
90
|
_formy = _MODS.into(formy=__name__)
|
|
91
91
|
|
|
@@ -101,7 +101,7 @@ class Hausdorff(_Named):
|
|
|
101
101
|
be overloaded.
|
|
102
102
|
'''
|
|
103
103
|
_datum = _WGS84
|
|
104
|
-
|
|
104
|
+
# _func = None # formy function/property
|
|
105
105
|
_kwds = {} # func_ options
|
|
106
106
|
_model = ()
|
|
107
107
|
_seed = None
|
pygeodesy/heights.py
CHANGED
|
@@ -69,7 +69,7 @@ C{>>> h1, h2, ... = hinterpolator.height_(lat1, lon1, lat2, lon2, ...)}
|
|
|
69
69
|
Interpolation.
|
|
70
70
|
'''
|
|
71
71
|
# make sure int/int division yields float quotient, see .basics
|
|
72
|
-
from __future__ import division as _; del _ #
|
|
72
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
73
73
|
|
|
74
74
|
from pygeodesy.basics import isscalar, len2, map1, min2, _xnumpy, _xscipy
|
|
75
75
|
from pygeodesy.constants import EPS, PI, PI_2, PI2, _0_0, _90_0, _180_0
|
|
@@ -92,7 +92,7 @@ from pygeodesy.units import _isDegrees, Float_, Int_
|
|
|
92
92
|
# from math import radians # from .points
|
|
93
93
|
|
|
94
94
|
__all__ = _ALL_LAZY.heights
|
|
95
|
-
__version__ = '25.
|
|
95
|
+
__version__ = '25.05.12'
|
|
96
96
|
|
|
97
97
|
_error_ = 'error'
|
|
98
98
|
_formy = _MODS.into(formy=__name__)
|
pygeodesy/iters.py
CHANGED
|
@@ -26,7 +26,7 @@ from pygeodesy.units import Int, Radius
|
|
|
26
26
|
from pygeodesy.utily import degrees2m, _Wrap, _1_0
|
|
27
27
|
|
|
28
28
|
__all__ = _ALL_LAZY.iters
|
|
29
|
-
__version__ = '25.
|
|
29
|
+
__version__ = '25.05.19'
|
|
30
30
|
|
|
31
31
|
_items_ = 'items'
|
|
32
32
|
_iterNumpy2len = 1 # adjustable for testing purposes
|
pygeodesy/karney.py
CHANGED
|
@@ -141,7 +141,7 @@ in C{pygeodesy} are based on I{Karney}'s post U{Area of a spherical polygon
|
|
|
141
141
|
<https://MathOverflow.net/questions/97711/the-area-of-spherical-polygons>}, 3rd Answer.
|
|
142
142
|
'''
|
|
143
143
|
# make sure int/int division yields float quotient, see .basics
|
|
144
|
-
from __future__ import division as _; del _ #
|
|
144
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
145
145
|
|
|
146
146
|
from pygeodesy.basics import _copysign, _isin, isint, neg, unsigned0, \
|
|
147
147
|
_xgeographiclib, _zip
|
|
@@ -166,7 +166,7 @@ from pygeodesy.utily import atan2d, sincos2d, tand, _unrollon, fabs
|
|
|
166
166
|
# from math import fabs # from .utily
|
|
167
167
|
|
|
168
168
|
__all__ = _ALL_LAZY.karney
|
|
169
|
-
__version__ = '25.
|
|
169
|
+
__version__ = '25.05.12'
|
|
170
170
|
|
|
171
171
|
_2_4_ = '2.4'
|
|
172
172
|
_K_2_0 = _getenv(_PYGEODESY_ENV(typename(_xgeographiclib)[2:]), _2_)
|
pygeodesy/ktm.py
CHANGED
|
@@ -40,7 +40,7 @@ and licensed under the MIT/X11 License. For more information, see the
|
|
|
40
40
|
U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
|
|
41
41
|
'''
|
|
42
42
|
# make sure int/int division yields float quotient
|
|
43
|
-
from __future__ import division as _; del _ #
|
|
43
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
44
44
|
|
|
45
45
|
from pygeodesy.basics import copysign0, _isin, isodd, neg, neg_, \
|
|
46
46
|
_reverange, _xinstanceof
|
|
@@ -66,7 +66,7 @@ from cmath import polar
|
|
|
66
66
|
from math import asinh, cos, cosh, degrees, fabs, sin, sinh, sqrt, tanh
|
|
67
67
|
|
|
68
68
|
__all__ = _ALL_LAZY.ktm
|
|
69
|
-
__version__ = '25.
|
|
69
|
+
__version__ = '25.05.12'
|
|
70
70
|
|
|
71
71
|
|
|
72
72
|
class KTMError(_ValueError):
|
pygeodesy/latlonBase.py
CHANGED
|
@@ -25,9 +25,8 @@ from pygeodesy.errors import _AttributeError, IntersectionError, \
|
|
|
25
25
|
# from pygeodesy.fmath import favg # _MODS
|
|
26
26
|
# from pygeodesy import formy as _formy # _MODS.into
|
|
27
27
|
from pygeodesy.internals import _passarg, typename
|
|
28
|
-
from pygeodesy.interns import NN, _COMMASPACE_, _concentric_,
|
|
29
|
-
|
|
30
|
-
_no_, _overlap_, _too_, _point_ # PYCHOK used!
|
|
28
|
+
from pygeodesy.interns import NN, _COMMASPACE_, _concentric_, _intersection_, \
|
|
29
|
+
_LatLon_, _m_, _no_, _overlap_, _point_ # PYCHOK used!
|
|
31
30
|
# from pygeodesy.iters import PointsIter, points2 # _MODS
|
|
32
31
|
# from pygeodesy.karney import Caps # _MODS
|
|
33
32
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
@@ -49,7 +48,7 @@ from contextlib import contextmanager
|
|
|
49
48
|
from math import asin, cos, degrees, fabs, radians
|
|
50
49
|
|
|
51
50
|
__all__ = _ALL_LAZY.latlonBase
|
|
52
|
-
__version__ = '25.
|
|
51
|
+
__version__ = '25.05.07'
|
|
53
52
|
|
|
54
53
|
_formy = _MODS.into(formy=__name__)
|
|
55
54
|
|
pygeodesy/lazily.py
CHANGED
pygeodesy/lcc.py
CHANGED
|
@@ -22,7 +22,7 @@ and John P. Snyder U{'Map Projections - A Working Manual'<https://Pubs.USGS.gov/
|
|
|
22
22
|
@var Conics.WRF_Lb: Conic(name='WRF_Lb', lat0=40, lon0=-97, par1=33, par2=45, E0=0, N0=0, k0=1, SP=2, datum=Datum(name='WGS84', ellipsoid=Ellipsoids.WGS84, transform=Transforms.WGS84)
|
|
23
23
|
'''
|
|
24
24
|
# make sure int/int division yields float quotient, see .basics
|
|
25
|
-
from __future__ import division as _; del _ #
|
|
25
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
26
26
|
|
|
27
27
|
from pygeodesy.basics import copysign0, _isin, _xinstanceof, _xsubclassof, \
|
|
28
28
|
typename
|
|
@@ -50,7 +50,7 @@ from pygeodesy.utily import atan1, degrees90, degrees180, sincos2, tanPI_2_2
|
|
|
50
50
|
from math import atan, fabs, log, radians, sin, sqrt
|
|
51
51
|
|
|
52
52
|
__all__ = _ALL_LAZY.lcc
|
|
53
|
-
__version__ = '25.
|
|
53
|
+
__version__ = '25.05.12'
|
|
54
54
|
|
|
55
55
|
_E0_ = 'E0'
|
|
56
56
|
_N0_ = 'N0'
|
pygeodesy/ltp.py
CHANGED
|
@@ -11,7 +11,7 @@ and L{ChLVe} and L{Ltp}, L{ChLV}, L{LocalError}, L{Attitude} and L{Frustum}.
|
|
|
11
11
|
<https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1LocalCartesian.html>}.
|
|
12
12
|
'''
|
|
13
13
|
# make sure int/int division yields float quotient, see .basics
|
|
14
|
-
from __future__ import division as _; del _ #
|
|
14
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
15
15
|
|
|
16
16
|
from pygeodesy.basics import _args_kwds_names, _isin, map1, map2, _xinstanceof, \
|
|
17
17
|
_xsubclassof, typename # .datums
|
|
@@ -45,7 +45,7 @@ from pygeodesy.vector3d import _ALL_LAZY, Vector3d
|
|
|
45
45
|
# from math import fabs, floor as _floor # from .fmath, .fsums
|
|
46
46
|
|
|
47
47
|
__all__ = _ALL_LAZY.ltp
|
|
48
|
-
__version__ = '25.05.
|
|
48
|
+
__version__ = '25.05.12'
|
|
49
49
|
|
|
50
50
|
_height0_ = _height_ + _0_
|
|
51
51
|
_narrow_ = 'narrow'
|
|
@@ -306,11 +306,11 @@ class Frustum(_NamedBase):
|
|
|
306
306
|
# left and right corners, or swapped
|
|
307
307
|
if r < EPS: # no roll
|
|
308
308
|
r = a * tan_h_2
|
|
309
|
-
l = -r #
|
|
309
|
+
l = -r # noqa: E741 l is ell
|
|
310
310
|
else: # roll
|
|
311
|
-
r, l = tand_(r - h_2, r + h_2, roll_hfov=r) #
|
|
311
|
+
r, l = tand_(r - h_2, r + h_2, roll_hfov=r) # noqa: E741 l is ell
|
|
312
312
|
r *= -a # negate right positive
|
|
313
|
-
l *= -a #
|
|
313
|
+
l *= -a # noqa: E741 l is ell
|
|
314
314
|
y = a * cotd(e, tilt_vfov=e)
|
|
315
315
|
return (l, y), (r, y)
|
|
316
316
|
|
pygeodesy/mgrs.py
CHANGED
|
@@ -36,7 +36,7 @@ and compare the MGRS results with those from I{Karney}'s utility U{GeoConvert
|
|
|
36
36
|
'''
|
|
37
37
|
|
|
38
38
|
from pygeodesy.basics import halfs2, _isin, _splituple, _xinstanceof
|
|
39
|
-
|
|
39
|
+
from pygeodesy.constants import _0_5
|
|
40
40
|
from pygeodesy.datums import _ellipsoidal_datum, _WGS84
|
|
41
41
|
from pygeodesy.errors import _AssertionError, MGRSError, _parseX, \
|
|
42
42
|
_ValueError, _xkwds
|
|
@@ -49,14 +49,14 @@ from pygeodesy.named import _name2__, _NamedBase, _NamedTuple, _Pass
|
|
|
49
49
|
from pygeodesy.namedTuples import EasNor2Tuple, UtmUps5Tuple
|
|
50
50
|
from pygeodesy.props import deprecated_property_RO, property_RO, Property_RO
|
|
51
51
|
from pygeodesy.streprs import enstr2, _enstr2m3, Fmt, _resolution10, _xzipairs
|
|
52
|
-
from pygeodesy.units import Easting, Northing, Str, _100km
|
|
52
|
+
from pygeodesy.units import Easting, Northing, Str, _100km
|
|
53
53
|
from pygeodesy.units import _1um, _2000km # PYCHOK used!
|
|
54
54
|
from pygeodesy.ups import _hemi, toUps8, Ups, _UPS_ZONE
|
|
55
55
|
from pygeodesy.utm import toUtm8, _to3zBlat, Utm, _UTM_ZONE_MAX, _UTM_ZONE_MIN
|
|
56
56
|
# from pygeodesy.utmupsBase import _UTM_ZONE_MAX, _UTM_ZONE_MIN # from .utm
|
|
57
57
|
|
|
58
58
|
__all__ = _ALL_LAZY.mgrs
|
|
59
|
-
__version__ = '25.
|
|
59
|
+
__version__ = '25.05.12'
|
|
60
60
|
|
|
61
61
|
_AN_ = 'AN' # default south pole grid tile and band B
|
|
62
62
|
_AtoPx_ = _AtoZnoIO_.tillP
|