tts-data-utils 0.7.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.
- tts_data_utils-0.7.3/.gitignore +180 -0
- tts_data_utils-0.7.3/PKG-INFO +81 -0
- tts_data_utils-0.7.3/README.md +52 -0
- tts_data_utils-0.7.3/ci/sphinx_ignore_tags.txt +23 -0
- tts_data_utils-0.7.3/docs/_static/bugfix.css +12 -0
- tts_data_utils-0.7.3/docs/conf.py +71 -0
- tts_data_utils-0.7.3/docs/core/container_history.rst +5 -0
- tts_data_utils-0.7.3/docs/core/data_container.rst +6 -0
- tts_data_utils-0.7.3/docs/core/data_item.rst +7 -0
- tts_data_utils-0.7.3/docs/core/diff.rst +5 -0
- tts_data_utils-0.7.3/docs/core/generic.rst +5 -0
- tts_data_utils-0.7.3/docs/index.rst +46 -0
- tts_data_utils-0.7.3/docs/invulnerable_data_manager/idm_utilities.rst +5 -0
- tts_data_utils-0.7.3/docs/invulnerable_data_manager/invulnerable_data_manager.rst +5 -0
- tts_data_utils-0.7.3/docs/lorem_ipsum_feature.md +69 -0
- tts_data_utils-0.7.3/docs/multimission/eha.rst +5 -0
- tts_data_utils-0.7.3/docs/multimission/evr.rst +5 -0
- tts_data_utils-0.7.3/docs/multimission/evr_gaps.rst +5 -0
- tts_data_utils-0.7.3/docs/multimission/expected_lad.rst +5 -0
- tts_data_utils-0.7.3/docs/multimission/planning_rule.rst +5 -0
- tts_data_utils-0.7.3/examples/data_utils_demo.ipynb +750 -0
- tts_data_utils-0.7.3/license.md +14 -0
- tts_data_utils-0.7.3/napkin +30 -0
- tts_data_utils-0.7.3/pyproject.toml +55 -0
- tts_data_utils-0.7.3/setup.cfg +4 -0
- tts_data_utils-0.7.3/setup.py +7 -0
- tts_data_utils-0.7.3/src/tts_data_utils/__init__.py +0 -0
- tts_data_utils-0.7.3/src/tts_data_utils/core/__init__.py +0 -0
- tts_data_utils-0.7.3/src/tts_data_utils/core/container_history.py +79 -0
- tts_data_utils-0.7.3/src/tts_data_utils/core/data_container.py +2102 -0
- tts_data_utils-0.7.3/src/tts_data_utils/core/data_item.py +487 -0
- tts_data_utils-0.7.3/src/tts_data_utils/core/diff.py +155 -0
- tts_data_utils-0.7.3/src/tts_data_utils/core/generic.py +78 -0
- tts_data_utils-0.7.3/src/tts_data_utils/core/lorem_utils.py +206 -0
- tts_data_utils-0.7.3/src/tts_data_utils/core/visual_diff.py +148 -0
- tts_data_utils-0.7.3/src/tts_data_utils/invulnerable_data_manager/__init__.py +0 -0
- tts_data_utils-0.7.3/src/tts_data_utils/invulnerable_data_manager/batch.py +176 -0
- tts_data_utils-0.7.3/src/tts_data_utils/invulnerable_data_manager/invulnerable_data_manager.py +171 -0
- tts_data_utils-0.7.3/src/tts_data_utils/invulnerable_data_manager/utilities.py +151 -0
- tts_data_utils-0.7.3/src/tts_data_utils/multimission/__init__.py +0 -0
- tts_data_utils-0.7.3/src/tts_data_utils/multimission/alarms.py +109 -0
- tts_data_utils-0.7.3/src/tts_data_utils/multimission/eha.py +253 -0
- tts_data_utils-0.7.3/src/tts_data_utils/multimission/evr.py +340 -0
- tts_data_utils-0.7.3/src/tts_data_utils/multimission/evr_gaps.py +148 -0
- tts_data_utils-0.7.3/src/tts_data_utils/multimission/expected_lad.py +161 -0
- tts_data_utils-0.7.3/src/tts_data_utils/multimission/planning_rule.py +106 -0
- tts_data_utils-0.7.3/src/tts_data_utils/multimission/taco.py +53 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/__init__.py +0 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/__init__.py +0 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_data_container.py +403 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_data_item.py +92 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_diff.py +173 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_dict/actual_diff.csv +5135 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_dict/expected_diff.csv +5135 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_dict/left.csv +637 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_dict/right.csv +637 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_list/actual_diff.csv +5135 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_list/expected_diff.csv +5135 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_list/left.csv +637 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_list/right.csv +637 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_list_size/actual_diff.csv +33 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_list_size/expected_diff.csv +33 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_list_size/left.csv +637 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_list_size/right.csv +637 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_simple_types/actual_diff.csv +17894 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_simple_types/expected_diff.csv +17894 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_simple_types/left.csv +637 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_simple_types/right.csv +637 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_type/actual_diff.csv +5135 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_type/expected_diff.csv +5135 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_type/left.csv +637 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/diff_type/right.csv +637 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/diff/same_not_same/actual_diff.csv +5135 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/visdiff/adjacent_insert_delete.html +1581 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/visdiff/insert_and_delete.html +1581 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/visdiff/no_diff.html +1581 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/visdiff/overlapping_insert_delete.html +1541 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/visdiff/replace.html +1581 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/visdiff/replace_with_delete.html +1581 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/visdiff/simple_delete.html +1581 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/visdiff/simple_insert.html +1581 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_files/visdiff/stressing_case.html +2061 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_filters.py +319 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_generic_container.py +22 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_history.py +44 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/core/test_visdiff.py +193 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/invulnerable_data_manager/test_invulnerable_data_manager.py +150 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/multimission/__init__.py +0 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/multimission/evr/__init__.py +0 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/multimission/evr/test_evr.py +29 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/multimission/evr/test_files/actual_evr_gaps.csv +12 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/multimission/evr/test_files/evrs_with_gaps.csv +30 -0
- tts_data_utils-0.7.3/src/tts_data_utils/test/multimission/evr/test_files/expected_evr_gaps.csv +12 -0
- tts_data_utils-0.7.3/src/tts_data_utils/util.py +104 -0
- tts_data_utils-0.7.3/src/tts_data_utils.egg-info/PKG-INFO +81 -0
- tts_data_utils-0.7.3/src/tts_data_utils.egg-info/SOURCES.txt +97 -0
- tts_data_utils-0.7.3/src/tts_data_utils.egg-info/dependency_links.txt +1 -0
- tts_data_utils-0.7.3/src/tts_data_utils.egg-info/requires.txt +14 -0
- tts_data_utils-0.7.3/src/tts_data_utils.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py,cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# poetry
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
102
|
+
#poetry.lock
|
|
103
|
+
|
|
104
|
+
# pdm
|
|
105
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
106
|
+
#pdm.lock
|
|
107
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
108
|
+
# in version control.
|
|
109
|
+
# https://pdm.fming.dev/#use-with-ide
|
|
110
|
+
.pdm.toml
|
|
111
|
+
|
|
112
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
113
|
+
__pypackages__/
|
|
114
|
+
|
|
115
|
+
# Celery stuff
|
|
116
|
+
celerybeat-schedule
|
|
117
|
+
celerybeat.pid
|
|
118
|
+
|
|
119
|
+
# SageMath parsed files
|
|
120
|
+
*.sage.py
|
|
121
|
+
|
|
122
|
+
# Environments
|
|
123
|
+
.env
|
|
124
|
+
.venv
|
|
125
|
+
env/
|
|
126
|
+
venv/
|
|
127
|
+
ENV/
|
|
128
|
+
env.bak/
|
|
129
|
+
venv.bak/
|
|
130
|
+
|
|
131
|
+
# Spyder project settings
|
|
132
|
+
.spyderproject
|
|
133
|
+
.spyproject
|
|
134
|
+
|
|
135
|
+
# Rope project settings
|
|
136
|
+
.ropeproject
|
|
137
|
+
|
|
138
|
+
# mkdocs documentation
|
|
139
|
+
/site
|
|
140
|
+
|
|
141
|
+
# mypy
|
|
142
|
+
.mypy_cache/
|
|
143
|
+
.dmypy.json
|
|
144
|
+
dmypy.json
|
|
145
|
+
|
|
146
|
+
# Pyre type checker
|
|
147
|
+
.pyre/
|
|
148
|
+
|
|
149
|
+
# pytype static type analyzer
|
|
150
|
+
.pytype/
|
|
151
|
+
|
|
152
|
+
# Cython debug symbols
|
|
153
|
+
cython_debug/
|
|
154
|
+
|
|
155
|
+
# PyCharm
|
|
156
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
157
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
158
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
159
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
160
|
+
#.idea/
|
|
161
|
+
|
|
162
|
+
env
|
|
163
|
+
venv
|
|
164
|
+
|
|
165
|
+
# IDEs and editors
|
|
166
|
+
.idea/
|
|
167
|
+
.vscode/
|
|
168
|
+
*.sublime-project
|
|
169
|
+
*.sublime-workspace
|
|
170
|
+
|
|
171
|
+
# Jupyter notebooks
|
|
172
|
+
.ipynb_checkpoints/
|
|
173
|
+
|
|
174
|
+
# Jupyter lab workspace
|
|
175
|
+
.jupyter/
|
|
176
|
+
|
|
177
|
+
# Miscellaneous
|
|
178
|
+
.DS_Store
|
|
179
|
+
Thumbs.db
|
|
180
|
+
._*
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tts-data-utils
|
|
3
|
+
Version: 0.7.3
|
|
4
|
+
Summary: Utilities for working with 2D data.
|
|
5
|
+
Author: muszynsk
|
|
6
|
+
Author-email: muszynsk <matt.muszynski@jpl.nasa.gov>
|
|
7
|
+
License: Apache-2.0
|
|
8
|
+
Project-URL: Homepage, https://github.com/NASA-JPL-Teamtools-Studio/tts_data_utils
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Requires-Python: >=3.6
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
Requires-Dist: docxtpl
|
|
14
|
+
Requires-Dist: pandas
|
|
15
|
+
Requires-Dist: pytest
|
|
16
|
+
Requires-Dist: tabulate
|
|
17
|
+
Requires-Dist: jinja2
|
|
18
|
+
Requires-Dist: plotly
|
|
19
|
+
Requires-Dist: jpl_time
|
|
20
|
+
Requires-Dist: openpyxl
|
|
21
|
+
Requires-Dist: datetime
|
|
22
|
+
Requires-Dist: jpl-time
|
|
23
|
+
Requires-Dist: tabulate
|
|
24
|
+
Requires-Dist: pandas
|
|
25
|
+
Requires-Dist: tts-utilities<1.0.0,>=0.2.1
|
|
26
|
+
Requires-Dist: tts-html-utils<1.0.0,>=0.4.2
|
|
27
|
+
Dynamic: author
|
|
28
|
+
Dynamic: requires-python
|
|
29
|
+
|
|
30
|
+
# Teamtools Data Utilities
|
|
31
|
+
|
|
32
|
+

