osekit 0.2.5__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 (109) hide show
  1. osekit-0.2.5/.github/workflows/documentation.yml +42 -0
  2. osekit-0.2.5/.github/workflows/github_ci.yml +32 -0
  3. osekit-0.2.5/.gitignore +14 -0
  4. osekit-0.2.5/CHANGELOG.md +14 -0
  5. osekit-0.2.5/LICENSE +0 -0
  6. osekit-0.2.5/PKG-INFO +68 -0
  7. osekit-0.2.5/README.md +49 -0
  8. osekit-0.2.5/docs/Makefile +20 -0
  9. osekit-0.2.5/docs/logo/osekit.png +0 -0
  10. osekit-0.2.5/docs/logo/osekit_small.png +0 -0
  11. osekit-0.2.5/docs/logo/osmose.png +0 -0
  12. osekit-0.2.5/docs/logo/osmose_texte_sombre.png +0 -0
  13. osekit-0.2.5/docs/make.bat +35 -0
  14. osekit-0.2.5/docs/source/_static/audio_data/ex1.svg +124 -0
  15. osekit-0.2.5/docs/source/_static/audio_data/ex2.svg +310 -0
  16. osekit-0.2.5/docs/source/_static/data_structure/file_item_data_0.svg +144 -0
  17. osekit-0.2.5/docs/source/_static/data_structure/file_item_data_1.svg +164 -0
  18. osekit-0.2.5/docs/source/_static/data_structure/file_item_data_2.svg +244 -0
  19. osekit-0.2.5/docs/source/_static/favicon.ico +0 -0
  20. osekit-0.2.5/docs/source/_static/ltas/ltas.gif +0 -0
  21. osekit-0.2.5/docs/source/_static/spectrograms/frequency_scale.png +0 -0
  22. osekit-0.2.5/docs/source/analysis.rst +14 -0
  23. osekit-0.2.5/docs/source/api.rst +8 -0
  24. osekit-0.2.5/docs/source/audiodata.rst +7 -0
  25. osekit-0.2.5/docs/source/audiodataset.rst +7 -0
  26. osekit-0.2.5/docs/source/audiofile.rst +7 -0
  27. osekit-0.2.5/docs/source/audiofilemanager.rst +7 -0
  28. osekit-0.2.5/docs/source/audioitem.rst +7 -0
  29. osekit-0.2.5/docs/source/basedata.rst +7 -0
  30. osekit-0.2.5/docs/source/basedataset.rst +7 -0
  31. osekit-0.2.5/docs/source/basefile.rst +7 -0
  32. osekit-0.2.5/docs/source/baseitem.rst +7 -0
  33. osekit-0.2.5/docs/source/conf.py +40 -0
  34. osekit-0.2.5/docs/source/coreapi.rst +25 -0
  35. osekit-0.2.5/docs/source/coreapi_home.rst +14 -0
  36. osekit-0.2.5/docs/source/coreapi_introduction.rst +55 -0
  37. osekit-0.2.5/docs/source/coreapi_usage.rst +364 -0
  38. osekit-0.2.5/docs/source/dataset.rst +7 -0
  39. osekit-0.2.5/docs/source/event.rst +7 -0
  40. osekit-0.2.5/docs/source/frequencyscale.rst +10 -0
  41. osekit-0.2.5/docs/source/index.rst +36 -0
  42. osekit-0.2.5/docs/source/installation.rst +38 -0
  43. osekit-0.2.5/docs/source/instrument.rst +7 -0
  44. osekit-0.2.5/docs/source/ltasdata.rst +7 -0
  45. osekit-0.2.5/docs/source/publicapi.rst +10 -0
  46. osekit-0.2.5/docs/source/publicapi_usage.rst +368 -0
  47. osekit-0.2.5/docs/source/spectrodata.rst +7 -0
  48. osekit-0.2.5/docs/source/spectrodataset.rst +7 -0
  49. osekit-0.2.5/docs/source/spectrofile.rst +7 -0
  50. osekit-0.2.5/docs/source/spectroitem.rst +7 -0
  51. osekit-0.2.5/docs/source/usage.rst +26 -0
  52. osekit-0.2.5/pyproject.toml +62 -0
  53. osekit-0.2.5/src/osekit/__init__.py +40 -0
  54. osekit-0.2.5/src/osekit/config.py +23 -0
  55. osekit-0.2.5/src/osekit/config.toml +42 -0
  56. osekit-0.2.5/src/osekit/core_api/__init__.py +3 -0
  57. osekit-0.2.5/src/osekit/core_api/audio_data.py +389 -0
  58. osekit-0.2.5/src/osekit/core_api/audio_dataset.py +307 -0
  59. osekit-0.2.5/src/osekit/core_api/audio_file.py +128 -0
  60. osekit-0.2.5/src/osekit/core_api/audio_file_manager.py +107 -0
  61. osekit-0.2.5/src/osekit/core_api/audio_item.py +76 -0
  62. osekit-0.2.5/src/osekit/core_api/base_data.py +304 -0
  63. osekit-0.2.5/src/osekit/core_api/base_dataset.py +387 -0
  64. osekit-0.2.5/src/osekit/core_api/base_file.py +172 -0
  65. osekit-0.2.5/src/osekit/core_api/base_item.py +83 -0
  66. osekit-0.2.5/src/osekit/core_api/event.py +190 -0
  67. osekit-0.2.5/src/osekit/core_api/frequency_scale.py +215 -0
  68. osekit-0.2.5/src/osekit/core_api/instrument.py +141 -0
  69. osekit-0.2.5/src/osekit/core_api/json_serializer.py +38 -0
  70. osekit-0.2.5/src/osekit/core_api/ltas_data.py +217 -0
  71. osekit-0.2.5/src/osekit/core_api/spectro_data.py +743 -0
  72. osekit-0.2.5/src/osekit/core_api/spectro_dataset.py +502 -0
  73. osekit-0.2.5/src/osekit/core_api/spectro_file.py +165 -0
  74. osekit-0.2.5/src/osekit/core_api/spectro_item.py +91 -0
  75. osekit-0.2.5/src/osekit/job.py +643 -0
  76. osekit-0.2.5/src/osekit/logging_config.yaml +36 -0
  77. osekit-0.2.5/src/osekit/logging_context.py +56 -0
  78. osekit-0.2.5/src/osekit/public_api/__init__.py +0 -0
  79. osekit-0.2.5/src/osekit/public_api/analysis.py +151 -0
  80. osekit-0.2.5/src/osekit/public_api/dataset.py +540 -0
  81. osekit-0.2.5/src/osekit/public_api/export_analysis.py +244 -0
  82. osekit-0.2.5/src/osekit/utils/__init__.py +0 -0
  83. osekit-0.2.5/src/osekit/utils/audio_utils.py +114 -0
  84. osekit-0.2.5/src/osekit/utils/core_utils.py +310 -0
  85. osekit-0.2.5/src/osekit/utils/formatting_utils.py +87 -0
  86. osekit-0.2.5/src/osekit/utils/path_utils.py +44 -0
  87. osekit-0.2.5/src/osekit/utils/timestamp_utils.py +242 -0
  88. osekit-0.2.5/tests/__init__.py +0 -0
  89. osekit-0.2.5/tests/conftest.py +177 -0
  90. osekit-0.2.5/tests/sample_dataset/sample1_180701_204453.wav +0 -0
  91. osekit-0.2.5/tests/sample_dataset/sample1_190222_010000.wav +0 -0
  92. osekit-0.2.5/tests/sample_dataset/sample1_220998_185532.wav +0 -0
  93. osekit-0.2.5/tests/test_audio.py +1709 -0
  94. osekit-0.2.5/tests/test_audio_file_manager.py +250 -0
  95. osekit-0.2.5/tests/test_core_api_base.py +1077 -0
  96. osekit-0.2.5/tests/test_event.py +328 -0
  97. osekit-0.2.5/tests/test_files.py +188 -0
  98. osekit-0.2.5/tests/test_frequency_scales.py +723 -0
  99. osekit-0.2.5/tests/test_instrument.py +366 -0
  100. osekit-0.2.5/tests/test_job.py +45 -0
  101. osekit-0.2.5/tests/test_logging.py +136 -0
  102. osekit-0.2.5/tests/test_permissions.py +189 -0
  103. osekit-0.2.5/tests/test_public_api.py +1095 -0
  104. osekit-0.2.5/tests/test_serialization.py +886 -0
  105. osekit-0.2.5/tests/test_spectro.py +853 -0
  106. osekit-0.2.5/tests/test_timestamp_utils.py +633 -0
  107. osekit-0.2.5/tests/test_utils.py +361 -0
  108. osekit-0.2.5/tests/test_welch.py +140 -0
  109. osekit-0.2.5/uv.lock +1018 -0
