diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index c395c43..b87f2f3 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,32 +1,29 @@ --- name: Bug report about: Create a report to help us improve -title: '' -labels: '' -assignees: '' +labels: bug +title: "BUG: " --- -**Describe the bug** -A clear and concise description of what the bug is. +# Description +A clear and concise description of what the bug is, including a description +of what you expected the outcome to be. -**To Reproduce** +# To Reproduce this bug: Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error -**Expected behavior** -A clear and concise description of what you expected to happen. +Consider including images or test files to help others reproduce the bug and +solve the problem. -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Version [e.g. 22] +## Test configuration + - OS: [e.g. Hal] + - Version [e.g. Python 3.47] - Other details about your setup that could be relevant -**Additional context** +# Additional context Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index bbcbbe7..d02da2e 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,20 +1,27 @@ --- name: Feature request about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' +title: "ENH: " +labels: enhancement --- -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] +# Description +A clear and concise description of the new feature or behaviour you would like. -**Describe the solution you'd like** +## Potential impact + +- Is the feature related to an existing problem? +- How critical is this feature to your workflow? +- How wide of an impact to you anticipate this enhancement having? +- Would this break any existing functionality? + +## Potential solution(s) A clear and concise description of what you want to happen. -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. +# Alternatives +A clear description of any alternative solutions or features you've considered. -**Additional context** -Add any other context or screenshots about the feature request here. +# Additional context +Add any other context or screenshots about the feature request here, potentially +including your operational configuration. diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 8c5791a..e0a2dad 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -12,19 +12,18 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.7] + python-version: ["3.9"] name: Documentation tests steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | - python -m pip install --upgrade pip pip install -r test_requirements.txt pip install -r requirements.txt diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cbfa5d6..c427bea 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,28 +15,29 @@ jobs: numpy_ver: [latest] include: - python-version: "3.8" - numpy_ver: "1.19" + numpy_ver: "1.20" os: "ubuntu-latest" name: Python ${{ matrix.python-version }} on ${{ matrix.os }} with numpy ${{ matrix.numpy_ver }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -r test_requirements.txt - pip install -r requirements.txt - - name: Install NEP29 dependencies if: ${{ matrix.numpy_ver != 'latest'}} run: | pip install --no-binary :numpy: numpy==${{ matrix.numpy_ver }} + # Need to force a version of pandas compliant with NEP29 + pip install "pandas<1.5" + + - name: Install dependencies + run: | + pip install -r test_requirements.txt + pip install -r requirements.txt - name: Test PEP8 compliance run: flake8 . --count --select=E,F,W --show-source --statistics diff --git a/.github/workflows/pysat_rc.yml b/.github/workflows/pysat_rc.yml new file mode 100644 index 0000000..059ac9f --- /dev/null +++ b/.github/workflows/pysat_rc.yml @@ -0,0 +1,51 @@ +# This workflow will install Python dependencies, run tests and lint with a variety of Python versions +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: Test with latest pysat RC + +on: [workflow_dispatch] + +jobs: + build: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + python-version: ["3.10"] + + name: Python ${{ matrix.python-version }} on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Reinstall fortran on MacOS + if: ${{ matrix.os == 'macos-latest' }} + run: brew reinstall gcc + + - name: Install pysat RC + run: pip install --no-deps -i https://test.pypi.org/simple/ pysat + + - name: Install standard dependencies + run: | + pip install -r requirements.txt + pip install -r test_requirements.txt + + - name: Set up pysat + run: | + mkdir pysatData + python -c "import pysat; pysat.params['data_dirs'] = 'pysatData'" + + - name: Install + run: python setup.py develop + + - name: Test with pytest + run: pytest -vs --cov=pysatCDF/ + + - name: Publish results to coveralls + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: coveralls --rcfile=setup.cfg --service=github diff --git a/.zenodo.json b/.zenodo.json index 07180e3..860a27f 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -20,6 +20,16 @@ { "affiliation": "Predictive Science", "name": "Pembroke, Asher" + }, + { + "affiliation": "The Johns Hopkins Applied Physics Laboratory", + "name": "Starr, Greg", + "orcid": "0000-0002-3487-3630" + }, + { + "affiliation": "SRI International", + "name": "Reimer, Ashton", + "orcid": "0000-0002-4621-3453" } ] } diff --git a/CHANGELOG.md b/CHANGELOG.md index 14b4c58..592c66b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,14 +3,37 @@ Change Log All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). -[0.4.0] - 2022-XX-XX +[0.3.2] - 2022-05-13 -------------------- * New Features * Compatible with pysat v3.0+ * Deprecations * Documentation + * Added pull request templates and other GitHub project documentation. + * Switched Windows installation instructions to favor installing WSL. * Bug Fix * Improved builds for newer compilers. + * Replaces uninterpretable characters with '*' so data loading may continue. * Maintenance * Adopted latest pysat development standards. + * Shifted from TravisCI to GitHub Actions for online testing. + * Adopted setup.cfg + * Improved PEP8 compliance + * Adopt pytest syntax +[0.3.2] - 2022-05-13 +-------------------- +* New Features + * Compatible with pysat v3.0+ +* Deprecations +* Documentation + * Added pull request templates and other GitHub project documentation. + * Switched Windows installation instructions to favor installing WSL. +* Bug Fix + * Improved builds for newer compilers. + * Replaces uninterpretable characters with '*' so data loading may continue. +* Maintenance + * Adopted latest pysat development standards. + * Shifted from TravisCI to GitHub Actions for online testing. + * Adopted setup.cfg + * Improved PEP8 compliance diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..f1016fe --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,146 @@ +Contributing +============ + +Bug reports, feature suggestions and other contributions are greatly +appreciated! pysatCDF is a community-driven project and welcomes both +feedback and contributions. + +Come join us on Slack! An invitation to the pysat workspace is available +in the 'About' section of the +[pysat GitHub Repository.](https://github.com/pysat/pysat) Development meetings +are generally held fortnightly. + +Short version +------------- + +* Submit bug reports and feature requests at [GitHub](https://github.com/pysat/pysatCDF/issues) +* Make pull requests to the ``develop`` branch + +Bug reports +----------- + +When [reporting a bug](https://github.com/pysat/pysatCDF/issues) please +include: + +* Your operating system name and version +* Any details about your local setup that might be helpful in troubleshooting +* Detailed steps to reproduce the bug + +Feature requests and feedback +----------------------------- + +The best way to send feedback is to file an issue at +[GitHub](https://github.com/pysat/pysatCDF/issues). + +If you are proposing a feature: + +* Explain in detail how it would work. +* Keep the scope as narrow as possible, to make it easier to implement. +* Remember that this is a volunteer-driven project, and that code contributions + are welcome :) + +Development +----------- + +To set up `pysatCDF` for local development: + +1. [Fork pysat on GitHub](https://github.com/pysat/pysatCDF/fork). + +2. Clone your fork locally: + ``` + git clone git@github.com:your_name_here/pysatCDF.git + ``` + +3. Create a branch for local development: + ``` + git checkout -b name-of-your-bugfix-or-feature + ``` + + Now you can make your changes locally. Tests for new instruments are + performed automatically. Tests for custom functions should be added to + the appropriately named file in ``pysatCDF/tests``. If no test + file exists, then you should create one. This testing uses pytest, which + will run tests on any python file in the test directory that starts with + ``test_``. + +4. When you're done making changes, run all the checks to ensure that nothing + is broken on your local system: + ``` + pytest -vs + ``` + +5. Update/add documentation (in ``docs``), if relevant + +6. Add your name to the .zenodo.json file as an author + +7. Commit your changes: + ``` + git add . + git commit -m "AAA: Brief description of your changes" + ``` + Where AAA is a standard shorthand for the type of change (eg, BUG or DOC). + `pysat` follows the [numpy development workflow](https://numpy.org/doc/stable/dev/development_workflow.html), + see the discussion there for a full list of this shorthand notation. + +8. Once you are happy with the local changes, push to Github: + ``` + git push origin name-of-your-bugfix-or-feature + ``` + Note that each push will trigger the Continuous Integration workflow. + +9. Submit a pull request through the GitHub website. Pull requests should be + made to the ``develop`` branch. + +Pull Request Guidelines +----------------------- + +If you need some code review or feedback while you're developing the code, just +make a pull request. Pull requests should be made to the ``develop`` branch. + +For merging, you should: + +1. Include an example for use +2. Add a note to ``CHANGELOG.md`` about the changes +3. Ensure that all checks passed (current checks include GitHub Actions + and Coveralls) + +If you don't have all the necessary Python versions available locally or +have trouble building all the testing environments, you can rely on +the project's Continuous Integration (CI) service to run the tests for each change you add in the pull +request. Because testing here will delay tests by other developers, +please ensure that the code passes all tests on your local system first. + +Project Style Guidelines +^^^^^^^^^^^^^^^^^^^^^^^^ + +In general, pysat follows PEP8 and numpydoc guidelines. Pytest runs the unit +and integration tests, flake8 checks for style, and sphinx-build performs +documentation tests. However, there are certain additional style elements that +have been settled on to ensure the project maintains a consistent coding style. +These include: + +* Line breaks should occur before a binary operator (ignoring flake8 W503) +* Combine long strings using `join` +* Preferably break long lines on open parentheses rather than using `\` +* Use no more than 80 characters per line +* Avoid using Instrument class key attribute names as unrelated variable names: + `platform`, `name`, `tag`, and `inst_id` +* The pysat logger is imported into each sub-module and provides status updates + at the info and warning levels (as appropriate) +* Several dependent packages have common nicknames, including: + * `import datetime as dt` + * `import numpy as np` + * `import pandas as pds` + * `import xarray as xr` +* All classes should have `__repr__` and `__str__` functions +* Docstrings use `Note` instead of `Notes` +* Try to avoid creating a try/except statement where except passes +* Use setup and teardown in test classes +* Use pytest parametrize in test classes when appropriate +* Provide testing class methods with informative failure statements and + descriptive, one-line docstrings +* Block and inline comments should use proper English grammar and punctuation + with the exception of single sentences in a block, which may then omit the + final period +* When casting is necessary, use `np.int64` and `np.float64` to ensure operating + system agnosticism diff --git a/LICENSE b/LICENSE index 5cd0284..3a54a46 100644 --- a/LICENSE +++ b/LICENSE @@ -11,7 +11,7 @@ modification, are permitted provided that the following conditions are met: this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -* Neither the name of pysat nor the names of its +* Neither the name of pysatCDF nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/MANIFEST.in b/MANIFEST.in index 0109c75..4689c47 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,7 @@ include *.py include *.f include *.c +include pysatCDF/version.txt recursive-include cdf36_3-dist * prune cdf36_3-dist/cdfjava prune cdf36_3-dist/lib/*.o diff --git a/README.md b/README.md index 7f3011e..73add3d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ +