echoshader 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 (62) hide show
  1. echoshader-0.2.0/.github/ISSUE_TEMPLATE/gsoc2026.yml +25 -0
  2. echoshader-0.2.0/.github/dependabot.yml +7 -0
  3. echoshader-0.2.0/.github/workflows/pypi.yaml +109 -0
  4. echoshader-0.2.0/.github/workflows/pytest.yaml +36 -0
  5. echoshader-0.2.0/.github/workflows/update-spec0.yml +23 -0
  6. echoshader-0.2.0/.gitignore +36 -0
  7. echoshader-0.2.0/.markdownlint.yaml +239 -0
  8. echoshader-0.2.0/.markdownlintignore +1 -0
  9. echoshader-0.2.0/.pre-commit-config.yaml +33 -0
  10. echoshader-0.2.0/.readthedocs.yaml +39 -0
  11. echoshader-0.2.0/LICENSE +21 -0
  12. echoshader-0.2.0/MANIFEST.in +2 -0
  13. echoshader-0.2.0/PKG-INFO +177 -0
  14. echoshader-0.2.0/README.md +103 -0
  15. echoshader-0.2.0/docs/Makefile +20 -0
  16. echoshader-0.2.0/docs/make.bat +35 -0
  17. echoshader-0.2.0/docs/source/_config.yml +28 -0
  18. echoshader-0.2.0/docs/source/_toc.yml +8 -0
  19. echoshader-0.2.0/docs/source/app.md +98 -0
  20. echoshader-0.2.0/docs/source/conf.py +35 -0
  21. echoshader-0.2.0/docs/source/elements.md +106 -0
  22. echoshader-0.2.0/docs/source/index.md +21 -0
  23. echoshader-0.2.0/echoshader/__init__.py +6 -0
  24. echoshader-0.2.0/echoshader/_echoshader_version.py +24 -0
  25. echoshader-0.2.0/echoshader/app/__init__.py +6 -0
  26. echoshader-0.2.0/echoshader/app/builder.py +93 -0
  27. echoshader-0.2.0/echoshader/app/config.py +17 -0
  28. echoshader-0.2.0/echoshader/app/holoviz.py +685 -0
  29. echoshader-0.2.0/echoshader/app/launcher.py +61 -0
  30. echoshader-0.2.0/echoshader/app/registry.py +18 -0
  31. echoshader-0.2.0/echoshader/core.py +95 -0
  32. echoshader-0.2.0/echoshader/elements/curtain.py +229 -0
  33. echoshader-0.2.0/echoshader/elements/curve.py +13 -0
  34. echoshader-0.2.0/echoshader/elements/echogram.py +298 -0
  35. echoshader-0.2.0/echoshader/elements/hist.py +43 -0
  36. echoshader-0.2.0/echoshader/elements/nasc.py +36 -0
  37. echoshader-0.2.0/echoshader/elements/table.py +65 -0
  38. echoshader-0.2.0/echoshader/elements/track.py +203 -0
  39. echoshader-0.2.0/echoshader/test_data/concatenated_MVBS.nc +0 -0
  40. echoshader-0.2.0/echoshader/tests/app/test_app.py +117 -0
  41. echoshader-0.2.0/echoshader/tests/elements/test_curtain.py +76 -0
  42. echoshader-0.2.0/echoshader/tests/elements/test_curve.py +17 -0
  43. echoshader-0.2.0/echoshader/tests/elements/test_echogram.py +108 -0
  44. echoshader-0.2.0/echoshader/tests/elements/test_hist.py +59 -0
  45. echoshader-0.2.0/echoshader/tests/elements/test_nasc.py +43 -0
  46. echoshader-0.2.0/echoshader/tests/elements/test_table.py +28 -0
  47. echoshader-0.2.0/echoshader/tests/elements/test_track.py +54 -0
  48. echoshader-0.2.0/echoshader/utils.py +2 -0
  49. echoshader-0.2.0/echoshader/validation.py +170 -0
  50. echoshader-0.2.0/echoshader.egg-info/PKG-INFO +177 -0
  51. echoshader-0.2.0/echoshader.egg-info/SOURCES.txt +60 -0
  52. echoshader-0.2.0/echoshader.egg-info/dependency_links.txt +1 -0
  53. echoshader-0.2.0/echoshader.egg-info/requires.txt +55 -0
  54. echoshader-0.2.0/echoshader.egg-info/scm_file_list.json +56 -0
  55. echoshader-0.2.0/echoshader.egg-info/scm_version.json +8 -0
  56. echoshader-0.2.0/echoshader.egg-info/top_level.txt +1 -0
  57. echoshader-0.2.0/examples/app/app_config.yaml +17 -0
  58. echoshader-0.2.0/examples/notebooks/echogram_vertical_coordinates.ipynb +2500 -0
  59. echoshader-0.2.0/examples/notebooks/element_examples.ipynb +2835 -0
  60. echoshader-0.2.0/pyproject.toml +121 -0
  61. echoshader-0.2.0/pytest.ini +2 -0
  62. echoshader-0.2.0/setup.cfg +4 -0