|
|
33
|
+
|
|
34
|
+
## About Teamtools Studio
|
|
35
|
+
|
|
36
|
+
Teamtools Studio Utilities is part of JPL's Teamtools Studio (TTS).
|
|
37
|
+
|
|
38
|
+
TTS is an effort originated in JPL's Planning and Execution section to centralize shared repositories across missions. This benefits JPL by reducing cost through reducing duplicated code, collaborating across missions, and unifying standards for development and design across JPL.
|
|
39
|
+
|
|
40
|
+
Although Planning and Execution is primarily concerned with flight operations, the TTS suite has been generalized and atomized to the point where many of these tools are applicable during other mission phases and even in non-spaceflight contexts. Through our work flying space missions, we hope to provide tools to the open source community that have utility in data analysis or planning for any complex system where failure is not an option.
|
|
41
|
+
|
|
42
|
+
For more infomation on how to contribute, and how these libraries form a complete ecosystem for high reliability data analysis, see the [Full TTS Documentation](https://nasa-jpl-teamtools-studio.github.io/teamtools_documentation/).
|
|
43
|
+
|
|
44
|
+
## What is Data Utilities?
|
|
45
|
+
|
|
46
|
+
### Overview
|
|
47
|
+
|
|
48
|
+
Data Utilties is one of the central building blocks of the Teamtools Studio. It is primarily a means of organizing
|
|
49
|
+
and tracking the changes in 2D data (think spreadsheets). It is used as the primary data structure in Tower and Dexter,
|
|
50
|
+
and is used liberally elsewhere throughout the TTS project.
|
|
51
|
+
|
|
52
|
+
It is a reality that much of Systems Engineering is executed via spreadsheets and tables. They are the media in which
|
|
53
|
+
the most SEs are the most comfortable, so data utils provides methods to read, write, manipulate, convert, and mange tabular
|
|
54
|
+
data. It goes beyond a library like Pandas by providing a core DataContainer class and examples of extensions of it to
|
|
55
|
+
provide the custom behavior needed for each bespoke data source.
|
|
56
|
+
|
|
57
|
+
For cases where data is too complex for a single 2D table, Data Utilities also handles the nesting of tables where each
|
|
58
|
+
row in a table can be associated with a subtable.
|
|
59
|
+
|
|
60
|
+
Data Utilities also provides significant quality of life functionality for diffing containers (including visual diff) and
|
|
61
|
+
visualizing them in custom ways in with HTML, Excel, and DOCX output styles.
|
|
62
|
+
|
|
63
|
+
Additionally, Data Utilities provides a lorem ipsum data generation feature that allows you to quickly create containers with semi-realistic dummy data for prototyping and testing purposes.
|
|
64
|
+
|
|
65
|
+
### Projects Currently Supported
|
|
66
|
+
|
|
67
|
+
* Europa Clipper
|
|
68
|
+
* Mars 2020/Perseverance
|
|
69
|
+
* Mars Sample Return/Sample Retrieval Lander
|
|
70
|
+
* Mars Science Laboratory/Curiosity
|
|
71
|
+
* Mars Reconnaisance Orbiter
|
|
72
|
+
* NISAR
|
|
73
|
+
* Orbiting Carbon Observatory 2 (OCO-2)
|
|
74
|
+
|
|
75
|
+
## Architecture
|
|
76
|
+
|
|
77
|
+
### TTS dependencies
|
|
78
|
+
|
|
79
|
+
* Teamtools Studio Utilities
|
|
80
|
+
* HTML Utilites
|
|
81
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Teamtools Data Utilities
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
## About Teamtools Studio
|
|
6
|
+
|
|
7
|
+
Teamtools Studio Utilities is part of JPL's Teamtools Studio (TTS).
|
|
8
|
+
|
|
9
|
+
TTS is an effort originated in JPL's Planning and Execution section to centralize shared repositories across missions. This benefits JPL by reducing cost through reducing duplicated code, collaborating across missions, and unifying standards for development and design across JPL.
|
|
10
|
+
|
|
11
|
+
Although Planning and Execution is primarily concerned with flight operations, the TTS suite has been generalized and atomized to the point where many of these tools are applicable during other mission phases and even in non-spaceflight contexts. Through our work flying space missions, we hope to provide tools to the open source community that have utility in data analysis or planning for any complex system where failure is not an option.
|
|
12
|
+
|
|
13
|
+
For more infomation on how to contribute, and how these libraries form a complete ecosystem for high reliability data analysis, see the [Full TTS Documentation](https://nasa-jpl-teamtools-studio.github.io/teamtools_documentation/).
|
|
14
|
+
|
|
15
|
+
## What is Data Utilities?
|
|
16
|
+
|
|
17
|
+
### Overview
|
|
18
|
+
|
|
19
|
+
Data Utilties is one of the central building blocks of the Teamtools Studio. It is primarily a means of organizing
|
|
20
|
+
and tracking the changes in 2D data (think spreadsheets). It is used as the primary data structure in Tower and Dexter,
|
|
21
|
+
and is used liberally elsewhere throughout the TTS project.
|
|
22
|
+
|
|
23
|
+
It is a reality that much of Systems Engineering is executed via spreadsheets and tables. They are the media in which
|
|
24
|
+
the most SEs are the most comfortable, so data utils provides methods to read, write, manipulate, convert, and mange tabular
|
|
25
|
+
data. It goes beyond a library like Pandas by providing a core DataContainer class and examples of extensions of it to
|
|
26
|
+
provide the custom behavior needed for each bespoke data source.
|
|
27
|
+
|
|
28
|
+
For cases where data is too complex for a single 2D table, Data Utilities also handles the nesting of tables where each
|
|
29
|
+
row in a table can be associated with a subtable.
|
|
30
|
+
|
|
31
|
+
Data Utilities also provides significant quality of life functionality for diffing containers (including visual diff) and
|
|
32
|
+
visualizing them in custom ways in with HTML, Excel, and DOCX output styles.
|
|
33
|
+
|
|
34
|
+
Additionally, Data Utilities provides a lorem ipsum data generation feature that allows you to quickly create containers with semi-realistic dummy data for prototyping and testing purposes.
|
|
35
|
+
|
|
36
|
+
### Projects Currently Supported
|
|
37
|
+
|
|
38
|
+
* Europa Clipper
|
|
39
|
+
* Mars 2020/Perseverance
|
|
40
|
+
* Mars Sample Return/Sample Retrieval Lander
|
|
41
|
+
* Mars Science Laboratory/Curiosity
|
|
42
|
+
* Mars Reconnaisance Orbiter
|
|
43
|
+
* NISAR
|
|
44
|
+
* Orbiting Carbon Observatory 2 (OCO-2)
|
|
45
|
+
|
|
46
|
+
## Architecture
|
|
47
|
+
|
|
48
|
+
### TTS dependencies
|
|
49
|
+
|
|
50
|
+
* Teamtools Studio Utilities
|
|
51
|
+
* HTML Utilites
|
|
52
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#When tts-build-sphinx-docs runs, it will collect all tags and branches and attempt to build
|
|
2
|
+
#docs for each in the gh-pages branch. This is a config file that allows developers to
|
|
3
|
+
#specifically exclude any branches or tags they need. Each line is the name of a tag or
|
|
4
|
+
#branch.
|
|
5
|
+
#
|
|
6
|
+
#This file makes no attemtpt to tell whether a line is a tag or a branch as TTS assumes that
|
|
7
|
+
#the naming conventions will always be different, and that tags should be tied to releases,
|
|
8
|
+
#so they should always have semvar names, whereas branches should be more descriptive using
|
|
9
|
+
#typical agile branch naming conventions.
|
|
10
|
+
#
|
|
11
|
+
#The most typical use case is to exclude tags that were created before you added the docs
|
|
12
|
+
#prerequisites, or to exclude the gh-pages branch itself since no code is expected to live
|
|
13
|
+
#there. All TTS repos are expected to have a gh-pages branch, but it is expected that it
|
|
14
|
+
#will always be managed by tts-build-sphinx-docs. You do not need to manually create
|
|
15
|
+
#a gh-pages branch because tts-build-sphinx-docs will create one if it does not exist.
|
|
16
|
+
#
|
|
17
|
+
#tts-build-sphinx-docs will also always remove all files from gh-pages and rebuild all docs
|
|
18
|
+
#from scratch
|
|
19
|
+
0.0.1
|
|
20
|
+
0.0.2
|
|
21
|
+
12.34.56v789
|
|
22
|
+
98.76.54rc321
|
|
23
|
+
gh-pages
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Resolves a bug where the text in the header
|
|
3
|
+
"[package name] [package version] documentation"
|
|
4
|
+
was getting stacked up on top of itself when the variable portions were too long. Something with floats
|
|
5
|
+
and elements not taking up the whole width of their contents.
|
|
6
|
+
|
|
7
|
+
Needed to add it because setuptools-scm version names can be very long, especially for versions that
|
|
8
|
+
are build off of a commit with no tag
|
|
9
|
+
*/
|
|
10
|
+
.navbar-header-items__start {
|
|
11
|
+
width: auto;
|
|
12
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# TTS-specifc add ons
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from setuptools_scm import get_version
|
|
5
|
+
import toml
|
|
6
|
+
|
|
7
|
+
# Configuration file for the Sphinx documentation builder.
|
|
8
|
+
#
|
|
9
|
+
# This file only contains a selection of the most common options. For a full
|
|
10
|
+
# list see the documentation:
|
|
11
|
+
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
|
12
|
+
|
|
13
|
+
# -- Path setup --------------------------------------------------------------
|
|
14
|
+
|
|
15
|
+
# If extensions (or modules to document with autodoc) are in another directory,
|
|
16
|
+
# add these directories to sys.path here. If the directory is relative to the
|
|
17
|
+
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
import os
|
|
21
|
+
import sys
|
|
22
|
+
import importlib.metadata
|
|
23
|
+
sys.path.insert(0, os.path.abspath('..'))
|
|
24
|
+
|
|
25
|
+
# -- Project information -----------------------------------------------------
|
|
26
|
+
|
|
27
|
+
pyproject = toml.load(Path(__file__).parent.parent.joinpath("pyproject.toml"))
|
|
28
|
+
project = pyproject["project"]["name"]
|
|
29
|
+
release = get_version(root='..', relative_to=__file__)
|
|
30
|
+
version = '.'.join(release.split('.')[:2])
|
|
31
|
+
|
|
32
|
+
copyright = f'{datetime.now().strftime('%Y')} JPL'
|
|
33
|
+
author = 'JPL Teamtools Studio'
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# -- General configuration ---------------------------------------------------
|
|
37
|
+
|
|
38
|
+
# Add any Sphinx extension module names here, as strings. They can be
|
|
39
|
+
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
|
40
|
+
# ones.
|
|
41
|
+
extensions = ['sphinx.ext.autodoc']
|
|
42
|
+
|
|
43
|
+
# Add any paths that contain templates here, relative to this directory.
|
|
44
|
+
templates_path = ['_templates']
|
|
45
|
+
|
|
46
|
+
# List of patterns, relative to source directory, that match files and
|
|
47
|
+
# directories to ignore when looking for source files.
|
|
48
|
+
# This pattern also affects html_static_path and html_extra_path.
|
|
49
|
+
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
|
50
|
+
|
|
51
|
+
# The master toctree document.
|
|
52
|
+
master_doc = 'index'
|
|
53
|
+
|
|
54
|
+
pygments_style = 'sphinx'
|
|
55
|
+
# html_theme = 'nature'
|
|
56
|
+
# html_theme = 'sphinx_material'
|
|
57
|
+
html_theme = 'pydata_sphinx_theme'
|
|
58
|
+
|
|
59
|
+
# -- Options for HTML output -------------------------------------------------
|
|
60
|
+
|
|
61
|
+
# The theme to use for HTML and HTML Help pages. See the documentation for
|
|
62
|
+
# a list of builtin themes.
|
|
63
|
+
#
|
|
64
|
+
|
|
65
|
+
# Add any paths that contain custom static files (such as style sheets) here,
|
|
66
|
+
# relative to this directory. They are copied after the builtin static files,
|
|
67
|
+
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
68
|
+
html_static_path = ['_static']
|
|
69
|
+
html_css_files = ['bugfix.css']
|
|
70
|
+
html_copy_source = False
|
|
71
|
+
html_show_sourcelink = False
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
Welcome to the Teamtools Starter Template documentation!
|
|
2
|
+
=============================================================
|
|
3
|
+
|
|
4
|
+
Core Modules
|
|
5
|
+
==================
|
|
6
|
+
|
|
7
|
+
.. toctree::
|
|
8
|
+
:maxdepth: 2
|
|
9
|
+
:caption: Contents:
|
|
10
|
+
|
|
11
|
+
core/data_container
|
|
12
|
+
core/data_item
|
|
13
|
+
core/generic
|
|
14
|
+
core/diff
|
|
15
|
+
core/container_history
|
|
16
|
+
|
|
17
|
+
Multimission Data Containers
|
|
18
|
+
===============================
|
|
19
|
+
|
|
20
|
+
.. toctree::
|
|
21
|
+
:maxdepth: 2
|
|
22
|
+
:caption: Contents:
|
|
23
|
+
|
|
24
|
+
multimission/eha
|
|
25
|
+
multimission/evr
|
|
26
|
+
multimission/evr_gaps
|
|
27
|
+
multimission/expected_lad
|
|
28
|
+
multimission/planning_rule
|
|
29
|
+
|
|
30
|
+
Invulnerable Data Manager
|
|
31
|
+
===============================
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
.. toctree::
|
|
35
|
+
:maxdepth: 2
|
|
36
|
+
:caption: Contents:
|
|
37
|
+
|
|
38
|
+
invulnerable_data_manager/invulnerable_data_manager
|
|
39
|
+
invulnerable_data_manager/idm_utilities
|
|
40
|
+
|
|
41
|
+
Indices and tables
|
|
42
|
+
==================
|
|
43
|
+
|
|
44
|
+
* :ref:`genindex`
|
|
45
|
+
* :ref:`modindex`
|
|
46
|
+
* :ref:`search`
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Lorem Ipsum Data Generation
|
|
2
|
+
|
|
3
|
+
Data Utilities now includes a powerful feature for generating realistic dummy data for any DataContainer type. This is useful for prototyping, testing, and documentation purposes.
|
|
4
|
+
|
|
5
|
+
## Basic Usage
|
|
6
|
+
|
|
7
|
+
To generate lorem ipsum data for any DataContainer, simply pass an integer to the `lorem` parameter when creating the container:
|
|
8
|
+
|
|
9
|
+
```python
|
|
10
|
+
from data_utils.multimission.evr import EvrContainer
|
|
11
|
+
|
|
12
|
+
# Create an EVR container with 10 dummy records
|
|
13
|
+
evr_container = EvrContainer(lorem=10)
|
|
14
|
+
|
|
15
|
+
# Print the container to see the generated data
|
|
16
|
+
print(evr_container)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## How It Works
|
|
20
|
+
|
|
21
|
+
The lorem ipsum generator analyzes the `DICT_VALID_KEYS` of the container's `DATA_ITEM_CLS` to understand the expected structure and data types. It then generates appropriate random values for each field, taking into account:
|
|
22
|
+
|
|
23
|
+
- Field names (e.g., fields containing "id", "name", "message", etc.)
|
|
24
|
+
- Data types (strings, integers, floats, datetimes, etc.)
|
|
25
|
+
- Allowed null values
|
|
26
|
+
|
|
27
|
+
## Smart Value Generation
|
|
28
|
+
|
|
29
|
+
The generator tries to create meaningful data based on field names:
|
|
30
|
+
|
|
31
|
+
- ID fields get numeric or formatted ID values
|
|
32
|
+
- Name fields get short lorem ipsum phrases
|
|
33
|
+
- Message fields get longer lorem ipsum text
|
|
34
|
+
- Status fields get values like "pending", "completed", etc.
|
|
35
|
+
- Time fields get random datetimes within the last year
|
|
36
|
+
- Boolean fields get random True/False values
|
|
37
|
+
|
|
38
|
+
## Example
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
from data_utils.multimission.evr import EvrContainer
|
|
42
|
+
from data_utils.multimission.eha import EhaContainer
|
|
43
|
+
from data_utils.core.generic import GenericContainer
|
|
44
|
+
|
|
45
|
+
# Create containers with different numbers of records
|
|
46
|
+
evr_container = EvrContainer(lorem=5)
|
|
47
|
+
eha_container = EhaContainer(lorem=3)
|
|
48
|
+
generic_container = GenericContainer(lorem=4, name="My Lorem Data")
|
|
49
|
+
|
|
50
|
+
# Use them like any other container
|
|
51
|
+
print(f"EVR Container has {len(evr_container)} records")
|
|
52
|
+
print(f"First EVR message: {evr_container[0].message}")
|
|
53
|
+
|
|
54
|
+
# You can also convert to other formats
|
|
55
|
+
html_table = evr_container.power_table()
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Use Cases
|
|
59
|
+
|
|
60
|
+
- **Prototyping**: Quickly create realistic data structures without writing boilerplate
|
|
61
|
+
- **Testing**: Generate test data with predictable structure but random values
|
|
62
|
+
- **Documentation**: Create examples with realistic data
|
|
63
|
+
- **UI Development**: Populate interfaces with dummy data during development
|
|
64
|
+
|
|
65
|
+
## Customization
|
|
66
|
+
|
|
67
|
+
The lorem ipsum generator is designed to work with any DataContainer subclass, including custom ones you create. As long as your class follows the DataContainer pattern with a properly defined DATA_ITEM_CLS and DICT_VALID_KEYS, the generator will produce appropriate data.
|
|
68
|
+
|
|
69
|
+
For more examples, see the demo script at `data_utils/demo/lorem_demo.py`.
|