pyadps 0.1.0b0__tar.gz → 0.1.1__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 (59) hide show
  1. {pyadps-0.1.0b0 → pyadps-0.1.1}/PKG-INFO +56 -24
  2. {pyadps-0.1.0b0 → pyadps-0.1.1}/README.md +51 -20
  3. {pyadps-0.1.0b0 → pyadps-0.1.1}/pyproject.toml +11 -10
  4. pyadps-0.1.1/src/pyadps/Home_Page.py +48 -0
  5. {pyadps-0.1.0b0 → pyadps-0.1.1}/src/pyadps/pages/01_Read_File.py +191 -16
  6. pyadps-0.1.1/src/pyadps/pages/02_View_Raw_Data.py +164 -0
  7. {pyadps-0.1.0b0 → pyadps-0.1.1}/src/pyadps/pages/03_Download_Raw_File.py +161 -60
  8. pyadps-0.1.1/src/pyadps/pages/04_Sensor_Health.py +905 -0
  9. pyadps-0.1.1/src/pyadps/pages/05_QC_Test.py +476 -0
  10. pyadps-0.1.1/src/pyadps/pages/06_Profile_Test.py +971 -0
  11. pyadps-0.1.1/src/pyadps/pages/07_Velocity_Test.py +600 -0
  12. pyadps-0.1.1/src/pyadps/pages/08_Write_File.py +587 -0
  13. pyadps-0.1.1/src/pyadps/pages/09_Auto_process.py +64 -0
  14. pyadps-0.1.1/src/pyadps/pages/__pycache__/__init__.cpython-312.pyc +0 -0
  15. {pyadps-0.1.0b0 → pyadps-0.1.1}/src/pyadps/utils/__init__.py +3 -3
  16. pyadps-0.1.1/src/pyadps/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  17. pyadps-0.1.1/src/pyadps/utils/__pycache__/autoprocess.cpython-312.pyc +0 -0
  18. pyadps-0.1.1/src/pyadps/utils/__pycache__/cutbin.cpython-312.pyc +0 -0
  19. pyadps-0.1.1/src/pyadps/utils/__pycache__/plotgen.cpython-312.pyc +0 -0
  20. pyadps-0.1.1/src/pyadps/utils/__pycache__/profile_test.cpython-312.pyc +0 -0
  21. pyadps-0.1.1/src/pyadps/utils/__pycache__/pyreadrdi.cpython-312.pyc +0 -0
  22. pyadps-0.1.1/src/pyadps/utils/__pycache__/readrdi.cpython-312.pyc +0 -0
  23. pyadps-0.1.1/src/pyadps/utils/__pycache__/regrid.cpython-312.pyc +0 -0
  24. pyadps-0.1.1/src/pyadps/utils/__pycache__/script.cpython-312.pyc +0 -0
  25. pyadps-0.1.1/src/pyadps/utils/__pycache__/sensor_health.cpython-312.pyc +0 -0
  26. pyadps-0.1.1/src/pyadps/utils/__pycache__/signal_quality.cpython-312.pyc +0 -0
  27. pyadps-0.1.1/src/pyadps/utils/__pycache__/velocity_test.cpython-312.pyc +0 -0
  28. pyadps-0.1.1/src/pyadps/utils/__pycache__/writenc.cpython-312.pyc +0 -0
  29. pyadps-0.1.1/src/pyadps/utils/autoprocess.py +548 -0
  30. pyadps-0.1.1/src/pyadps/utils/metadata/config.ini +99 -0
  31. pyadps-0.1.1/src/pyadps/utils/metadata/demo.000 +0 -0
  32. pyadps-0.1.0b0/src/pyadps/utils/cutbin.py → pyadps-0.1.1/src/pyadps/utils/plotgen.py +332 -14
  33. pyadps-0.1.1/src/pyadps/utils/profile_test.py +556 -0
  34. {pyadps-0.1.0b0 → pyadps-0.1.1}/src/pyadps/utils/pyreadrdi.py +27 -17
  35. {pyadps-0.1.0b0 → pyadps-0.1.1}/src/pyadps/utils/readrdi.py +167 -20
  36. pyadps-0.1.1/src/pyadps/utils/script.py +205 -0
  37. pyadps-0.1.1/src/pyadps/utils/sensor_health.py +120 -0
  38. pyadps-0.1.1/src/pyadps/utils/signal_quality.py +455 -0
  39. pyadps-0.1.1/src/pyadps/utils/velocity_test.py +200 -0
  40. pyadps-0.1.1/src/pyadps/utils/writenc.py +458 -0
  41. pyadps-0.1.0b0/src/pyadps/Home_Page.py +0 -42
  42. pyadps-0.1.0b0/src/pyadps/pages/02_View_Raw_Data.py +0 -128
  43. pyadps-0.1.0b0/src/pyadps/pages/04_QC_Test.py +0 -283
  44. pyadps-0.1.0b0/src/pyadps/pages/05_Profile_Test.py +0 -389
  45. pyadps-0.1.0b0/src/pyadps/pages/06_Velocity_Test.py +0 -293
  46. pyadps-0.1.0b0/src/pyadps/pages/07_Write_File.py +0 -367
  47. pyadps-0.1.0b0/src/pyadps/utils/plotgen.py +0 -229
  48. pyadps-0.1.0b0/src/pyadps/utils/profile_test.py +0 -175
  49. pyadps-0.1.0b0/src/pyadps/utils/regrid.py +0 -122
  50. pyadps-0.1.0b0/src/pyadps/utils/script.py +0 -155
  51. pyadps-0.1.0b0/src/pyadps/utils/signal_quality.py +0 -135
  52. pyadps-0.1.0b0/src/pyadps/utils/velocity_test.py +0 -117
  53. pyadps-0.1.0b0/src/pyadps/utils/writenc.py +0 -262
  54. {pyadps-0.1.0b0 → pyadps-0.1.1}/LICENSE +0 -0
  55. {pyadps-0.1.0b0 → pyadps-0.1.1}/src/pyadps/__init__.py +0 -0
  56. {pyadps-0.1.0b0 → pyadps-0.1.1}/src/pyadps/__main__.py +0 -0
  57. {pyadps-0.1.0b0 → pyadps-0.1.1}/src/pyadps/pages/__init__.py +0 -0
  58. {pyadps-0.1.0b0 → pyadps-0.1.1}/src/pyadps/utils/metadata/flmeta.json +0 -0
  59. {pyadps-0.1.0b0 → pyadps-0.1.1}/src/pyadps/utils/metadata/vlmeta.json +0 -0
