From 53570308104c784d623a4718e7736fc611839fc7 Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Tue, 16 Nov 2021 17:12:19 +0000 Subject: [PATCH 01/20] #30 Add array subpackage --- sdarray/__init__.py | 3 +-- sdarray/array/__init__.py | 3 +++ sdarray/{ => array}/coords.py | 0 sdarray/{ => array}/dims.py | 0 4 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 sdarray/array/__init__.py rename sdarray/{ => array}/coords.py (100%) rename sdarray/{ => array}/dims.py (100%) diff --git a/sdarray/__init__.py b/sdarray/__init__.py index d99aa8a..6d3f007 100644 --- a/sdarray/__init__.py +++ b/sdarray/__init__.py @@ -3,5 +3,4 @@ # submodules -from . import coords -from . import dims +from . import array diff --git a/sdarray/array/__init__.py b/sdarray/array/__init__.py new file mode 100644 index 0000000..0b4a64a --- /dev/null +++ b/sdarray/array/__init__.py @@ -0,0 +1,3 @@ +# submodules +from . import coords +from . import dims diff --git a/sdarray/coords.py b/sdarray/array/coords.py similarity index 100% rename from sdarray/coords.py rename to sdarray/array/coords.py diff --git a/sdarray/dims.py b/sdarray/array/dims.py similarity index 100% rename from sdarray/dims.py rename to sdarray/array/dims.py From 830a5f9c73d92c0b1cb894ad6748bfabdb88047e Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Tue, 16 Nov 2021 17:22:13 +0000 Subject: [PATCH 02/20] #30 Remove __all__ from submodules --- sdarray/array/coords.py | 22 ---------------------- sdarray/array/dims.py | 3 --- 2 files changed, 25 deletions(-) diff --git a/sdarray/array/coords.py b/sdarray/array/coords.py index 4fbfe26..96eedf0 100644 --- a/sdarray/array/coords.py +++ b/sdarray/array/coords.py @@ -1,25 +1,3 @@ -__all__ = [ - "Scan", - "Mode", - "Exposure", - "Interval", - "Longitude", - "Latitude", - "Beam", - "SpW", - "Pol", - "CenterFreq", - "RefFreq", - "Resolution", - "Width", - "LonOffset", - "LatOffset", - "Mask", - "Sigma", - "Weight", -] - - # standard library from dataclasses import dataclass from typing import Tuple diff --git a/sdarray/array/dims.py b/sdarray/array/dims.py index 3737f26..fd36df8 100644 --- a/sdarray/array/dims.py +++ b/sdarray/array/dims.py @@ -1,6 +1,3 @@ -__all__ = ["Time", "Chan", "time", "chan"] - - # standard library from dataclasses import dataclass From b80b3e84d7e0ec339a9578884d6d41729ff4805a Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Tue, 16 Nov 2021 17:23:25 +0000 Subject: [PATCH 03/20] #30 Update dataclass paths --- tests/test_coords.py | 36 ++++++++++++++++++------------------ tests/test_dims.py | 4 ++-- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/tests/test_coords.py b/tests/test_coords.py index aa329e6..e47c0a0 100644 --- a/tests/test_coords.py +++ b/tests/test_coords.py @@ -12,7 +12,7 @@ # test functions def test_scan() -> None: data = np.array(["0"], np.str_) - array = asdataarray(sd.coords.Scan(data)) + array = asdataarray(sd.array.coords.Scan(data)) assert array.data == data assert array.dims == ("time",) @@ -22,7 +22,7 @@ def test_scan() -> None: def test_mode() -> None: data = np.array(["0"], np.str_) - array = asdataarray(sd.coords.Mode(data)) + array = asdataarray(sd.array.coords.Mode(data)) assert array.data == data assert array.dims == ("time",) @@ -32,7 +32,7 @@ def test_mode() -> None: def test_exposure() -> None: data = np.array([0.0], np.float64) - array = asdataarray(sd.coords.Exposure(data)) + array = asdataarray(sd.array.coords.Exposure(data)) assert array.data == data assert array.dims == ("time",) @@ -43,7 +43,7 @@ def test_exposure() -> None: def test_interval() -> None: data = np.array([0.0], np.float64) - array = asdataarray(sd.coords.Interval(data)) + array = asdataarray(sd.array.coords.Interval(data)) assert array.data == data assert array.dims == ("time",) @@ -54,7 +54,7 @@ def test_interval() -> None: def test_longitude() -> None: data = np.array([0.0], np.float64) - array = asdataarray(sd.coords.Longitude(data)) + array = asdataarray(sd.array.coords.Longitude(data)) assert array.data == data assert array.dims == ("time",) @@ -65,7 +65,7 @@ def test_longitude() -> None: def test_latitude() -> None: data = np.array([0.0], np.float64) - array = asdataarray(sd.coords.Latitude(data)) + array = asdataarray(sd.array.coords.Latitude(data)) assert array.data == data assert array.dims == ("time",) @@ -76,7 +76,7 @@ def test_latitude() -> None: def test_beam() -> None: data = np.array(["0"], np.str_) - array = asdataarray(sd.coords.Beam(data)) + array = asdataarray(sd.array.coords.Beam(data)) assert array.data == data assert array.dims == ("chan",) @@ -86,7 +86,7 @@ def test_beam() -> None: def test_spw() -> None: data = np.array(["0"], np.str_) - array = asdataarray(sd.coords.SpW(data)) + array = asdataarray(sd.array.coords.SpW(data)) assert array.data == data assert array.dims == ("chan",) @@ -96,7 +96,7 @@ def test_spw() -> None: def test_pol() -> None: data = np.array(["0"], np.str_) - array = asdataarray(sd.coords.Pol(data)) + array = asdataarray(sd.array.coords.Pol(data)) assert array.data == data assert array.dims == ("chan",) @@ -106,7 +106,7 @@ def test_pol() -> None: def test_center_freq() -> None: data = np.array([0.0], np.float64) - array = asdataarray(sd.coords.CenterFreq(data)) + array = asdataarray(sd.array.coords.CenterFreq(data)) assert array.data == data assert array.dims == ("chan",) @@ -117,7 +117,7 @@ def test_center_freq() -> None: def test_ref_freq() -> None: data = np.array([0.0], np.float64) - array = asdataarray(sd.coords.RefFreq(data)) + array = asdataarray(sd.array.coords.RefFreq(data)) assert array.data == data assert array.dims == ("chan",) @@ -128,7 +128,7 @@ def test_ref_freq() -> None: def test_resolution() -> None: data = np.array([0.0], np.float64) - array = asdataarray(sd.coords.Resolution(data)) + array = asdataarray(sd.array.coords.Resolution(data)) assert array.data == data assert array.dims == ("chan",) @@ -139,7 +139,7 @@ def test_resolution() -> None: def test_width() -> None: data = np.array([0.0], np.float64) - array = asdataarray(sd.coords.Width(data)) + array = asdataarray(sd.array.coords.Width(data)) assert array.data == data assert array.dims == ("chan",) @@ -150,7 +150,7 @@ def test_width() -> None: def test_lon_offset() -> None: data = np.array([0.0], np.float64) - array = asdataarray(sd.coords.LonOffset(data)) + array = asdataarray(sd.array.coords.LonOffset(data)) assert array.data == data assert array.dims == ("chan",) @@ -161,7 +161,7 @@ def test_lon_offset() -> None: def test_lat_offset() -> None: data = np.array([0.0], np.float64) - array = asdataarray(sd.coords.LatOffset(data)) + array = asdataarray(sd.array.coords.LatOffset(data)) assert array.data == data assert array.dims == ("chan",) @@ -172,7 +172,7 @@ def test_lat_offset() -> None: def test_mask() -> None: data = np.array([[False]], np.bool_) - array = asdataarray(sd.coords.Mask(data)) + array = asdataarray(sd.array.coords.Mask(data)) assert array.data == data assert array.dims == ("time", "chan") @@ -182,7 +182,7 @@ def test_mask() -> None: def test_sigma() -> None: data = np.array([[0.0]], np.float64) - array = asdataarray(sd.coords.Sigma(data)) + array = asdataarray(sd.array.coords.Sigma(data)) assert array.data == data assert array.dims == ("time", "chan") @@ -192,7 +192,7 @@ def test_sigma() -> None: def test_weight() -> None: data = np.array([[1.0]], np.float64) - array = asdataarray(sd.coords.Weight(data)) + array = asdataarray(sd.array.coords.Weight(data)) assert array.data == data assert array.dims == ("time", "chan") diff --git a/tests/test_dims.py b/tests/test_dims.py index a38e088..fd55485 100644 --- a/tests/test_dims.py +++ b/tests/test_dims.py @@ -11,7 +11,7 @@ # test functions def test_time() -> None: data = np.array(["2000-01-01"], np.datetime64) - array = asdataarray(sd.dims.Time(data)) + array = asdataarray(sd.array.dims.Time(data)) assert array.data == data assert array.dims == ("time",) @@ -21,7 +21,7 @@ def test_time() -> None: def test_chan() -> None: data = np.array([0], np.int64) - array = asdataarray(sd.dims.Chan(data)) + array = asdataarray(sd.array.dims.Chan(data)) assert array.data == data assert array.dims == ("chan",) From 758765c3086fffbf4a9b0d5989c7cb3b3e287e29 Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Wed, 17 Nov 2021 05:52:34 +0000 Subject: [PATCH 04/20] #30 Update paths of test scripts --- tests/{ => array}/test_coords.py | 0 tests/{ => array}/test_dims.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename tests/{ => array}/test_coords.py (100%) rename tests/{ => array}/test_dims.py (100%) diff --git a/tests/test_coords.py b/tests/array/test_coords.py similarity index 100% rename from tests/test_coords.py rename to tests/array/test_coords.py diff --git a/tests/test_dims.py b/tests/array/test_dims.py similarity index 100% rename from tests/test_dims.py rename to tests/array/test_dims.py From 6c3c1042c66ea7bc6b5ec4cc64e3fe925f1e113c Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Wed, 17 Nov 2021 05:53:32 +0000 Subject: [PATCH 05/20] #30 Remove test for metadata --- sdarray/__init__.py | 2 +- tests/__init__.py | 0 tests/test_init.py | 11 ----------- 3 files changed, 1 insertion(+), 12 deletions(-) delete mode 100644 tests/__init__.py delete mode 100644 tests/test_init.py diff --git a/sdarray/__init__.py b/sdarray/__init__.py index 6d3f007..175f659 100644 --- a/sdarray/__init__.py +++ b/sdarray/__init__.py @@ -1,5 +1,5 @@ +# constants __version__ = "0.1.3" -__author__ = "Akio Taniguchi" # submodules diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/test_init.py b/tests/test_init.py deleted file mode 100644 index 47deb7b..0000000 --- a/tests/test_init.py +++ /dev/null @@ -1,11 +0,0 @@ -# dependencies -import sdarray as sd - - -# test functions -def test_author() -> None: - assert sd.__author__ == "Akio Taniguchi" - - -def test_version() -> None: - assert sd.__version__ == "0.1.3" From 5b065a77feefb56daa273048d72786b3d2a56bb4 Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Wed, 17 Nov 2021 05:58:08 +0000 Subject: [PATCH 06/20] #30 Add array submodule --- sdarray/array/__init__.py | 1 + sdarray/array/array.py | 0 2 files changed, 1 insertion(+) create mode 100644 sdarray/array/array.py diff --git a/sdarray/array/__init__.py b/sdarray/array/__init__.py index 0b4a64a..246fad3 100644 --- a/sdarray/array/__init__.py +++ b/sdarray/array/__init__.py @@ -1,3 +1,4 @@ # submodules +from . import array from . import coords from . import dims diff --git a/sdarray/array/array.py b/sdarray/array/array.py new file mode 100644 index 0000000..e69de29 From 7f4e3cbf79a9cf389479e246fb102248f54f3685 Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Wed, 17 Nov 2021 06:36:42 +0000 Subject: [PATCH 07/20] #30 Add mixins module --- sdarray/array/__init__.py | 1 + sdarray/array/mixins.py | 0 2 files changed, 1 insertion(+) create mode 100644 sdarray/array/mixins.py diff --git a/sdarray/array/__init__.py b/sdarray/array/__init__.py index 246fad3..9d0de4d 100644 --- a/sdarray/array/__init__.py +++ b/sdarray/array/__init__.py @@ -2,3 +2,4 @@ from . import array from . import coords from . import dims +from . import mixins diff --git a/sdarray/array/mixins.py b/sdarray/array/mixins.py new file mode 100644 index 0000000..e69de29 From efd92778bce9607c580679f2179df74f46b0d4ff Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Wed, 17 Nov 2021 06:37:15 +0000 Subject: [PATCH 08/20] #30 Add KeywordOnly mixin --- sdarray/array/mixins.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/sdarray/array/mixins.py b/sdarray/array/mixins.py index e69de29..dbb334f 100644 --- a/sdarray/array/mixins.py +++ b/sdarray/array/mixins.py @@ -0,0 +1,17 @@ +# standard library +from typing import Any, Type, TypeVar + + +# type hints +T = TypeVar("T") + + +# mixin classes +class KeywordOnly: + """Limit the second and subsequent ``__init__`` args to be keyword-only.""" + + def __new__(cls: Type[T], *args: Any, **kwargs: Any) -> T: + if len(args) > 1: + raise TypeError("The second and subsequent args are keyword-only.") + + return super().__new__(cls) From b58a6b863c07e431d28a6c11750049f672d3fafe Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Wed, 17 Nov 2021 08:27:15 +0000 Subject: [PATCH 09/20] #30 Add minimal definition of array --- sdarray/__init__.py | 4 ++++ sdarray/array/__init__.py | 4 ++++ sdarray/array/array.py | 21 +++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/sdarray/__init__.py b/sdarray/__init__.py index 175f659..360358c 100644 --- a/sdarray/__init__.py +++ b/sdarray/__init__.py @@ -4,3 +4,7 @@ # submodules from . import array + + +# aliases +from .array import Array diff --git a/sdarray/array/__init__.py b/sdarray/array/__init__.py index 9d0de4d..f855dfd 100644 --- a/sdarray/array/__init__.py +++ b/sdarray/array/__init__.py @@ -3,3 +3,7 @@ from . import coords from . import dims from . import mixins + + +# aliases +from .array import Array diff --git a/sdarray/array/array.py b/sdarray/array/array.py index e69de29..b89477c 100644 --- a/sdarray/array/array.py +++ b/sdarray/array/array.py @@ -0,0 +1,21 @@ +# standard library +from dataclasses import dataclass +from typing import Any, Tuple + + +# dependencies +from xarray_dataclasses import AsDataArray, Data + + +# submodules +from .dims import time, chan +from .mixins import KeywordOnly + + +# dataclasses +@dataclass +class Array(AsDataArray, KeywordOnly): + """Common single-dish data structure.""" + + data: Data[Tuple[time, chan], Any] + """Time-vs-channel (two-dimensional) data.""" From 6efc90c95a04b14c867f4d7ed9173840fbe19561 Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Wed, 17 Nov 2021 08:30:58 +0000 Subject: [PATCH 10/20] #30 Add definitions of dimensions to Array --- sdarray/array/array.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sdarray/array/array.py b/sdarray/array/array.py index b89477c..cde2b32 100644 --- a/sdarray/array/array.py +++ b/sdarray/array/array.py @@ -4,10 +4,11 @@ # dependencies -from xarray_dataclasses import AsDataArray, Data +from xarray_dataclasses import AsDataArray, Coordof, Data # submodules +from . import dims from .dims import time, chan from .mixins import KeywordOnly @@ -19,3 +20,9 @@ class Array(AsDataArray, KeywordOnly): data: Data[Tuple[time, chan], Any] """Time-vs-channel (two-dimensional) data.""" + + time: Coordof[dims.Time] = "2000-01-01" + """Start time in UTC.""" + + chan: Coordof[dims.Chan] = 0 + """Channel number.""" From fd5db01f3d98d1562d94d4f13e4da2fa9d83ed6c Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Wed, 17 Nov 2021 08:38:30 +0000 Subject: [PATCH 11/20] #30 Add definitions of labels --- sdarray/array/array.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/sdarray/array/array.py b/sdarray/array/array.py index cde2b32..0079bf6 100644 --- a/sdarray/array/array.py +++ b/sdarray/array/array.py @@ -8,6 +8,7 @@ # submodules +from . import coords from . import dims from .dims import time, chan from .mixins import KeywordOnly @@ -26,3 +27,18 @@ class Array(AsDataArray, KeywordOnly): chan: Coordof[dims.Chan] = 0 """Channel number.""" + + scan: Coordof[coords.Scan] = "0" + """Scan label.""" + + mode: Coordof[coords.Mode] = "0" + """Mode label.""" + + beam: Coordof[coords.Beam] = "0" + """Beam label.""" + + spw: Coordof[coords.SpW] = "0" + """Spectral window label.""" + + pol: Coordof[coords.Pol] = "0" + """Polarization label.""" From 7046345007b136663101bb78eddb3560f41b5f10 Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Wed, 17 Nov 2021 08:56:16 +0000 Subject: [PATCH 12/20] #30 Add definitions of observables --- sdarray/array/array.py | 40 +++++++++++++++++++++++++++++++ sdarray/array/coords.py | 52 ++++++++++++++++++++--------------------- 2 files changed, 66 insertions(+), 26 deletions(-) diff --git a/sdarray/array/array.py b/sdarray/array/array.py index 0079bf6..2182f6f 100644 --- a/sdarray/array/array.py +++ b/sdarray/array/array.py @@ -5,6 +5,7 @@ # dependencies from xarray_dataclasses import AsDataArray, Coordof, Data +from xarray_dataclasses.typing import Coord # submodules @@ -42,3 +43,42 @@ class Array(AsDataArray, KeywordOnly): pol: Coordof[coords.Pol] = "0" """Polarization label.""" + + exposure: Coordof[coords.Exposure] = 0.0 + """Exposure time.""" + + interval: Coordof[coords.Interval] = 0.0 + """Interval time.""" + + longitude: Coordof[coords.Longitude] = 0.0 + """Sky longitude.""" + + latitude: Coordof[coords.Latitude] = 0.0 + """Sky latitude.""" + + lon_offset: Coordof[coords.LonOffset] = 0.0 + """Offset from sky longitude.""" + + lat_offset: Coordof[coords.LatOffset] = 0.0 + """Offset from sky latitude.""" + + center_freq: Coordof[coords.CenterFreq] = 0.0 + """Center frequency.""" + + ref_freq: Coordof[coords.RefFreq] = 0.0 + """Reference frequency.""" + + resolution: Coordof[coords.Resolution] = 0.0 + """Spectral resolution.""" + + width: Coordof[coords.Width] = 0.0 + """Channel width.""" + + mask: Coordof[coords.Mask] = False + """Mask for array data.""" + + sigma: Coordof[coords.Sigma] = 0.0 + """Uncertainty of array data.""" + + weight: Coordof[coords.Weight] = 1.0 + """Weight for array data.""" diff --git a/sdarray/array/coords.py b/sdarray/array/coords.py index 96eedf0..4cd6e55 100644 --- a/sdarray/array/coords.py +++ b/sdarray/array/coords.py @@ -101,6 +101,26 @@ class Pol: # dataclasses (chan observables) +@dataclass +class LonOffset: + """Offset from sky longitude.""" + + data: Data[chan, np.float64] + long_name: Attr[str] = "Offset from sky longitude" + short_name: Attr[str] = "lon_offset" + units: Attr[str] = "deg" + + +@dataclass +class LatOffset: + """Offset from sky latitude.""" + + data: Data[chan, np.float64] + long_name: Attr[str] = "Offset from sky latitude" + short_name: Attr[str] = "lat_offset" + units: Attr[str] = "deg" + + @dataclass class CenterFreq: """Center frequency.""" @@ -141,49 +161,29 @@ class Width: units: Attr[str] = "Hz" -@dataclass -class LonOffset: - """Offset from sky longitude.""" - - data: Data[chan, np.float64] - long_name: Attr[str] = "Offset from sky longitude" - short_name: Attr[str] = "lon_offset" - units: Attr[str] = "deg" - - -@dataclass -class LatOffset: - """Offset from sky latitude.""" - - data: Data[chan, np.float64] - long_name: Attr[str] = "Offset from sky latitude" - short_name: Attr[str] = "lat_offset" - units: Attr[str] = "deg" - - # dataclasses (time-chan observables) @dataclass class Mask: - """Mask for an array.""" + """Mask for array data.""" data: Data[Tuple[time, chan], np.bool_] - long_name: Attr[str] = "Mask for an array" + long_name: Attr[str] = "Mask for array data" short_name: Attr[str] = "mask" @dataclass class Sigma: - """Uncertainty of an array.""" + """Uncertainty of array data.""" data: Data[Tuple[time, chan], np.float64] - long_name: Attr[str] = "Uncertainty of an array" + long_name: Attr[str] = "Uncertainty of array data" short_name: Attr[str] = "sigma" @dataclass class Weight: - """Weight for an array.""" + """Weight for array data.""" data: Data[Tuple[time, chan], np.float64] - long_name: Attr[str] = "Weight for an array" + long_name: Attr[str] = "Weight for array data" short_name: Attr[str] = "weight" From b696c2bac3678f44cd70a579293914f50c1f31ca Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Fri, 19 Nov 2021 07:47:57 +0000 Subject: [PATCH 13/20] =?UTF-8?q?#30=20Rename=20submodule=20(mixins=20?= =?UTF-8?q?=E2=86=92=20utils)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdarray/array/__init__.py | 2 +- sdarray/array/array.py | 2 +- sdarray/array/{mixins.py => utils.py} | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename sdarray/array/{mixins.py => utils.py} (95%) diff --git a/sdarray/array/__init__.py b/sdarray/array/__init__.py index f855dfd..a65ec25 100644 --- a/sdarray/array/__init__.py +++ b/sdarray/array/__init__.py @@ -2,7 +2,7 @@ from . import array from . import coords from . import dims -from . import mixins +from . import utils # aliases diff --git a/sdarray/array/array.py b/sdarray/array/array.py index 2182f6f..8370a76 100644 --- a/sdarray/array/array.py +++ b/sdarray/array/array.py @@ -12,7 +12,7 @@ from . import coords from . import dims from .dims import time, chan -from .mixins import KeywordOnly +from .utils import KeywordOnly # dataclasses diff --git a/sdarray/array/mixins.py b/sdarray/array/utils.py similarity index 95% rename from sdarray/array/mixins.py rename to sdarray/array/utils.py index dbb334f..9eaf093 100644 --- a/sdarray/array/mixins.py +++ b/sdarray/array/utils.py @@ -6,7 +6,7 @@ T = TypeVar("T") -# mixin classes +# utility classes class KeywordOnly: """Limit the second and subsequent ``__init__`` args to be keyword-only.""" From d869e78b386f0a0337856794c3c434b5e042288c Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Mon, 22 Nov 2021 05:17:20 +0000 Subject: [PATCH 14/20] #30 Reorder definitions of dims and coords --- sdarray/array/array.py | 44 +++++++++++++++--------------- sdarray/array/coords.py | 60 ++++++++++++++++++++--------------------- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/sdarray/array/array.py b/sdarray/array/array.py index 8370a76..abd8210 100644 --- a/sdarray/array/array.py +++ b/sdarray/array/array.py @@ -21,29 +21,26 @@ class Array(AsDataArray, KeywordOnly): """Common single-dish data structure.""" data: Data[Tuple[time, chan], Any] - """Time-vs-channel (two-dimensional) data.""" + """Two-dimensional array data.""" + + mask: Coordof[coords.Mask] = False + """Mask of array data.""" + + sigma: Coordof[coords.Sigma] = 0.0 + """Uncertainty of array data.""" + + weight: Coordof[coords.Weight] = 1.0 + """Weight of array data.""" time: Coordof[dims.Time] = "2000-01-01" """Start time in UTC.""" - chan: Coordof[dims.Chan] = 0 - """Channel number.""" - scan: Coordof[coords.Scan] = "0" """Scan label.""" mode: Coordof[coords.Mode] = "0" """Mode label.""" - beam: Coordof[coords.Beam] = "0" - """Beam label.""" - - spw: Coordof[coords.SpW] = "0" - """Spectral window label.""" - - pol: Coordof[coords.Pol] = "0" - """Polarization label.""" - exposure: Coordof[coords.Exposure] = 0.0 """Exposure time.""" @@ -56,6 +53,18 @@ class Array(AsDataArray, KeywordOnly): latitude: Coordof[coords.Latitude] = 0.0 """Sky latitude.""" + chan: Coordof[dims.Chan] = 0 + """Channel number.""" + + beam: Coordof[coords.Beam] = "0" + """Beam label.""" + + spw: Coordof[coords.SpW] = "0" + """Spectral window label.""" + + pol: Coordof[coords.Pol] = "0" + """Polarization label.""" + lon_offset: Coordof[coords.LonOffset] = 0.0 """Offset from sky longitude.""" @@ -73,12 +82,3 @@ class Array(AsDataArray, KeywordOnly): width: Coordof[coords.Width] = 0.0 """Channel width.""" - - mask: Coordof[coords.Mask] = False - """Mask for array data.""" - - sigma: Coordof[coords.Sigma] = 0.0 - """Uncertainty of array data.""" - - weight: Coordof[coords.Weight] = 1.0 - """Weight for array data.""" diff --git a/sdarray/array/coords.py b/sdarray/array/coords.py index 4cd6e55..17d8e22 100644 --- a/sdarray/array/coords.py +++ b/sdarray/array/coords.py @@ -12,6 +12,34 @@ from .dims import time, chan +# dataclasses (time-chan data) +@dataclass +class Mask: + """Mask of array data.""" + + data: Data[Tuple[time, chan], np.bool_] + long_name: Attr[str] = "Mask for array data" + short_name: Attr[str] = "mask" + + +@dataclass +class Sigma: + """Uncertainty of array data.""" + + data: Data[Tuple[time, chan], np.float64] + long_name: Attr[str] = "Uncertainty of array data" + short_name: Attr[str] = "sigma" + + +@dataclass +class Weight: + """Weight of array data.""" + + data: Data[Tuple[time, chan], np.float64] + long_name: Attr[str] = "Weight for array data" + short_name: Attr[str] = "weight" + + # dataclasses (time labels) @dataclass class Scan: @@ -31,7 +59,7 @@ class Mode: short_name: Attr[str] = "mode" -# dataclasses (time observables) +# dataclasses (time data) @dataclass class Exposure: """Exposure time.""" @@ -100,7 +128,7 @@ class Pol: short_name: Attr[str] = "pol" -# dataclasses (chan observables) +# dataclasses (chan data) @dataclass class LonOffset: """Offset from sky longitude.""" @@ -159,31 +187,3 @@ class Width: long_name: Attr[str] = "Channel width" short_name: Attr[str] = "width" units: Attr[str] = "Hz" - - -# dataclasses (time-chan observables) -@dataclass -class Mask: - """Mask for array data.""" - - data: Data[Tuple[time, chan], np.bool_] - long_name: Attr[str] = "Mask for array data" - short_name: Attr[str] = "mask" - - -@dataclass -class Sigma: - """Uncertainty of array data.""" - - data: Data[Tuple[time, chan], np.float64] - long_name: Attr[str] = "Uncertainty of array data" - short_name: Attr[str] = "sigma" - - -@dataclass -class Weight: - """Weight for array data.""" - - data: Data[Tuple[time, chan], np.float64] - long_name: Attr[str] = "Weight for array data" - short_name: Attr[str] = "weight" From c9ec1e0413792082db125e1769d4eef9ccf30d21 Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Mon, 22 Nov 2021 05:20:56 +0000 Subject: [PATCH 15/20] #30 Update import of dims --- sdarray/array/array.py | 4 +--- sdarray/array/coords.py | 38 +++++++++++++++++++------------------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/sdarray/array/array.py b/sdarray/array/array.py index abd8210..004b128 100644 --- a/sdarray/array/array.py +++ b/sdarray/array/array.py @@ -5,13 +5,11 @@ # dependencies from xarray_dataclasses import AsDataArray, Coordof, Data -from xarray_dataclasses.typing import Coord # submodules from . import coords from . import dims -from .dims import time, chan from .utils import KeywordOnly @@ -20,7 +18,7 @@ class Array(AsDataArray, KeywordOnly): """Common single-dish data structure.""" - data: Data[Tuple[time, chan], Any] + data: Data[Tuple[dims.time, dims.chan], Any] """Two-dimensional array data.""" mask: Coordof[coords.Mask] = False diff --git a/sdarray/array/coords.py b/sdarray/array/coords.py index 17d8e22..490deaf 100644 --- a/sdarray/array/coords.py +++ b/sdarray/array/coords.py @@ -9,7 +9,7 @@ # submodules -from .dims import time, chan +from . import dims # dataclasses (time-chan data) @@ -17,7 +17,7 @@ class Mask: """Mask of array data.""" - data: Data[Tuple[time, chan], np.bool_] + data: Data[Tuple[dims.time, dims.chan], np.bool_] long_name: Attr[str] = "Mask for array data" short_name: Attr[str] = "mask" @@ -26,7 +26,7 @@ class Mask: class Sigma: """Uncertainty of array data.""" - data: Data[Tuple[time, chan], np.float64] + data: Data[Tuple[dims.time, dims.chan], np.float64] long_name: Attr[str] = "Uncertainty of array data" short_name: Attr[str] = "sigma" @@ -35,7 +35,7 @@ class Sigma: class Weight: """Weight of array data.""" - data: Data[Tuple[time, chan], np.float64] + data: Data[Tuple[dims.time, dims.chan], np.float64] long_name: Attr[str] = "Weight for array data" short_name: Attr[str] = "weight" @@ -45,7 +45,7 @@ class Weight: class Scan: """Scan label.""" - data: Data[time, np.str_] + data: Data[dims.time, np.str_] long_name: Attr[str] = "Scan label" short_name: Attr[str] = "scan" @@ -54,7 +54,7 @@ class Scan: class Mode: """Mode label.""" - data: Data[time, np.str_] + data: Data[dims.time, np.str_] long_name: Attr[str] = "Mode label" short_name: Attr[str] = "mode" @@ -64,7 +64,7 @@ class Mode: class Exposure: """Exposure time.""" - data: Data[time, np.float64] + data: Data[dims.time, np.float64] long_name: Attr[str] = "Exposure time" short_name: Attr[str] = "exposure" units: Attr[str] = "s" @@ -74,7 +74,7 @@ class Exposure: class Interval: """Interval time.""" - data: Data[time, np.float64] + data: Data[dims.time, np.float64] long_name: Attr[str] = "Interval time" short_name: Attr[str] = "interval" units: Attr[str] = "s" @@ -84,7 +84,7 @@ class Interval: class Longitude: """Sky longitude.""" - data: Data[time, np.float64] + data: Data[dims.time, np.float64] long_name: Attr[str] = "Sky longitude" "" short_name: Attr[str] = "longitude" units: Attr[str] = "deg" @@ -94,7 +94,7 @@ class Longitude: class Latitude: """Sky latitude.""" - data: Data[time, np.float64] + data: Data[dims.time, np.float64] long_name: Attr[str] = "Sky latitude" short_name: Attr[str] = "latitude" units: Attr[str] = "deg" @@ -105,7 +105,7 @@ class Latitude: class Beam: """Beam label.""" - data: Data[chan, np.str_] + data: Data[dims.chan, np.str_] long_name: Attr[str] = "Beam label" short_name: Attr[str] = "beam" @@ -114,7 +114,7 @@ class Beam: class SpW: """Spectral window label.""" - data: Data[chan, np.str_] + data: Data[dims.chan, np.str_] long_name: Attr[str] = "Spectral window label" short_name: Attr[str] = "spw" @@ -123,7 +123,7 @@ class SpW: class Pol: """Polarization label.""" - data: Data[chan, np.str_] + data: Data[dims.chan, np.str_] long_name: Attr[str] = "Polarization label" short_name: Attr[str] = "pol" @@ -133,7 +133,7 @@ class Pol: class LonOffset: """Offset from sky longitude.""" - data: Data[chan, np.float64] + data: Data[dims.chan, np.float64] long_name: Attr[str] = "Offset from sky longitude" short_name: Attr[str] = "lon_offset" units: Attr[str] = "deg" @@ -143,7 +143,7 @@ class LonOffset: class LatOffset: """Offset from sky latitude.""" - data: Data[chan, np.float64] + data: Data[dims.chan, np.float64] long_name: Attr[str] = "Offset from sky latitude" short_name: Attr[str] = "lat_offset" units: Attr[str] = "deg" @@ -153,7 +153,7 @@ class LatOffset: class CenterFreq: """Center frequency.""" - data: Data[chan, np.float64] + data: Data[dims.chan, np.float64] long_name: Attr[str] = "Center frequency" short_name: Attr[str] = "center_freq" units: Attr[str] = "Hz" @@ -163,7 +163,7 @@ class CenterFreq: class RefFreq: """Reference frequency.""" - data: Data[chan, np.float64] + data: Data[dims.chan, np.float64] long_name: Attr[str] = "Reference frequency" short_name: Attr[str] = "ref_freq" units: Attr[str] = "Hz" @@ -173,7 +173,7 @@ class RefFreq: class Resolution: """Spectral resolution.""" - data: Data[chan, np.float64] + data: Data[dims.chan, np.float64] long_name: Attr[str] = "Spectral resolution" short_name: Attr[str] = "resolution" units: Attr[str] = "Hz" @@ -183,7 +183,7 @@ class Resolution: class Width: """Channel width.""" - data: Data[chan, np.float64] + data: Data[dims.chan, np.float64] long_name: Attr[str] = "Channel width" short_name: Attr[str] = "width" units: Attr[str] = "Hz" From fbbef3f4f25333956f993ab9fadd9e1bb52f11e5 Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Wed, 24 Nov 2021 10:35:18 +0000 Subject: [PATCH 16/20] #30 Add definition of observation label --- sdarray/array/array.py | 3 +++ sdarray/array/coords.py | 9 +++++++++ tests/array/test_coords.py | 10 ++++++++++ 3 files changed, 22 insertions(+) diff --git a/sdarray/array/array.py b/sdarray/array/array.py index 004b128..11c54fb 100644 --- a/sdarray/array/array.py +++ b/sdarray/array/array.py @@ -33,6 +33,9 @@ class Array(AsDataArray, KeywordOnly): time: Coordof[dims.Time] = "2000-01-01" """Start time in UTC.""" + obs: Coordof[coords.Obs] = "0" + """Observation label.""" + scan: Coordof[coords.Scan] = "0" """Scan label.""" diff --git a/sdarray/array/coords.py b/sdarray/array/coords.py index 490deaf..a818f3e 100644 --- a/sdarray/array/coords.py +++ b/sdarray/array/coords.py @@ -41,6 +41,15 @@ class Weight: # dataclasses (time labels) +@dataclass +class Obs: + """Observation label.""" + + data: Data[dims.time, np.str_] + long_name: Attr[str] = "Observation label" + short_name: Attr[str] = "obs" + + @dataclass class Scan: """Scan label.""" diff --git a/tests/array/test_coords.py b/tests/array/test_coords.py index e47c0a0..dcd20fd 100644 --- a/tests/array/test_coords.py +++ b/tests/array/test_coords.py @@ -10,6 +10,16 @@ # test functions +def test_obs() -> None: + data = np.array(["0"], np.str_) + array = asdataarray(sd.array.coords.Obs(data)) + + assert array.data == data + assert array.dims == ("time",) + assert array.dtype.type == data.dtype.type + assert array.attrs[SHORT_NAME] == "obs" + + def test_scan() -> None: data = np.array(["0"], np.str_) array = asdataarray(sd.array.coords.Scan(data)) From 49865974b25fbbcb61083080ee43312f7efeff6c Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Thu, 16 Dec 2021 17:30:10 +0000 Subject: [PATCH 17/20] #30 Update project dependencies --- poetry.lock | 252 +++++++++++++++++++++++++++---------------------- pyproject.toml | 7 +- 2 files changed, 141 insertions(+), 118 deletions(-) diff --git a/poetry.lock b/poetry.lock index c42bd82..787d328 100644 --- a/poetry.lock +++ b/poetry.lock @@ -14,6 +14,24 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "astropy" +version = "4.3.1" +description = "Astronomy and astrophysics core library" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version == \"3.7\""} +numpy = ">=1.17" +pyerfa = ">=1.7.3" + +[package.extras] +all = ["scipy (>=1.1)", "certifi", "dask", "h5py", "beautifulsoup4", "html5lib", "bleach", "PyYAML (>=3.13)", "pandas", "sortedcontainers", "pytz", "jplephem", "matplotlib (>=3.0,!=3.4.0)", "mpmath", "asdf (>=2.6)", "bottleneck", "ipython (>=4.2)", "pytest"] +docs = ["sphinx (<4)", "sphinx-astropy (>=1.3)", "pytest", "PyYAML (>=3.13)", "scipy (>=1.1)", "matplotlib (>=3.1,!=3.4.0)", "sphinx-changelog (>=1.1.0)", "packaging"] +test = ["pytest-astropy (>=0.8)", "pytest-xdist", "objgraph", "ipython (>=4.2)", "coverage", "skyfield (>=1.20)", "sgp4 (>=2.3)", "packaging"] + [[package]] name = "atomicwrites" version = "1.4.0" @@ -72,7 +90,7 @@ lxml = ["lxml"] [[package]] name = "black" -version = "21.11b1" +version = "21.12b0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -83,7 +101,6 @@ click = ">=7.1.2" mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0,<1" platformdirs = ">=2" -regex = ">=2021.4.4" tomli = ">=0.2.6,<2.0.0" typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} typing-extensions = ">=3.10.0.0" @@ -105,7 +122,7 @@ python-versions = "*" [[package]] name = "charset-normalizer" -version = "2.0.7" +version = "2.0.9" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "dev" optional = false @@ -168,7 +185,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "4.8.2" +version = "4.8.3" description = "Read metadata from Python packages" category = "main" optional = false @@ -193,7 +210,7 @@ python-versions = "*" [[package]] name = "ipython" -version = "7.29.0" +version = "7.30.1" description = "IPython: Productive Interactive Computing" category = "dev" optional = false @@ -309,11 +326,11 @@ testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"] [[package]] name = "morecopy" -version = "0.2.2" +version = "0.2.4" description = "Copy even immutable objects as much as possible" category = "main" optional = false -python-versions = ">=3.7,<=3.10" +python-versions = ">=3.7,<3.11" [[package]] name = "mypy-extensions" @@ -382,7 +399,7 @@ test = ["pytest (>=4.0.2)", "pytest-xdist", "hypothesis (>=3.58)"] [[package]] name = "parso" -version = "0.8.2" +version = "0.8.3" description = "A Python Parser" category = "dev" optional = false @@ -448,7 +465,7 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "prompt-toolkit" -version = "3.0.22" +version = "3.0.24" description = "Library for building powerful interactive command lines in Python" category = "dev" optional = false @@ -490,6 +507,21 @@ sphinx = "*" coverage = ["pytest-cov", "codecov", "sphinx", "numpydoc", "recommonmark", "pandas", "pytest", "pytest-regressions", "beautifulsoup4", "sphinx-sitemap", "jupyter-sphinx", "plotly", "numpy", "xarray", "docutils (==0.16)"] test = ["sphinx", "numpydoc", "recommonmark", "pandas", "pytest", "pytest-regressions", "beautifulsoup4", "sphinx-sitemap", "jupyter-sphinx", "plotly", "numpy", "xarray", "docutils (==0.16)"] +[[package]] +name = "pyerfa" +version = "2.0.0.1" +description = "Python bindings for ERFA" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +numpy = ">=1.17" + +[package.extras] +docs = ["sphinx-astropy (>=1.3)"] +test = ["pytest", "pytest-doctestplus (>=0.7)"] + [[package]] name = "pygments" version = "2.10.0" @@ -558,14 +590,6 @@ category = "dev" optional = false python-versions = ">=3.6" -[[package]] -name = "regex" -version = "2021.11.10" -description = "Alternative regular expression module, to replace re." -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "requests" version = "2.26.0" @@ -610,7 +634,7 @@ python-versions = ">=3.6" [[package]] name = "sphinx" -version = "4.3.0" +version = "4.3.1" description = "Python documentation generator" category = "dev" optional = false @@ -720,7 +744,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" -version = "1.2.2" +version = "1.2.3" description = "A lil' TOML parser" category = "dev" optional = false @@ -739,7 +763,7 @@ test = ["pytest"] [[package]] name = "typed-ast" -version = "1.5.0" +version = "1.5.1" description = "a fork of Python 2 and 3 ast modules with type comment support" category = "dev" optional = false @@ -776,7 +800,7 @@ python-versions = "*" [[package]] name = "xarray" -version = "0.20.1" +version = "0.20.2" description = "N-D labeled arrays and datasets in Python" category = "main" optional = false @@ -798,7 +822,7 @@ viz = ["matplotlib", "seaborn", "nc-time-axis"] [[package]] name = "xarray-dataclasses" -version = "0.6.1" +version = "0.8.0" description = "xarray extension for typed DataArray and Dataset creation" category = "main" optional = false @@ -825,7 +849,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes [metadata] lock-version = "1.1" python-versions = ">=3.7, <3.10" -content-hash = "4a48efdca5d7cf03c2f9fc83eb4d9d59a7d831c409b00b5a5bcb7dd751e0526c" +content-hash = "eaed651d160fd66acb3c00e8e7432d50c64ed78cc2e4fd6e56365d846dadaeaf" [metadata.files] alabaster = [ @@ -836,6 +860,24 @@ appnope = [ {file = "appnope-0.1.2-py2.py3-none-any.whl", hash = "sha256:93aa393e9d6c54c5cd570ccadd8edad61ea0c4b9ea7a01409020c9aa019eb442"}, {file = "appnope-0.1.2.tar.gz", hash = "sha256:dd83cd4b5b460958838f6eb3000c660b1f9caf2a5b1de4264e941512f603258a"}, ] +astropy = [ + {file = "astropy-4.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0764d7f68034c584dda8d1c9cc4357ade05cec4c1134db43bce804fcf656ff1"}, + {file = "astropy-4.3.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ce1095e385ec74c655866eacd1853535fbc2dd2c42a8188503fe9a68b8a98ea0"}, + {file = "astropy-4.3.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a01cc7b9d50f265d5d77e1f7206cda22c62720f5bed63158ee56440708848ea"}, + {file = "astropy-4.3.1-cp37-cp37m-win32.whl", hash = "sha256:98bba44f60bb3584b3ad24d1ffad1763138d4d18fc7ca31921732d2449419dd9"}, + {file = "astropy-4.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:aae1e9e6b2c7811070e4a3373c54eac603f882dc381a796b981a25c02e7fafe2"}, + {file = "astropy-4.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a5fb4ce4c964f02d7ac2b755f80f5210157a413cbfcdccbc25ad6e7586c258f"}, + {file = "astropy-4.3.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9e5613e897cb6da64330c5969981f576385491ff5ea61435218117d717a71ff2"}, + {file = "astropy-4.3.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0b4576d9bc2ab8359f2c4b87d0496c5ad768c7a14d1b16dc634ec24d22147c79"}, + {file = "astropy-4.3.1-cp38-cp38-win32.whl", hash = "sha256:26f8dce66d3de8aa761508d76b99627ed745d99ec7c5e10289566c2082fa7dc3"}, + {file = "astropy-4.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:bcedff7bad0fbc70209751e8eb98eec7c0bd3f0e202f4ee7ff65b8ddf19d5e53"}, + {file = "astropy-4.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:beddc4a365d696214e13ff9aa9362d418ecc112f1dba6338f8ac4218fe475e25"}, + {file = "astropy-4.3.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4b0ff70baee2a2c768cfc5f7966a371fa0741c93a7283d7e99d6a668f2606851"}, + {file = "astropy-4.3.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:34992c0ac1da577d7a1b13171cd8097cdb4544f09687bbd27e433806d3fd2e9f"}, + {file = "astropy-4.3.1-cp39-cp39-win32.whl", hash = "sha256:dcb6d7e6631d92d5d15b7ae4e0a994829609b09a4e3af2055995187edb8989e3"}, + {file = "astropy-4.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:434ab46e85f5406acc9f2d2084e5e36890abeaf615c8aa71178e835134b64726"}, + {file = "astropy-4.3.1.tar.gz", hash = "sha256:2d3951223b4eb7f368fcad8c8340d27374c5d8e3b635a636275acdb38f35cd51"}, +] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, @@ -857,16 +899,16 @@ beautifulsoup4 = [ {file = "beautifulsoup4-4.10.0.tar.gz", hash = "sha256:c23ad23c521d818955a4151a67d81580319d4bf548d3d49f4223ae041ff98891"}, ] black = [ - {file = "black-21.11b1-py3-none-any.whl", hash = "sha256:802c6c30b637b28645b7fde282ed2569c0cd777dbe493a41b6a03c1d903f99ac"}, - {file = "black-21.11b1.tar.gz", hash = "sha256:a042adbb18b3262faad5aff4e834ff186bb893f95ba3a8013f09de1e5569def2"}, + {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, + {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, ] certifi = [ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"}, - {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"}, + {file = "charset-normalizer-2.0.9.tar.gz", hash = "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c"}, + {file = "charset_normalizer-2.0.9-py3-none-any.whl", hash = "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721"}, ] click = [ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, @@ -893,16 +935,16 @@ imagesize = [ {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"}, - {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"}, + {file = "importlib_metadata-4.8.3-py3-none-any.whl", hash = "sha256:65a9576a5b2d58ca44d133c42a241905cc45e34d2c06fd5ba2bafa221e5d7b5e"}, + {file = "importlib_metadata-4.8.3.tar.gz", hash = "sha256:766abffff765960fcc18003801f7044eb6755ffae4521c8e8ce8e83b9c9b0668"}, ] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] ipython = [ - {file = "ipython-7.29.0-py3-none-any.whl", hash = "sha256:a658beaf856ce46bc453366d5dc6b2ddc6c481efd3540cb28aa3943819caac9f"}, - {file = "ipython-7.29.0.tar.gz", hash = "sha256:4f69d7423a5a1972f6347ff233e38bbf4df6a150ef20fbb00c635442ac3060aa"}, + {file = "ipython-7.30.1-py3-none-any.whl", hash = "sha256:fc60ef843e0863dd4e24ab2bb5698f071031332801ecf8d1aeb4fb622056545c"}, + {file = "ipython-7.30.1.tar.gz", hash = "sha256:cb6aef731bf708a7727ab6cde8df87f0281b1427d41e65d62d4b68934fa54e97"}, ] jedi = [ {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, @@ -996,8 +1038,8 @@ mdit-py-plugins = [ {file = "mdit_py_plugins-0.2.8-py3-none-any.whl", hash = "sha256:1833bf738e038e35d89cb3a07eb0d227ed647ce7dd357579b65343740c6d249c"}, ] morecopy = [ - {file = "morecopy-0.2.2-py3-none-any.whl", hash = "sha256:33a9e12c3655c4149994581a22f7f63155563180e70f0a67289407e3c9ff1220"}, - {file = "morecopy-0.2.2.tar.gz", hash = "sha256:d557b1dcd083915e4083479a80c1a69b21dc1573cc018979596c083481a6cfb8"}, + {file = "morecopy-0.2.4-py3-none-any.whl", hash = "sha256:ea6c5f998fca2127928fc1b90eccaef9850cf2ff8b975cdce978d3fb09881009"}, + {file = "morecopy-0.2.4.tar.gz", hash = "sha256:29420a75c66371c9edf05fca7fbf61096557846ebfd1e8881e0d342ac4ea9c7a"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, @@ -1070,8 +1112,8 @@ pandas = [ {file = "pandas-1.1.5.tar.gz", hash = "sha256:f10fc41ee3c75a474d3bdf68d396f10782d013d7f67db99c0efbfd0acb99701b"}, ] parso = [ - {file = "parso-0.8.2-py2.py3-none-any.whl", hash = "sha256:a8c4922db71e4fdb90e0d0bc6e50f9b273d3397925e5e60a717e719201778d22"}, - {file = "parso-0.8.2.tar.gz", hash = "sha256:12b83492c6239ce32ff5eed6d3639d6a536170723c6f3f1506869f1ace413398"}, + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, ] pathspec = [ {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, @@ -1094,8 +1136,8 @@ pluggy = [ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.22-py3-none-any.whl", hash = "sha256:48d85cdca8b6c4f16480c7ce03fd193666b62b0a21667ca56b4bb5ad679d1170"}, - {file = "prompt_toolkit-3.0.22.tar.gz", hash = "sha256:449f333dd120bd01f5d296a8ce1452114ba3a71fae7288d2f0ae2c918764fa72"}, + {file = "prompt_toolkit-3.0.24-py3-none-any.whl", hash = "sha256:e56f2ff799bacecd3e88165b1e2f5ebf9bcd59e80e06d395fa0cc4b8bd7bb506"}, + {file = "prompt_toolkit-3.0.24.tar.gz", hash = "sha256:1bb05628c7d87b645974a1bad3f17612be0c29fa39af9f7688030163f680bad6"}, ] ptyprocess = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, @@ -1109,6 +1151,37 @@ pydata-sphinx-theme = [ {file = "pydata-sphinx-theme-0.7.2.tar.gz", hash = "sha256:671df35fcdd290eafbd23d0595e6d359dbe90b2e64e6c3f4dc88276eed4a065e"}, {file = "pydata_sphinx_theme-0.7.2-py3-none-any.whl", hash = "sha256:bc1abc45e103b254c6c7a8f2ddabbaf8aa1f0817d85cae65dd163dd554c52700"}, ] +pyerfa = [ + {file = "pyerfa-2.0.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:278832de7803f2fb0ef4b14263200f98dfdb3eaa78dc63835d93796fd8fc42c6"}, + {file = "pyerfa-2.0.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:629248cebc8626a52e80f69d4e2f30cc6e751f57803f5ba7ec99edd09785d181"}, + {file = "pyerfa-2.0.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3285d95dfe398a931a633da961f6f1c0b8690f2a3b1c510a4efe639f784cd9c7"}, + {file = "pyerfa-2.0.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:177f50f0e8354f1a7115c2d4784668b365f1cc2f2c7d1e2f4ddf354160559b32"}, + {file = "pyerfa-2.0.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:041939a7554a98b72885904ffddd8882567191bee62358727679448480174c31"}, + {file = "pyerfa-2.0.0.1-cp310-cp310-win32.whl", hash = "sha256:f9e149bc3d423ae891f6587c1383fd471ae07744b88152e66b5e9f64a8bc9006"}, + {file = "pyerfa-2.0.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:f00dc4fc48a16eb39fd0121f2f06c03ee762b79a207cc5b0bc17d94191b51302"}, + {file = "pyerfa-2.0.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1ba3668e1e181a678ce788d23a4f8666aabd8518f77fdde5157ba4744bc73d4a"}, + {file = "pyerfa-2.0.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8f08f6e6d75a261bb92b707bea19eba2e46a8fcbfb499b789f3eb0d0352ea00"}, + {file = "pyerfa-2.0.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da89304d6b25ac056e470f44f85770b04c9674eced07a7f93b5eb0ce1edaabd9"}, + {file = "pyerfa-2.0.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:36738ba75e7a69e0ea6a7e96a5d33a852816427e7e94e7089c188ef920b02669"}, + {file = "pyerfa-2.0.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5c077aed4ccd585c1fe2f96ada8edb66e9d27b4ae8ff13ea2783283b298ba0c6"}, + {file = "pyerfa-2.0.0.1-cp37-cp37m-win32.whl", hash = "sha256:0833f8ebba9f84a19a04ee5ca5aa90be75729abfbb8328e7a6d89ed1b04e058c"}, + {file = "pyerfa-2.0.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:e86c08c9c0b75e448818473c6d709e3887a439c05a1aa34042d26774251422b7"}, + {file = "pyerfa-2.0.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b935fa9d10dfd7206760859236640c835aa652609c0ae8a6584593324eb6f318"}, + {file = "pyerfa-2.0.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67711a748821c5d91f7a8907b9125094dfc3e5ab6a6b7ad8e207fd6afbe6b37f"}, + {file = "pyerfa-2.0.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d2c10838241aaf17279468dcc731cb2c09bfb7dd7b340c0f527fd70c7c9e53d1"}, + {file = "pyerfa-2.0.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:37249e1e2b378d1f56e9379e4bb8f2cf87645c160a8a3e92166a1b7bb7ad7ea6"}, + {file = "pyerfa-2.0.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f76fb4b64a87da2af9d0b6b79cc25e1ecc5b4143b2b3c8c9f10b221748c5db4d"}, + {file = "pyerfa-2.0.0.1-cp38-cp38-win32.whl", hash = "sha256:486e672c52bf58eab61140968660ac7fb3b756116b53c26c334ae95dadd943ee"}, + {file = "pyerfa-2.0.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:d603f1e8123f98a0593433aa6dad4ba03f0b0ceef4cb3e96f9a69aa7ab8d5c61"}, + {file = "pyerfa-2.0.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef5590b2075c50395b958f102988e519e339d96509dfdca0360f26dde94c47e7"}, + {file = "pyerfa-2.0.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ca8c98842f1ae10c1fbcea0e03a41ddc13456da88da2dc9b8335a8c414d7a3"}, + {file = "pyerfa-2.0.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d3e7dedce1d7e4e044f6f81d192b1f6b373c8ad6716aa8721ec6d3cf4d36f5f3"}, + {file = "pyerfa-2.0.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:690116a6026ee84ce5fec794c9e21bdc8c0ac8345d6722323810181486745068"}, + {file = "pyerfa-2.0.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:da5ee24eaf5e5f841f36885ea16461800b7bea11df5b657bcff85d7a7f51d2d8"}, + {file = "pyerfa-2.0.0.1-cp39-cp39-win32.whl", hash = "sha256:7895b7e6f3bc36442d1969bf3bda5a4c3b661be7a5a468798369cbd5d81023d8"}, + {file = "pyerfa-2.0.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:63a83c35cea8c5d50d53c18089f1e625c0ffc59a7a5b8d44e0f1b3ec5288f183"}, + {file = "pyerfa-2.0.0.1.tar.gz", hash = "sha256:2fd4637ffe2c1e6ede7482c13f583ba7c73119d78bef90175448ce506a0ede30"}, +] pygments = [ {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"}, {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"}, @@ -1164,57 +1237,6 @@ pyyaml = [ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] -regex = [ - {file = "regex-2021.11.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9345b6f7ee578bad8e475129ed40123d265464c4cfead6c261fd60fc9de00bcf"}, - {file = "regex-2021.11.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:416c5f1a188c91e3eb41e9c8787288e707f7d2ebe66e0a6563af280d9b68478f"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0538c43565ee6e703d3a7c3bdfe4037a5209250e8502c98f20fea6f5fdf2965"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee1227cf08b6716c85504aebc49ac827eb88fcc6e51564f010f11a406c0a667"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6650f16365f1924d6014d2ea770bde8555b4a39dc9576abb95e3cd1ff0263b36"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30ab804ea73972049b7a2a5c62d97687d69b5a60a67adca07eb73a0ddbc9e29f"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68a067c11463de2a37157930d8b153005085e42bcb7ad9ca562d77ba7d1404e0"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:162abfd74e88001d20cb73ceaffbfe601469923e875caf9118333b1a4aaafdc4"}, - {file = "regex-2021.11.10-cp310-cp310-win32.whl", hash = "sha256:98ba568e8ae26beb726aeea2273053c717641933836568c2a0278a84987b2a1a"}, - {file = "regex-2021.11.10-cp310-cp310-win_amd64.whl", hash = "sha256:780b48456a0f0ba4d390e8b5f7c661fdd218934388cde1a974010a965e200e12"}, - {file = "regex-2021.11.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dba70f30fd81f8ce6d32ddeef37d91c8948e5d5a4c63242d16a2b2df8143aafc"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1f54b9b4b6c53369f40028d2dd07a8c374583417ee6ec0ea304e710a20f80a0"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fbb9dc00e39f3e6c0ef48edee202f9520dafb233e8b51b06b8428cfcb92abd30"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666abff54e474d28ff42756d94544cdfd42e2ee97065857413b72e8a2d6a6345"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5537f71b6d646f7f5f340562ec4c77b6e1c915f8baae822ea0b7e46c1f09b733"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2e07c6a26ed4bea91b897ee2b0835c21716d9a469a96c3e878dc5f8c55bb23"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ca5f18a75e1256ce07494e245cdb146f5a9267d3c702ebf9b65c7f8bd843431e"}, - {file = "regex-2021.11.10-cp36-cp36m-win32.whl", hash = "sha256:93a5051fcf5fad72de73b96f07d30bc29665697fb8ecdfbc474f3452c78adcf4"}, - {file = "regex-2021.11.10-cp36-cp36m-win_amd64.whl", hash = "sha256:b483c9d00a565633c87abd0aaf27eb5016de23fed952e054ecc19ce32f6a9e7e"}, - {file = "regex-2021.11.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fff55f3ce50a3ff63ec8e2a8d3dd924f1941b250b0aac3d3d42b687eeff07a8e"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32d2a2b02ccbef10145df9135751abea1f9f076e67a4e261b05f24b94219e36"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53db2c6be8a2710b359bfd3d3aa17ba38f8aa72a82309a12ae99d3c0c3dcd74d"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2207ae4f64ad3af399e2d30dde66f0b36ae5c3129b52885f1bffc2f05ec505c8"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5ca078bb666c4a9d1287a379fe617a6dccd18c3e8a7e6c7e1eb8974330c626a"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd33eb9bdcfbabab3459c9ee651d94c842bc8a05fabc95edf4ee0c15a072495e"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05b7d6d7e64efe309972adab77fc2af8907bb93217ec60aa9fe12a0dad35874f"}, - {file = "regex-2021.11.10-cp37-cp37m-win32.whl", hash = "sha256:e71255ba42567d34a13c03968736c5d39bb4a97ce98188fafb27ce981115beec"}, - {file = "regex-2021.11.10-cp37-cp37m-win_amd64.whl", hash = "sha256:07856afef5ffcc052e7eccf3213317fbb94e4a5cd8177a2caa69c980657b3cb4"}, - {file = "regex-2021.11.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba05430e819e58544e840a68b03b28b6d328aff2e41579037e8bab7653b37d83"}, - {file = "regex-2021.11.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f301b11b9d214f83ddaf689181051e7f48905568b0c7017c04c06dfd065e244"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aaa4e0705ef2b73dd8e36eeb4c868f80f8393f5f4d855e94025ce7ad8525f50"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:788aef3549f1924d5c38263104dae7395bf020a42776d5ec5ea2b0d3d85d6646"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8af619e3be812a2059b212064ea7a640aff0568d972cd1b9e920837469eb3cb"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85bfa6a5413be0ee6c5c4a663668a2cad2cbecdee367630d097d7823041bdeec"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f23222527b307970e383433daec128d769ff778d9b29343fb3496472dc20dabe"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:da1a90c1ddb7531b1d5ff1e171b4ee61f6345119be7351104b67ff413843fe94"}, - {file = "regex-2021.11.10-cp38-cp38-win32.whl", hash = "sha256:0617383e2fe465732af4509e61648b77cbe3aee68b6ac8c0b6fe934db90be5cc"}, - {file = "regex-2021.11.10-cp38-cp38-win_amd64.whl", hash = "sha256:a3feefd5e95871872673b08636f96b61ebef62971eab044f5124fb4dea39919d"}, - {file = "regex-2021.11.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7f325be2804246a75a4f45c72d4ce80d2443ab815063cdf70ee8fb2ca59ee1b"}, - {file = "regex-2021.11.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:537ca6a3586931b16a85ac38c08cc48f10fc870a5b25e51794c74df843e9966d"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef2afb0fd1747f33f1ee3e209bce1ed582d1896b240ccc5e2697e3275f037c7"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:432bd15d40ed835a51617521d60d0125867f7b88acf653e4ed994a1f8e4995dc"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b43c2b8a330a490daaef5a47ab114935002b13b3f9dc5da56d5322ff218eeadb"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:962b9a917dd7ceacbe5cd424556914cb0d636001e393b43dc886ba31d2a1e449"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa8c626d6441e2d04b6ee703ef2d1e17608ad44c7cb75258c09dd42bacdfc64b"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3c5fb32cc6077abad3bbf0323067636d93307c9fa93e072771cf9a64d1c0f3ef"}, - {file = "regex-2021.11.10-cp39-cp39-win32.whl", hash = "sha256:3b5df18db1fccd66de15aa59c41e4f853b5df7550723d26aa6cb7f40e5d9da5a"}, - {file = "regex-2021.11.10-cp39-cp39-win_amd64.whl", hash = "sha256:83ee89483672b11f8952b158640d0c0ff02dc43d9cb1b70c1564b49abe92ce29"}, - {file = "regex-2021.11.10.tar.gz", hash = "sha256:f341ee2df0999bfdf7a95e448075effe0db212a59387de1a70690e4acb03d4c6"}, -] requests = [ {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, @@ -1232,8 +1254,8 @@ soupsieve = [ {file = "soupsieve-2.3.1.tar.gz", hash = "sha256:b8d49b1cd4f037c7082a9683dfa1801aa2597fb11c3a1155b7a5b94829b4f1f9"}, ] sphinx = [ - {file = "Sphinx-4.3.0-py3-none-any.whl", hash = "sha256:7e2b30da5f39170efcd95c6270f07669d623c276521fee27ad6c380f49d2bf5b"}, - {file = "Sphinx-4.3.0.tar.gz", hash = "sha256:6d051ab6e0d06cba786c4656b0fe67ba259fe058410f49e95bee6e49c4052cbf"}, + {file = "Sphinx-4.3.1-py3-none-any.whl", hash = "sha256:048dac56039a5713f47a554589dc98a442b39226a2b9ed7f82797fcb2fe9253f"}, + {file = "Sphinx-4.3.1.tar.gz", hash = "sha256:32a5b3e9a1b176cc25ed048557d4d3d01af635e6b76c5bc7a43b0a34447fbd45"}, ] sphinxcontrib-applehelp = [ {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, @@ -1264,33 +1286,33 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomli = [ - {file = "tomli-1.2.2-py3-none-any.whl", hash = "sha256:f04066f68f5554911363063a30b108d2b5a5b1a010aa8b6132af78489fe3aade"}, - {file = "tomli-1.2.2.tar.gz", hash = "sha256:c6ce0015eb38820eaf32b5db832dbc26deb3dd427bd5f6556cf0acac2c214fee"}, + {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, + {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, ] traitlets = [ {file = "traitlets-5.1.1-py3-none-any.whl", hash = "sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033"}, {file = "traitlets-5.1.1.tar.gz", hash = "sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7"}, ] typed-ast = [ - {file = "typed_ast-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b310a207ee9fde3f46ba327989e6cba4195bc0c8c70a158456e7b10233e6bed"}, - {file = "typed_ast-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52ca2b2b524d770bed7a393371a38e91943f9160a190141e0df911586066ecda"}, - {file = "typed_ast-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:14fed8820114a389a2b7e91624db5f85f3f6682fda09fe0268a59aabd28fe5f5"}, - {file = "typed_ast-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:65c81abbabda7d760df7304d843cc9dbe7ef5d485504ca59a46ae2d1731d2428"}, - {file = "typed_ast-1.5.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:37ba2ab65a0028b1a4f2b61a8fe77f12d242731977d274a03d68ebb751271508"}, - {file = "typed_ast-1.5.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:49af5b8f6f03ed1eb89ee06c1d7c2e7c8e743d720c3746a5857609a1abc94c94"}, - {file = "typed_ast-1.5.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e4374a76e61399a173137e7984a1d7e356038cf844f24fd8aea46c8029a2f712"}, - {file = "typed_ast-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ea517c2bb11c5e4ba7a83a91482a2837041181d57d3ed0749a6c382a2b6b7086"}, - {file = "typed_ast-1.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:51040bf45aacefa44fa67fb9ebcd1f2bec73182b99a532c2394eea7dabd18e24"}, - {file = "typed_ast-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:806e0c7346b9b4af8c62d9a29053f484599921a4448c37fbbcbbf15c25138570"}, - {file = "typed_ast-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a67fd5914603e2165e075f1b12f5a8356bfb9557e8bfb74511108cfbab0f51ed"}, - {file = "typed_ast-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:224afecb8b39739f5c9562794a7c98325cb9d972712e1a98b6989a4720219541"}, - {file = "typed_ast-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:155b74b078be842d2eb630dd30a280025eca0a5383c7d45853c27afee65f278f"}, - {file = "typed_ast-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:361b9e5d27bd8e3ccb6ea6ad6c4f3c0be322a1a0f8177db6d56264fa0ae40410"}, - {file = "typed_ast-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:618912cbc7e17b4aeba86ffe071698c6e2d292acbd6d1d5ec1ee724b8c4ae450"}, - {file = "typed_ast-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7e6731044f748340ef68dcadb5172a4b1f40847a2983fe3983b2a66445fbc8e6"}, - {file = "typed_ast-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e8a9b9c87801cecaad3b4c2b8876387115d1a14caa602c1618cedbb0cb2a14e6"}, - {file = "typed_ast-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:ec184dfb5d3d11e82841dbb973e7092b75f306b625fad7b2e665b64c5d60ab3f"}, - {file = "typed_ast-1.5.0.tar.gz", hash = "sha256:ff4ad88271aa7a55f19b6a161ed44e088c393846d954729549e3cde8257747bb"}, + {file = "typed_ast-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d8314c92414ce7481eee7ad42b353943679cf6f30237b5ecbf7d835519e1212"}, + {file = "typed_ast-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b53ae5de5500529c76225d18eeb060efbcec90ad5e030713fe8dab0fb4531631"}, + {file = "typed_ast-1.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:24058827d8f5d633f97223f5148a7d22628099a3d2efe06654ce872f46f07cdb"}, + {file = "typed_ast-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a6d495c1ef572519a7bac9534dbf6d94c40e5b6a608ef41136133377bba4aa08"}, + {file = "typed_ast-1.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:de4ecae89c7d8b56169473e08f6bfd2df7f95015591f43126e4ea7865928677e"}, + {file = "typed_ast-1.5.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:256115a5bc7ea9e665c6314ed6671ee2c08ca380f9d5f130bd4d2c1f5848d695"}, + {file = "typed_ast-1.5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:7c42707ab981b6cf4b73490c16e9d17fcd5227039720ca14abe415d39a173a30"}, + {file = "typed_ast-1.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:71dcda943a471d826ea930dd449ac7e76db7be778fcd722deb63642bab32ea3f"}, + {file = "typed_ast-1.5.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4f30a2bcd8e68adbb791ce1567fdb897357506f7ea6716f6bbdd3053ac4d9471"}, + {file = "typed_ast-1.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ca9e8300d8ba0b66d140820cf463438c8e7b4cdc6fd710c059bfcfb1531d03fb"}, + {file = "typed_ast-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9caaf2b440efb39ecbc45e2fabde809cbe56272719131a6318fd9bf08b58e2cb"}, + {file = "typed_ast-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c9bcad65d66d594bffab8575f39420fe0ee96f66e23c4d927ebb4e24354ec1af"}, + {file = "typed_ast-1.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:591bc04e507595887160ed7aa8d6785867fb86c5793911be79ccede61ae96f4d"}, + {file = "typed_ast-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:a80d84f535642420dd17e16ae25bb46c7f4c16ee231105e7f3eb43976a89670a"}, + {file = "typed_ast-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:38cf5c642fa808300bae1281460d4f9b7617cf864d4e383054a5ef336e344d32"}, + {file = "typed_ast-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5b6ab14c56bc9c7e3c30228a0a0b54b915b1579613f6e463ba6f4eb1382e7fd4"}, + {file = "typed_ast-1.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2b8d7007f6280e36fa42652df47087ac7b0a7d7f09f9468f07792ba646aac2d"}, + {file = "typed_ast-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:b6d17f37f6edd879141e64a5db17b67488cfeffeedad8c5cec0392305e9bc775"}, + {file = "typed_ast-1.5.1.tar.gz", hash = "sha256:484137cab8ecf47e137260daa20bafbba5f4e3ec7fda1c1e69ab299b75fa81c5"}, ] typing-extensions = [ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, @@ -1306,12 +1328,12 @@ wcwidth = [ {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, ] xarray = [ - {file = "xarray-0.20.1-py3-none-any.whl", hash = "sha256:2812691033fdf8ef1fc5675b4883587521d11d02ce8a9fbbe9a4172c77924d0a"}, - {file = "xarray-0.20.1.tar.gz", hash = "sha256:9c0bffd8b55fdef277f8f6c817153eb51fa4e58653a7ad92eaed9984164b7bdb"}, + {file = "xarray-0.20.2-py3-none-any.whl", hash = "sha256:048eee6036efd2a03e7eb3e91b5359c38da9e80aa6fa82def644a102d59bd78f"}, + {file = "xarray-0.20.2.tar.gz", hash = "sha256:c2ebe80ca81b10a0241f6876dcc34ac9696e5c5cdcdf4758da7cf4bd732c41f7"}, ] xarray-dataclasses = [ - {file = "xarray-dataclasses-0.6.1.tar.gz", hash = "sha256:dff6de9cd2e34d194e2d96af96d9094bf19a2790ba7c359390af6f4484e7da48"}, - {file = "xarray_dataclasses-0.6.1-py3-none-any.whl", hash = "sha256:6bc4ef253ec61dd5941a26ddc593ad787ebe64ddb13d53f32308d731f8dedf2e"}, + {file = "xarray-dataclasses-0.8.0.tar.gz", hash = "sha256:1a7657034a0a456b234977ab9b47afb9b2231133e937306c5230919b1aa5239f"}, + {file = "xarray_dataclasses-0.8.0-py3-none-any.whl", hash = "sha256:1fe8d029d99c8bd2e272b97b7f56b115cb3e3b6f7d592efbe5735919e2506d67"}, ] zipp = [ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, diff --git a/pyproject.toml b/pyproject.toml index 120d09a..2838c0f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,13 +10,14 @@ documentation = "https://sdarray.github.io/sdarray" [tool.poetry.dependencies] python = ">=3.7, <3.10" +astropy = "^4.3" numpy = "^1.19" typing-extensions = "^3.10" -xarray-dataclasses = "^0.6" +xarray-dataclasses = "^0.8" [tool.poetry.dev-dependencies] -black = "^21.11b" -ipython = "^7.29" +black = "^21.12b" +ipython = "^7.30" myst-parser = "^0.15" pydata-sphinx-theme = "^0.7" pytest = "^6.2" From 88846a9196026bb5dcca2aef2b4e8220e0e3aed0 Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Fri, 17 Dec 2021 18:31:47 +0000 Subject: [PATCH 18/20] #30 Add UnitConversion mixin --- sdarray/array/utils.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sdarray/array/utils.py b/sdarray/array/utils.py index 9eaf093..84ca5b3 100644 --- a/sdarray/array/utils.py +++ b/sdarray/array/utils.py @@ -2,6 +2,10 @@ from typing import Any, Type, TypeVar +# dependencies +from astropy.units import Quantity + + # type hints T = TypeVar("T") @@ -15,3 +19,14 @@ def __new__(cls: Type[T], *args: Any, **kwargs: Any) -> T: raise TypeError("The second and subsequent args are keyword-only.") return super().__new__(cls) + + +class UnitConversion: + """Convert data to the defined units if they are given with units.""" + + def __post_init__(self) -> None: + if not (hasattr(self, "data") and hasattr(self, "units")): + return + + if isinstance(self.data, Quantity): + self.data = self.data.to(self.units).value # type: ignore From c2de4eee46e5b472eee32883730b90917f4e7870 Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Fri, 17 Dec 2021 18:36:40 +0000 Subject: [PATCH 19/20] #30 Update docstrings of dims module --- sdarray/array/dims.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sdarray/array/dims.py b/sdarray/array/dims.py index fd36df8..da11eff 100644 --- a/sdarray/array/dims.py +++ b/sdarray/array/dims.py @@ -8,12 +8,12 @@ from xarray_dataclasses import Attr, Data -# constants +# type hints time = Literal["time"] -"""Type hint for the time axis.""" +"""Type hint of the time dimension.""" chan = Literal["chan"] -"""Type hint for the channel axis.""" +"""Type hint of the channel dimension.""" # dataclasses @@ -28,8 +28,8 @@ class Time: @dataclass class Chan: - """Channel number.""" + """Generic channel.""" data: Data[chan, np.int64] - long_name: Attr[str] = "Channel number" + long_name: Attr[str] = "Generic channel" short_name: Attr[str] = "chan" From 230d91c2135f3403b2bf6f1df19e7a7d9632fa2f Mon Sep 17 00:00:00 2001 From: Akio Taniguchi Date: Wed, 16 Mar 2022 11:55:27 +0000 Subject: [PATCH 20/20] #30 Update project dependencies --- poetry.lock | 46 ---------------------------------------------- 1 file changed, 46 deletions(-) diff --git a/poetry.lock b/poetry.lock index 603caf8..12cdcfc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -557,21 +557,6 @@ numpy = ">=1.17" docs = ["sphinx-astropy (>=1.3)"] test = ["pytest", "pytest-doctestplus (>=0.7)"] -[[package]] -name = "pyerfa" -version = "2.0.0.1" -description = "Python bindings for ERFA" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -numpy = ">=1.17" - -[package.extras] -docs = ["sphinx-astropy (>=1.3)"] -test = ["pytest", "pytest-doctestplus (>=0.7)"] - [[package]] name = "pygments" version = "2.11.2" @@ -1236,37 +1221,6 @@ pyerfa = [ {file = "pyerfa-2.0.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:63a83c35cea8c5d50d53c18089f1e625c0ffc59a7a5b8d44e0f1b3ec5288f183"}, {file = "pyerfa-2.0.0.1.tar.gz", hash = "sha256:2fd4637ffe2c1e6ede7482c13f583ba7c73119d78bef90175448ce506a0ede30"}, ] -pyerfa = [ - {file = "pyerfa-2.0.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:278832de7803f2fb0ef4b14263200f98dfdb3eaa78dc63835d93796fd8fc42c6"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:629248cebc8626a52e80f69d4e2f30cc6e751f57803f5ba7ec99edd09785d181"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3285d95dfe398a931a633da961f6f1c0b8690f2a3b1c510a4efe639f784cd9c7"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:177f50f0e8354f1a7115c2d4784668b365f1cc2f2c7d1e2f4ddf354160559b32"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:041939a7554a98b72885904ffddd8882567191bee62358727679448480174c31"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-win32.whl", hash = "sha256:f9e149bc3d423ae891f6587c1383fd471ae07744b88152e66b5e9f64a8bc9006"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:f00dc4fc48a16eb39fd0121f2f06c03ee762b79a207cc5b0bc17d94191b51302"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1ba3668e1e181a678ce788d23a4f8666aabd8518f77fdde5157ba4744bc73d4a"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8f08f6e6d75a261bb92b707bea19eba2e46a8fcbfb499b789f3eb0d0352ea00"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da89304d6b25ac056e470f44f85770b04c9674eced07a7f93b5eb0ce1edaabd9"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:36738ba75e7a69e0ea6a7e96a5d33a852816427e7e94e7089c188ef920b02669"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5c077aed4ccd585c1fe2f96ada8edb66e9d27b4ae8ff13ea2783283b298ba0c6"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-win32.whl", hash = "sha256:0833f8ebba9f84a19a04ee5ca5aa90be75729abfbb8328e7a6d89ed1b04e058c"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:e86c08c9c0b75e448818473c6d709e3887a439c05a1aa34042d26774251422b7"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b935fa9d10dfd7206760859236640c835aa652609c0ae8a6584593324eb6f318"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67711a748821c5d91f7a8907b9125094dfc3e5ab6a6b7ad8e207fd6afbe6b37f"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d2c10838241aaf17279468dcc731cb2c09bfb7dd7b340c0f527fd70c7c9e53d1"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:37249e1e2b378d1f56e9379e4bb8f2cf87645c160a8a3e92166a1b7bb7ad7ea6"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f76fb4b64a87da2af9d0b6b79cc25e1ecc5b4143b2b3c8c9f10b221748c5db4d"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-win32.whl", hash = "sha256:486e672c52bf58eab61140968660ac7fb3b756116b53c26c334ae95dadd943ee"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:d603f1e8123f98a0593433aa6dad4ba03f0b0ceef4cb3e96f9a69aa7ab8d5c61"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef5590b2075c50395b958f102988e519e339d96509dfdca0360f26dde94c47e7"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ca8c98842f1ae10c1fbcea0e03a41ddc13456da88da2dc9b8335a8c414d7a3"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d3e7dedce1d7e4e044f6f81d192b1f6b373c8ad6716aa8721ec6d3cf4d36f5f3"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:690116a6026ee84ce5fec794c9e21bdc8c0ac8345d6722323810181486745068"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:da5ee24eaf5e5f841f36885ea16461800b7bea11df5b657bcff85d7a7f51d2d8"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-win32.whl", hash = "sha256:7895b7e6f3bc36442d1969bf3bda5a4c3b661be7a5a468798369cbd5d81023d8"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:63a83c35cea8c5d50d53c18089f1e625c0ffc59a7a5b8d44e0f1b3ec5288f183"}, - {file = "pyerfa-2.0.0.1.tar.gz", hash = "sha256:2fd4637ffe2c1e6ede7482c13f583ba7c73119d78bef90175448ce506a0ede30"}, -] pygments = [ {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"}, {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},