@@ -0,0 +1,25 @@
1
+ name: GSoC 2026 discussion
2
+ description: Use this if you want to discuss anything related to GSoC 2026
3
+ title: "[GSoC 2026] ..."
4
+ labels: ["GSoC 2026"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: Welcome to GSoC 2026!
9
+ - type: textarea
10
+ attributes:
11
+ label: Discussion topic
12
+ description: |
13
+ What question do you have? What idea do you want to propose?
14
+ Please raise only one topic in each issue.
15
+ placeholder: I am wondering about ...
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ attributes:
20
+ label: Related existing issues or PRs
21
+ description: |
22
+ Take a look at the current [issues](https://github.com/OSOceanAcoustics/echoshader/issues) and [PRs](https://github.com/OSOceanAcoustics/echoshader/pulls) and link anything related here.
23
+ placeholder: "This topic is related to #XXX; or: I have not seen related issues/PRs"
24
+ validations:
25
+ required: true
@@ -0,0 +1,7 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: 'github-actions'
4
+ directory: '/'
5
+ schedule:
6
+ # Check for updates once a week
7
+ interval: 'weekly'
@@ -0,0 +1,109 @@
1
+ # Publish archives to PyPI and TestPyPI using GitHub Actions
2
+ name: Publish to PyPI
3
+
4
+ # Only run for tagged releases
5
+ on:
6
+ release:
7
+ types:
8
+ - released
9
+ push:
10
+ branches:
11
+ - main
12
+ workflow_dispatch:
13
+
14
+ jobs:
15
+ build-artifact:
16
+ name: Build echoshader package
17
+ runs-on: ubuntu-22.04
18
+ if: github.repository == 'echostack-org/echoshader' && !startsWith(github.ref, 'refs/tags/example-data-')
19
+ steps:
20
+ - name: Checkout
21
+ uses: actions/checkout@v7
22
+ with:
23
+ # fetch all history so that setuptools-scm works
24
+ fetch-depth: 0
25
+
26
+ - name: Set up Python
27
+ uses: actions/setup-python@v7
28
+ with:
29
+ python-version: 3.13
30
+
31
+ - name: Install dependencies
32
+ run: python -m pip install --upgrade pip build
33
+
34
+ # This step is only necessary for testing purposes and for TestPyPI
35
+ - name: Fix up version string for TestPyPI
36
+ if: ${{ !startsWith(github.ref, 'refs/tags') }}
37
+ run: |
38
+ # Change setuptools-scm local_scheme to "no-local-version" so the
39
+ # local part of the version isn't included, making the version string
40
+ # compatible with PyPI.
41
+ sed --in-place "s/node-and-date/no-local-version/g" pyproject.toml
42
+
43
+ - name: Build source and wheel distributions
44
+ run: |
45
+ python -m build
46
+ echo ""
47
+ echo "Generated files:"
48
+ ls -lh dist/
49
+ - uses: actions/upload-artifact@v7
50
+ with:
51
+ name: releases
52
+ path: dist
53
+
54
+ test-built-dist:
55
+ name: Test echoshader package
56
+ needs: build-artifact
57
+ runs-on: ubuntu-22.04
58
+ steps:
59
+ - uses: actions/setup-python@v7
60
+ name: Install Python
61
+ with:
62
+ python-version: 3.13
63
+ - uses: actions/download-artifact@v8
64
+ with:
65
+ name: releases
66
+ path: dist
67
+ - name: List contents of built dist
68
+ run: |
69
+ ls -ltrh
70
+ ls -ltrh dist
71
+ - name: Publish to Test PyPI
72
+ uses: pypa/gh-action-pypi-publish@v1.14.3
73
+ with:
74
+ password: ${{ secrets.TEST_PYPI_API_TOKEN }}
75
+ repository-url: https://test.pypi.org/legacy/
76
+ verbose: true
77
+ skip-existing: true
78
+ - name: Check pypi packages
79
+ run: |
80
+ sleep 3
81
+ python -m pip install --upgrade pip
82
+
83
+ echo "=== Testing wheel file ==="
84
+ # Install wheel to get dependencies and check import
85
+ python -m pip install --extra-index-url https://test.pypi.org/simple --upgrade --pre echoshader
86
+ python -c "import echoshader; print(echoshader.__version__)"
87
+ echo "=== Done testing wheel file ==="
88
+
89
+ echo "=== Testing source tar file ==="
90
+ # Install tar gz and check import
91
+ python -m pip uninstall --yes echoshader
92
+ python -m pip install --extra-index-url https://test.pypi.org/simple --upgrade --pre --no-binary=:all: echoshader
93
+ python -c "import echoshader; print(echoshader.__version__)"
94
+ echo "=== Done testing source tar file ==="
95
+
96
+ publish-pypi:
97
+ name: Push echoshader to production pypi
98
+ needs: test-built-dist
99
+ if: startsWith(github.ref, 'refs/tags')
100
+ runs-on: ubuntu-22.04
101
+ steps:
102
+ - uses: actions/download-artifact@v8
103
+ with:
104
+ name: releases
105
+ path: dist
106
+ - name: Publish to PyPI
107
+ uses: pypa/gh-action-pypi-publish@v1.14.3
108
+ with:
109
+ password: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,36 @@
1
+ # .github/workflows/pytest.yml
2
+ name: PyTest
3
+
4
+ on: [push, pull_request, workflow_dispatch]
5
+
6
+ jobs:
7
+ test:
8
+ runs-on: ubuntu-latest
9
+ strategy:
10
+ fail-fast: false
11
+ matrix:
12
+ python-version: ["3.13", "3.14"]
13
+
14
+ steps:
15
+ - name: Check out repository code
16
+ uses: actions/checkout@v7
17
+
18
+ - name: Setup Python
19
+ uses: actions/setup-python@v7
20
+ with:
21
+ python-version: ${{ matrix.python-version }}
22
+
23
+ - name: Install dependencies
24
+ run: |
25
+ python -m pip install --upgrade pip
26
+ python -m pip install -e ".[dev,test]"
27
+ python -m pip check
28
+ python -c "import echopype; print('Echopype:', echopype.__version__)"
29
+
30
+ - name: Run Coverage Pytest
31
+ run: pytest --cov=./ --cov-report=xml
32
+
33
+ - name: Upload coverage reports to Codecov
34
+ uses: codecov/codecov-action@v7
35
+ env:
36
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
@@ -0,0 +1,23 @@
1
+ name: Update dependency versions to meet SPEC 0
2
+
3
+ on:
4
+ schedule:
5
+ # Day 3 of each quarter, after the quarterly SPEC 0 update
6
+ - cron: "0 0 3 1,4,7,10 *"
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: write
11
+ pull-requests: write
12
+
13
+ concurrency:
14
+ group: ${{ github.workflow }}
15
+ cancel-in-progress: true
16
+
17
+ jobs:
18
+ update:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: scientific-python/spec0-action@7c875bc60508e9aab2bdb851e99bfcc53b283e94 # v1.6
22
+ with:
23
+ update_all: 2
@@ -0,0 +1,36 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .eggs/
6
+
7
+ # Build outputs and generated version
8
+ build/
9
+ dist/
10
+ _build/
11
+ echoshader/_echoshader_version.py
12
+
13
+ # Tests and tooling
14
+ .pytest_cache/
15
+ .mypy_cache/
16
+ .ruff_cache/
17
+ .coverage*
18
+ coverage.xml
19
+ htmlcov/
20
+
21
+ # Local environments and editor settings
22
+ .env
23
+ .venv/
24
+ venv/
25
+ .idea/
26
+ .vscode/
27
+ .DS_Store
28
+
29
+ # Notebook checkpoints and downloaded example data
30
+ .ipynb_checkpoints/
31
+ examples/notebooks/*.zarr/
32
+ examples/notebooks/*.zip
33
+ examples/notebooks/concatenated_MVBS.nc
34
+
35
+ docs/source/element_examples.ipynb
36
+ docs/source/echogram_vertical_coordinates.ipynb
@@ -0,0 +1,239 @@
1
+ # Example markdownlint YAML configuration with all properties set to their default value
2
+
3
+ # Default state for all rules
4
+ default: true
5
+
6
+ # Path to configuration file to extend
7
+ extends: null
8
+
9
+ # MD001/heading-increment/header-increment - Heading levels should only increment by one level at a time
10
+ MD001: true
11
+
12
+ # MD002/first-heading-h1/first-header-h1 - First heading should be a top-level heading
13
+ MD002:
14
+ # Heading level
15
+ level: 1
16
+
17
+ # MD003/heading-style/header-style - Heading style
18
+ MD003:
19
+ # Heading style
20
+ style: "consistent"
21
+
22
+ # MD004/ul-style - Unordered list style
23
+ MD004:
24
+ # List style
25
+ style: "consistent"
26
+
27
+ # MD005/list-indent - Inconsistent indentation for list items at the same level
28
+ MD005: true
29
+
30
+ # MD006/ul-start-left - Consider starting bulleted lists at the beginning of the line
31
+ MD006: true
32
+
33
+ # MD007/ul-indent - Unordered list indentation
34
+ MD007:
35
+ # Spaces for indent
36
+ indent: 2
37
+ # Whether to indent the first level of the list
38
+ start_indented: false
39
+ # Spaces for first level indent (when start_indented is set)
40
+ start_indent: 2
41
+
42
+ # MD009/no-trailing-spaces - Trailing spaces
43
+ MD009:
44
+ # Spaces for line break
45
+ br_spaces: 2
46
+ # Allow spaces for empty lines in list items
47
+ list_item_empty_lines: false
48
+ # Include unnecessary breaks
49
+ strict: false
50
+
51
+ # MD010/no-hard-tabs - Hard tabs
52
+ MD010:
53
+ # Include code blocks
54
+ code_blocks: true
55
+ # Number of spaces for each hard tab
56
+ spaces_per_tab: 1
57
+
58
+ # MD011/no-reversed-links - Reversed link syntax
59
+ MD011: true
60
+
61
+ # MD012/no-multiple-blanks - Multiple consecutive blank lines
62
+ MD012:
63
+ # Consecutive blank lines
64
+ maximum: 1
65
+
66
+ # MD013/line-length - Line length
67
+ MD013:
68
+ # Number of characters
69
+ line_length: 90
70
+ # Number of characters for headings
71
+ heading_line_length: 90
72
+ # Number of characters for code blocks
73
+ code_block_line_length: 90
74
+ # Include code blocks
75
+ code_blocks: true
76
+ # Include tables
77
+ tables: true
78
+ # Include headings
79
+ headings: true
80
+ # Include headings
81
+ headers: true
82
+ # Strict length checking
83
+ strict: false
84
+ # Stern length checking
85
+ stern: false
86
+
87
+ # MD014/commands-show-output - Dollar signs used before commands without showing output
88
+ MD014: true
89
+
90
+ # MD018/no-missing-space-atx - No space after hash on atx style heading
91
+ MD018: true
92
+
93
+ # MD019/no-multiple-space-atx - Multiple spaces after hash on atx style heading
94
+ MD019: true
95
+
96
+ # MD020/no-missing-space-closed-atx - No space inside hashes on closed atx style heading
97
+ MD020: true
98
+
99
+ # MD021/no-multiple-space-closed-atx - Multiple spaces inside hashes on closed atx style heading
100
+ MD021: true
101
+
102
+ # MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines
103
+ MD022:
104
+ # Blank lines above heading
105
+ lines_above: 1
106
+ # Blank lines below heading
107
+ lines_below: 1
108
+
109
+ # MD023/heading-start-left/header-start-left - Headings must start at the beginning of the line
110
+ MD023: true
111
+
112
+ # MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content
113
+ MD024:
114
+ # Only check sibling headings
115
+ allow_different_nesting: false
116
+ # Only check sibling headings
117
+ siblings_only: false
118
+
119
+ # MD025/single-title/single-h1 - Multiple top-level headings in the same document
120
+ MD025:
121
+ # Heading level
122
+ level: 1
123
+ # RegExp for matching title in front matter
124
+ front_matter_title: "^\\s*title\\s*[:=]"
125
+
126
+ # MD026/no-trailing-punctuation - Trailing punctuation in heading
127
+ MD026:
128
+ # Punctuation characters
129
+ punctuation: ".,;:!。,;:!"
130
+
131
+ # MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol
132
+ MD027: true
133
+
134
+ # MD028/no-blanks-blockquote - Blank line inside blockquote
135
+ MD028: true
136
+
137
+ # MD029/ol-prefix - Ordered list item prefix
138
+ MD029:
139
+ # List style
140
+ style: "one_or_ordered"
141
+
142
+ # MD030/list-marker-space - Spaces after list markers
143
+ MD030:
144
+ # Spaces for single-line unordered list items
145
+ ul_single: 1
146
+ # Spaces for single-line ordered list items
147
+ ol_single: 1
148
+ # Spaces for multi-line unordered list items
149
+ ul_multi: 1
150
+ # Spaces for multi-line ordered list items
151
+ ol_multi: 1
152
+
153
+ # MD031/blanks-around-fences - Fenced code blocks should be surrounded by blank lines
154
+ MD031:
155
+ # Include list items
156
+ list_items: true
157
+
158
+ # MD032/blanks-around-lists - Lists should be surrounded by blank lines
159
+ MD032: true
160
+
161
+ # MD033/no-inline-html - Inline HTML
162
+ MD033:
163
+ # Allowed elements
164
+ allowed_elements: []
165
+
166
+ # MD034/no-bare-urls - Bare URL used
167
+ MD034: true
168
+
169
+ # MD035/hr-style - Horizontal rule style
170
+ MD035:
171
+ # Horizontal rule style
172
+ style: "consistent"
173
+
174
+ # MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading
175
+ MD036:
176
+ # Punctuation characters
177
+ punctuation: ".,;:!?。,;:!?"
178
+
179
+ # MD037/no-space-in-emphasis - Spaces inside emphasis markers
180
+ MD037: true
181
+
182
+ # MD038/no-space-in-code - Spaces inside code span elements
183
+ MD038: true
184
+
185
+ # MD039/no-space-in-links - Spaces inside link text
186
+ MD039: true
187
+
188
+ # MD040/fenced-code-language - Fenced code blocks should have a language specified
189
+ MD040: true
190
+
191
+ # MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading
192
+ MD041:
193
+ # Heading level
194
+ level: 1
195
+ # RegExp for matching title in front matter
196
+ front_matter_title: "^\\s*title\\s*[:=]"
197
+
198
+ # MD042/no-empty-links - No empty links
199
+ MD042: true
200
+
201
+ # MD043/required-headings/required-headers - Required heading structure
202
+ MD043:
203
+ # List of headings
204
+ headings: []
205
+ # List of headings
206
+ headers: []
207
+
208
+ # MD044/proper-names - Proper names should have the correct capitalization
209
+ MD044:
210
+ # List of proper names
211
+ names: []
212
+ # Include code blocks
213
+ code_blocks: true
214
+
215
+ # MD045/no-alt-text - Images should have alternate text (alt text)
216
+ MD045: true
217
+
218
+ # MD046/code-block-style - Code block style
219
+ MD046:
220
+ # Block style
221
+ style: "consistent"
222
+
223
+ # MD047/single-trailing-newline - Files should end with a single newline character
224
+ MD047: true
225
+
226
+ # MD048/code-fence-style - Code fence style
227
+ MD048:
228
+ # Code fence style
229
+ style: "consistent"
230
+
231
+ # MD049/emphasis-style - Emphasis style should be consistent
232
+ MD049:
233
+ # Emphasis style should be consistent
234
+ style: "consistent"
235
+
236
+ # MD050/strong-style - Strong style should be consistent
237
+ MD050:
238
+ # Strong style should be consistent
239
+ style: "consistent"
@@ -0,0 +1 @@
1
+ docs/source/proposal-template.md
@@ -0,0 +1,33 @@
1
+ exclude: |
2
+ (?x)^(
3
+ .github/|
4
+ notebooks/|
5
+ docs/source/conf.py
6
+ )
7
+
8
+ repos:
9
+ - repo: https://github.com/pre-commit/pre-commit-hooks
10
+ rev: v6.0.0
11
+ hooks:
12
+ - id: trailing-whitespace
13
+ - id: end-of-file-fixer
14
+ - id: check-docstring-first
15
+ - id: check-json
16
+ - id: check-yaml
17
+ - id: pretty-format-json
18
+ args: ["--autofix", "--indent=2", "--no-sort-keys"]
19
+
20
+ - repo: https://github.com/astral-sh/ruff-pre-commit
21
+ rev: v0.17.2
22
+ hooks:
23
+ - id: ruff-check
24
+ args: ["--fix"]
25
+ exclude: '\.ipynb$'
26
+ - id: ruff-format
27
+ exclude: '\.ipynb$'
28
+
29
+ - repo: https://github.com/igorshubovych/markdownlint-cli
30
+ rev: v0.50.0
31
+ hooks:
32
+ - id: markdownlint
33
+ args: ["**/**/*.md", "--ignore", "docs/source/gsoc", "--enable", "MD013", "--disable", "MD043", "line_length", "--fix"]
@@ -0,0 +1,39 @@
1
+ # Read the Docs configuration file for Sphinx projects
2
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
3
+
4
+ # Required
5
+ version: 2
6
+
7
+ # Set the OS, Python version and other tools you might need
8
+ build:
9
+ os: ubuntu-22.04
10
+ tools:
11
+ python: "3.13"
12
+
13
+ jobs:
14
+ pre_build:
15
+ - cp examples/notebooks/element_examples.ipynb docs/source/element_examples.ipynb
16
+ - cp examples/notebooks/echogram_vertical_coordinates.ipynb docs/source/echogram_vertical_coordinates.ipynb
17
+
18
+ # Build documentation in the "docs/" directory with Sphinx
19
+ sphinx:
20
+ configuration: docs/source/conf.py
21
+ # You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs
22
+ # builder: "dirhtml"
23
+ # Fail on all warnings to avoid broken references
24
+ # fail_on_warning: true
25
+
26
+ # Optionally build your docs in additional formats such as PDF and ePub
27
+ # formats:
28
+ # - pdf
29
+ # - epub
30
+
31
+ # Optional but recommended, declare the Python requirements required
32
+ # to build your documentation
33
+ # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
34
+ python:
35
+ install:
36
+ - method: pip
37
+ path: .
38
+ extra_requirements:
39
+ - docs
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 Open-Source Ocean Acoustics
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,2 @@
1
+ include LICENSE
2
+ include README.md