@@ -1,8 +1,8 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: pyadps
3
- Version: 0.1.0b0
3
+ Version: 0.1.1
4
4
  Summary: A Python package for ADCP data processing
5
- Home-page: https://example.com
5
+ Home-page: https://pyadps.readthedocs.io/en/latest/index.html
6
6
  License: MIT
7
7
  Keywords: adcp,data-processing,oceanography
8
8
  Author: P. Amol
@@ -12,6 +12,7 @@ Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Operating System :: OS Independent
13
13
  Classifier: Programming Language :: Python :: 3
14
14
  Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
15
16
  Provides-Extra: tests
16
17
  Requires-Dist: cmake (>=3.30.2)
17
18
  Requires-Dist: matplotlib (>=3.8.4)
@@ -21,18 +22,30 @@ Requires-Dist: numpy (>=1.26.4)
21
22
  Requires-Dist: pandas (>=2.2.2)
22
23
  Requires-Dist: plotly (>=5.22.0)
23
24
  Requires-Dist: plotly-resampler (>=0.10.0)
25
+ Requires-Dist: pygeomag (>=1.1.0,<2.0.0)
24
26
  Requires-Dist: scipy (>=1.14.0)
25
27
  Requires-Dist: streamlit (>=1.36.0)
26
- Requires-Dist: wmm2020 (>=1.1.1)
27
- Project-URL: Documentation, https://example.com/docs
28
+ Project-URL: Documentation, https://pyadps.readthedocs.io/en/latest/index.html
28
29
  Project-URL: Repository, https://github.com/p-amol/pyadps
29
30
  Description-Content-Type: text/markdown
30
31
 
31
32
  # pyadps
32
33
 
