canvod-readers 0.2.0__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.
Files changed (45) hide show
  1. canvod_readers-0.2.0/PKG-INFO +113 -0
  2. canvod_readers-0.2.0/README.md +82 -0
  3. canvod_readers-0.2.0/pyproject.toml +58 -0
  4. canvod_readers-0.2.0/src/canvod/readers/.DS_Store +0 -0
  5. canvod_readers-0.2.0/src/canvod/readers/__init__.py +84 -0
  6. canvod_readers-0.2.0/src/canvod/readers/base.py +501 -0
  7. canvod_readers-0.2.0/src/canvod/readers/builder.py +234 -0
  8. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/.DS_Store +0 -0
  9. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/GLONASS_channels.txt +9 -0
  10. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/__init__.py +16 -0
  11. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/bands.py +424 -0
  12. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/constants.py +80 -0
  13. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/constellations.py +664 -0
  14. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/data/igs_satellite_metadata.snx +3689 -0
  15. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/exceptions.py +162 -0
  16. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/interface_control_documents/.DS_Store +0 -0
  17. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/interface_control_documents/BDS_B1I.pdf +0 -0
  18. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/interface_control_documents/BDS_B2b.pdf +0 -0
  19. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/interface_control_documents/GPS_L1_L2.pdf +0 -0
  20. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/interface_control_documents/GPS_L5.pdf +0 -0
  21. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/interface_control_documents/Galileo_OS_SIS_ICD_v2.1.pdf +0 -0
  22. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/interface_control_documents/ICD-GLONASS-CDMA-General.-Edition-1.0-2016-1.pdf +0 -0
  23. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/interface_control_documents/__init__.py +1 -0
  24. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/metadata.py +326 -0
  25. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/models.py +1052 -0
  26. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/satellite_catalog.py +950 -0
  27. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/signals.py +146 -0
  28. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/utils.py +103 -0
  29. canvod_readers-0.2.0/src/canvod/readers/gnss_specs/validation_constants.py +465 -0
  30. canvod_readers-0.2.0/src/canvod/readers/matching/.DS_Store +0 -0
  31. canvod_readers-0.2.0/src/canvod/readers/matching/__init__.py +14 -0
  32. canvod_readers-0.2.0/src/canvod/readers/matching/dir_matcher.py +420 -0
  33. canvod_readers-0.2.0/src/canvod/readers/matching/models.py +90 -0
  34. canvod_readers-0.2.0/src/canvod/readers/rinex/.DS_Store +0 -0
  35. canvod_readers-0.2.0/src/canvod/readers/rinex/__init__.py +13 -0
  36. canvod_readers-0.2.0/src/canvod/readers/rinex/rinex304.pdf +0 -0
  37. canvod_readers-0.2.0/src/canvod/readers/rinex/v3_04.py +2079 -0
  38. canvod_readers-0.2.0/src/canvod/readers/sbf/.DS_Store +0 -0
  39. canvod_readers-0.2.0/src/canvod/readers/sbf/AsteRx SB3 ProBase Firmware v4.14.0 Reference Guide.pdf +0 -0
  40. canvod_readers-0.2.0/src/canvod/readers/sbf/AsteRx SB3 ProBase Firmware v4.15.1 Reference Guide.pdf +0 -0
  41. canvod_readers-0.2.0/src/canvod/readers/sbf/__init__.py +40 -0
  42. canvod_readers-0.2.0/src/canvod/readers/sbf/_registry.py +301 -0
  43. canvod_readers-0.2.0/src/canvod/readers/sbf/_scaling.py +418 -0
  44. canvod_readers-0.2.0/src/canvod/readers/sbf/models.py +175 -0
  45. canvod_readers-0.2.0/src/canvod/readers/sbf/reader.py +2483 -0
