caom2 2.6.2__tar.gz → 2.6.3__tar.gz
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.
- {caom2-2.6.2/caom2.egg-info → caom2-2.6.3}/PKG-INFO +11 -2
- {caom2-2.6.2 → caom2-2.6.3}/caom2/common.py +1 -1
- {caom2-2.6.2 → caom2-2.6.3}/caom2/diff.py +1 -1
- {caom2-2.6.2 → caom2-2.6.3}/caom2/obs_reader_writer.py +31 -4
- {caom2-2.6.2 → caom2-2.6.3}/caom2/plane.py +14 -7
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/SampleDerived-CAOM-2.4.xml +5386 -5660
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/diff-actual-CAOM-2.3.xml +1 -1
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/diff-expected-CAOM-2.3.xml +1 -1
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/diff-expected-CAOM-2.4.xml +1 -1
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/test_obs_reader_writer.py +8 -3
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/test_shape.py +3 -3
- caom2-2.6.3/caom2/version.py +1 -0
- {caom2-2.6.2 → caom2-2.6.3/caom2.egg-info}/PKG-INFO +11 -2
- {caom2-2.6.2 → caom2-2.6.3}/setup.cfg +4 -1
- caom2-2.6.2/caom2/version.py +0 -1
- {caom2-2.6.2 → caom2-2.6.3}/LICENSE +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/MANIFEST.in +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/README.rst +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/__init__.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/artifact.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/caom_util.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/checksum.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/chunk.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/data/CAOM-2.2.xsd +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/data/CAOM-2.3.xsd +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/data/CAOM-2.4.xsd +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/observation.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/part.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/shape.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/__init__.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/caom_test_instances.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/CompleteCompositeCircle-CAOM-2.2.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/CompleteCompositeCircle-CAOM-2.3.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/CompleteCompositePolygon-CAOM-2.2.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/CompleteCompositePolygon-CAOM-2.3.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/CompleteSimpleCircle-CAOM-2.2.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/CompleteSimpleCircle-CAOM-2.3.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/CompleteSimplePolygon-CAOM-2.2.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/CompleteSimplePolygon-CAOM-2.3.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/MinimalCompositeCircle-CAOM-2.2.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/MinimalCompositeCircle-CAOM-2.3.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/MinimalCompositePolygon-CAOM-2.2.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/MinimalCompositePolygon-CAOM-2.3.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/MinimalSimpleCircle-CAOM-2.2.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/MinimalSimpleCircle-CAOM-2.3.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/MinimalSimplePolygon-CAOM-2.2.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/MinimalSimplePolygon-CAOM-2.3.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/SampleComposite-CAOM-2.3.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/SampleSimple-CAOM-2.3.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/data/diff-actual-CAOM-2.4.xml +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/test_artifact.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/test_caom_util.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/test_checksum.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/test_chunk.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/test_common.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/test_diffs.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/test_observation.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/test_part.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/test_plane.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/test_wcs.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/tests/xml_compare.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2/wcs.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2.egg-info/SOURCES.txt +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2.egg-info/dependency_links.txt +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2.egg-info/entry_points.txt +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2.egg-info/not-zip-safe +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2.egg-info/requires.txt +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/caom2.egg-info/top_level.txt +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/docs/Makefile +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/docs/_templates/autosummary/base.rst +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/docs/_templates/autosummary/class.rst +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/docs/_templates/autosummary/module.rst +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/docs/conf.py +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/docs/index.rst +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/docs/make.bat +0 -0
- {caom2-2.6.2 → caom2-2.6.3}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: caom2
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.3
|
|
4
4
|
Summary: CAOM-2.4 library
|
|
5
5
|
Home-page: http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/caom2
|
|
6
6
|
Author: Canadian Astronomy Data Centre
|
|
@@ -20,6 +20,15 @@ Requires-Dist: pytest>=4.6; extra == "test"
|
|
|
20
20
|
Requires-Dist: pytest-cov>=2.5.1; extra == "test"
|
|
21
21
|
Requires-Dist: flake8>=3.4.1; extra == "test"
|
|
22
22
|
Requires-Dist: funcsigs>=1.0.2; extra == "test"
|
|
23
|
+
Dynamic: author
|
|
24
|
+
Dynamic: author-email
|
|
25
|
+
Dynamic: classifier
|
|
26
|
+
Dynamic: description
|
|
27
|
+
Dynamic: home-page
|
|
28
|
+
Dynamic: license
|
|
29
|
+
Dynamic: license-file
|
|
30
|
+
Dynamic: requires-python
|
|
31
|
+
Dynamic: summary
|
|
23
32
|
|
|
24
33
|
caom2
|
|
25
34
|
=====
|
|
@@ -105,7 +105,7 @@ def get_differences(expected, actual, parent=None):
|
|
|
105
105
|
"""
|
|
106
106
|
report = []
|
|
107
107
|
|
|
108
|
-
if
|
|
108
|
+
if not isinstance(actual, expected.__class__):
|
|
109
109
|
report.append(
|
|
110
110
|
'Types:: expected \'{}\' actual \'{}\''.format(type(expected),
|
|
111
111
|
type(actual)))
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# ****************** CANADIAN ASTRONOMY DATA CENTRE *******************
|
|
4
4
|
# ************* CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES **************
|
|
5
5
|
#
|
|
6
|
-
# (c)
|
|
6
|
+
# (c) 2025. (c) 2025.
|
|
7
7
|
# Government of Canada Gouvernement du Canada
|
|
8
8
|
# National Research Council Conseil national de recherches
|
|
9
9
|
# Ottawa, Canada, K1A 0R6 Ottawa, Canada, K1A 0R6
|
|
@@ -631,6 +631,23 @@ class ObservationReader(object):
|
|
|
631
631
|
data_quality = plane.DataQuality(plane.Quality(flag))
|
|
632
632
|
return data_quality
|
|
633
633
|
|
|
634
|
+
def _get_observable(self, parent, ns):
|
|
635
|
+
"""Build an Observable object from an XML representation
|
|
636
|
+
|
|
637
|
+
Arguments:
|
|
638
|
+
parent : element containing the Observable element
|
|
639
|
+
ns : namespace of the document
|
|
640
|
+
return : an Observable object or None if the document does not contain one
|
|
641
|
+
raise : ObservationParsingException
|
|
642
|
+
"""
|
|
643
|
+
el = self._get_child_element("observable", parent, ns, False)
|
|
644
|
+
if el is None:
|
|
645
|
+
return None
|
|
646
|
+
else:
|
|
647
|
+
ucd = self._get_child_text("ucd", el, ns, True)
|
|
648
|
+
observable = plane.Observable(plane.Ucd(ucd))
|
|
649
|
+
return observable
|
|
650
|
+
|
|
634
651
|
def _get_point(self, point, ns, required):
|
|
635
652
|
"""Build an Point object from an XML representation
|
|
636
653
|
of an Point element.
|
|
@@ -1696,6 +1713,8 @@ class ObservationReader(object):
|
|
|
1696
1713
|
_plane.provenance = \
|
|
1697
1714
|
self._get_provenance("provenance", plane_element, ns,
|
|
1698
1715
|
False)
|
|
1716
|
+
_plane.observable = self._get_observable(plane_element, ns)
|
|
1717
|
+
|
|
1699
1718
|
_plane.metrics = \
|
|
1700
1719
|
self._get_metrics("metrics", plane_element, ns, False)
|
|
1701
1720
|
_plane.quality = \
|
|
@@ -2080,6 +2099,7 @@ class ObservationWriter(object):
|
|
|
2080
2099
|
_plane.calibration_level.value,
|
|
2081
2100
|
plane_element)
|
|
2082
2101
|
self._add_provenance_element(_plane.provenance, plane_element)
|
|
2102
|
+
self._add_observable_element(_plane.observable, plane_element)
|
|
2083
2103
|
self._add_metrics_element(_plane.metrics, plane_element)
|
|
2084
2104
|
self._add_quality_element(_plane.quality, plane_element)
|
|
2085
2105
|
|
|
@@ -2131,9 +2151,9 @@ class ObservationWriter(object):
|
|
|
2131
2151
|
"Attempt to write CAOM2.4 element "
|
|
2132
2152
|
"(energy.resolving_power_bands) as "
|
|
2133
2153
|
"CAOM2.3 Observation")
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2154
|
+
else:
|
|
2155
|
+
self._add_interval_element("resolvingPowerBounds",
|
|
2156
|
+
energy.resolving_power_bounds, element)
|
|
2137
2157
|
self._add_element("sampleSize", energy.sample_size, element)
|
|
2138
2158
|
self._add_element("bandpassName", energy.bandpass_name, element)
|
|
2139
2159
|
if energy.energy_bands:
|
|
@@ -2280,6 +2300,13 @@ class ObservationWriter(object):
|
|
|
2280
2300
|
element = self._get_caom_element("quality", parent)
|
|
2281
2301
|
self._add_element("flag", quality.flag.value, element)
|
|
2282
2302
|
|
|
2303
|
+
def _add_observable_element(self, observable, parent):
|
|
2304
|
+
if observable is None:
|
|
2305
|
+
return
|
|
2306
|
+
|
|
2307
|
+
element = self._get_caom_element("observable", parent)
|
|
2308
|
+
self._add_element("ucd", observable.ucd.value, element)
|
|
2309
|
+
|
|
2283
2310
|
def _add_transition_element(self, transition, parent):
|
|
2284
2311
|
if transition is None:
|
|
2285
2312
|
return
|
|
@@ -79,11 +79,9 @@ from . import caom_util
|
|
|
79
79
|
from . import shape
|
|
80
80
|
from . import wcs
|
|
81
81
|
from .artifact import Artifact
|
|
82
|
-
from .common import AbstractCaomEntity, CaomObject, ObservationURI
|
|
83
|
-
VocabularyTerm, OrderedEnum
|
|
82
|
+
from .common import AbstractCaomEntity, CaomObject, ObservationURI, VocabularyTerm, OrderedEnum
|
|
84
83
|
from .common import _CAOM_VOCAB_NS, _OBSCORE_VOCAB_NS
|
|
85
84
|
import warnings
|
|
86
|
-
from enum import Enum
|
|
87
85
|
with warnings.catch_warnings():
|
|
88
86
|
warnings.simplefilter('ignore')
|
|
89
87
|
from aenum import Enum, extend_enum
|
|
@@ -91,7 +89,7 @@ with warnings.catch_warnings():
|
|
|
91
89
|
__all__ = ['CalibrationLevel', 'DataProductType', 'EnergyBand',
|
|
92
90
|
'PolarizationState', 'Quality', 'Plane',
|
|
93
91
|
'PlaneURI', 'DataQuality', 'Metrics', 'Provenance', 'Position',
|
|
94
|
-
'Energy', 'Polarization', 'Time', 'Observable']
|
|
92
|
+
'Energy', 'Polarization', 'Time', 'Observable', 'Ucd']
|
|
95
93
|
|
|
96
94
|
|
|
97
95
|
class CalibrationLevel(Enum):
|
|
@@ -110,6 +108,14 @@ class CalibrationLevel(Enum):
|
|
|
110
108
|
ANALYSIS_PRODUCT = int_32(4)
|
|
111
109
|
|
|
112
110
|
|
|
111
|
+
class Ucd(CaomObject):
|
|
112
|
+
""" UCD - enum of UCDs"""
|
|
113
|
+
_UCD_VOCAB = "https://ivoa.net/documents/UCD1+/20230125/ucd-list.txt"
|
|
114
|
+
|
|
115
|
+
def __init__(self, value):
|
|
116
|
+
self.value = value
|
|
117
|
+
|
|
118
|
+
|
|
113
119
|
class DataProductType(OrderedEnum):
|
|
114
120
|
""" DataproductType - enum of data product types"""
|
|
115
121
|
|
|
@@ -208,10 +214,11 @@ class Quality(Enum):
|
|
|
208
214
|
JUNK = VocabularyTerm(_CAOM_VOCAB_NS, "junk", True).get_value()
|
|
209
215
|
|
|
210
216
|
|
|
211
|
-
class Observable():
|
|
217
|
+
class Observable(CaomObject):
|
|
212
218
|
""" Observable class"""
|
|
213
219
|
|
|
214
220
|
def __init__(self, ucd):
|
|
221
|
+
super(Observable, self).__init__()
|
|
215
222
|
self.ucd = ucd
|
|
216
223
|
|
|
217
224
|
@property
|
|
@@ -220,7 +227,7 @@ class Observable():
|
|
|
220
227
|
|
|
221
228
|
@ucd.setter
|
|
222
229
|
def ucd(self, value):
|
|
223
|
-
caom_util.type_check(value,
|
|
230
|
+
caom_util.type_check(value, Ucd, 'ucd', override=False)
|
|
224
231
|
self._ucd = value
|
|
225
232
|
|
|
226
233
|
|
|
@@ -487,7 +494,7 @@ class Plane(AbstractCaomEntity):
|
|
|
487
494
|
|
|
488
495
|
@observable.setter
|
|
489
496
|
def observable(self, value):
|
|
490
|
-
caom_util.type_check(value,
|
|
497
|
+
caom_util.type_check(value, Observable, 'observable')
|
|
491
498
|
self._observable = value
|
|
492
499
|
|
|
493
500
|
@property
|