33
- `pyadps` is a Python package for processing moored Acoustic Doppler Current Profiler (ADCP) data. It provides various functionalities such as data reading, quality control tests, NetCDF file creation, and visualization.
34
+ `pyadps` is a Python package for processing moored Acoustic Doppler
35
+ Current Profiler (ADCP) data. It provides various functionalities
36
+ such as data reading, quality control tests, NetCDF file creation,
37
+ and visualization.
34
38
 
35
- This software offers both a graphical interface (`Streamlit`) for those new to Python and direct Python package access for experienced users. Please note that `pyadps` is primarily designed for Teledyne RDI workhorse ADCPs. Other company's ADCP files are not compatible, and while some other RDI models may work, they might require additional considerations.
39
+ This software offers both a graphical interface (`Streamlit`) for
40
+ those new to Python and direct Python package access for experienced
41
+ users. Please note that `pyadps` is primarily designed for Teledyne
42
+ RDI workhorse ADCPs. Other company's ADCP files are not compatible,
43
+ and while some other RDI models may work, they might require additional
44
+ considerations.
45
+
46
+ - Documentation: <https://pyadps.readthedocs.io>
47
+ - Source code: <https://github.com/p-amol/pyadps>
48
+ - Bug reports: <https://github.com/p-amol/pyadps/issues>
36
49
 
37
50
  ## Table of Contents
38
51
 
@@ -42,37 +55,49 @@ This software offers both a graphical interface (`Streamlit`) for those new to P
42
55
 
43
56
  ## Installation
44
57
 
45
- We recommend installing the package within a virtual environment. At present, the package is compatible exclusively with Python version 3.12.
46
- You can create a Python environment using tools like `venv` or `conda`. Below are instructions for both methods.
58
+ We recommend installing the package within a virtual environment.
59
+ At present, the package is compatible exclusively with Python version 3.12.
60
+ You can create a Python environment using tools like `venv` or `conda`.
61
+ Below are instructions for both methods.
47
62
 
48
63
  ### 1. Using `venv` (Built-in Python Tool)
49
64
 
50
65
  #### Step 1: Install Python version 3.12 (if not already installed)