@@ -0,0 +1,113 @@
1
+ Metadata-Version: 2.3
2
+ Name: canvod-readers
3
+ Version: 0.2.0
4
+ Summary: GNSS data format readers for canVODpy
5
+ Keywords: GNSS,RINEX,GPS,geodesy,remote sensing
6
+ Author: Nicolas François Bader
7
+ Author-email: Nicolas François Bader <nicolas.bader@geo.tuwien.ac.at>
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Intended Audience :: Science/Research
10
+ Classifier: License :: OSI Approved :: Apache Software License
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.14
13
+ Classifier: Topic :: Scientific/Engineering :: GIS
14
+ Requires-Dist: georinex>=1.16.0
15
+ Requires-Dist: matplotlib>=3.7.0
16
+ Requires-Dist: natsort>=8.4.0
17
+ Requires-Dist: numpy>=1.24.0
18
+ Requires-Dist: pint>=0.23
19
+ Requires-Dist: pydantic>=2.5.0
20
+ Requires-Dist: pytz>=2023.3
21
+ Requires-Dist: xarray>=2023.12.0
22
+ Requires-Dist: tomli>=2.0.0 ; python_full_version < '3.11'
23
+ Requires-Dist: ipykernel>=7.1.0
24
+ Requires-Dist: plotly>=6.5.1
25
+ Requires-Dist: marimo>=0.19.7
26
+ Requires-Dist: sbf-parser>=1.0.3
27
+ Maintainer: Climate and Environmental Remote Sensing (CLIMERS)
28
+ Maintainer-email: Climate and Environmental Remote Sensing (CLIMERS) <nicolas.bader@geo.tuwien.ac.at>
29
+ Requires-Python: >=3.14
30
+ Description-Content-Type: text/markdown
31
+
32
+ # canvod-readers
33
+
34
+ GNSS data format readers for canVODpy.
35
+
36
+ ## Features
37
+
38
+ - **RINEX v3.04 Support**: Complete reader for RINEX v3 observation files
39
+ - **Signal IDs**: Unique identifiers for each GNSS signal (SV|BAND|CODE format)
40
+ - **xarray Integration**: Convert observations to xarray Datasets
41
+ - **Automatic Validation**: Header parsing and epoch completeness checking
42
+ - **Memory Efficient**: Lazy iteration through large files
43
+ - **Flexible Filtering**: Filter by GNSS system, frequency band, or code type
44
+
45
+ ## Installation
46
+
47
+ ```bash
48
+ uv pip install canvod-readers
49
+ ```
50
+
51
+ ## Quick Start
52
+
53
+ ```python
54
+ from pathlib import Path
55
+ from canvod.readers import Rnxv3Obs
56
+
57
+ # Load RINEX file
58
+ filepath = Path("path/to/rinex.25o")
59
+ reader = Rnxv3Obs(fpath=filepath)
60
+
61
+ # Convert to xarray Dataset
62
+ dataset = reader.to_ds(keep_rnx_data_vars=["SNR"])
63
+
64
+ # Filter GPS L1 signals
65
+ gps_l1 = dataset.where(
66
+ (dataset.system == 'G') & (dataset.band == 'L1'),
67
+ drop=True
68
+ )
69
+ ```
70
+
71
+ ## Interactive Examples
72
+
73
+ View interactive examples using marimo notebooks:
74
+
75
+ ```bash
76
+ # Edit mode (interactive development)
77
+ just marimo
78
+
79
+ # Presentation mode (read-only)
80
+ just marimo-present
81
+ ```
82
+
83
+ Or directly:
84
+
85
+ ```bash
86
+ uv run marimo edit docs/examples.py
87
+ ```
88
+
89
+ ## Development
90
+
91
+ ```bash
92
+ # Clone repository
93
+ git clone https://github.com/nfb2021/canvodpy.git
94
+ cd canvodpy/packages/canvod-readers
95
+
96
+ # Install dependencies
97
+ uv sync
98
+
99
+ # Run tests
100
+ just test
101
+
102
+ # Check code quality
103
+ just check
104
+ ```
105
+
106
+ ## Documentation
107
+
108
+ - Interactive examples: `docs/examples.py` (marimo notebook)
109
+ - [Centralized documentation](../../docs/packages/readers/overview.md)
110
+
111
+ ## License
112
+
113
+ Apache License 2.0
@@ -0,0 +1,82 @@
1
+ # canvod-readers
2
+
3
+ GNSS data format readers for canVODpy.
4
+
5
+ ## Features
6
+
7
+ - **RINEX v3.04 Support**: Complete reader for RINEX v3 observation files
8
+ - **Signal IDs**: Unique identifiers for each GNSS signal (SV|BAND|CODE format)
9
+ - **xarray Integration**: Convert observations to xarray Datasets
10
+ - **Automatic Validation**: Header parsing and epoch completeness checking
11
+ - **Memory Efficient**: Lazy iteration through large files
12
+ - **Flexible Filtering**: Filter by GNSS system, frequency band, or code type
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ uv pip install canvod-readers
18
+ ```
19
+
20
+ ## Quick Start
21
+
22
+ ```python
23
+ from pathlib import Path
24
+ from canvod.readers import Rnxv3Obs
25
+
26
+ # Load RINEX file
27
+ filepath = Path("path/to/rinex.25o")
28
+ reader = Rnxv3Obs(fpath=filepath)
29
+
30
+ # Convert to xarray Dataset
31
+ dataset = reader.to_ds(keep_rnx_data_vars=["SNR"])
32
+
33
+ # Filter GPS L1 signals
34
+ gps_l1 = dataset.where(
35
+ (dataset.system == 'G') & (dataset.band == 'L1'),
36
+ drop=True
37
+ )
38
+ ```
39
+
40
+ ## Interactive Examples
41
+
42
+ View interactive examples using marimo notebooks:
43
+
44
+ ```bash
45
+ # Edit mode (interactive development)
46
+ just marimo
47
+
48
+ # Presentation mode (read-only)
49
+ just marimo-present
50
+ ```
51
+
52
+ Or directly:
53
+
54
+ ```bash
55
+ uv run marimo edit docs/examples.py
56
+ ```
57
+
58
+ ## Development
59
+
60
+ ```bash
61
+ # Clone repository
62
+ git clone https://github.com/nfb2021/canvodpy.git
63
+ cd canvodpy/packages/canvod-readers
64
+
65
+ # Install dependencies
66
+ uv sync
67
+
68
+ # Run tests
69
+ just test
70
+
71
+ # Check code quality
72
+ just check
73
+ ```
74
+
75
+ ## Documentation
76
+
77
+ - Interactive examples: `docs/examples.py` (marimo notebook)
78
+ - [Centralized documentation](../../docs/packages/readers/overview.md)
79
+
80
+ ## License
81
+
82
+ Apache License 2.0
@@ -0,0 +1,58 @@
1
+ [project]
2
+ name = "canvod-readers"
3
+ version = "0.2.0"
4
+ description = "GNSS data format readers for canVODpy"
5
+ readme = "README.md"
6
+ requires-python = ">=3.14"
7
+ authors = [
8
+ {name = "Nicolas François Bader", email = "nicolas.bader@geo.tuwien.ac.at"},
9
+ ]
10
+ maintainers = [
11
+ {name = "Climate and Environmental Remote Sensing (CLIMERS)", email = "nicolas.bader@geo.tuwien.ac.at"},
12
+ ]
13
+ keywords = ["GNSS", "RINEX", "GPS", "geodesy", "remote sensing"]
14
+ classifiers = [
15
+ "Development Status :: 3 - Alpha",
16
+ "Intended Audience :: Science/Research",
17
+ "License :: OSI Approved :: Apache Software License",
18
+ "Programming Language :: Python :: 3",
19
+ "Programming Language :: Python :: 3.14",
20
+ "Topic :: Scientific/Engineering :: GIS",
21
+ ]
22
+ dependencies = [
23
+ "georinex>=1.16.0",
24
+ "matplotlib>=3.7.0",
25
+ "natsort>=8.4.0",
26
+ "numpy>=1.24.0",
27
+ "pint>=0.23",
28
+ "pydantic>=2.5.0",
29
+ "pytz>=2023.3",
30
+ "xarray>=2023.12.0",
31
+ "tomli>=2.0.0; python_version < '3.11'",
32
+ "ipykernel>=7.1.0",
33
+ "plotly>=6.5.1",
34
+ "marimo>=0.19.7",
35
+ "sbf-parser>=1.0.3",
36
+ ]
37
+
38
+ [dependency-groups]
39
+ dev = [
40
+ "pytest>=8.0",
41
+ "pytest-cov>=5.0",
42
+ "ruff>=0.14",
43
+ "ty>=0.0.9",
44
+ "marimo>=0.9.0",
45
+ ]
46
+
47
+ [build-system]
48
+ requires = ["uv_build>=0.9.17,<0.10.0"]
49
+ build-backend = "uv_build"
50
+
51
+ [tool.ty]
52
+ extend-exclude = [
53
+ "**/docs/*.ipynb",
54
+ "**/docs/examples.py",
55
+ ]
56
+
57
+ [tool.uv.build-backend]
58
+ module-name = "canvod.readers"
@@ -0,0 +1,84 @@
1
+ """GNSS data format readers.
2
+
3
+ This package provides readers for various GNSS data formats, all implementing
4
+ a common interface for seamless integration with processing pipelines.
5
+
6
+ Supported formats:
7
+ - RINEX v3.04 (GNSS observations)
8
+ - More formats coming soon...
9
+
10
+ Quick Start
11
+ -----------
12
+ ```python
13
+ from canvod.readers import Rnxv3Obs
14
+
15
+ # Read RINEX v3 file
16
+ reader = Rnxv3Obs(fpath="station.24o")
17
+ dataset = reader.to_ds()
18
+ ```
19
+
20
+ Or use the canvodpy factory for automatic format detection:
21
+ ```python
22
+ from canvodpy import ReaderFactory
23
+
24
+ # Auto-detects format from file header
25
+ reader = ReaderFactory.create_from_file("station.24o")
26
+ dataset = reader.to_ds()
27
+ ```
28
+
29
+ Directory Matching:
30
+ ```python
31
+ from canvod.readers import DataDirMatcher
32
+
33
+ # Find dates with RINEX files in both receivers
34
+ matcher = DataDirMatcher(root=Path("/data/01_Rosalia"))
35
+ for matched_dirs in matcher:
36
+ print(matched_dirs.yyyydoy)
37
+ # Load RINEX files from matched_dirs.canopy_data_dir
38
+ ```
39
+ """
40
+
41
+ from canvod.readers.base import (
42
+ DEFAULT_REQUIRED_VARS,
43
+ REQUIRED_ATTRS,
44
+ REQUIRED_COORDS,
45
+ REQUIRED_DIMS,
46
+ DatasetStructureValidator,
47
+ GNSSDataReader,
48
+ SignalID,
49
+ validate_dataset,
50
+ )
51
+ from canvod.readers.builder import DatasetBuilder
52
+ from canvod.readers.matching import (
53
+ DataDirMatcher,
54
+ MatchedDirs,
55
+ PairDataDirMatcher,
56
+ PairMatchedDirs,
57
+ )
58
+ from canvod.readers.rinex.v3_04 import Rnxv3Obs
59
+ from canvod.readers.sbf import SbfEpoch, SbfHeader, SbfReader, SbfSignalObs
60
+ from canvod.utils.tools import YYYYDOY
61
+
62
+ __version__ = "0.1.0"
63
+
64
+ __all__ = [
65
+ "DEFAULT_REQUIRED_VARS",
66
+ "REQUIRED_ATTRS",
67
+ "REQUIRED_COORDS",
68
+ "REQUIRED_DIMS",
69
+ "YYYYDOY",
70
+ "DataDirMatcher",
71
+ "DatasetBuilder",
72
+ "DatasetStructureValidator",
73
+ "GNSSDataReader",
74
+ "MatchedDirs",
75
+ "PairDataDirMatcher",
76
+ "PairMatchedDirs",
77
+ "Rnxv3Obs",
78
+ "SbfEpoch",
79
+ "SbfHeader",
80
+ "SbfReader",
81
+ "SbfSignalObs",
82
+ "SignalID",
83
+ "validate_dataset",
84
+ ]