From d6e38362963ae0515ff0a14f1e636356d0559eee Mon Sep 17 00:00:00 2001 From: PabloPeitsch Date: Tue, 26 Nov 2024 20:40:34 -0300 Subject: [PATCH 1/4] [INFRA] Add GitHub templates and community files Added: - Issue templates for bug reports, feature requests and docs - Community guidelines (CODE_OF_CONDUCT, CONTRIBUTING) - Security policy - Pull request template All files have been customized for Pkynetics project requirements and contributing guidelines. --- .github/CODE_OF_CONDUCT.md | 86 ++++++++++++++++++ .github/CONTRIBUTING.md | 132 ++++++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/bug.yaml | 109 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yaml | 11 +++ .github/ISSUE_TEMPLATE/docs.yaml | 71 +++++++++++++++ .github/ISSUE_TEMPLATE/feature.yaml | 75 ++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 34 +++++++ .github/SECURITY.md | 36 ++++++++ 8 files changed, 554 insertions(+) create mode 100644 .github/CODE_OF_CONDUCT.md create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/ISSUE_TEMPLATE/bug.yaml create mode 100644 .github/ISSUE_TEMPLATE/config.yaml create mode 100644 .github/ISSUE_TEMPLATE/docs.yaml create mode 100644 .github/ISSUE_TEMPLATE/feature.yaml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/SECURITY.md diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..6e1eccf --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,86 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of + any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official email address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +**pablo.peitsch@gmail.com**. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..0df2374 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,132 @@ +# Contributing Guidelines + +*Pull requests, bug reports, and all other forms of contribution are welcomed and highly encouraged!* :octocat: + +### Contents + +- [Our Standards](#balance_scale-our-standards) +- [Getting Help](#thinking-getting-help) +- [Reporting Issues](#lady_beetle-reporting-issues) +- [Feature Proposals](#sparkles-feature-proposals) +- [Issue Triage](#microscope-issue-triage) +- [Pull Requests](#rocket-pull-requests) +- [Commit Guidelines](#pencil2-commit-guidelines) +- [Review Process](#eyes-review-process) +- [Code Style & Standards](#art-code-style--standards) +- [Developer's Certificate](#scroll-developers-certificate) + +> **This guide sets clear expectations for everyone involved with the project so that we can improve it together while creating a welcoming space for everyone to participate.** + +## :balance_scale: Our Standards + +Please review our [Code of Conduct](CODE_OF_CONDUCT.md). It is in effect at all times. We expect it to be honored by everyone who contributes to this project. Acting like an asshole will not be tolerated. + +## :thinking: Getting Help + +Before opening an issue, check the [documentation](https://pkynetics.readthedocs.io/). GitHub issues are for bugs and feature requests, not questions or debugging help. + +## :lady_beetle: Reporting Issues + +Before [creating an issue](https://help.github.com/en/github/managing-your-work-on-github/creating-an-issue), check if you are using the latest version of the project. + +### :shield: Security Issues + +Review our [Security Policy](SECURITY.md). **Do not** file public issues for security vulnerabilities. + +### :bug: Bug Reports + +Send detailed issue reports when you encounter bugs. A well-written bug report helps us immensely. :v: + +Since you are most likely a developer, **provide a ticket that you would like to receive**. + +- **Check the documentation** first +- **Avoid duplicates!** Search existing issues +- **Use reactions** instead of "+1" comments +- **Complete the template** fully +- **Use [GitHub-flavored Markdown](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax)** + +## :sparkles: Feature Proposals + +Feature proposals are welcome! We'll consider all requests but cannot guarantee acceptance. We aim to avoid [feature creep](https://en.wikipedia.org/wiki/Feature_creep). + +- **Search first** for similar proposals +- **Complete the template** thoroughly +- **Be specific** about implementation details + +## :microscope: Issue Triage + +Help us by reproducing bug reports and providing additional information on issues. Any assistance in resolving issues is appreciated! + +## :rocket: Pull Requests + +We **love** pull requests! Before submitting significant changes, open an issue to discuss your proposal. + +For accepted PRs, you'll be invited to become a project collaborator with **push access**. :tada: + +*All contributions are licensed under the project's license.* + +- **Keep it small.** One change per PR +- **Discuss big changes** first +- **Write clear code** over clever code +- **Follow project style** +- **Add tests** +- **Update documentation** +- **Update CHANGELOG** +- **Target default branch** +- **Resolve conflicts** +- **Fix CI failures** + +## :pencil2: Commit Guidelines + +Follow these [commit message guidelines](https://chris.beams.io/posts/git-commit/): + +``` +[TAG] Concise change description in 50 chars or less + +More detailed explanation if needed. Wrap at 72 characters. Focus +on WHY this change is being made rather than WHAT was changed. + +The code itself shows what changed; use this space to explain +motivation and context. + + - Bullet points welcome + - Use hyphens or asterisks + +Resolves: #123 +See also: #456 +``` + +## :eyes: Review Process + +- **Focus on the code**, not the person +- **Don't take it personally** +- **Aim for quality** + +## :art: Code Style & Standards + +For Python code: +- Follow PEP 8 +- Use type hints +- Write clear docstrings following NumPy style +- Use `black` formatter with line length 100 +- Use `isort` for import sorting +- Pass `mypy` checks with strict settings +- Add appropriate tests with `pytest` + +## :scroll: Developer's Certificate + +*Developer's Certificate of Origin 1.1* + +By contributing, you certify that: + +> 1. Your contribution is your original work and you have the right to submit it under the project's license +> 2. Your contribution is based on previous work under an appropriate open source license +> 3. The contribution was provided to you by someone who certified 1 or 2 +> 4. You understand this contribution is public and will be maintained indefinitely + +## The Contributor's Token :key: + +If you've read these guidelines (thank you!), include the ⚡ lightning emoji at the start of your pull requests and issues. You're awesome! :100: + +--- +*These contributing guidelines are based on the excellent work by Jesse Squires ([@jessesquires](https://github.com/jessesquires)).* diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml new file mode 100644 index 0000000..b947c76 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yaml @@ -0,0 +1,109 @@ +name: Bug Report +description: Report an issue you encountered with Pkynetics +title: "[Bug]: " +labels: ["bug", "triage"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + Please include the ⚡ emoji at the start of your title if you've read our contributing guidelines. + - type: checkboxes + id: terms + attributes: + label: Guidelines + description: By submitting this issue, you agree to follow our [Contributing Guidelines](.github/CONTRIBUTING.md) + options: + - label: I agree to follow this project's Contributing Guidelines + required: true + - label: I have searched for similar issues before creating this one + required: true + + - type: input + id: version + attributes: + label: Pkynetics Version + description: What version of Pkynetics are you using? + placeholder: "0.2.3" + validations: + required: true + + - type: input + id: python-version + attributes: + label: Python Version + description: Which Python version(s) have you tested with? + placeholder: "Python 3.9, 3.10, 3.11" + validations: + required: true + + - type: input + id: os + attributes: + label: Operating System + description: Which OS are you using? + placeholder: "Ubuntu 22.04, Windows 11, macOS 13.0" + validations: + required: true + + - type: textarea + id: description + attributes: + label: Bug Description + description: Clearly and concisely describe the bug + placeholder: Tell us what went wrong + validations: + required: true + + - type: textarea + id: reproduction + attributes: + label: Steps to Reproduce + description: Steps to reproduce the behavior + value: | + ```python + # Include a minimal code example that demonstrates the issue + from pkynetics import model_fitting_methods + + # Your code here + ``` + + 1. + 2. + 3. + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected Behavior + description: What did you expect to happen? + validations: + required: true + + - type: textarea + id: actual + attributes: + label: Actual Behavior + description: What actually happened? + validations: + required: true + + - type: textarea + id: error + attributes: + label: Error Message & Stack Trace + description: If applicable, paste the full error message and stack trace + render: python + validations: + required: false + + - type: textarea + id: additional + attributes: + label: Additional Context + description: Add any other relevant context about the problem + placeholder: "Dependency versions, environment details, related issues, etc." + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yaml b/.github/ISSUE_TEMPLATE/config.yaml new file mode 100644 index 0000000..7bd3cb6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yaml @@ -0,0 +1,11 @@ +blank_issues_enabled: false +contact_links: + - name: 📚 Documentation + url: https://pkynetics.readthedocs.io/ + about: Check our documentation before creating an issue + - name: 💬 Discussions + url: https://github.com/PPeitsch/pkynetics/discussions + about: Please ask and answer questions here + - name: 🔒 Security Issues + url: https://github.com/PPeitsch/pkynetics/security/policy + about: Please report security vulnerabilities directly to the maintainers diff --git a/.github/ISSUE_TEMPLATE/docs.yaml b/.github/ISSUE_TEMPLATE/docs.yaml new file mode 100644 index 0000000..002692c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/docs.yaml @@ -0,0 +1,71 @@ +name: Documentation Issue +description: Report issues with Pkynetics documentation +title: "[Docs]: " +labels: ["documentation"] +body: + - type: markdown + attributes: + value: | + Thanks for helping us improve our documentation! + Please include the ⚡ emoji at the start of your title if you've read our contributing guidelines. + - type: checkboxes + id: terms + attributes: + label: Guidelines + description: By submitting this issue, you agree to follow our [Contributing Guidelines](.github/CONTRIBUTING.md) + options: + - label: I agree to follow this project's Contributing Guidelines + required: true + - label: I have checked that this issue hasn't been reported before + required: true + + - type: dropdown + id: type + attributes: + label: Issue Type + description: What type of documentation issue is this? + options: + - Missing documentation + - Incorrect documentation + - Unclear documentation + - Outdated documentation + - Example code issue + - Other + validations: + required: true + + - type: input + id: location + attributes: + label: Documentation Location + description: Where is the documentation issue located? + placeholder: "URL, file path, or section name" + validations: + required: true + + - type: textarea + id: current + attributes: + label: Current Documentation + description: What does the current documentation say? + placeholder: Quote the current documentation here + validations: + required: false + + - type: textarea + id: suggested + attributes: + label: Suggested Changes + description: How should the documentation be improved? + placeholder: Describe your suggested changes or additions + validations: + required: true + + - type: textarea + id: additional + attributes: + label: Additional Context + description: Any other context about the documentation issue? + placeholder: Add any other relevant information here + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature.yaml b/.github/ISSUE_TEMPLATE/feature.yaml new file mode 100644 index 0000000..a3c4b87 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.yaml @@ -0,0 +1,75 @@ +name: Feature Request +description: Suggest a new feature or enhancement for Pkynetics +title: "[Feature]: " +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to suggest a new feature! + Please include the ⚡ emoji at the start of your title if you've read our contributing guidelines. + - type: checkboxes + id: terms + attributes: + label: Guidelines + description: By submitting this issue, you agree to follow our [Contributing Guidelines](.github/CONTRIBUTING.md) + options: + - label: I agree to follow this project's Contributing Guidelines + required: true + - label: I have searched for similar feature requests + required: true + - label: I understand that this is a request and implementation is not guaranteed + required: true + + - type: textarea + id: problem + attributes: + label: Problem Description + description: Is your feature request related to a problem? Please describe. + placeholder: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + validations: + required: true + + - type: textarea + id: solution + attributes: + label: Proposed Solution + description: Describe the solution you'd like + placeholder: | + A clear and concise description of what you want to happen. + + ```python + # Example usage of your proposed feature: + from pkynetics import model_fitting_methods + + # Your proposed code here + ``` + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternative Solutions + description: Describe any alternative solutions you've considered + placeholder: What are the other approaches that could solve this? + validations: + required: true + + - type: textarea + id: context + attributes: + label: Additional Context + description: Any other context, examples, or references for this feature? + placeholder: Add any other context, code examples, or references + validations: + required: false + + - type: textarea + id: implementation + attributes: + label: Implementation Details + description: If you have ideas about how to implement this feature, share them here + placeholder: Technical details, API design, etc. + validations: + required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..c688d1c --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,34 @@ +⚡ *Have you read the Contributing Guidelines](https://github.com/PPeitsch/pkynetics/blob/main/.github/CONTRIBUTING.md)??* + +Fixes # + +## Description + +*Clearly and concisely describe the changes in this pull request.* + +## Type of Change + +- [ ] Bug fix (non-breaking change that fixes an issue) +- [ ] New feature (non-breaking change that adds functionality) +- [ ] Breaking change (fix or feature that would break existing functionality) +- [ ] Documentation update +- [ ] Performance improvement +- [ ] Code style update (formatting, renaming) +- [ ] Refactoring (no functional changes) +- [ ] CI/CD related changes +- [ ] Test coverage improvement +- [ ] Other (please describe): + +## Checklist + +- [ ] I have followed the project's coding style guidelines +- [ ] I have added tests to cover my changes +- [ ] All new and existing tests pass locally +- [ ] I have updated the documentation accordingly +- [ ] I have added type hints where applicable +- [ ] I have updated the CHANGELOG.md +- [ ] My changes generate no new mypy warnings +- [ ] I have checked code formatting with `black` (line length 100) +- [ ] I have run `isort` for import sorting +- [ ] My PR is based on the latest main branch and has no conflicts +- [ ] I have added/updated docstrings in NumPy format diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 0000000..35a69ea --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,36 @@ +# Security Policy + +## Supported Versions + +Currently supported versions of Pkynetics with security updates: + +| Version | Supported | +| ------- | ------------------ | +| 0.2.x | :white_check_mark: | +| < 0.2.0 | :x: | + +## Reporting a Vulnerability + +We take the security of Pkynetics seriously. If you believe you have found a security vulnerability, please report it to us as described below. + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them via email to [pablo.peitsch@gmail.com](mailto:pablo.peitsch@gmail.com). + +You should receive a response within 48 hours. If for some reason you do not, please follow up via email to ensure we received your original message. + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + +* Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) +* Full paths of source file(s) related to the manifestation of the issue +* The location of the affected source code (tag/branch/commit or direct URL) +* Any special configuration required to reproduce the issue +* Step-by-step instructions to reproduce the issue +* Proof-of-concept or exploit code (if possible) +* Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +## Preferred Languages + +We prefer all communications to be in English, Spanish. From b1af84be46f0307b796596e3722f15728854148d Mon Sep 17 00:00:00 2001 From: PPeitsch <88450637+PPeitsch@users.noreply.github.com> Date: Tue, 26 Nov 2024 20:50:59 -0300 Subject: [PATCH 2/4] Update .github/CONTRIBUTING.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 0df2374..e2bd6c4 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -19,7 +19,7 @@ ## :balance_scale: Our Standards -Please review our [Code of Conduct](CODE_OF_CONDUCT.md). It is in effect at all times. We expect it to be honored by everyone who contributes to this project. Acting like an asshole will not be tolerated. +Please review our [Code of Conduct](CODE_OF_CONDUCT.md). It is in effect at all times. We expect it to be honored by everyone who contributes to this project. Disrespectful behavior will not be tolerated. ## :thinking: Getting Help From b138ed391266460e580b0c8ba5d2a84b08846fd2 Mon Sep 17 00:00:00 2001 From: PabloPeitsch Date: Tue, 26 Nov 2024 21:03:14 -0300 Subject: [PATCH 3/4] [INFRA] Fix contributing guidelines link in issue templates Updated relative path to CONTRIBUTING.md in issue templates to use proper GitHub URL --- .github/ISSUE_TEMPLATE/bug.yaml | 2 +- .github/ISSUE_TEMPLATE/docs.yaml | 2 +- .github/ISSUE_TEMPLATE/feature.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml index b947c76..7c1194d 100644 --- a/.github/ISSUE_TEMPLATE/bug.yaml +++ b/.github/ISSUE_TEMPLATE/bug.yaml @@ -12,7 +12,7 @@ body: id: terms attributes: label: Guidelines - description: By submitting this issue, you agree to follow our [Contributing Guidelines](.github/CONTRIBUTING.md) + description: By submitting this issue, you agree to follow our [Contributing Guidelines](https://github.com/PPeitsch/pkynetics/blob/main/.github/CONTRIBUTING.md) options: - label: I agree to follow this project's Contributing Guidelines required: true diff --git a/.github/ISSUE_TEMPLATE/docs.yaml b/.github/ISSUE_TEMPLATE/docs.yaml index 002692c..67ceb6e 100644 --- a/.github/ISSUE_TEMPLATE/docs.yaml +++ b/.github/ISSUE_TEMPLATE/docs.yaml @@ -12,7 +12,7 @@ body: id: terms attributes: label: Guidelines - description: By submitting this issue, you agree to follow our [Contributing Guidelines](.github/CONTRIBUTING.md) + description: By submitting this issue, you agree to follow our [Contributing Guidelines](https://github.com/PPeitsch/pkynetics/blob/main/.github/CONTRIBUTING.md) options: - label: I agree to follow this project's Contributing Guidelines required: true diff --git a/.github/ISSUE_TEMPLATE/feature.yaml b/.github/ISSUE_TEMPLATE/feature.yaml index a3c4b87..f1077a4 100644 --- a/.github/ISSUE_TEMPLATE/feature.yaml +++ b/.github/ISSUE_TEMPLATE/feature.yaml @@ -12,7 +12,7 @@ body: id: terms attributes: label: Guidelines - description: By submitting this issue, you agree to follow our [Contributing Guidelines](.github/CONTRIBUTING.md) + description: By submitting this issue, you agree to follow our [Contributing Guidelines](https://github.com/PPeitsch/pkynetics/blob/main/.github/CONTRIBUTING.md) options: - label: I agree to follow this project's Contributing Guidelines required: true From 0a951372edf110723d15c2bcdec77e25173e4181 Mon Sep 17 00:00:00 2001 From: PabloPeitsch Date: Tue, 26 Nov 2024 21:49:57 -0300 Subject: [PATCH 4/4] [INFRA] Implement modern Python packaging structure - Move package to src-layout - Add pyproject.toml with modern build configuration - Add version information in __about__.py - Restructure modules into organized hierarchy --- examples/coats_redfern_method_example.py | 8 +- examples/custom_importer_example.py | 2 +- examples/freeman_carroll_method_example.py | 8 +- examples/friedman_method_example.py | 2 +- examples/horowitz_metzger_method_example.py | 2 +- examples/importer_examples.py | 2 +- examples/jmak_method_example.py | 6 +- examples/kas_method_example.py | 2 +- examples/kissinger_method_example.py | 2 +- examples/ofw_method_example.py | 2 +- examples/synthetic_data_example.py | 2 +- pyproject.toml | 100 ++++++++++++++++++ setup.py | 43 -------- src/pkynetics/__about__.py | 3 + __init__.py => src/pkynetics/__init__.py | 18 +--- .../pkynetics/data}/sample_dsc_data.csv | 0 .../pkynetics/data}/sample_tga_data.csv | 0 .../pkynetics/data_import}/__init__.py | 0 .../pkynetics/data_import}/custom_importer.py | 0 .../pkynetics/data_import}/dsc_importer.py | 0 .../pkynetics/data_import}/tga_importer.py | 0 .../model_fitting_methods}/__init__.py | 0 .../model_fitting_methods}/coats_redfern.py | 0 .../model_fitting_methods}/freeman_carroll.py | 0 .../horowitz_metzger.py | 0 .../pkynetics/model_fitting_methods}/jmak.py | 0 .../model_fitting_methods}/kissinger.py | 0 .../pkynetics/model_free_methods}/__init__.py | 0 .../model_free_methods}/friedman_method.py | 0 .../model_free_methods}/kas_method.py | 0 .../model_free_methods}/ofw_method.py | 0 .../result_visualization}/__init__.py | 0 .../result_visualization}/kinetic_plot.py | 2 +- .../model_specific_plots.py | 1 - .../pkynetics/synthetic_data}/__init__.py | 0 .../synthetic_data}/basic_kinetic_data.py | 0 .../synthetic_data}/model_specific_data.py | 0 .../synthetic_data}/noise_generators.py | 0 tests/test_custom_importer.py | 2 +- tests/test_freeman_carroll_method.py | 2 +- tests/test_friedman_method.py | 2 +- tests/test_horowitz_metzger_method.py | 2 +- tests/test_importers.py | 2 +- tests/test_jmak_method.py | 2 +- tests/test_kas_method.py | 2 +- tests/test_kissinger_method.py | 2 +- tests/test_ofw_method.py | 2 +- 47 files changed, 135 insertions(+), 88 deletions(-) create mode 100644 pyproject.toml delete mode 100644 setup.py create mode 100644 src/pkynetics/__about__.py rename __init__.py => src/pkynetics/__init__.py (57%) rename {data => src/pkynetics/data}/sample_dsc_data.csv (100%) rename {data => src/pkynetics/data}/sample_tga_data.csv (100%) rename {data_import => src/pkynetics/data_import}/__init__.py (100%) rename {data_import => src/pkynetics/data_import}/custom_importer.py (100%) rename {data_import => src/pkynetics/data_import}/dsc_importer.py (100%) rename {data_import => src/pkynetics/data_import}/tga_importer.py (100%) rename {model_fitting_methods => src/pkynetics/model_fitting_methods}/__init__.py (100%) rename {model_fitting_methods => src/pkynetics/model_fitting_methods}/coats_redfern.py (100%) rename {model_fitting_methods => src/pkynetics/model_fitting_methods}/freeman_carroll.py (100%) rename {model_fitting_methods => src/pkynetics/model_fitting_methods}/horowitz_metzger.py (100%) rename {model_fitting_methods => src/pkynetics/model_fitting_methods}/jmak.py (100%) rename {model_fitting_methods => src/pkynetics/model_fitting_methods}/kissinger.py (100%) rename {model_free_methods => src/pkynetics/model_free_methods}/__init__.py (100%) rename {model_free_methods => src/pkynetics/model_free_methods}/friedman_method.py (100%) rename {model_free_methods => src/pkynetics/model_free_methods}/kas_method.py (100%) rename {model_free_methods => src/pkynetics/model_free_methods}/ofw_method.py (100%) rename {result_visualization => src/pkynetics/result_visualization}/__init__.py (100%) rename {result_visualization => src/pkynetics/result_visualization}/kinetic_plot.py (98%) rename {result_visualization => src/pkynetics/result_visualization}/model_specific_plots.py (97%) rename {synthetic_data => src/pkynetics/synthetic_data}/__init__.py (100%) rename {synthetic_data => src/pkynetics/synthetic_data}/basic_kinetic_data.py (100%) rename {synthetic_data => src/pkynetics/synthetic_data}/model_specific_data.py (100%) rename {synthetic_data => src/pkynetics/synthetic_data}/noise_generators.py (100%) diff --git a/examples/coats_redfern_method_example.py b/examples/coats_redfern_method_example.py index 9030053..545d122 100644 --- a/examples/coats_redfern_method_example.py +++ b/examples/coats_redfern_method_example.py @@ -4,10 +4,10 @@ import os import numpy as np -from synthetic_data import generate_coats_redfern_data -from model_fitting_methods import coats_redfern_method -from result_visualization import plot_conversion_vs_temperature -from result_visualization.model_specific_plots import plot_coats_redfern +from src.pkynetics.synthetic_data import generate_coats_redfern_data +from src.pkynetics.model_fitting_methods import coats_redfern_method +from src.pkynetics.result_visualization import plot_conversion_vs_temperature +from src.pkynetics.result_visualization import plot_coats_redfern sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) diff --git a/examples/custom_importer_example.py b/examples/custom_importer_example.py index 7f4d4f8..b3d0c87 100644 --- a/examples/custom_importer_example.py +++ b/examples/custom_importer_example.py @@ -1,7 +1,7 @@ """Example usage of CustomImporter class.""" import os -from data_import import CustomImporter +from src.pkynetics.data_import import CustomImporter import matplotlib.pyplot as plt # Get the absolute path of the project root directory diff --git a/examples/freeman_carroll_method_example.py b/examples/freeman_carroll_method_example.py index 6b13636..c2e261a 100644 --- a/examples/freeman_carroll_method_example.py +++ b/examples/freeman_carroll_method_example.py @@ -4,10 +4,10 @@ import os import numpy as np -from synthetic_data import generate_freeman_carroll_data -from model_fitting_methods import freeman_carroll_method, plot_diagnostic -from result_visualization import plot_conversion_vs_temperature -from result_visualization.model_specific_plots import plot_freeman_carroll +from src.pkynetics.synthetic_data import generate_freeman_carroll_data +from src.pkynetics.model_fitting_methods import freeman_carroll_method, plot_diagnostic +from src.pkynetics.result_visualization import plot_conversion_vs_temperature +from src.pkynetics.result_visualization import plot_freeman_carroll sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) diff --git a/examples/friedman_method_example.py b/examples/friedman_method_example.py index c77c70e..fb376a1 100644 --- a/examples/friedman_method_example.py +++ b/examples/friedman_method_example.py @@ -2,7 +2,7 @@ import numpy as np import matplotlib.pyplot as plt -from model_free_methods import friedman_method +from src.pkynetics.model_free_methods import friedman_method def generate_sample_data(e_a, a, heating_rates, t_range): diff --git a/examples/horowitz_metzger_method_example.py b/examples/horowitz_metzger_method_example.py index a1fa939..e6a8d9a 100644 --- a/examples/horowitz_metzger_method_example.py +++ b/examples/horowitz_metzger_method_example.py @@ -2,7 +2,7 @@ import numpy as np import matplotlib.pyplot as plt -from model_fitting_methods import horowitz_metzger_method, horowitz_metzger_plot +from src.pkynetics.model_fitting_methods import horowitz_metzger_method, horowitz_metzger_plot # Generate more realistic sample data temperature = np.linspace(300, 800, 1000) # Temperature in Kelvin diff --git a/examples/importer_examples.py b/examples/importer_examples.py index e69234e..acd68d5 100644 --- a/examples/importer_examples.py +++ b/examples/importer_examples.py @@ -1,7 +1,7 @@ """Examples for using tga_importer and dsc_importer functions.""" import os -from data_import import tga_importer, dsc_importer +from src.pkynetics.data_import import tga_importer, dsc_importer # Get the absolute path of the project root directory PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) diff --git a/examples/jmak_method_example.py b/examples/jmak_method_example.py index 3a4f1dd..1ab4253 100644 --- a/examples/jmak_method_example.py +++ b/examples/jmak_method_example.py @@ -1,7 +1,7 @@ import numpy as np -from model_fitting_methods import jmak_method, jmak_equation, jmak_half_time -from synthetic_data.model_specific_data import generate_jmak_data -from result_visualization.kinetic_plot import plot_jmak_results +from src.pkynetics.model_fitting_methods import jmak_method, jmak_equation, jmak_half_time +from src.pkynetics.synthetic_data.model_specific_data import generate_jmak_data +from src.pkynetics.result_visualization import plot_jmak_results def main(): diff --git a/examples/kas_method_example.py b/examples/kas_method_example.py index 1a31010..207b55c 100644 --- a/examples/kas_method_example.py +++ b/examples/kas_method_example.py @@ -3,7 +3,7 @@ import numpy as np import matplotlib.pyplot as plt from typing import List, Tuple -from model_free_methods.kas_method import kas_method +from src.pkynetics.model_free_methods.kas_method import kas_method def generate_sample_data(e_a: float, a: float, heating_rates: List[float], t_range: Tuple[float, float]) -> Tuple[ diff --git a/examples/kissinger_method_example.py b/examples/kissinger_method_example.py index 0c55821..b11d23b 100644 --- a/examples/kissinger_method_example.py +++ b/examples/kissinger_method_example.py @@ -1,6 +1,6 @@ import numpy as np import matplotlib.pyplot as plt -from model_fitting_methods.kissinger import kissinger_method, calculate_t_p +from src.pkynetics.model_fitting_methods import kissinger_method, calculate_t_p # Set true values and generate sample data true_e_a = 150000 # J/mol diff --git a/examples/ofw_method_example.py b/examples/ofw_method_example.py index 3246f9f..980cd3e 100644 --- a/examples/ofw_method_example.py +++ b/examples/ofw_method_example.py @@ -2,7 +2,7 @@ import numpy as np import matplotlib.pyplot as plt -from model_free_methods.ofw_method import ofw_method +from src.pkynetics.model_free_methods import ofw_method def generate_sample_data(e_a, a, heating_rates, t_range): diff --git a/examples/synthetic_data_example.py b/examples/synthetic_data_example.py index 0cad29f..1c0ce61 100644 --- a/examples/synthetic_data_example.py +++ b/examples/synthetic_data_example.py @@ -1,5 +1,5 @@ import matplotlib.pyplot as plt -from synthetic_data import ( +from src.pkynetics.synthetic_data import ( generate_basic_kinetic_data, add_gaussian_noise, add_outliers diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..ba55ef5 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,100 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "pkynetics" +dynamic = ["version"] +description = "A comprehensive library for thermal analysis kinetic methods" +readme = "README.md" +authors = [ + { name = "Pablo Peitsch", email = "pablo.peitsch@gmail.com" }, +] +license = { file = "LICENSE" } +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3 :: Only", + "Framework :: Pytest", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Chemistry", + "Topic :: Scientific/Engineering :: Physics", + "Natural Language :: English", + "Environment :: Console", + "Typing :: Typed", +] +keywords = ["thermal-analysis", "kinetics", "thermogravimetry", "dsc", "dilatometry"] +dependencies = [ + "numpy~=1.24.3", + "matplotlib~=3.7.5", + "pandas~=2.0.3", + "scipy~=1.10.1", + "statsmodels~=0.14.1", + "scikit-learn>=0.24.0", + "seaborn>=0.11.0", +] +requires-python = ">=3.9" + +[project.optional-dependencies] +dev = [ + "pytest>=6.2.0", + "pytest-cov>=4.1.0", + "black>=23.0.0", + "isort>=5.0.0", + "mypy>=1.0.0", + "sphinx>=4.0.0", + "sphinx-rtd-theme>=1.0.0", +] + +[project.urls] +Homepage = "https://github.com/PPeitsch/pkynetics" +Documentation = "https://pkynetics.readthedocs.io/" +Repository = "https://github.com/PPeitsch/pkynetics.git" +"Bug Tracker" = "https://github.com/PPeitsch/pkynetics/issues" +Changelog = "https://github.com/PPeitsch/pkynetics/blob/main/CHANGELOG.md" + +[tool.hatch.version] +path = "src/pkynetics/__about__.py" + +[tool.hatch.build.hooks.version] +path = "src/pkynetics/_version.py" + +[tool.hatch.build.targets.wheel] +packages = ["src/pkynetics"] + +[tool.black] +line-length = 88 +target-version = ["py39"] + +[tool.isort] +profile = "black" +line_length = 88 +multi_line_output = 3 + +[tool.mypy] +python_version = "3.9" +warn_return_any = true +warn_unused_configs = true +disallow_untyped_defs = true +disallow_incomplete_defs = true +check_untyped_defs = true +disallow_untyped_decorators = true +no_implicit_optional = true +warn_redundant_casts = true +warn_unused_ignores = true +warn_no_return = true +warn_unreachable = true + +[[tool.mypy.overrides]] +module = ["scipy.*", "matplotlib.*", "seaborn.*", "statsmodels.*"] +ignore_missing_imports = true + +[tool.pytest.ini_options] +addopts = "--cov=pkynetics --cov-report=term --cov-report=xml" +testpaths = ["tests"] +python_files = "test_*.py" diff --git a/setup.py b/setup.py deleted file mode 100644 index cddc1f4..0000000 --- a/setup.py +++ /dev/null @@ -1,43 +0,0 @@ -from setuptools import setup, find_packages - -setup( - name="pkynetics", - version="0.2.1", - packages=find_packages(), - install_requires=[ - "numpy~=1.24.3", - "matplotlib~=3.7.5", - "pandas~=2.0.3", - "scipy~=1.10.1", - "statsmodels~=0.14.1", - "scikit-learn>=0.24.0", - "seaborn>=0.11.0", - ], - extras_require={ - "dev": [ - "pytest>=6.2.0", - "pylint>=2.7.0", - ], - }, - entry_points={ - "console_scripts": [ - "pkynetics=pkynetics.cli:main", - ], - }, - author="Pablo Peitsch", - author_email="pablo.peitsch@gmail.com", - description="A comprehensive library for thermal analysis kinetic methods", - long_description=open("README.md").read(), - long_description_content_type="text/markdown", - url="https://github.com/PPeitsch/pkynetics", - classifiers=[ - "Development Status :: 3 - Alpha", - "Intended Audience :: Science/Research", - "License :: OSI Approved :: MIT License", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - ], - python_requires=">=3.8", -) diff --git a/src/pkynetics/__about__.py b/src/pkynetics/__about__.py new file mode 100644 index 0000000..d7eb2bb --- /dev/null +++ b/src/pkynetics/__about__.py @@ -0,0 +1,3 @@ +"""Version information.""" + +__version__ = "0.2.3" diff --git a/__init__.py b/src/pkynetics/__init__.py similarity index 57% rename from __init__.py rename to src/pkynetics/__init__.py index 7b9eed7..74019ea 100644 --- a/__init__.py +++ b/src/pkynetics/__init__.py @@ -6,22 +6,10 @@ approaches, and result visualization for thermal analysis data. """ -__version__ = "0.2.1" +from src.pkynetics import data_import, model_fitting_methods, model_free_methods, result_visualization -from . import data_preprocessing -from . import data_import -from . import model_fitting_methods -from . import model_free_methods -from . import advanced_methods -from . import machine_learning_methods -from . import result_visualization -from . import statistical_analysis -from . import parallel_processing -from . import utility_functions - -from .data_preprocessing import smooth_data -from .data_import import tga_importer, dsc_importer -from .model_fitting_methods import kissinger_method +from src.pkynetics.data_import import tga_importer, dsc_importer +from src.pkynetics.model_fitting_methods import kissinger_method __all__ = [ "data_preprocessing", diff --git a/data/sample_dsc_data.csv b/src/pkynetics/data/sample_dsc_data.csv similarity index 100% rename from data/sample_dsc_data.csv rename to src/pkynetics/data/sample_dsc_data.csv diff --git a/data/sample_tga_data.csv b/src/pkynetics/data/sample_tga_data.csv similarity index 100% rename from data/sample_tga_data.csv rename to src/pkynetics/data/sample_tga_data.csv diff --git a/data_import/__init__.py b/src/pkynetics/data_import/__init__.py similarity index 100% rename from data_import/__init__.py rename to src/pkynetics/data_import/__init__.py diff --git a/data_import/custom_importer.py b/src/pkynetics/data_import/custom_importer.py similarity index 100% rename from data_import/custom_importer.py rename to src/pkynetics/data_import/custom_importer.py diff --git a/data_import/dsc_importer.py b/src/pkynetics/data_import/dsc_importer.py similarity index 100% rename from data_import/dsc_importer.py rename to src/pkynetics/data_import/dsc_importer.py diff --git a/data_import/tga_importer.py b/src/pkynetics/data_import/tga_importer.py similarity index 100% rename from data_import/tga_importer.py rename to src/pkynetics/data_import/tga_importer.py diff --git a/model_fitting_methods/__init__.py b/src/pkynetics/model_fitting_methods/__init__.py similarity index 100% rename from model_fitting_methods/__init__.py rename to src/pkynetics/model_fitting_methods/__init__.py diff --git a/model_fitting_methods/coats_redfern.py b/src/pkynetics/model_fitting_methods/coats_redfern.py similarity index 100% rename from model_fitting_methods/coats_redfern.py rename to src/pkynetics/model_fitting_methods/coats_redfern.py diff --git a/model_fitting_methods/freeman_carroll.py b/src/pkynetics/model_fitting_methods/freeman_carroll.py similarity index 100% rename from model_fitting_methods/freeman_carroll.py rename to src/pkynetics/model_fitting_methods/freeman_carroll.py diff --git a/model_fitting_methods/horowitz_metzger.py b/src/pkynetics/model_fitting_methods/horowitz_metzger.py similarity index 100% rename from model_fitting_methods/horowitz_metzger.py rename to src/pkynetics/model_fitting_methods/horowitz_metzger.py diff --git a/model_fitting_methods/jmak.py b/src/pkynetics/model_fitting_methods/jmak.py similarity index 100% rename from model_fitting_methods/jmak.py rename to src/pkynetics/model_fitting_methods/jmak.py diff --git a/model_fitting_methods/kissinger.py b/src/pkynetics/model_fitting_methods/kissinger.py similarity index 100% rename from model_fitting_methods/kissinger.py rename to src/pkynetics/model_fitting_methods/kissinger.py diff --git a/model_free_methods/__init__.py b/src/pkynetics/model_free_methods/__init__.py similarity index 100% rename from model_free_methods/__init__.py rename to src/pkynetics/model_free_methods/__init__.py diff --git a/model_free_methods/friedman_method.py b/src/pkynetics/model_free_methods/friedman_method.py similarity index 100% rename from model_free_methods/friedman_method.py rename to src/pkynetics/model_free_methods/friedman_method.py diff --git a/model_free_methods/kas_method.py b/src/pkynetics/model_free_methods/kas_method.py similarity index 100% rename from model_free_methods/kas_method.py rename to src/pkynetics/model_free_methods/kas_method.py diff --git a/model_free_methods/ofw_method.py b/src/pkynetics/model_free_methods/ofw_method.py similarity index 100% rename from model_free_methods/ofw_method.py rename to src/pkynetics/model_free_methods/ofw_method.py diff --git a/result_visualization/__init__.py b/src/pkynetics/result_visualization/__init__.py similarity index 100% rename from result_visualization/__init__.py rename to src/pkynetics/result_visualization/__init__.py diff --git a/result_visualization/kinetic_plot.py b/src/pkynetics/result_visualization/kinetic_plot.py similarity index 98% rename from result_visualization/kinetic_plot.py rename to src/pkynetics/result_visualization/kinetic_plot.py index 926f64b..8d95c1e 100644 --- a/result_visualization/kinetic_plot.py +++ b/src/pkynetics/result_visualization/kinetic_plot.py @@ -3,7 +3,7 @@ import matplotlib.pyplot as plt import numpy as np from typing import List -from model_fitting_methods import kissinger_equation +from src.pkynetics.model_fitting_methods import kissinger_equation # Constants R = 8.314 # Gas constant in J/(mol·K) diff --git a/result_visualization/model_specific_plots.py b/src/pkynetics/result_visualization/model_specific_plots.py similarity index 97% rename from result_visualization/model_specific_plots.py rename to src/pkynetics/result_visualization/model_specific_plots.py index 5828349..1385969 100644 --- a/result_visualization/model_specific_plots.py +++ b/src/pkynetics/result_visualization/model_specific_plots.py @@ -2,7 +2,6 @@ import matplotlib.pyplot as plt import numpy as np -from model_fitting_methods import kissinger_equation def plot_coats_redfern(x: np.ndarray, y: np.ndarray, x_fit: np.ndarray, y_fit: np.ndarray, diff --git a/synthetic_data/__init__.py b/src/pkynetics/synthetic_data/__init__.py similarity index 100% rename from synthetic_data/__init__.py rename to src/pkynetics/synthetic_data/__init__.py diff --git a/synthetic_data/basic_kinetic_data.py b/src/pkynetics/synthetic_data/basic_kinetic_data.py similarity index 100% rename from synthetic_data/basic_kinetic_data.py rename to src/pkynetics/synthetic_data/basic_kinetic_data.py diff --git a/synthetic_data/model_specific_data.py b/src/pkynetics/synthetic_data/model_specific_data.py similarity index 100% rename from synthetic_data/model_specific_data.py rename to src/pkynetics/synthetic_data/model_specific_data.py diff --git a/synthetic_data/noise_generators.py b/src/pkynetics/synthetic_data/noise_generators.py similarity index 100% rename from synthetic_data/noise_generators.py rename to src/pkynetics/synthetic_data/noise_generators.py diff --git a/tests/test_custom_importer.py b/tests/test_custom_importer.py index b6aed00..ea322a1 100644 --- a/tests/test_custom_importer.py +++ b/tests/test_custom_importer.py @@ -3,7 +3,7 @@ import unittest import os import numpy as np -from data_import import CustomImporter +from src.pkynetics.data_import import CustomImporter # Get the absolute path of the project root directory PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) diff --git a/tests/test_freeman_carroll_method.py b/tests/test_freeman_carroll_method.py index 98e0d8f..49ae3da 100644 --- a/tests/test_freeman_carroll_method.py +++ b/tests/test_freeman_carroll_method.py @@ -2,7 +2,7 @@ import unittest import numpy as np -from model_fitting_methods import freeman_carroll_method, freeman_carroll_equation +from src.pkynetics.model_fitting_methods import freeman_carroll_method, freeman_carroll_equation class TestFreemanCarrollMethod(unittest.TestCase): diff --git a/tests/test_friedman_method.py b/tests/test_friedman_method.py index 16c04f1..7c76dd5 100644 --- a/tests/test_friedman_method.py +++ b/tests/test_friedman_method.py @@ -2,7 +2,7 @@ import unittest import numpy as np -from model_free_methods import friedman_method +from src.pkynetics.model_free_methods import friedman_method class TestFriedmanMethod(unittest.TestCase): diff --git a/tests/test_horowitz_metzger_method.py b/tests/test_horowitz_metzger_method.py index 9e8fc4b..19a661a 100644 --- a/tests/test_horowitz_metzger_method.py +++ b/tests/test_horowitz_metzger_method.py @@ -2,7 +2,7 @@ import unittest import numpy as np -from model_fitting_methods import horowitz_metzger_method, horowitz_metzger_equation +from src.pkynetics.model_fitting_methods import horowitz_metzger_method, horowitz_metzger_equation class TestHorowitzMetzgerMethod(unittest.TestCase): diff --git a/tests/test_importers.py b/tests/test_importers.py index 9ff5337..371755c 100644 --- a/tests/test_importers.py +++ b/tests/test_importers.py @@ -3,7 +3,7 @@ import unittest import os import numpy as np -from data_import import tga_importer, dsc_importer +from src.pkynetics.data_import import tga_importer, dsc_importer # Get the absolute path of the project root directory PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) diff --git a/tests/test_jmak_method.py b/tests/test_jmak_method.py index 40ebd95..d76513a 100644 --- a/tests/test_jmak_method.py +++ b/tests/test_jmak_method.py @@ -2,7 +2,7 @@ import unittest import numpy as np -from model_fitting_methods import jmak_method, jmak_equation +from src.pkynetics.model_fitting_methods import jmak_method, jmak_equation class TestJMAKMethod(unittest.TestCase): diff --git a/tests/test_kas_method.py b/tests/test_kas_method.py index 3ea99a3..a16cf0e 100644 --- a/tests/test_kas_method.py +++ b/tests/test_kas_method.py @@ -2,7 +2,7 @@ import unittest import numpy as np -from model_free_methods.kas_method import kas_method, kas_plot_data +from src.pkynetics.model_free_methods.kas_method import kas_method, kas_plot_data class TestKASMethod(unittest.TestCase): diff --git a/tests/test_kissinger_method.py b/tests/test_kissinger_method.py index d62075b..36b195a 100644 --- a/tests/test_kissinger_method.py +++ b/tests/test_kissinger_method.py @@ -2,7 +2,7 @@ import unittest import numpy as np -from model_fitting_methods.kissinger import kissinger_method, kissinger_equation, calculate_t_p +from src.pkynetics.model_fitting_methods import kissinger_method, kissinger_equation, calculate_t_p class TestKissingerMethod(unittest.TestCase): diff --git a/tests/test_ofw_method.py b/tests/test_ofw_method.py index 32e7719..f0a2e66 100644 --- a/tests/test_ofw_method.py +++ b/tests/test_ofw_method.py @@ -2,7 +2,7 @@ import unittest import numpy as np -from model_free_methods.ofw_method import ofw_method +from src.pkynetics.model_free_methods import ofw_method class TestOFWMethod(unittest.TestCase):