66
+
51
67
  Ensure you have Python installed. You can download the latest version from [python.org](https://www.python.org/downloads/).
52
68
 
53
- #### Step 2: Create a Virtual Environment
69
+ #### Step 2: Create a Virtual Environment
70
+
54
71
  - Open your terminal or command prompt.
55
72
  - Navigate to your project folder:
73
+
56
74
  ```bash
57
75
  cd /path/to/your/project
58
76
  ```
59
- - Run the following command to create a virtual environment (replace adpsenv with your preferred environment name):
77
+
78
+ - Run the following command to create a virtual environment
79
+ (replace adpsenv with your preferred environment name):
60
80
 
61
81
  ```bash
62
82
  python -m venv adpsenv
63
83
  ```
64
84
 
65
85
  #### Step 3: Activate the Environment
86
+
66
87
  - On Windows:
88
+
67
89
  ```bash
68
90
  adpsenv\Scripts\activate
69
91
  ```
70
92
 
71
93
  - On macOS/Linux:
94
+
72
95
  ```bash
73
96
  source adpsenv/bin/activate
74
97
  ```
75
- You’ll see the environment name in your terminal prompt indicating the environment is active.
98
+
99
+ You’ll see the environment name in your terminal prompt
100
+ indicating the environment is active.
76
101
 
77
102
  #### Step 4: Install Dependencies
78
103
 
@@ -83,44 +108,51 @@ pip install pyadps
83
108
  ```
84
109
 
85
110
  #### Step 5: Deactivate the Environment
111
+
86
112
  When you’re done working in the environment, deactivate it by running:
87
113
 
88
114
  ```bash
89
115
  deactivate
90
116
  ```
91
117
 
92
-
93
-
94
-
95
- ### 2. Using `conda` (Anaconda/Miniconda):
118
+ ### 2. Using `conda` (Anaconda/Miniconda)
96
119
 
97
120
  #### Step 1: Install Conda
121
+
98
122
  First, you need to have Conda installed on your system. You can either install:
99
123
 
100
124
  - [Anaconda (Full Distribution)](https://www.anaconda.com/products/individual)
101
125
  - [Miniconda (Lightweight Version)](https://docs.conda.io/en/latest/miniconda.html)
102
126
 
103
127
  #### Step 2: Create a Conda Environment with Python 3.12
104
- Once Conda is installed, open a terminal or command prompt and run the following to create a new environment (replace `adpsenv` with your preferred environment name):
128
+
129
+ Once Conda is installed, open a terminal or command prompt and run
130
+ the following to create a new environment (replace `adpsenv` with
131
+ your preferred environment name):
105
132
 
106
133
  ```bash
107
134
  conda create --name adpsenv python=3.12
108
135
  ```
109
136
 
110
- #### Step 3: Activate the Environment
137
+ #### Step 3: Activate the Conda Environment
138
+
111
139
  ```bash
112
140
  conda activate adpsenv
113
141
  ```
114
142
 
115
- #### Step 4: Install Dependencies
116
- You can install packages with pip inside Conda environments.
143
+ #### Step 4: Install pyadps Dependencies
144
+
145
+ You can install packages with pip inside Conda environments.
146
+
117
147
  ```bash
118
148
  pip install pyadps
119
149
  ```
120
150
 
121
- #### Step 5: Deactivate the Environment
122
- When done, deactivate the environment by running:
123
- ```
151
+ #### Step 5: Deactivate the Conda Environment
152
+
153
+ When done working in the environment, deactivate the environment by running:
154
+
155
+ ```bash
124
156
  conda deactivate
125
157
  ```
126
158
 
@@ -129,11 +161,11 @@ conda deactivate
129
161
  ### Streamlit web interface
130
162
 
131
163
  Open a terminal or command prompt, activate the environment, and run the command.
164
+
132
165
  ```bash
133
166
  run-pyadps
134
167
  ```
135
168
 
136
-
137
169
  ## License
138
170
 
139
171
  This project is licensed under the MIT License. See the LICENSE file for details.
@@ -1,8 +1,20 @@
1
1
  # pyadps
2
2
 
3
- `pyadps` is a Python package for processing moored Acoustic Doppler Current Profiler (ADCP) data. It provides various functionalities such as data reading, quality control tests, NetCDF file creation, and visualization.
4
-
5
- This software offers both a graphical interface (`Streamlit`) for those new to Python and direct Python package access for experienced users. Please note that `pyadps` is primarily designed for Teledyne RDI workhorse ADCPs. Other company's ADCP files are not compatible, and while some other RDI models may work, they might require additional considerations.
3
+ `pyadps` is a Python package for processing moored Acoustic Doppler
4
+ Current Profiler (ADCP) data. It provides various functionalities
5
+ such as data reading, quality control tests, NetCDF file creation,
6
+ and visualization.
7
+
8
+ This software offers both a graphical interface (`Streamlit`) for
9
+ those new to Python and direct Python package access for experienced
10
+ users. Please note that `pyadps` is primarily designed for Teledyne
11
+ RDI workhorse ADCPs. Other company's ADCP files are not compatible,
12
+ and while some other RDI models may work, they might require additional
13
+ considerations.
14
+
15
+ - Documentation: <https://pyadps.readthedocs.io>
16
+ - Source code: <https://github.com/p-amol/pyadps>
17
+ - Bug reports: <https://github.com/p-amol/pyadps/issues>
6
18
 
7
19
  ## Table of Contents
8
20
 
@@ -12,37 +24,49 @@ This software offers both a graphical interface (`Streamlit`) for those new to P
12
24
 
13
25
  ## Installation
14
26
 
15
- We recommend installing the package within a virtual environment. At present, the package is compatible exclusively with Python version 3.12.
16
- You can create a Python environment using tools like `venv` or `conda`. Below are instructions for both methods.
27
+ We recommend installing the package within a virtual environment.
28
+ At present, the package is compatible exclusively with Python version 3.12.
29
+ You can create a Python environment using tools like `venv` or `conda`.
30
+ Below are instructions for both methods.
17
31
 
18
32
  ### 1. Using `venv` (Built-in Python Tool)
19
33
 
20
34
  #### Step 1: Install Python version 3.12 (if not already installed)
35
+
21
36
  Ensure you have Python installed. You can download the latest version from [python.org](https://www.python.org/downloads/).
22
37
 
23
- #### Step 2: Create a Virtual Environment
38
+ #### Step 2: Create a Virtual Environment
39
+
24
40
  - Open your terminal or command prompt.
25
41
  - Navigate to your project folder:
42
+
26
43
  ```bash
27
44
  cd /path/to/your/project
28
45
  ```
29
- - Run the following command to create a virtual environment (replace adpsenv with your preferred environment name):
46
+
47
+ - Run the following command to create a virtual environment
48
+ (replace adpsenv with your preferred environment name):
30
49
 
31
50
  ```bash
32
51
  python -m venv adpsenv
33
52
  ```
34
53
 
35
54
  #### Step 3: Activate the Environment
55
+
36
56
  - On Windows:
57
+
37
58
  ```bash
38
59
  adpsenv\Scripts\activate
39
60
  ```
40
61
 
41
62
  - On macOS/Linux:
63
+
42
64
  ```bash
43
65
  source adpsenv/bin/activate
44
66
  ```
45
- You’ll see the environment name in your terminal prompt indicating the environment is active.
67
+
68
+ You’ll see the environment name in your terminal prompt
69
+ indicating the environment is active.
46
70
 
47
71
  #### Step 4: Install Dependencies
48
72
 
@@ -53,44 +77,51 @@ pip install pyadps
53
77
  ```
54
78
 
55
79
  #### Step 5: Deactivate the Environment
80
+
56
81
  When you’re done working in the environment, deactivate it by running:
57
82
 
58
83
  ```bash
59
84
  deactivate
60
85
  ```
61
86
 
62
-
63
-
64
-
65
- ### 2. Using `conda` (Anaconda/Miniconda):
87
+ ### 2. Using `conda` (Anaconda/Miniconda)
66
88
 
67
89
  #### Step 1: Install Conda
90
+
68
91
  First, you need to have Conda installed on your system. You can either install:
69
92
 
70
93
  - [Anaconda (Full Distribution)](https://www.anaconda.com/products/individual)
71
94
  - [Miniconda (Lightweight Version)](https://docs.conda.io/en/latest/miniconda.html)
72
95
 
73
96
  #### Step 2: Create a Conda Environment with Python 3.12
74
- Once Conda is installed, open a terminal or command prompt and run the following to create a new environment (replace `adpsenv` with your preferred environment name):
97
+
98
+ Once Conda is installed, open a terminal or command prompt and run
99
+ the following to create a new environment (replace `adpsenv` with
100
+ your preferred environment name):
75
101
 
76
102
  ```bash
77
103
  conda create --name adpsenv python=3.12
78
104
  ```
79
105
 
80
- #### Step 3: Activate the Environment
106
+ #### Step 3: Activate the Conda Environment
107
+
81
108
  ```bash
82
109
  conda activate adpsenv
83
110
  ```
84
111
 
85
- #### Step 4: Install Dependencies
86
- You can install packages with pip inside Conda environments.
112
+ #### Step 4: Install pyadps Dependencies
113
+
114
+ You can install packages with pip inside Conda environments.
115
+
87
116
  ```bash
88
117
  pip install pyadps
89
118
  ```
90
119
 
91
- #### Step 5: Deactivate the Environment
92
- When done, deactivate the environment by running:
93
- ```
120
+ #### Step 5: Deactivate the Conda Environment
121
+
122
+ When done working in the environment, deactivate the environment by running:
123
+
124
+ ```bash
94
125
  conda deactivate
95
126
  ```
96
127
 
@@ -99,11 +130,11 @@ conda deactivate
99
130
  ### Streamlit web interface
100
131
 
101
132
  Open a terminal or command prompt, activate the environment, and run the command.
133
+
102
134
  ```bash
103
135
  run-pyadps
104
136
  ```
105
137
 
106
-
107
138
  ## License
108
139
 
109
140
  This project is licensed under the MIT License. See the LICENSE file for details.
@@ -1,19 +1,19 @@
1
1
  [tool.poetry]
2
2
  name = "pyadps"
3
- version = "0.1.0-beta"
3
+ version = "0.1.1"
4
4
  description = "A Python package for ADCP data processing"
5
5
  authors = ["P. Amol <prakashamol@gmail.com>"]
6
6
  readme = "README.md"
7
7
  license = "MIT"
8
- homepage = "https://example.com" # You can add your homepage URL or GitHub URL here
9
- repository = "https://github.com/p-amol/pyadps" # Replace with your repository link
10
- documentation = "https://example.com/docs" # Optional documentation link
8
+ homepage = "https://pyadps.readthedocs.io/en/latest/index.html" # You can add your homepage URL or GitHub URL here
9
+ repository = "https://github.com/p-amol/pyadps" # Replace with your repository link
10
+ documentation = "https://pyadps.readthedocs.io/en/latest/index.html" # Optional documentation link
11
11
  keywords = ["adcp", "data-processing", "oceanography"]
12
12
  include = ["utils/metadata/*.json"]
13
13
  classifiers = [
14
- "Programming Language :: Python :: 3",
15
- "License :: OSI Approved :: MIT License",
16
- "Operating System :: OS Independent"
14
+ "Programming Language :: Python :: 3",
15
+ "License :: OSI Approved :: MIT License",
16
+ "Operating System :: OS Independent",
17
17
  ]
18
18
 
19
19
 
@@ -23,22 +23,23 @@ streamlit = ">=1.36.0"
23
23
  numpy = ">=1.26.4"
24
24
  matplotlib = ">=3.8.4"
25
25
  scipy = ">=1.14.0"
26
- wmm2020 = ">=1.1.1"
27
26
  cmake = ">=3.30.2"
28
27
  pandas = ">=2.2.2"
29
28
  netCDF4 = ">=1.7.1"
30
29
  plotly = ">=5.22.0"
31
30
  plotly-resampler = ">=0.10.0"
32
31
  meson = ">=1.4.1"
32
+ pygeomag = "^1.1.0"
33
+
33
34
 
34
35
  [tool.poetry.extras]
35
36
  tests = ["pytest"]
36
37
 
37
38
  [tool.poetry.scripts]
38
39
  run-pyadps = "pyadps.__main__:main"
40
+ run-auto = "pyadps.utils.autoprocess:main"
41
+ run-script = "pyadps.utils.script:main"
39
42
 
40
43
  [build-system]
41
44
  requires = ["poetry-core>=1.0.0"]
42
45
  build-backend = "poetry.core.masonry.api"
43
-
44
-
@@ -0,0 +1,48 @@
1
+ import streamlit as st
2
+
3
+
4
+ def main():
5
+ st.set_page_config(
6
+ page_title="ADCP Data Processing Software",
7
+ page_icon=":world_map:️",
8
+ layout="wide",
9
+ initial_sidebar_state="auto",
10
+ menu_items={
11
+ "Get Help": "https://github.com/p-amol/pyadps",
12
+ "Report a bug": "https://github.com/p-amol/pyadps/issues",
13
+ "About": "# Python ADCP Data Processing Software (PyADPS)",
14
+ },
15
+ )
16
+
17
+ """
18
+ # **Python ADCP Data Processing Software (pyadps)**
19
+
20
+ `pyadps` is a Python package for processing moored Acoustic Doppler Current Profiler (ADCP) data. It provides various functionalities such as data reading, quality control tests, NetCDF file creation, and visualization.
21
+
22
+ This software offers both a graphical interface (Streamlit) for those new to Python and direct Python package access for experienced users. Please note that pyadps is primarily designed for Teledyne RDI workhorse ADCPs. Other company's ADCP files are not compatible, and while some other RDI models may work, they might require additional considerations.
23
+
24
+ * Documentation: https://pyadps.readthedocs.io
25
+ * Source code: https://github.com/p-amol/pyadps
26
+ * Bug reports: https://github.com/p-amol/pyadps/issues
27
+ ## Features
28
+
29
+ * Access RDI ADCP binary files using Python 3
30
+ * Convert RDI binary files to netcdf
31
+ * Process ADCP data
32
+
33
+ ## Contribute
34
+ Issue Tracker: https://github.com/p-amol/pyadps/issues
35
+ Source Code: https://github.com/p-amol/pyadps
36
+
37
+ ## Support
38
+ If you are having issues, please let us know.
39
+ We have a mailing list located at: adps-python@google-groups.com
40
+
41
+ ## License
42
+ The project is licensed under the MIT license.
43
+
44
+ """
45
+
46
+
47
+ if __name__ == "__main__":
48
+ main()