@@ -0,0 +1,42 @@
1
+ name: documentation
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+ pages: write
11
+ id-token: write
12
+
13
+ jobs:
14
+ build-linux:
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Install uv
21
+ uses: astral-sh/setup-uv@v5
22
+ with:
23
+ version: "0.7.8"
24
+ enable-cache: true
25
+
26
+ - name: "Set up Python"
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version-file: "pyproject.toml"
30
+
31
+ - name: Install the project
32
+ run: uv sync --locked --all-extras --dev
33
+
34
+ - name: Sphinx build
35
+ run: uv run sphinx-build docs _site
36
+
37
+ - name: Upload Pages artifact
38
+ uses: actions/upload-pages-artifact@v3
39
+
40
+ - name: Deploy to GitHub Pages
41
+ id: deployment
42
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,32 @@
1
+ name: Test package
2
+
3
+ on: [ push, pull_request ]
4
+
5
+ jobs:
6
+ build-linux:
7
+ runs-on: ubuntu-latest
8
+
9
+ steps:
10
+ - uses: actions/checkout@v4
11
+
12
+ - name: Install uv
13
+ uses: astral-sh/setup-uv@v5
14
+ with:
15
+ version: "0.7.8"
16
+ enable-cache: true
17
+
18
+ - name: "Set up Python"
19
+ uses: actions/setup-python@v5
20
+ with:
21
+ python-version-file: "pyproject.toml"
22
+
23
+ - name: Install the project
24
+ run: uv sync --locked --all-extras --dev
25
+
26
+ - name: Run tests with coverage
27
+ run: |
28
+ uv run coverage run -m pytest
29
+ uv run coverage report
30
+
31
+ - name: Run Ruff
32
+ run: uv run ruff check --output-format=github --select E4,E7,E9,F
@@ -0,0 +1,14 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+ .python-version
12
+
13
+ # Pycharm stuff
14
+ .idea/
@@ -0,0 +1,14 @@
1
+ # Changelog
2
+
3
+ <!--next-version-placeholder-->
4
+
5
+ ## v0.1.0 (10/05/2023)
6
+
7
+ - First release of OSmOSE
8
+
9
+ ### Features
10
+
11
+ - Dataset standard build
12
+ - Spectrogram generation
13
+ - Audio file manipulation (reshaping, resampling...)
14
+ - Compatibility with Torque PBS clusters
osekit-0.2.5/LICENSE ADDED
File without changes
osekit-0.2.5/PKG-INFO ADDED
@@ -0,0 +1,68 @@
1
+ Metadata-Version: 2.4
2
+ Name: osekit
3
+ Version: 0.2.5
4
+ Summary: OSEkit
5
+ Author-email: OSmOSE team <osmose@ensta-bretagne.fr>
6
+ License-File: LICENSE
7
+ Requires-Python: >=3.12
8
+ Requires-Dist: matplotlib>=3.10.3
9
+ Requires-Dist: numpy>=2.2.6
10
+ Requires-Dist: pandas>=2.2.3
11
+ Requires-Dist: pytest>=8.3.5
12
+ Requires-Dist: pyyaml>=6.0.2
13
+ Requires-Dist: scipy>=1.15.3
14
+ Requires-Dist: soundfile>=0.13.1
15
+ Requires-Dist: soxr>=0.5.0.post1
16
+ Requires-Dist: tomlkit>=0.13.2
17
+ Requires-Dist: tqdm>=4.67.1
18
+ Description-Content-Type: text/markdown
19
+
20
+ <br>
21
+ <br>
22
+ <div align="center">
23
+
24
+ <a href="https://github.com/Project-OSmOSE/OSEkit">
25
+ <img src="docs/logo/osekit.png" alt="OSEkit logo" title="OSEkit" height="120" />
26
+ </a>
27
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
28
+ <a href="https://osmose.ifremer.fr/">
29
+ <img src="docs/logo/osmose_texte_sombre.png" alt="OSmOSE logo" title="OSmOSE" height="120" />
30
+ </a>
31
+
32
+ <br>
33
+ <br>
34
+
35
+ ![version](https://img.shields.io/badge/package_version-0.2.5-orange)
36
+ ![PyPI status](https://img.shields.io/pypi/status/ansicolortags.svg)
37
+ ![license](https://img.shields.io/github/license/mashape/apistatus.svg)
38
+ ![Open Source Love](https://img.shields.io/badge/open%20source-♡-lightgrey)
39
+ ![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)
40
+
41
+ **OSEkit** is an open source suite of tools written in python and dedicated to the management and analysis of data in underwater passive acoustics.
42
+
43
+ [Presentation](#presentation) •
44
+ [Getting into it](#getting-into-it) •
45
+ [Acknowledgements](#acknowledgements)
46
+ # ㅤ
47
+
48
+ </div>
49
+
50
+ ### Presentation
51
+
52
+ OSEkit is an open source suite of tools written in python and dedicated to the management and analysis of data in underwater passive acoustics. Among other key features, our toolkit has been adapted to be deployed on a cluster infrastructure; in OSmOSE, our production version runs on [DATARMOR](https://www.ifremer.fr/fr/infrastructures-de-recherche/le-supercalculateur-datarmor). Here are a few indications to help you going through our documentation.
53
+
54
+ <br>
55
+
56
+ ### Getting into it
57
+
58
+ All details to start using our toolkit and make the most out of it are given in our [documentation](https://project-osmose.github.io/OSEkit/); you will then be redirected to more specific parts of it depending on your profile and intentions:)
59
+
60
+ <br>
61
+
62
+ ### Acknowledgements
63
+
64
+ - A great part of our processing codes are based on well-established python packages for data analysis including scipy ,pandas, numpy...
65
+
66
+ # ㅤ
67
+ <sub>© OSmOSE team, 2023-present</sub>
68
+
osekit-0.2.5/README.md ADDED
@@ -0,0 +1,49 @@
1
+ <br>
2
+ <br>
3
+ <div align="center">
4
+
5
+ <a href="https://github.com/Project-OSmOSE/OSEkit">
6
+ <img src="docs/logo/osekit.png" alt="OSEkit logo" title="OSEkit" height="120" />
7
+ </a>
8
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
9
+ <a href="https://osmose.ifremer.fr/">
10
+ <img src="docs/logo/osmose_texte_sombre.png" alt="OSmOSE logo" title="OSmOSE" height="120" />
11
+ </a>
12
+
13
+ <br>
14
+ <br>
15
+
16
+ ![version](https://img.shields.io/badge/package_version-0.2.5-orange)
17
+ ![PyPI status](https://img.shields.io/pypi/status/ansicolortags.svg)
18
+ ![license](https://img.shields.io/github/license/mashape/apistatus.svg)
19
+ ![Open Source Love](https://img.shields.io/badge/open%20source-♡-lightgrey)
20
+ ![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)
21
+
22
+ **OSEkit** is an open source suite of tools written in python and dedicated to the management and analysis of data in underwater passive acoustics.
23
+
24
+ [Presentation](#presentation) •
25
+ [Getting into it](#getting-into-it) •
26
+ [Acknowledgements](#acknowledgements)
27
+ # ㅤ
28
+
29
+ </div>
30
+
31
+ ### Presentation
32
+
33
+ OSEkit is an open source suite of tools written in python and dedicated to the management and analysis of data in underwater passive acoustics. Among other key features, our toolkit has been adapted to be deployed on a cluster infrastructure; in OSmOSE, our production version runs on [DATARMOR](https://www.ifremer.fr/fr/infrastructures-de-recherche/le-supercalculateur-datarmor). Here are a few indications to help you going through our documentation.
34
+
35
+ <br>
36
+
37
+ ### Getting into it
38
+
39
+ All details to start using our toolkit and make the most out of it are given in our [documentation](https://project-osmose.github.io/OSEkit/); you will then be redirected to more specific parts of it depending on your profile and intentions:)
40
+
41
+ <br>
42
+
43
+ ### Acknowledgements
44
+
45
+ - A great part of our processing codes are based on well-established python packages for data analysis including scipy ,pandas, numpy...
46
+
47
+ # ㅤ
48
+ <sub>© OSmOSE team, 2023-present</sub>
49
+
@@ -0,0 +1,20 @@
1
+ # Minimal makefile for Sphinx documentation
2
+ #
3
+
4
+ # You can set these variables from the command line, and also
5
+ # from the environment for the first two.
6
+ SPHINXOPTS ?=
7
+ SPHINXBUILD ?= sphinx-build
8
+ SOURCEDIR = source
9
+ BUILDDIR = build
10
+
11
+ # Put it first so that "make" without argument is like "make help".
12
+ help:
13
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14
+
15
+ .PHONY: help Makefile
16
+
17
+ # Catch-all target: route all unknown targets to Sphinx using the new
18
+ # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19
+ %: Makefile
20
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
Binary file
Binary file
Binary file
@@ -0,0 +1,35 @@
1
+ @ECHO OFF
2
+
3
+ pushd %~dp0
4
+
5
+ REM Command file for Sphinx documentation
6
+
7
+ if "%SPHINXBUILD%" == "" (
8
+ set SPHINXBUILD=sphinx-build
9
+ )
10
+ set SOURCEDIR=source
11
+ set BUILDDIR=build
12
+
13
+ %SPHINXBUILD% >NUL 2>NUL
14
+ if errorlevel 9009 (
15
+ echo.
16
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
17
+ echo.installed, then set the SPHINXBUILD environment variable to point
18
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
19
+ echo.may add the Sphinx directory to PATH.
20
+ echo.
21
+ echo.If you don't have Sphinx installed, grab it from
22
+ echo.https://www.sphinx-doc.org/
23
+ exit /b 1
24
+ )
25
+
26
+ if "%1" == "" goto help
27
+
28
+ %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29
+ goto end
30
+
31
+ :help
32
+ %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33
+
34
+ :end
35
+ popd
@@ -0,0 +1,124 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ width="75.454269mm"
6
+ height="74.770668mm"
7
+ viewBox="0 0 75.454269 74.770668"
8
+ version="1.1"
9
+ id="svg1"
10
+ sodipodi:docname="ex1.svg"
11
+ inkscape:version="1.4 (86a8ad7, 2024-10-11)"
12
+ inkscape:export-batch-path="C:\Users\berthoga\Documents\Communications\OSEkit_rework\media\audio_data"
13
+ inkscape:export-batch-name="ex1"
14
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
15
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
16
+ xmlns="http://www.w3.org/2000/svg"
17
+ xmlns:svg="http://www.w3.org/2000/svg">
18
+ <sodipodi:namedview
19
+ id="namedview1"
20
+ pagecolor="#505050"
21
+ bordercolor="#eeeeee"
22
+ borderopacity="1"
23
+ inkscape:showpageshadow="0"
24
+ inkscape:pageopacity="0"
25
+ inkscape:pagecheckerboard="0"
26
+ inkscape:deskcolor="#505050"
27
+ inkscape:document-units="mm"
28
+ inkscape:zoom="1.4142136"
29
+ inkscape:cx="544.47222"
30
+ inkscape:cy="297.3384"
31
+ inkscape:window-width="1920"
32
+ inkscape:window-height="1009"
33
+ inkscape:window-x="-8"
34
+ inkscape:window-y="-8"
35
+ inkscape:window-maximized="1"
36
+ inkscape:current-layer="layer1"
37
+ showgrid="false">
38
+ <inkscape:page
39
+ x="0"
40
+ y="0"
41
+ width="75.454269"
42
+ height="74.770668"
43
+ id="page3"
44
+ margin="0"
45
+ bleed="0"
46
+ inkscape:label="3" />
47
+ </sodipodi:namedview>
48
+ <defs
49
+ id="defs1" />
50
+ <g
51
+ inkscape:label="Calque 1"
52
+ inkscape:groupmode="layer"
53
+ id="layer1"
54
+ transform="translate(-257.56423,-79.501804)">
55
+ <g
56
+ id="g17"
57
+ transform="translate(170.90854)">
58
+ <rect
59
+ style="fill:none;stroke:#e74c3c;stroke-width:0.705001;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
60
+ id="rect10"
61
+ width="74.749268"
62
+ height="17.585871"
63
+ x="87.008194"
64
+ y="131.6265"
65
+ rx="2.7602232"
66
+ ry="2.7602232" />
67
+ <rect
68
+ style="fill:none;stroke:#3498db;stroke-width:0.705;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
69
+ id="rect11"
70
+ width="21.742594"
71
+ height="17.585871"
72
+ x="87.008194"
73
+ y="108.0942"
74
+ rx="2.7602232"
75
+ ry="2.7602232" />
76
+ <rect
77
+ style="fill:none;stroke:#2ecc71;stroke-width:0.705;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
78
+ id="rect12"
79
+ width="21.742594"
80
+ height="17.585871"
81
+ x="87.008194"
82
+ y="84.561913"
83
+ rx="2.7602232"
84
+ ry="2.7602232" />
85
+ <path
86
+ style="fill:#87de87;stroke:#cccccc;stroke-width:0.3;stroke-linecap:round;stroke-dasharray:0.899999, 0.899999;stroke-dashoffset:0"
87
+ d="M 108.75079,79.651804 V 154.12247"
88
+ id="path12" />
89
+ <text
90
+ xml:space="preserve"
91
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.175px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';text-align:center;writing-mode:lr-tb;direction:ltr;white-space:pre-wrap;shape-inside:url(#rect10);display:inline;fill:#e74c3c;fill-opacity:1;stroke:#d35f5f;stroke-width:0.705001;stroke-linecap:round;stroke-dasharray:none"
92
+ x="53.788872"
93
+ y="225.38052"
94
+ id="text13"><tspan
95
+ x="120.47511"
96
+ y="134.40508"
97
+ id="tspan2"><tspan
98
+ style="stroke:none;stroke-width:0.705"
99
+ id="tspan1">FILE</tspan></tspan></text>
100
+ <text
101
+ xml:space="preserve"
102
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.175px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';text-align:center;writing-mode:lr-tb;direction:ltr;white-space:pre-wrap;shape-inside:url(#rect11);display:inline;fill:#3498db;fill-opacity:1;stroke:#d35f5f;stroke-width:0.705001;stroke-linecap:round;stroke-dasharray:none"
103
+ x="53.788872"
104
+ y="225.38052"
105
+ id="text15"><tspan
106
+ x="93.971207"
107
+ y="110.87187"
108
+ id="tspan4"><tspan
109
+ style="stroke:none"
110
+ id="tspan3">ITEM</tspan></tspan></text>
111
+ <text
112
+ xml:space="preserve"
113
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.175px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';text-align:center;writing-mode:lr-tb;direction:ltr;white-space:pre-wrap;shape-inside:url(#rect12);display:inline;fill:#2ecc71;fill-opacity:1;stroke:#d35f5f;stroke-width:0.705001;stroke-linecap:round;stroke-dasharray:none"
114
+ x="53.788872"
115
+ y="225.38052"
116
+ id="text17"><tspan
117
+ x="93.971207"
118
+ y="87.340625"
119
+ id="tspan6"><tspan
120
+ style="stroke:none"
121
+ id="tspan5">DATA</tspan></tspan></text>
122
+ </g>
123
+ </g>
124
+ </svg>