diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.vscode/launch.json b/.vscode/launch.json old mode 100644 new mode 100755 index 157ed23..739e79b --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -14,6 +14,33 @@ ], "django": true }, + { + "name": "Django: Position to Term Map", + "type": "python", + "request": "launch", + "program": "${workspaceFolder}/igem/manage.py", + "args": [ + "filter", + "--positions", + // "/Users/andrerico/DEV/projects/igem/IGEM_SandBox/scripts/echo/echo_genes_prod/output_files/10301_sch_gxe_0.7.txt", + // "/Users/andrerico/DEV/projects/igem/IGEM_SandBox/scripts/echo/echo_genes_prod/output_files/10701_sch_gxe_0.7.txt", + // "/Users/andrerico/DEV/projects/igem/IGEM_SandBox/scripts/echo/echo_genes_prod/output_files/11601_sch_gxe_0.7.txt", + // "/Users/andrerico/DEV/projects/igem/IGEM_SandBox/scripts/echo/echo_genes_prod/output_files/11901_affy5_sch_gxe_0.7.txt", + // "/Users/andrerico/DEV/projects/igem/IGEM_SandBox/scripts/echo/echo_genes_prod/output_files/11901_affy6_sch_gxe_0.7.txt", + // "/Users/andrerico/DEV/projects/igem/IGEM_SandBox/scripts/echo/echo_genes_prod/output_files/12801_sch_gxe_0.7.txt", + // "/Users/andrerico/DEV/projects/igem/IGEM_SandBox/scripts/echo/echo_genes_prod/output_files/10701_pre_gxe_0.7.txt", + // "/Users/andrerico/DEV/projects/igem/IGEM_SandBox/scripts/echo/echo_genes_prod/output_files/11901_affy5_pre_gxe_0.7.txt", + // "/Users/andrerico/DEV/projects/igem/IGEM_SandBox/scripts/echo/echo_genes_prod/output_files/11901_affy6_pre_gxe_0.7.txt", + "/Users/andrerico/DEV/projects/igem/IGEM_Support/scripts/echo/echo_genes_prod/output_files/12801_pre_gxe_0.7.txt", + "--exposome", + "/Users/andrerico/DEV/projects/igem/IGEM_Support/scripts/echo/echo_genes_prod/output_files/pre_echo_words_clean.csv", + "--assembly=37", + "--boundaries=10000", + "--delimiter=\\t" // Use two backslashes to escape the tab character + ], + "django": true, + "console": "integratedTerminal" + } // { // "type": "R-Debugger", // "name": "Launch R-Workspace", diff --git a/.vscode/settings.json b/.vscode/settings.json old mode 100644 new mode 100755 index ead576e..bdeba9f --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -24,7 +24,7 @@ "editor.formatOnSave": true, "editor.formatOnType": true, "editor.codeActionsOnSave": { - "source.organizeImports": true + "source.organizeImports": "explicit" } }, "[html]": { diff --git a/AUTHORS.rst b/AUTHORS.rst old mode 100644 new mode 100755 diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/README.txt b/README.txt old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.0-py3-none-any.whl b/dist/igem-0.1.0-py3-none-any.whl old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.0.tar.gz b/dist/igem-0.1.0.tar.gz old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.1-py3-none-any.whl b/dist/igem-0.1.1-py3-none-any.whl old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.1.tar.gz b/dist/igem-0.1.1.tar.gz old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.2-py3-none-any.whl b/dist/igem-0.1.2-py3-none-any.whl old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.2.tar.gz b/dist/igem-0.1.2.tar.gz old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.3-py3-none-any.whl b/dist/igem-0.1.3-py3-none-any.whl old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.3.tar.gz b/dist/igem-0.1.3.tar.gz old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4-py3-none-any.whl b/dist/igem-0.1.4-py3-none-any.whl old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4.tar.gz b/dist/igem-0.1.4.tar.gz old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/LICENSE b/dist/igem-0.1.4/LICENSE old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/PKG-INFO b/dist/igem-0.1.4/PKG-INFO old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/README.txt b/dist/igem-0.1.4/README.txt old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/__init__.py b/dist/igem-0.1.4/igem/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/base_static/global/css/styles.css b/dist/igem-0.1.4/igem/base_static/global/css/styles.css old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/base_static/global/js/scripts.js b/dist/igem-0.1.4/igem/base_static/global/js/scripts.js old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/base_templates/global/base.html b/dist/igem-0.1.4/igem/base_templates/global/base.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/base_templates/global/partials/footer.html b/dist/igem-0.1.4/igem/base_templates/global/partials/footer.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/base_templates/global/partials/form.html b/dist/igem-0.1.4/igem/base_templates/global/partials/form.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/base_templates/global/partials/head.html b/dist/igem-0.1.4/igem/base_templates/global/partials/head.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/base_templates/global/partials/header.html b/dist/igem-0.1.4/igem/base_templates/global/partials/header.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/base_templates/global/partials/menu.html b/dist/igem-0.1.4/igem/base_templates/global/partials/menu.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/base_templates/global/partials/messages.html b/dist/igem-0.1.4/igem/base_templates/global/partials/messages.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/base_templates/global/partials/pagination.html b/dist/igem-0.1.4/igem/base_templates/global/partials/pagination.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/base_templates/global/partials/search.html b/dist/igem-0.1.4/igem/base_templates/global/partials/search.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/__init__.py b/dist/igem-0.1.4/igem/epc/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/analyze/__init__.py b/dist/igem-0.1.4/igem/epc/clarite/analyze/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/analyze/analyze.py b/dist/igem-0.1.4/igem/epc/clarite/analyze/analyze.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/analyze/interaction.py b/dist/igem-0.1.4/igem/epc/clarite/analyze/interaction.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/describe/__init__.py b/dist/igem-0.1.4/igem/epc/clarite/describe/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/describe/describe.py b/dist/igem-0.1.4/igem/epc/clarite/describe/describe.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/load/__init__.py b/dist/igem-0.1.4/igem/epc/clarite/load/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/load/load.py b/dist/igem-0.1.4/igem/epc/clarite/load/load.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/modify/__init__.py b/dist/igem-0.1.4/igem/epc/clarite/modify/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/modify/modify.py b/dist/igem-0.1.4/igem/epc/clarite/modify/modify.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/plot/__init__.py b/dist/igem-0.1.4/igem/epc/clarite/plot/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/plot/plot.py b/dist/igem-0.1.4/igem/epc/clarite/plot/plot.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/survey/__init__.py b/dist/igem-0.1.4/igem/epc/clarite/survey/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/clarite/survey/survey.py b/dist/igem-0.1.4/igem/epc/clarite/survey/survey.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/py_test_output/.gitignore b/dist/igem-0.1.4/igem/epc/tests/py_test_output/.gitignore old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/py_test_output/top_results_nhanesreal.png b/dist/igem-0.1.4/igem/epc/tests/py_test_output/top_results_nhanesreal.png old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/py_test_output/top_results_nhanesreal_no_cutoff.png b/dist/igem-0.1.4/igem/epc/tests/py_test_output/top_results_nhanesreal_no_cutoff.png old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/py_test_output/top_results_nhanessmall.png b/dist/igem-0.1.4/igem/epc/tests/py_test_output/top_results_nhanessmall.png old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/test_analyze/conftest.py b/dist/igem-0.1.4/igem/epc/tests/test_analyze/conftest.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/test_analyze/test_association_study.py b/dist/igem-0.1.4/igem/epc/tests/test_analyze/test_association_study.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/test_analyze/test_exe_pairwise.py b/dist/igem-0.1.4/igem/epc/tests/test_analyze/test_exe_pairwise.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/test_analyze/test_gwas.py b/dist/igem-0.1.4/igem/epc/tests/test_analyze/test_gwas.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/test_analyze/test_interaction_study.py b/dist/igem-0.1.4/igem/epc/tests/test_analyze/test_interaction_study.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/test_describe/conftest.py b/dist/igem-0.1.4/igem/epc/tests/test_describe/conftest.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/test_describe/test_describe.py b/dist/igem-0.1.4/igem/epc/tests/test_describe/test_describe.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/test_load/test_load.py b/dist/igem-0.1.4/igem/epc/tests/test_load/test_load.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/test_modify/conftest.py b/dist/igem-0.1.4/igem/epc/tests/test_modify/conftest.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/test_modify/test_modify.py b/dist/igem-0.1.4/igem/epc/tests/test_modify/test_modify.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/test_plot/conftest.py b/dist/igem-0.1.4/igem/epc/tests/test_plot/conftest.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/epc/tests/test_plot/test_plot.py b/dist/igem-0.1.4/igem/epc/tests/test_plot/test_plot.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/admin.py b/dist/igem-0.1.4/igem/ge/admin.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/apps.py b/dist/igem-0.1.4/igem/ge/apps.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/db/__init__.py b/dist/igem-0.1.4/igem/ge/db/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/db/get.py b/dist/igem-0.1.4/igem/ge/db/get.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/db/sync.py b/dist/igem-0.1.4/igem/ge/db/sync.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/filter/__init__.py b/dist/igem-0.1.4/igem/ge/filter/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/filter/convert.py b/dist/igem-0.1.4/igem/ge/filter/convert.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/filter/filters.py b/dist/igem-0.1.4/igem/ge/filter/filters.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/filter/tag.py b/dist/igem-0.1.4/igem/ge/filter/tag.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/filter/utils.py b/dist/igem-0.1.4/igem/ge/filter/utils.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/forms/__init__.py b/dist/igem-0.1.4/igem/ge/forms/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/forms/form_connector.py b/dist/igem-0.1.4/igem/ge/forms/form_connector.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/forms/form_wordterm.py b/dist/igem-0.1.4/igem/ge/forms/form_wordterm.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/management/commands/db.py b/dist/igem-0.1.4/igem/ge/management/commands/db.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/management/commands/filter.py b/dist/igem-0.1.4/igem/ge/management/commands/filter.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/management/commands/olds/collect.py b/dist/igem-0.1.4/igem/ge/management/commands/olds/collect.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/management/commands/olds/create_table.py b/dist/igem-0.1.4/igem/ge/management/commands/olds/create_table.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/management/commands/olds/db.py b/dist/igem-0.1.4/igem/ge/management/commands/olds/db.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/management/commands/olds/filter.py b/dist/igem-0.1.4/igem/ge/management/commands/olds/filter.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/management/commands/olds/filter_gene.py b/dist/igem-0.1.4/igem/ge/management/commands/olds/filter_gene.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/management/commands/olds/map.py b/dist/igem-0.1.4/igem/ge/management/commands/olds/map.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/management/commands/olds/prepare.py b/dist/igem-0.1.4/igem/ge/management/commands/olds/prepare.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/management/commands/olds/reduce.py b/dist/igem-0.1.4/igem/ge/management/commands/olds/reduce.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/migrations/0001_initial.py b/dist/igem-0.1.4/igem/ge/migrations/0001_initial.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/migrations/0002_logs_delete_logscollector_wfcontrol_igem_version_and_more.py b/dist/igem-0.1.4/igem/ge/migrations/0002_logs_delete_logscollector_wfcontrol_igem_version_and_more.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/migrations/0003_alter_logs_igem_version_alter_wfcontrol_igem_version.py b/dist/igem-0.1.4/igem/ge/migrations/0003_alter_logs_igem_version_alter_wfcontrol_igem_version.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/migrations/0004_alter_logs_igem_version_alter_wfcontrol_igem_version.py b/dist/igem-0.1.4/igem/ge/migrations/0004_alter_logs_igem_version_alter_wfcontrol_igem_version.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/migrations/0005_alter_wfcontrol_status.py b/dist/igem-0.1.4/igem/ge/migrations/0005_alter_wfcontrol_status.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/migrations/0006_alter_logs_igem_version_alter_wfcontrol_igem_version.py b/dist/igem-0.1.4/igem/ge/migrations/0006_alter_logs_igem_version_alter_wfcontrol_igem_version.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/models.py b/dist/igem-0.1.4/igem/ge/models.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/templates/ge/pages/detailview_connector.html b/dist/igem-0.1.4/igem/ge/templates/ge/pages/detailview_connector.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/templates/ge/pages/detailview_wordterm.html b/dist/igem-0.1.4/igem/ge/templates/ge/pages/detailview_wordterm.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/templates/ge/pages/listview_connector.html b/dist/igem-0.1.4/igem/ge/templates/ge/pages/listview_connector.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/templates/ge/pages/listview_wordterm.html b/dist/igem-0.1.4/igem/ge/templates/ge/pages/listview_wordterm.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/templates/ge/partials/login_message.html b/dist/igem-0.1.4/igem/ge/templates/ge/partials/login_message.html old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/tests/test_base.py b/dist/igem-0.1.4/igem/ge/tests/test_base.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/tests/test_db.py b/dist/igem-0.1.4/igem/ge/tests/test_db.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/tests/test_filter.py b/dist/igem-0.1.4/igem/ge/tests/test_filter.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/tests/test_model.py b/dist/igem-0.1.4/igem/ge/tests/test_model.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/tests/test_tag.py b/dist/igem-0.1.4/igem/ge/tests/test_tag.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/urls.py b/dist/igem-0.1.4/igem/ge/urls.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/utils/__init__.py b/dist/igem-0.1.4/igem/ge/utils/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/utils/logs.py b/dist/igem-0.1.4/igem/ge/utils/logs.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/views.py b/dist/igem-0.1.4/igem/ge/views.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/views/__init__.py b/dist/igem-0.1.4/igem/ge/views/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/views/detailview_connector.py b/dist/igem-0.1.4/igem/ge/views/detailview_connector.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/views/detailview_wordterm.py b/dist/igem-0.1.4/igem/ge/views/detailview_wordterm.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/ge/views/listviews_all.py b/dist/igem-0.1.4/igem/ge/views/listviews_all.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/omics/admin.py b/dist/igem-0.1.4/igem/omics/admin.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/omics/apps.py b/dist/igem-0.1.4/igem/omics/apps.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/omics/db/__init__.py b/dist/igem-0.1.4/igem/omics/db/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/omics/db/dbSNP_XML_CSV.py b/dist/igem-0.1.4/igem/omics/db/dbSNP_XML_CSV.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/omics/db/get.py b/dist/igem-0.1.4/igem/omics/db/get.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/omics/db/load.py b/dist/igem-0.1.4/igem/omics/db/load.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/omics/management/commands/omics.py b/dist/igem-0.1.4/igem/omics/management/commands/omics.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/omics/migrations/0001_initial.py b/dist/igem-0.1.4/igem/omics/migrations/0001_initial.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/omics/models.py b/dist/igem-0.1.4/igem/omics/models.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/omics/tests/test_ncbi.py b/dist/igem-0.1.4/igem/omics/tests/test_ncbi.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/omics/views.py b/dist/igem-0.1.4/igem/omics/views.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/admin.py b/dist/igem-0.1.4/igem/server/admin.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/apps.py b/dist/igem-0.1.4/igem/server/apps.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/etl/__init__.py b/dist/igem-0.1.4/igem/server/etl/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/etl/collect.py b/dist/igem-0.1.4/igem/server/etl/collect.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/etl/extractors.py b/dist/igem-0.1.4/igem/server/etl/extractors.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/etl/map.py b/dist/igem-0.1.4/igem/server/etl/map.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/etl/prepare.py b/dist/igem-0.1.4/igem/server/etl/prepare.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/etl/reduce.py b/dist/igem-0.1.4/igem/server/etl/reduce.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/etl/utils.py b/dist/igem-0.1.4/igem/server/etl/utils.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/management/commands/etl.py b/dist/igem-0.1.4/igem/server/management/commands/etl.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/management/commands/olds/collect.py b/dist/igem-0.1.4/igem/server/management/commands/olds/collect.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/management/commands/olds/create_table.py b/dist/igem-0.1.4/igem/server/management/commands/olds/create_table.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/management/commands/olds/db.py b/dist/igem-0.1.4/igem/server/management/commands/olds/db.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/management/commands/olds/filter.py b/dist/igem-0.1.4/igem/server/management/commands/olds/filter.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/management/commands/olds/filter_gene.py b/dist/igem-0.1.4/igem/server/management/commands/olds/filter_gene.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/management/commands/olds/map.py b/dist/igem-0.1.4/igem/server/management/commands/olds/map.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/management/commands/olds/prepare.py b/dist/igem-0.1.4/igem/server/management/commands/olds/prepare.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/management/commands/olds/reduce.py b/dist/igem-0.1.4/igem/server/management/commands/olds/reduce.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/management/commands/sql.py b/dist/igem-0.1.4/igem/server/management/commands/sql.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/models.py b/dist/igem-0.1.4/igem/server/models.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/sql/__init__.py b/dist/igem-0.1.4/igem/server/sql/__init__.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/sql/delete.py b/dist/igem-0.1.4/igem/server/sql/delete.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/sql/deploy.py b/dist/igem-0.1.4/igem/server/sql/deploy.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/sql/get.py b/dist/igem-0.1.4/igem/server/sql/get.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/sql/load.py b/dist/igem-0.1.4/igem/server/sql/load.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/sql/truncate.py b/dist/igem-0.1.4/igem/server/sql/truncate.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/tests/test_etl.py b/dist/igem-0.1.4/igem/server/tests/test_etl.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/tests/test_sql.py b/dist/igem-0.1.4/igem/server/tests/test_sql.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/server/views.py b/dist/igem-0.1.4/igem/server/views.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/src/asgi.py b/dist/igem-0.1.4/igem/src/asgi.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/src/settings.py b/dist/igem-0.1.4/igem/src/settings.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/src/settings_debug.py b/dist/igem-0.1.4/igem/src/settings_debug.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/src/urls.py b/dist/igem-0.1.4/igem/src/urls.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/igem/src/wsgi.py b/dist/igem-0.1.4/igem/src/wsgi.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/pyproject.toml b/dist/igem-0.1.4/pyproject.toml old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.4/setup.py b/dist/igem-0.1.4/setup.py old mode 100644 new mode 100755 diff --git a/dist/igem-0.1.5-py3-none-any.whl b/dist/igem-0.1.5-py3-none-any.whl new file mode 100755 index 0000000..1098ab2 Binary files /dev/null and b/dist/igem-0.1.5-py3-none-any.whl differ diff --git a/dist/igem-0.1.5.tar.gz b/dist/igem-0.1.5.tar.gz new file mode 100755 index 0000000..86e8aa7 Binary files /dev/null and b/dist/igem-0.1.5.tar.gz differ diff --git a/dist/igem-0.1.6-py3-none-any.whl b/dist/igem-0.1.6-py3-none-any.whl new file mode 100755 index 0000000..4b764ef Binary files /dev/null and b/dist/igem-0.1.6-py3-none-any.whl differ diff --git a/dist/igem-0.1.6.tar.gz b/dist/igem-0.1.6.tar.gz new file mode 100755 index 0000000..329f879 Binary files /dev/null and b/dist/igem-0.1.6.tar.gz differ diff --git a/docs/Makefile b/docs/Makefile old mode 100644 new mode 100755 diff --git a/docs/UserGuider/IGEM Functions.docx b/docs/UserGuider/IGEM Functions.docx new file mode 100755 index 0000000..1008e0d Binary files /dev/null and b/docs/UserGuider/IGEM Functions.docx differ diff --git a/docs/UserGuider/IGEM_Client_UserGuider.pdf b/docs/UserGuider/IGEM_Client_UserGuider.pdf old mode 100644 new mode 100755 diff --git a/docs/UserGuider/IGEM_lite_user_guider.docx b/docs/UserGuider/IGEM_lite_user_guider.docx old mode 100644 new mode 100755 diff --git a/docs/UserGuider/IGEM_user_guider.docx b/docs/UserGuider/IGEM_user_guider.docx old mode 100644 new mode 100755 diff --git a/docs/UserGuider/IGEM_user_guider_0.1.4.docx b/docs/UserGuider/IGEM_user_guider_0.1.4.docx old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/epc/analyze.doctree b/docs/build/doctrees/epc/analyze.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/epc/describe.doctree b/docs/build/doctrees/epc/describe.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/epc/index.doctree b/docs/build/doctrees/epc/index.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/epc/load.doctree b/docs/build/doctrees/epc/load.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/epc/modify.doctree b/docs/build/doctrees/epc/modify.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/epc/plot.doctree b/docs/build/doctrees/epc/plot.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/epc/survey.doctree b/docs/build/doctrees/epc/survey.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/ge/db/index.doctree b/docs/build/doctrees/ge/db/index.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/ge/filter/gene_exposome.doctree b/docs/build/doctrees/ge/filter/gene_exposome.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/ge/filter/index.doctree b/docs/build/doctrees/ge/filter/index.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/ge/filter/parameters_file.doctree b/docs/build/doctrees/ge/filter/parameters_file.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/ge/filter/snp_exposome.doctree b/docs/build/doctrees/ge/filter/snp_exposome.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/ge/filter/tags.doctree b/docs/build/doctrees/ge/filter/tags.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/ge/filter/term_map.doctree b/docs/build/doctrees/ge/filter/term_map.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/ge/filter/word_map.doctree b/docs/build/doctrees/ge/filter/word_map.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/ge/filter/word_to_term.doctree b/docs/build/doctrees/ge/filter/word_to_term.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/ge/index.doctree b/docs/build/doctrees/ge/index.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/install.doctree b/docs/build/doctrees/install.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/introduction.doctree b/docs/build/doctrees/introduction.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/omics/dbsnp.doctree b/docs/build/doctrees/omics/dbsnp.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/omics/index.doctree b/docs/build/doctrees/omics/index.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/security.doctree b/docs/build/doctrees/security.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/etl/collect.doctree b/docs/build/doctrees/server/etl/collect.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/etl/index.doctree b/docs/build/doctrees/server/etl/index.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/etl/map.doctree b/docs/build/doctrees/server/etl/map.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/etl/prepare.doctree b/docs/build/doctrees/server/etl/prepare.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/etl/reduce.doctree b/docs/build/doctrees/server/etl/reduce.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/etl/workflow.doctree b/docs/build/doctrees/server/etl/workflow.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/index.doctree b/docs/build/doctrees/server/index.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/md/category.doctree b/docs/build/doctrees/server/md/category.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/md/connector.doctree b/docs/build/doctrees/server/md/connector.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/md/datasource.doctree b/docs/build/doctrees/server/md/datasource.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/md/group.doctree b/docs/build/doctrees/server/md/group.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/md/index.doctree b/docs/build/doctrees/server/md/index.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/md/prefix.doctree b/docs/build/doctrees/server/md/prefix.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/md/term.doctree b/docs/build/doctrees/server/md/term.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/md/wordterm.doctree b/docs/build/doctrees/server/md/wordterm.doctree old mode 100644 new mode 100755 diff --git a/docs/build/doctrees/server/sql/index.doctree b/docs/build/doctrees/server/sql/index.doctree old mode 100644 new mode 100755 diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/architecture.png b/docs/build/html/_images/architecture.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/database.png b/docs/build/html/_images/database.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/etl_workflow_01.png b/docs/build/html/_images/etl_workflow_01.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/etl_workflow_02.png b/docs/build/html/_images/etl_workflow_02.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/functions.png b/docs/build/html/_images/functions.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/install_02.png b/docs/build/html/_images/install_02.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/install_03.png b/docs/build/html/_images/install_03.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/install_04.png b/docs/build/html/_images/install_04.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/install_05.png b/docs/build/html/_images/install_05.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/install_06.png b/docs/build/html/_images/install_06.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/install_07.png b/docs/build/html/_images/install_07.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/install_08.png b/docs/build/html/_images/install_08.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_01_01_datasource.png b/docs/build/html/_images/md_01_01_datasource.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_01_02_datasource.png b/docs/build/html/_images/md_01_02_datasource.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_01_03_datasource.png b/docs/build/html/_images/md_01_03_datasource.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_01_04_datasource.png b/docs/build/html/_images/md_01_04_datasource.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_01_05_datasource.png b/docs/build/html/_images/md_01_05_datasource.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_02_01_connector.png b/docs/build/html/_images/md_02_01_connector.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_02_02_connector.png b/docs/build/html/_images/md_02_02_connector.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_02_03_connector.png b/docs/build/html/_images/md_02_03_connector.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_02_04_connector.png b/docs/build/html/_images/md_02_04_connector.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_02_05_connector.png b/docs/build/html/_images/md_02_05_connector.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_03_01_category.png b/docs/build/html/_images/md_03_01_category.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_03_02_category.png b/docs/build/html/_images/md_03_02_category.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_03_03_category.png b/docs/build/html/_images/md_03_03_category.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_04_01_group.png b/docs/build/html/_images/md_04_01_group.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_04_03_group.png b/docs/build/html/_images/md_04_03_group.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_05_01_term.png b/docs/build/html/_images/md_05_01_term.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_05_02_term.png b/docs/build/html/_images/md_05_02_term.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_05_03_term.png b/docs/build/html/_images/md_05_03_term.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_06_01_prefix.png b/docs/build/html/_images/md_06_01_prefix.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_06_02_prefix.png b/docs/build/html/_images/md_06_02_prefix.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_07_01_wordterm.png b/docs/build/html/_images/md_07_01_wordterm.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/md_07_02_wordterm.png b/docs/build/html/_images/md_07_02_wordterm.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/security_01.png b/docs/build/html/_images/security_01.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/security_02.png b/docs/build/html/_images/security_02.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/security_03.png b/docs/build/html/_images/security_03.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/security_04.png b/docs/build/html/_images/security_04.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/security_05.png b/docs/build/html/_images/security_05.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/security_06.png b/docs/build/html/_images/security_06.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/security_07.png b/docs/build/html/_images/security_07.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/security_08.png b/docs/build/html/_images/security_08.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/security_09.png b/docs/build/html/_images/security_09.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/security_10.png b/docs/build/html/_images/security_10.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_images/security_11.png b/docs/build/html/_images/security_11.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/epc/analyze.rst.txt b/docs/build/html/_sources/epc/analyze.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/epc/describe.rst.txt b/docs/build/html/_sources/epc/describe.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/epc/index.rst.txt b/docs/build/html/_sources/epc/index.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/epc/load.rst.txt b/docs/build/html/_sources/epc/load.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/epc/modify.rst.txt b/docs/build/html/_sources/epc/modify.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/epc/plot.rst.txt b/docs/build/html/_sources/epc/plot.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/epc/survey.rst.txt b/docs/build/html/_sources/epc/survey.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/ge/db/index.rst.txt b/docs/build/html/_sources/ge/db/index.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/ge/filter/gene_exposome.rst.txt b/docs/build/html/_sources/ge/filter/gene_exposome.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/ge/filter/index.rst.txt b/docs/build/html/_sources/ge/filter/index.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/ge/filter/parameters_file.rst.txt b/docs/build/html/_sources/ge/filter/parameters_file.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/ge/filter/snp_exposome.rst.txt b/docs/build/html/_sources/ge/filter/snp_exposome.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/ge/filter/tags.rst.txt b/docs/build/html/_sources/ge/filter/tags.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/ge/filter/term_map.rst.txt b/docs/build/html/_sources/ge/filter/term_map.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/ge/filter/word_map.rst.txt b/docs/build/html/_sources/ge/filter/word_map.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/ge/filter/word_to_term.rst.txt b/docs/build/html/_sources/ge/filter/word_to_term.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/ge/index.rst.txt b/docs/build/html/_sources/ge/index.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/install.rst.txt b/docs/build/html/_sources/install.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/introduction.rst.txt b/docs/build/html/_sources/introduction.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/omics/dbsnp.rst.txt b/docs/build/html/_sources/omics/dbsnp.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/omics/index.rst.txt b/docs/build/html/_sources/omics/index.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/security.rst.txt b/docs/build/html/_sources/security.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/etl/collect.rst.txt b/docs/build/html/_sources/server/etl/collect.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/etl/index.rst.txt b/docs/build/html/_sources/server/etl/index.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/etl/map.rst.txt b/docs/build/html/_sources/server/etl/map.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/etl/prepare.rst.txt b/docs/build/html/_sources/server/etl/prepare.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/etl/reduce.rst.txt b/docs/build/html/_sources/server/etl/reduce.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/etl/workflow.rst.txt b/docs/build/html/_sources/server/etl/workflow.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/index.rst.txt b/docs/build/html/_sources/server/index.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/md/category.rst.txt b/docs/build/html/_sources/server/md/category.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/md/connector.rst.txt b/docs/build/html/_sources/server/md/connector.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/md/datasource.rst.txt b/docs/build/html/_sources/server/md/datasource.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/md/group.rst.txt b/docs/build/html/_sources/server/md/group.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/md/index.rst.txt b/docs/build/html/_sources/server/md/index.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/md/prefix.rst.txt b/docs/build/html/_sources/server/md/prefix.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/md/term.rst.txt b/docs/build/html/_sources/server/md/term.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/md/wordterm.rst.txt b/docs/build/html/_sources/server/md/wordterm.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_sources/server/sql/index.rst.txt b/docs/build/html/_sources/server/sql/index.rst.txt old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/badge_only.css b/docs/build/html/_static/css/badge_only.css old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff b/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 b/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff b/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 b/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/fontawesome-webfont.eot b/docs/build/html/_static/css/fonts/fontawesome-webfont.eot old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/fontawesome-webfont.svg b/docs/build/html/_static/css/fonts/fontawesome-webfont.svg old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf b/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/fontawesome-webfont.woff b/docs/build/html/_static/css/fonts/fontawesome-webfont.woff old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 b/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/lato-bold-italic.woff b/docs/build/html/_static/css/fonts/lato-bold-italic.woff old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 b/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/lato-bold.woff b/docs/build/html/_static/css/fonts/lato-bold.woff old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/lato-bold.woff2 b/docs/build/html/_static/css/fonts/lato-bold.woff2 old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/lato-normal-italic.woff b/docs/build/html/_static/css/fonts/lato-normal-italic.woff old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 b/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/lato-normal.woff b/docs/build/html/_static/css/fonts/lato-normal.woff old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/fonts/lato-normal.woff2 b/docs/build/html/_static/css/fonts/lato-normal.woff2 old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/css/theme.css b/docs/build/html/_static/css/theme.css old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/doctools.js b/docs/build/html/_static/doctools.js old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/example/web_add.png b/docs/build/html/_static/example/web_add.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/example/web_key.png b/docs/build/html/_static/example/web_key.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/file.png b/docs/build/html/_static/file.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/js/badge_only.js b/docs/build/html/_static/js/badge_only.js old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/js/html5shiv-printshiv.min.js b/docs/build/html/_static/js/html5shiv-printshiv.min.js old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/js/html5shiv.min.js b/docs/build/html/_static/js/html5shiv.min.js old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/js/theme.js b/docs/build/html/_static/js/theme.js old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/language_data.js b/docs/build/html/_static/language_data.js old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/logo.jpg b/docs/build/html/_static/logo.jpg old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/minus.png b/docs/build/html/_static/minus.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/Architecture.png b/docs/build/html/_static/pictures/Architecture.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/database.png b/docs/build/html/_static/pictures/database.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/etl_workflow_01.png b/docs/build/html/_static/pictures/etl_workflow_01.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/etl_workflow_02.png b/docs/build/html/_static/pictures/etl_workflow_02.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/example_hpc.01.png b/docs/build/html/_static/pictures/example_hpc.01.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/functions.png b/docs/build/html/_static/pictures/functions.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/install_01.png b/docs/build/html/_static/pictures/install_01.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/install_02.png b/docs/build/html/_static/pictures/install_02.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/install_03.png b/docs/build/html/_static/pictures/install_03.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/install_04.png b/docs/build/html/_static/pictures/install_04.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/install_05.png b/docs/build/html/_static/pictures/install_05.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/install_06.png b/docs/build/html/_static/pictures/install_06.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/install_07.png b/docs/build/html/_static/pictures/install_07.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/install_08.png b/docs/build/html/_static/pictures/install_08.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/install_09.png b/docs/build/html/_static/pictures/install_09.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/logo.jpg b/docs/build/html/_static/pictures/logo.jpg old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_01_01_datasource.png b/docs/build/html/_static/pictures/md_01_01_datasource.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_01_02_datasource.png b/docs/build/html/_static/pictures/md_01_02_datasource.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_01_03_datasource.png b/docs/build/html/_static/pictures/md_01_03_datasource.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_01_04_datasource.png b/docs/build/html/_static/pictures/md_01_04_datasource.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_01_05_datasource.png b/docs/build/html/_static/pictures/md_01_05_datasource.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_02_01_connector.png b/docs/build/html/_static/pictures/md_02_01_connector.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_02_02_connector.png b/docs/build/html/_static/pictures/md_02_02_connector.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_02_03_connector.png b/docs/build/html/_static/pictures/md_02_03_connector.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_02_04_connector.png b/docs/build/html/_static/pictures/md_02_04_connector.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_02_05_connector.png b/docs/build/html/_static/pictures/md_02_05_connector.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_03_01_category.png b/docs/build/html/_static/pictures/md_03_01_category.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_03_02_category.png b/docs/build/html/_static/pictures/md_03_02_category.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_03_03_category.png b/docs/build/html/_static/pictures/md_03_03_category.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_04_01_group.png b/docs/build/html/_static/pictures/md_04_01_group.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_04_02_group.png b/docs/build/html/_static/pictures/md_04_02_group.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_04_03_group.png b/docs/build/html/_static/pictures/md_04_03_group.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_05_01_term.png b/docs/build/html/_static/pictures/md_05_01_term.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_05_02_term.png b/docs/build/html/_static/pictures/md_05_02_term.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_05_03_term.png b/docs/build/html/_static/pictures/md_05_03_term.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_06_01_prefix.png b/docs/build/html/_static/pictures/md_06_01_prefix.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_06_02_prefix.png b/docs/build/html/_static/pictures/md_06_02_prefix.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_07_01_wordterm.png b/docs/build/html/_static/pictures/md_07_01_wordterm.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/md_07_02_wordterm.png b/docs/build/html/_static/pictures/md_07_02_wordterm.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/security_01.png b/docs/build/html/_static/pictures/security_01.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/security_02.png b/docs/build/html/_static/pictures/security_02.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/security_03.png b/docs/build/html/_static/pictures/security_03.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/security_04.png b/docs/build/html/_static/pictures/security_04.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/security_05.png b/docs/build/html/_static/pictures/security_05.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/security_06.png b/docs/build/html/_static/pictures/security_06.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/security_07.png b/docs/build/html/_static/pictures/security_07.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/security_08.png b/docs/build/html/_static/pictures/security_08.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/security_09.png b/docs/build/html/_static/pictures/security_09.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/security_10.png b/docs/build/html/_static/pictures/security_10.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pictures/security_11.png b/docs/build/html/_static/pictures/security_11.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/plus.png b/docs/build/html/_static/plus.png old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/pygments.css b/docs/build/html/_static/pygments.css old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/searchtools.js b/docs/build/html/_static/searchtools.js old mode 100644 new mode 100755 diff --git a/docs/build/html/_static/sphinx_highlight.js b/docs/build/html/_static/sphinx_highlight.js old mode 100644 new mode 100755 diff --git a/docs/build/html/epc/analyze.html b/docs/build/html/epc/analyze.html old mode 100644 new mode 100755 diff --git a/docs/build/html/epc/describe.html b/docs/build/html/epc/describe.html old mode 100644 new mode 100755 diff --git a/docs/build/html/epc/index.html b/docs/build/html/epc/index.html old mode 100644 new mode 100755 diff --git a/docs/build/html/epc/load.html b/docs/build/html/epc/load.html old mode 100644 new mode 100755 diff --git a/docs/build/html/epc/modify.html b/docs/build/html/epc/modify.html old mode 100644 new mode 100755 diff --git a/docs/build/html/epc/plot.html b/docs/build/html/epc/plot.html old mode 100644 new mode 100755 diff --git a/docs/build/html/epc/survey.html b/docs/build/html/epc/survey.html old mode 100644 new mode 100755 diff --git a/docs/build/html/ge/db/index.html b/docs/build/html/ge/db/index.html old mode 100644 new mode 100755 diff --git a/docs/build/html/ge/filter/gene_exposome.html b/docs/build/html/ge/filter/gene_exposome.html old mode 100644 new mode 100755 diff --git a/docs/build/html/ge/filter/index.html b/docs/build/html/ge/filter/index.html old mode 100644 new mode 100755 diff --git a/docs/build/html/ge/filter/parameters_file.html b/docs/build/html/ge/filter/parameters_file.html old mode 100644 new mode 100755 diff --git a/docs/build/html/ge/filter/snp_exposome.html b/docs/build/html/ge/filter/snp_exposome.html old mode 100644 new mode 100755 diff --git a/docs/build/html/ge/filter/tags.html b/docs/build/html/ge/filter/tags.html old mode 100644 new mode 100755 diff --git a/docs/build/html/ge/filter/term_map.html b/docs/build/html/ge/filter/term_map.html old mode 100644 new mode 100755 diff --git a/docs/build/html/ge/filter/word_map.html b/docs/build/html/ge/filter/word_map.html old mode 100644 new mode 100755 diff --git a/docs/build/html/ge/filter/word_to_term.html b/docs/build/html/ge/filter/word_to_term.html old mode 100644 new mode 100755 diff --git a/docs/build/html/ge/index.html b/docs/build/html/ge/index.html old mode 100644 new mode 100755 diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html old mode 100644 new mode 100755 diff --git a/docs/build/html/index.html b/docs/build/html/index.html old mode 100644 new mode 100755 diff --git a/docs/build/html/install.html b/docs/build/html/install.html old mode 100644 new mode 100755 diff --git a/docs/build/html/introduction.html b/docs/build/html/introduction.html old mode 100644 new mode 100755 diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv old mode 100644 new mode 100755 diff --git a/docs/build/html/omics/dbsnp.html b/docs/build/html/omics/dbsnp.html old mode 100644 new mode 100755 diff --git a/docs/build/html/omics/index.html b/docs/build/html/omics/index.html old mode 100644 new mode 100755 diff --git a/docs/build/html/search.html b/docs/build/html/search.html old mode 100644 new mode 100755 diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js old mode 100644 new mode 100755 diff --git a/docs/build/html/security.html b/docs/build/html/security.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/etl/collect.html b/docs/build/html/server/etl/collect.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/etl/index.html b/docs/build/html/server/etl/index.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/etl/map.html b/docs/build/html/server/etl/map.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/etl/prepare.html b/docs/build/html/server/etl/prepare.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/etl/reduce.html b/docs/build/html/server/etl/reduce.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/etl/workflow.html b/docs/build/html/server/etl/workflow.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/index.html b/docs/build/html/server/index.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/md/category.html b/docs/build/html/server/md/category.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/md/connector.html b/docs/build/html/server/md/connector.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/md/datasource.html b/docs/build/html/server/md/datasource.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/md/group.html b/docs/build/html/server/md/group.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/md/index.html b/docs/build/html/server/md/index.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/md/prefix.html b/docs/build/html/server/md/prefix.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/md/term.html b/docs/build/html/server/md/term.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/md/wordterm.html b/docs/build/html/server/md/wordterm.html old mode 100644 new mode 100755 diff --git a/docs/build/html/server/sql/index.html b/docs/build/html/server/sql/index.html old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/environment.pickle b/docs/doc/build/.doctrees/environment.pickle old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/epc/analyze.doctree b/docs/doc/build/.doctrees/epc/analyze.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/epc/describe.doctree b/docs/doc/build/.doctrees/epc/describe.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/epc/index.doctree b/docs/doc/build/.doctrees/epc/index.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/epc/load.doctree b/docs/doc/build/.doctrees/epc/load.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/epc/modify.doctree b/docs/doc/build/.doctrees/epc/modify.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/epc/plot.doctree b/docs/doc/build/.doctrees/epc/plot.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/epc/survey.doctree b/docs/doc/build/.doctrees/epc/survey.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/ge/db/index.doctree b/docs/doc/build/.doctrees/ge/db/index.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/ge/filter/gene_exposome.doctree b/docs/doc/build/.doctrees/ge/filter/gene_exposome.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/ge/filter/index.doctree b/docs/doc/build/.doctrees/ge/filter/index.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/ge/filter/parameters_file.doctree b/docs/doc/build/.doctrees/ge/filter/parameters_file.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/ge/filter/snp_exposome.doctree b/docs/doc/build/.doctrees/ge/filter/snp_exposome.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/ge/filter/tags.doctree b/docs/doc/build/.doctrees/ge/filter/tags.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/ge/filter/term_map.doctree b/docs/doc/build/.doctrees/ge/filter/term_map.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/ge/filter/word_map.doctree b/docs/doc/build/.doctrees/ge/filter/word_map.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/ge/filter/word_to_term.doctree b/docs/doc/build/.doctrees/ge/filter/word_to_term.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/ge/index.doctree b/docs/doc/build/.doctrees/ge/index.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/index.doctree b/docs/doc/build/.doctrees/index.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/install.doctree b/docs/doc/build/.doctrees/install.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/introduction.doctree b/docs/doc/build/.doctrees/introduction.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/omics/dbsnp.doctree b/docs/doc/build/.doctrees/omics/dbsnp.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/omics/index.doctree b/docs/doc/build/.doctrees/omics/index.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/security.doctree b/docs/doc/build/.doctrees/security.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/etl/collect.doctree b/docs/doc/build/.doctrees/server/etl/collect.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/etl/index.doctree b/docs/doc/build/.doctrees/server/etl/index.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/etl/map.doctree b/docs/doc/build/.doctrees/server/etl/map.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/etl/prepare.doctree b/docs/doc/build/.doctrees/server/etl/prepare.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/etl/reduce.doctree b/docs/doc/build/.doctrees/server/etl/reduce.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/etl/workflow.doctree b/docs/doc/build/.doctrees/server/etl/workflow.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/index.doctree b/docs/doc/build/.doctrees/server/index.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/md/category.doctree b/docs/doc/build/.doctrees/server/md/category.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/md/connector.doctree b/docs/doc/build/.doctrees/server/md/connector.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/md/datasource.doctree b/docs/doc/build/.doctrees/server/md/datasource.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/md/group.doctree b/docs/doc/build/.doctrees/server/md/group.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/md/index.doctree b/docs/doc/build/.doctrees/server/md/index.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/md/prefix.doctree b/docs/doc/build/.doctrees/server/md/prefix.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/md/term.doctree b/docs/doc/build/.doctrees/server/md/term.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/md/wordterm.doctree b/docs/doc/build/.doctrees/server/md/wordterm.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/.doctrees/server/sql/index.doctree b/docs/doc/build/.doctrees/server/sql/index.doctree old mode 100644 new mode 100755 diff --git a/docs/doc/build/rst2pdf.pdf b/docs/doc/build/rst2pdf.pdf old mode 100644 new mode 100755 diff --git a/docs/make.bat b/docs/make.bat old mode 100644 new mode 100755 diff --git a/docs/source/_static/example/web_add.png b/docs/source/_static/example/web_add.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/example/web_key.png b/docs/source/_static/example/web_key.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/Architecture.png b/docs/source/_static/pictures/Architecture.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/database.png b/docs/source/_static/pictures/database.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/etl_workflow_01.png b/docs/source/_static/pictures/etl_workflow_01.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/etl_workflow_02.png b/docs/source/_static/pictures/etl_workflow_02.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/example_hpc.01.png b/docs/source/_static/pictures/example_hpc.01.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/functions.png b/docs/source/_static/pictures/functions.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/install_01.png b/docs/source/_static/pictures/install_01.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/install_02.png b/docs/source/_static/pictures/install_02.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/install_03.png b/docs/source/_static/pictures/install_03.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/install_04.png b/docs/source/_static/pictures/install_04.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/install_05.png b/docs/source/_static/pictures/install_05.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/install_06.png b/docs/source/_static/pictures/install_06.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/install_07.png b/docs/source/_static/pictures/install_07.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/install_08.png b/docs/source/_static/pictures/install_08.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/install_09.png b/docs/source/_static/pictures/install_09.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/logo.jpg b/docs/source/_static/pictures/logo.jpg old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_01_01_datasource.png b/docs/source/_static/pictures/md_01_01_datasource.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_01_02_datasource.png b/docs/source/_static/pictures/md_01_02_datasource.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_01_03_datasource.png b/docs/source/_static/pictures/md_01_03_datasource.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_01_04_datasource.png b/docs/source/_static/pictures/md_01_04_datasource.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_01_05_datasource.png b/docs/source/_static/pictures/md_01_05_datasource.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_02_01_connector.png b/docs/source/_static/pictures/md_02_01_connector.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_02_02_connector.png b/docs/source/_static/pictures/md_02_02_connector.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_02_03_connector.png b/docs/source/_static/pictures/md_02_03_connector.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_02_04_connector.png b/docs/source/_static/pictures/md_02_04_connector.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_02_05_connector.png b/docs/source/_static/pictures/md_02_05_connector.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_03_01_category.png b/docs/source/_static/pictures/md_03_01_category.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_03_02_category.png b/docs/source/_static/pictures/md_03_02_category.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_03_03_category.png b/docs/source/_static/pictures/md_03_03_category.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_04_01_group.png b/docs/source/_static/pictures/md_04_01_group.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_04_02_group.png b/docs/source/_static/pictures/md_04_02_group.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_04_03_group.png b/docs/source/_static/pictures/md_04_03_group.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_05_01_term.png b/docs/source/_static/pictures/md_05_01_term.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_05_02_term.png b/docs/source/_static/pictures/md_05_02_term.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_05_03_term.png b/docs/source/_static/pictures/md_05_03_term.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_06_01_prefix.png b/docs/source/_static/pictures/md_06_01_prefix.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_06_02_prefix.png b/docs/source/_static/pictures/md_06_02_prefix.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_07_01_wordterm.png b/docs/source/_static/pictures/md_07_01_wordterm.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/md_07_02_wordterm.png b/docs/source/_static/pictures/md_07_02_wordterm.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/security_01.png b/docs/source/_static/pictures/security_01.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/security_02.png b/docs/source/_static/pictures/security_02.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/security_03.png b/docs/source/_static/pictures/security_03.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/security_04.png b/docs/source/_static/pictures/security_04.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/security_05.png b/docs/source/_static/pictures/security_05.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/security_06.png b/docs/source/_static/pictures/security_06.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/security_07.png b/docs/source/_static/pictures/security_07.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/security_08.png b/docs/source/_static/pictures/security_08.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/security_09.png b/docs/source/_static/pictures/security_09.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/security_10.png b/docs/source/_static/pictures/security_10.png old mode 100644 new mode 100755 diff --git a/docs/source/_static/pictures/security_11.png b/docs/source/_static/pictures/security_11.png old mode 100644 new mode 100755 diff --git a/docs/source/conf.py b/docs/source/conf.py old mode 100644 new mode 100755 diff --git a/docs/source/epc/analyze.rst b/docs/source/epc/analyze.rst old mode 100644 new mode 100755 diff --git a/docs/source/epc/describe.rst b/docs/source/epc/describe.rst old mode 100644 new mode 100755 diff --git a/docs/source/epc/index.rst b/docs/source/epc/index.rst old mode 100644 new mode 100755 diff --git a/docs/source/epc/load.rst b/docs/source/epc/load.rst old mode 100644 new mode 100755 diff --git a/docs/source/epc/modify.rst b/docs/source/epc/modify.rst old mode 100644 new mode 100755 diff --git a/docs/source/epc/plot.rst b/docs/source/epc/plot.rst old mode 100644 new mode 100755 diff --git a/docs/source/epc/survey.rst b/docs/source/epc/survey.rst old mode 100644 new mode 100755 diff --git a/docs/source/ge/db/index.rst b/docs/source/ge/db/index.rst old mode 100644 new mode 100755 diff --git a/docs/source/ge/filter/gene_exposome.rst b/docs/source/ge/filter/gene_exposome.rst old mode 100644 new mode 100755 diff --git a/docs/source/ge/filter/index.rst b/docs/source/ge/filter/index.rst old mode 100644 new mode 100755 diff --git a/docs/source/ge/filter/parameters_file.rst b/docs/source/ge/filter/parameters_file.rst old mode 100644 new mode 100755 diff --git a/docs/source/ge/filter/snp_exposome.rst b/docs/source/ge/filter/snp_exposome.rst old mode 100644 new mode 100755 diff --git a/docs/source/ge/filter/tags.rst b/docs/source/ge/filter/tags.rst old mode 100644 new mode 100755 diff --git a/docs/source/ge/filter/term_map.rst b/docs/source/ge/filter/term_map.rst old mode 100644 new mode 100755 diff --git a/docs/source/ge/filter/word_map.rst b/docs/source/ge/filter/word_map.rst old mode 100644 new mode 100755 diff --git a/docs/source/ge/filter/word_to_term.rst b/docs/source/ge/filter/word_to_term.rst old mode 100644 new mode 100755 diff --git a/docs/source/ge/index.rst b/docs/source/ge/index.rst old mode 100644 new mode 100755 diff --git a/docs/source/index.rst b/docs/source/index.rst old mode 100644 new mode 100755 diff --git a/docs/source/install.rst b/docs/source/install.rst old mode 100644 new mode 100755 diff --git a/docs/source/introduction.rst b/docs/source/introduction.rst old mode 100644 new mode 100755 diff --git a/docs/source/omics/dbsnp.rst b/docs/source/omics/dbsnp.rst old mode 100644 new mode 100755 diff --git a/docs/source/omics/index.rst b/docs/source/omics/index.rst old mode 100644 new mode 100755 diff --git a/docs/source/security.rst b/docs/source/security.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/etl/collect.rst b/docs/source/server/etl/collect.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/etl/index.rst b/docs/source/server/etl/index.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/etl/map.rst b/docs/source/server/etl/map.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/etl/prepare.rst b/docs/source/server/etl/prepare.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/etl/reduce.rst b/docs/source/server/etl/reduce.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/etl/workflow.rst b/docs/source/server/etl/workflow.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/index.rst b/docs/source/server/index.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/md/category.rst b/docs/source/server/md/category.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/md/connector.rst b/docs/source/server/md/connector.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/md/datasource.rst b/docs/source/server/md/datasource.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/md/group.rst b/docs/source/server/md/group.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/md/index.rst b/docs/source/server/md/index.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/md/prefix.rst b/docs/source/server/md/prefix.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/md/term.rst b/docs/source/server/md/term.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/md/wordterm.rst b/docs/source/server/md/wordterm.rst old mode 100644 new mode 100755 diff --git a/docs/source/server/sql/index.rst b/docs/source/server/sql/index.rst old mode 100644 new mode 100755 diff --git a/igem/__init__.py b/igem/__init__.py old mode 100644 new mode 100755 diff --git a/igem/base_static/global/css/styles.css b/igem/base_static/global/css/styles.css old mode 100644 new mode 100755 diff --git a/igem/base_static/global/js/scripts.js b/igem/base_static/global/js/scripts.js old mode 100644 new mode 100755 diff --git a/igem/base_templates/global/base.html b/igem/base_templates/global/base.html old mode 100644 new mode 100755 diff --git a/igem/base_templates/global/partials/footer.html b/igem/base_templates/global/partials/footer.html old mode 100644 new mode 100755 diff --git a/igem/base_templates/global/partials/form.html b/igem/base_templates/global/partials/form.html old mode 100644 new mode 100755 diff --git a/igem/base_templates/global/partials/head.html b/igem/base_templates/global/partials/head.html old mode 100644 new mode 100755 diff --git a/igem/base_templates/global/partials/header.html b/igem/base_templates/global/partials/header.html old mode 100644 new mode 100755 diff --git a/igem/base_templates/global/partials/menu.html b/igem/base_templates/global/partials/menu.html old mode 100644 new mode 100755 diff --git a/igem/base_templates/global/partials/messages.html b/igem/base_templates/global/partials/messages.html old mode 100644 new mode 100755 diff --git a/igem/base_templates/global/partials/pagination.html b/igem/base_templates/global/partials/pagination.html old mode 100644 new mode 100755 diff --git a/igem/base_templates/global/partials/search.html b/igem/base_templates/global/partials/search.html old mode 100644 new mode 100755 diff --git a/igem/epc/__init__.py b/igem/epc/__init__.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/analyze/__init__.py b/igem/epc/clarite/analyze/__init__.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/analyze/analyze.py b/igem/epc/clarite/analyze/analyze.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/analyze/interaction.py b/igem/epc/clarite/analyze/interaction.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/describe/__init__.py b/igem/epc/clarite/describe/__init__.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/describe/describe.py b/igem/epc/clarite/describe/describe.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/load/__init__.py b/igem/epc/clarite/load/__init__.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/load/load.py b/igem/epc/clarite/load/load.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/modify/__init__.py b/igem/epc/clarite/modify/__init__.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/modify/modify.py b/igem/epc/clarite/modify/modify.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/plot/__init__.py b/igem/epc/clarite/plot/__init__.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/plot/plot.py b/igem/epc/clarite/plot/plot.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/survey/__init__.py b/igem/epc/clarite/survey/__init__.py old mode 100644 new mode 100755 diff --git a/igem/epc/clarite/survey/survey.py b/igem/epc/clarite/survey/survey.py old mode 100644 new mode 100755 diff --git a/igem/epc/tests/py_test_output/.gitignore b/igem/epc/tests/py_test_output/.gitignore old mode 100644 new mode 100755 diff --git a/igem/epc/tests/py_test_output/top_results_nhanesreal.png b/igem/epc/tests/py_test_output/top_results_nhanesreal.png old mode 100644 new mode 100755 diff --git a/igem/epc/tests/py_test_output/top_results_nhanesreal_no_cutoff.png b/igem/epc/tests/py_test_output/top_results_nhanesreal_no_cutoff.png old mode 100644 new mode 100755 diff --git a/igem/epc/tests/py_test_output/top_results_nhanessmall.png b/igem/epc/tests/py_test_output/top_results_nhanessmall.png old mode 100644 new mode 100755 diff --git a/igem/epc/tests/test_analyze/conftest.py b/igem/epc/tests/test_analyze/conftest.py old mode 100644 new mode 100755 diff --git a/igem/epc/tests/test_analyze/test_association_study.py b/igem/epc/tests/test_analyze/test_association_study.py old mode 100644 new mode 100755 diff --git a/igem/epc/tests/test_analyze/test_exe_pairwise.py b/igem/epc/tests/test_analyze/test_exe_pairwise.py old mode 100644 new mode 100755 diff --git a/igem/epc/tests/test_analyze/test_gwas.py b/igem/epc/tests/test_analyze/test_gwas.py old mode 100644 new mode 100755 diff --git a/igem/epc/tests/test_analyze/test_interaction_study.py b/igem/epc/tests/test_analyze/test_interaction_study.py old mode 100644 new mode 100755 diff --git a/igem/epc/tests/test_describe/conftest.py b/igem/epc/tests/test_describe/conftest.py old mode 100644 new mode 100755 diff --git a/igem/epc/tests/test_describe/test_describe.py b/igem/epc/tests/test_describe/test_describe.py old mode 100644 new mode 100755 diff --git a/igem/epc/tests/test_load/test_load.py b/igem/epc/tests/test_load/test_load.py old mode 100644 new mode 100755 diff --git a/igem/epc/tests/test_modify/conftest.py b/igem/epc/tests/test_modify/conftest.py old mode 100644 new mode 100755 diff --git a/igem/epc/tests/test_modify/test_modify.py b/igem/epc/tests/test_modify/test_modify.py old mode 100644 new mode 100755 diff --git a/igem/epc/tests/test_plot/conftest.py b/igem/epc/tests/test_plot/conftest.py old mode 100644 new mode 100755 diff --git a/igem/epc/tests/test_plot/test_plot.py b/igem/epc/tests/test_plot/test_plot.py old mode 100644 new mode 100755 diff --git a/igem/ge/admin.py b/igem/ge/admin.py old mode 100644 new mode 100755 diff --git a/igem/ge/apps.py b/igem/ge/apps.py old mode 100644 new mode 100755 diff --git a/igem/ge/db/__init__.py b/igem/ge/db/__init__.py old mode 100644 new mode 100755 diff --git a/igem/ge/db/get.py b/igem/ge/db/get.py old mode 100644 new mode 100755 diff --git a/igem/ge/db/sync.py b/igem/ge/db/sync.py old mode 100644 new mode 100755 diff --git a/igem/ge/filter/__init__.py b/igem/ge/filter/__init__.py old mode 100644 new mode 100755 index adcf27b..2e0dfcc --- a/igem/ge/filter/__init__.py +++ b/igem/ge/filter/__init__.py @@ -20,6 +20,8 @@ term_map, word_map, ) +from .genes import search_gene_map_data +from .positions import positions_to_term from .tag import create_tag, get_tag, get_tag_data __all__ = [ @@ -32,4 +34,6 @@ 'get_tag', "get_tag_data", "create_tag", + "search_gene_map_data", + "positions_to_term" ] diff --git a/igem/ge/filter/convert.py b/igem/ge/filter/convert.py old mode 100644 new mode 100755 diff --git a/igem/ge/filter/filters.py b/igem/ge/filter/filters.py old mode 100644 new mode 100755 diff --git a/igem/ge/filter/genes.py b/igem/ge/filter/genes.py new file mode 100755 index 0000000..6e6b2e6 --- /dev/null +++ b/igem/ge/filter/genes.py @@ -0,0 +1,96 @@ + +import sys + +import pandas as pd +from django.conf import settings + +try: + x = str(settings.BASE_DIR) + sys.path.append(x) + # from ge.models import TermMap, WordMap + from omics.models import GeneMap +except Exception as e: + print(e) + raise + + +def search_gene_map_data(input_df, assembly='grch38', search_range=10000): + # Create an empty list to store the results + results = [] + + # Iterate through the DataFrame + for _, row in input_df.iterrows(): + chromosome = row['chromosome'] + position = row['position'] + + # Calculate the start and end positions for the search range + start_position = position - search_range + end_position = position + search_range + + try: + # Query the GeneMap model to find records that match the criteria + gene_map_data = GeneMap.objects.filter( + assembly=assembly, + chromosome=chromosome, + start_position__gte=start_position, + end_position__lte=end_position, + term__isnull=False + ) + + # Collect the data from GeneMap records + for qry in gene_map_data: + result_dict = { + "input_chromosome": chromosome, + "input_position": position, + "assembly": qry.assembly, + "gene_id": qry.gene_id, + "symbol": qry.symbol, + "chromosome": qry.chromosome, + "nucleotide_version": qry.nucleotide_version, + "start_position": qry.start_position, + "end_position": qry.end_position, + "orientation": qry.orientation, + "term_id": qry.term.id, + "term_name": qry.term.term, + "term_description": qry.term.description + } + results.append(result_dict) + + if not gene_map_data: + result_dict = { + "input_chromosome": chromosome, + "input_position": position, + "assembly": '', + "gene_id": '', + "symbol": '', + "chromosome": '', + "nucleotide_version": '', + "start_position": '', + "end_position": '', + "orientation": '', + "term_id": '', + "term_name": '' + } + results.append(result_dict) + + except Exception as e: + print(e) + # Handle any exceptions gracefully and log them + results.append({ + "input_chromosome": chromosome, + "input_position": position, + "assembly": '', + "gene_id": '', + "symbol": '', + "chromosome": '', + "nucleotide_version": '', + "start_position": '', + "end_position": '', + "orientation": '', + "term_id": '', + "term_name": '' + }) + + result_df = pd.DataFrame(results) + + return result_df diff --git a/igem/ge/filter/positions.py b/igem/ge/filter/positions.py new file mode 100755 index 0000000..c0d8290 --- /dev/null +++ b/igem/ge/filter/positions.py @@ -0,0 +1,475 @@ +import ast +import os + +import pandas as pd +from django.db import models +from django.db.models import ( + Case, + CharField, + Count, + ExpressionWrapper, + F, + Sum, + Value, + When, +) + +# from django.db.models.functions import Coalesce +from ge.models import TermMap +from pyensembl import EnsemblRelease + + +# Define a function to calculate gene symbols +def calculate_gene_symbols(row, ensembl, boundaries, total_rows): + # DEBUG: Show row number + print(row.name) + + try: + chromosome_intern = int(row['chromosome']) + except ValueError: + if row['chromosome'].startswith('chr'): + if row['chromosome'] == 'chrX': + chromosome_intern = 23 + elif row['chromosome'] == 'chrY': + chromosome_intern = 24 + else: + chromosome_intern = int(row['chromosome'][3:]) + else: + # Handle other cases or raise an error if needed + ... + + position = int(row['position']) + + # Query for genes at the given position + genes = ensembl.genes_at_locus(chromosome_intern, position) + + if not genes and boundaries != 0: + start_position = max(0, position - boundaries) + + # Get all genes for the chromosome + # Start with a single position + genes = ensembl.genes_at_locus(chromosome_intern, start_position) + + gene_symbols = [] + if genes: + # Extract gene information + for gene in genes: + # print(f"Gene ID: {gene.gene_id}, Gene Name: {gene.gene_name}") # noqa E501 + gene_symbols.append(str(gene.gene_name).lower()) + + # pbar.close() + return gene_symbols + + +def process_position(args): + chromosome, position, gene_symbols, reference_name, term_data = args + # Create an empty list to store the results + results = [] + + if gene_symbols: + # Extract gene information + for gene_simbol in gene_symbols: + # Find the GeneMap entry based on the gene symbol + try: + gene_map_entry = term_data.loc[gene_simbol] + except KeyError: + # Handle the case where the symbol isn't found + result_dict = { + "input_chromosome": chromosome, + "input_position": position, + "assembly_used": reference_name, + "gene_id": "", + "gene_symbol": gene_simbol, + "gene_term_id": "", + "interaction_term_id": "", + "interaction_term_name": "", + "interaction_term_category": "", + "observation": "Gene not found in IGEM" + } + results.append(result_dict) + continue + + # Now access and process the 'term_map_entries' which match + # the criteria. + try: + for index, term_map in gene_map_entry.iterrows(): + + if term_map["term_1__term_category__term_category"] == 'gene' and term_map["term_2__term_category__term_category"] == 'gene': # noqa E501 + result_dict = { + "input_chromosome": chromosome, + "input_position": position, + "assembly_used": reference_name, + "gene_id": "", + "gene_symbol": gene_simbol, + "gene_term_id": "", + "interaction_term_id": "", + "interaction_term_name": "", + "interaction_term_category": "", + "observation": "both terms are genes" + } + results.append(result_dict) + continue + + elif term_map["term_1__term_category__term_category"] == 'gene': # noqa E501 + result_dict = { + "input_chromosome": chromosome, + "input_position": position, + "assembly_used": reference_name, + "gene_id": term_map["term_1__term"], + "gene_symbol": gene_simbol, + "gene_term_id": term_map["term_1__description"], + "interaction_term_id": term_map["term_2__term"], + "interaction_term_name": term_map["term_2__description"], # noqa E501 + "interaction_term_category": term_map["term_2__term_category__term_category"], # noqa E501 + "observation": "" + } + results.append(result_dict) + continue + + + elif term_map["term_2__term_category__term_category"] == 'gene': # noqa E501 + result_dict = { + "input_chromosome": chromosome, + "input_position": position, + "assembly_used": reference_name, + "gene_id": term_map["term_2__term"], + "gene_symbol": gene_simbol, + "gene_term_id": term_map["term_2__description"], + "interaction_term_id": term_map["term_1__term"], + "interaction_term_name": term_map["term_1__description"], # noqa E501 + "interaction_term_category": term_map["term_1__term_category__term_category"], # noqa E501 + "observation": "" + } + results.append(result_dict) + continue + + # TODO: Maybe this logic is not necessary + else: # noqa E501 + result_dict = { + "input_chromosome": chromosome, + "input_position": position, + "assembly_used": reference_name, + "gene_id": "", + "gene_symbol": gene_simbol, + "gene_term_id": "", + "interaction_term_id": "", + "interaction_term_name": "", + "interaction_term_category": "", + "observation": "None of the terms are genes" + } + results.append(result_dict) + continue + except Exception as e: + result_dict = { + "input_chromosome": chromosome, + "input_position": position, + "assembly_used": reference_name, + "gene_id": "", + "gene_symbol": "", + "gene_term_id": "", + "interaction_term_id": "", + "interaction_term_name": "", + "interaction_term_category": "", + "observation": f"Error: {e}" + } + results.append(result_dict) + + else: + result_dict = { + "input_chromosome": chromosome, + "input_position": position, + "assembly_used": reference_name, + "gene_id": "", + "gene_symbol": "", + "gene_term_id": "", + "interaction_term_id": "", + "interaction_term_name": "", + "interaction_term_category": "", + "observation": "No genes found at this position" + } + results.append(result_dict) + + print(chromosome, " - ", position) + + return results + + +def positions_to_term( + input_df, + exposomes, + assembly=38, + boundaries=0, + delimiter=None, + has_header=True + ): + + # Validate input fields + # Check if the input_df is a valid file + if not os.path.isfile(input_df): + raise ValueError(f"Input file '{input_df}' does not exist.") + + # Check if assembly is a valid number + try: + assembly = int(assembly) + except ValueError: + raise ValueError("Assembly must be a valid number.") + + # Check if search_range is a valid number + try: + search_range = int(boundaries) + except ValueError: + raise ValueError("Search range must be a valid number.") + + # Create an empty list to store the results + # results = [] + + # Define Assemble + if assembly == 38: + # Specify the Ensembl release version (e.g., GRCh38) + ensembl = EnsemblRelease(99) + elif assembly == 37: + # Specify the Ensembl release version (e.g., GRCh37) + ensembl = EnsemblRelease(75) + else: + raise ValueError("Ensembl not found") + + # Print and set parameters + print(f"Input file: {input_df}") + print(f"Assembly: {assembly}") + print(f"Search range: {search_range}") + print(ensembl) + reference_name = ensembl.reference_name + input_directory = os.path.dirname(input_df) + # chunk_size = 50000 + # vcpu = os.cpu_count() + # vcpu = 11 + + # Read the files: + # Define default values for delimiter and header + if delimiter is None: + delimiter = ',' # Default delimiter + if has_header: + header = 'infer' # Infer header from the file + else: + header = None # No header in the file + + # OBSERVATION: + # because pyensembl use the SQLite too, we need to search genes here + # Apply the calculate_gene_symbols function to each row and create a new column 'gene_symbols' # noqa E501 + + # From Chrom/Position and Ensembl get Genes + # If the file was process, use it, else search genes + output_filename = f"result_1_genes_{os.path.basename(input_df)}" + output_path = os.path.join(input_directory, output_filename) + if os.path.isfile(output_path): + df = pd.read_csv(output_path) + total_rows = len(df) + # convert gene_symbols string to list (import to explode) + df['gene_symbols'] = df['gene_symbols'].apply(lambda x: ast.literal_eval(x)) # noqa E501 + + else: + # Read file using pandas with flexible delimiter and header handling + df = pd.read_csv( + input_df, + sep=delimiter, + header=header, + engine='python' + ) + + # Check if the DataFrame has the expected columns or assume column + if 'chromosome' not in df.columns and 'position' not in df.columns: + if len(df.columns) >= 2: + df.columns = ['chromosome', 'position'] + else: + raise ValueError("Input file must have 'chromosome' and 'position' columns.") # noqa E501 + + total_rows = len(df) + df['gene_symbols'] = df.apply( + calculate_gene_symbols, + axis=1, + args=(ensembl, boundaries, total_rows) + ) + # Save list of chrom / position / genes + df.to_csv(output_path) + # Create a clean df with only genes + expanded_df = df.explode('gene_symbols') + expanded_df = expanded_df[['gene_symbols']].copy() + expanded_df.drop_duplicates(subset='gene_symbols', inplace=True) + expanded_df.dropna(subset=['gene_symbols'], inplace=True) + print(len(expanded_df), "genes were found in the input list") + + # READ EXPOSOME LIST PRE FILTER + # The file need to be 1-String, 2-IGEM Term + df_exposomes = pd.read_csv(exposomes) + # Check if the DataFrame has the expected columns or assume column names + if 'string' not in df_exposomes.columns and 'term' not in df_exposomes.columns: # noqa E501 + if len(df_exposomes.columns) >= 2: + df_exposomes.columns = ['string', 'term'] + else: + raise ValueError("Input file for Exposomes must have 'string' and 'term' columns.") # noqa E501 + + # If the Terms Interactions was previous process, use it: + output_filename = f"result_2_terms_{os.path.basename(input_df)}" + output_path = os.path.join(input_directory, output_filename) + if os.path.isfile(output_path): + term_data = pd.read_csv(output_path) + else: + # Create a queryset for TermMap with term_1 having term_category='gene' + queryset = TermMap.objects.filter( + models.Q(term_1__term_category_id=5) | models.Q(term_2__term_category_id=5) # noqa E501 + ).values( + 'term_1', + 'term_2', + 'term_1__term', + 'term_2__term', + 'term_1__description', + 'term_2__description', + 'term_1__term_category__term_category', + 'term_2__term_category__term_category', + ) + + # Use Case/When to add the symbol from GeneMap if it exists + queryset = queryset.annotate( + total_qtd_links=Sum('qtd_links'), + connector_count=Count('connector_id', distinct=True), + gene_symbol=Case( + When( + term_1__term_category__term_category='gene', + then=ExpressionWrapper( + F('term_1__genemap__symbol'), + output_field=CharField() + ) + ), + When( + term_2__term_category__term_category='gene', + then=ExpressionWrapper( + F('term_2__genemap__symbol'), + output_field=CharField() + ) + ), + # When( + # term_1__term_category__term_category='gene', + # then=Coalesce('term_1__genemap__symbol', Value('')) + # ), + # When( + # term_2__term_category__term_category='gene', + # then=Coalesce('term_2__genemap__symbol', Value('')) + # ), + default=Value(''), + output_field=CharField() + ) + ) + # Convert to DataFrame + term_data = pd.DataFrame(list(queryset)) + + # Set the index to 'gene_symbol' if it's not already set + term_data.set_index(['gene_symbol'], inplace=True) + # if 'gene_symbol' not in term_data.columns: + # term_data.set_index(['gene_symbol'], inplace=True) + + # Memory used + # mem_usage_mb = (term_data.memory_usage(deep=True).sum()) / 1048576 + + # Keep in term_data only term with genes found + term_data = term_data[ + term_data.index.isin(expanded_df['gene_symbols']) + ] + + # Normalize the df for better read / preparation for Expome filter + # Create new columns + term_data['Gene ID'] = "" + term_data['Gene Term'] = "" + term_data['Gene Description'] = "" + term_data['Exposome ID'] = "" + term_data['Exposome Term'] = "" + term_data['Exposome Description'] = "" + term_data['Exposome Category'] = "" + term_data['Qtd Links'] = "" + term_data['Qtd Sources'] = "" + + # Create boolean masks for gene and non-gene categories + gene_mask = term_data['term_1__term_category__term_category'] == 'gene' + + # Create a mask for swapping the columns when the condition is False + swap_mask = ~gene_mask + + # Assign values using loc + term_data.loc[gene_mask, 'Gene ID'] = term_data.loc[gene_mask, 'term_1'] # noqa E501 + term_data.loc[gene_mask, 'Gene Term'] = term_data.loc[gene_mask, 'term_1__term'] # noqa E501 + term_data.loc[gene_mask, 'Gene Description'] = term_data.loc[gene_mask, 'term_1__description'] # noqa E501 + term_data.loc[gene_mask, 'Exposome ID'] = term_data.loc[gene_mask, 'term_2'] # noqa E501 + term_data.loc[gene_mask, 'Exposome Term'] = term_data.loc[gene_mask, 'term_2__term'] # noqa E501 + term_data.loc[gene_mask, 'Exposome Description'] = term_data.loc[gene_mask, 'term_2__description'] # noqa E501 + term_data.loc[gene_mask, 'Exposome Category'] = term_data.loc[gene_mask, 'term_2__term_category__term_category'] # noqa E501 + term_data.loc[gene_mask, 'Qtd Links'] = term_data.loc[gene_mask, 'total_qtd_links'] # noqa E501 + term_data.loc[gene_mask, 'Qtd Sources'] = term_data.loc[gene_mask, 'connector_count'] # noqa E501 + + term_data.loc[swap_mask, 'Gene ID'] = term_data.loc[swap_mask, 'term_2'] # noqa E501 + term_data.loc[swap_mask, 'Gene Term'] = term_data.loc[swap_mask, 'term_2__term'] # noqa E501 + term_data.loc[swap_mask, 'Gene Description'] = term_data.loc[swap_mask, 'term_2__description'] # noqa E501 + term_data.loc[swap_mask, 'Exposome ID'] = term_data.loc[swap_mask, 'term_1'] # noqa E501 + term_data.loc[swap_mask, 'Exposome Term'] = term_data.loc[swap_mask, 'term_1__term'] # noqa E501 + term_data.loc[swap_mask, 'Exposome Description'] = term_data.loc[swap_mask, 'term_1__description'] # noqa E501 + term_data.loc[swap_mask, 'Exposome Category'] = term_data.loc[swap_mask, 'term_1__term_category__term_category'] # noqa E501 + term_data.loc[swap_mask, 'Qtd Links'] = term_data.loc[swap_mask, 'total_qtd_links'] # noqa E501 + term_data.loc[swap_mask, 'Qtd Sources'] = term_data.loc[swap_mask, 'connector_count'] # noqa E501 + + # Drop old columns + term_data.drop(columns=[ + 'term_1', + 'term_2', + 'term_1__term', + 'term_2__term', + 'term_1__description', + 'term_2__description', + 'term_1__term_category__term_category', + 'term_2__term_category__term_category', + 'total_qtd_links', + 'connector_count', + ], inplace=True) + + # TODO: Apply filter + # string e term # noqa E501 + # filtered_term_data = term_data[term_data['exposome term'].isin(df_exposomes['term'])] # noqa E501 + # term_data = term_data.merge(df_exposomes[['term', 'string']], left_on='Exposome Term', right_on='term', how='inner') # noqa E501 + term_data = term_data.reset_index().merge(df_exposomes[['term', 'string']], left_on='Exposome Term', right_on='term', how='inner').set_index('gene_symbol') # noqa E501 + + # Save list of terms interaction filtered + output_filename = f"result_2_terms_{os.path.basename(input_df)}" + output_path = os.path.join(input_directory, output_filename) + term_data.to_csv(output_path) + + print(len(term_data), "term interactions were found in the input list") + + df = df.explode('gene_symbols') + try: + result_df = df.merge(term_data, left_on='gene_symbols', right_index=True, how='left') # noqa E501 + except Exception as e: + print(e) + result_df = df.merge(term_data, left_on='gene_symbols', right_on='gene_symbol', how='left') # noqa E501 + result_df['assembly'] = reference_name + + # Define the output file name with the prefix + output_filename = f"result_3_interactions_{os.path.basename(input_df)}" + output_path = os.path.join(input_directory, output_filename) + result_df.to_csv(output_path) + + # create the model + # chrom:position x Word + result_df['chromosome:position'] = result_df['chromosome'] + ':' + result_df['position'].astype(str) # noqa E501 + result_df = result_df[[ + 'chromosome:position', + 'string', + 'Qtd Links', + 'Qtd Sources' + ]] + result_df.dropna(subset=['string'], inplace=True) + + # Aggregate by 'chromosome:position' and 'string' + result_df = result_df.groupby(['chromosome:position', 'string']).sum().reset_index() # noqa E501 + + output_filename = f"result_4_model_{os.path.basename(input_df)}" + output_path = os.path.join(input_directory, output_filename) + result_df.to_csv(output_path, index=False) + + return True diff --git a/igem/ge/filter/tag.py b/igem/ge/filter/tag.py old mode 100644 new mode 100755 diff --git a/igem/ge/filter/utils.py b/igem/ge/filter/utils.py old mode 100644 new mode 100755 diff --git a/igem/ge/forms/__init__.py b/igem/ge/forms/__init__.py old mode 100644 new mode 100755 diff --git a/igem/ge/forms/form_connector.py b/igem/ge/forms/form_connector.py old mode 100644 new mode 100755 diff --git a/igem/ge/forms/form_wordterm.py b/igem/ge/forms/form_wordterm.py old mode 100644 new mode 100755 diff --git a/igem/ge/management/commands/db.py b/igem/ge/management/commands/db.py old mode 100644 new mode 100755 diff --git a/igem/ge/management/commands/filter.py b/igem/ge/management/commands/filter.py old mode 100644 new mode 100755 index 419892d..e906392 --- a/igem/ge/management/commands/filter.py +++ b/igem/ge/management/commands/filter.py @@ -24,6 +24,8 @@ except: # noqa E722 raise +from ge.filter import positions_to_term + class Command(BaseCommand): help = "This command aims to access the functions of GE.FILTER \ @@ -79,7 +81,61 @@ def add_arguments(self, parser): help="convert words in terms", ) + # Function to get position to list of terms map + parser.add_argument( + "--positions_to_term_map", + type=str, + metavar="parameters", + action="store", + default=None, + help="convert position in terms map", + ) + parser.add_argument( + '--exposome', + type=str, + metavar="parameters", + action="store", + default=None, + help="convert position in terms map" + ) + parser.add_argument('--assembly', type=int, default=38) + parser.add_argument('--boundaries', type=int, default=10000) + parser.add_argument('--delimiter', default=None) + parser.add_argument('--has_header', default=True) + def handle(self, *args, **options): + # POSITION TO TERMS MAP + if options["positions_to_term_map"]: + # python manage.py filter --position_to_term_map input_file.txt --assembly=38 --search_range=10000 # noqa E501 + input_file = options['positions_to_term_map'] + exposome = options['exposome'] + assembly = options['assembly'] + boundaries = options['boundaries'] + delimiter = options['delimiter'] + has_header = options['has_header'] + + # Call Operation Function + self.stdout.write(self.style.SUCCESS("Run Terms Report from Genomic Positions")) # noqa E501 + try: + return_function = positions_to_term( + input_file, + exposome, + assembly, + boundaries, + delimiter, + has_header + ) + if return_function: + self.stdout.write(self.style.SUCCESS( + "Process completed successfully" + )) + else: + self.stdout.write(self.style.ERROR_OUTPUT( + "Process completed with error!" + )) + except Exception as e: + self.stdout.write(self.style.ERROR_OUTPUT(f" {e}")) + # TERM_MAP if options["term_map"]: parameters = str(options["term_map"]).lower() diff --git a/igem/ge/management/commands/olds/collect.py b/igem/ge/management/commands/olds/collect.py old mode 100644 new mode 100755 diff --git a/igem/ge/management/commands/olds/create_table.py b/igem/ge/management/commands/olds/create_table.py old mode 100644 new mode 100755 diff --git a/igem/ge/management/commands/olds/db.py b/igem/ge/management/commands/olds/db.py old mode 100644 new mode 100755 diff --git a/igem/ge/management/commands/olds/filter.py b/igem/ge/management/commands/olds/filter.py old mode 100644 new mode 100755 diff --git a/igem/ge/management/commands/olds/filter_gene.py b/igem/ge/management/commands/olds/filter_gene.py old mode 100644 new mode 100755 diff --git a/igem/ge/management/commands/olds/map.py b/igem/ge/management/commands/olds/map.py old mode 100644 new mode 100755 diff --git a/igem/ge/management/commands/olds/prepare.py b/igem/ge/management/commands/olds/prepare.py old mode 100644 new mode 100755 diff --git a/igem/ge/management/commands/olds/reduce.py b/igem/ge/management/commands/olds/reduce.py old mode 100644 new mode 100755 diff --git a/igem/ge/migrations/0001_initial.py b/igem/ge/migrations/0001_initial.py old mode 100644 new mode 100755 diff --git a/igem/ge/migrations/0002_logs_delete_logscollector_wfcontrol_igem_version_and_more.py b/igem/ge/migrations/0002_logs_delete_logscollector_wfcontrol_igem_version_and_more.py old mode 100644 new mode 100755 diff --git a/igem/ge/migrations/0003_alter_logs_igem_version_alter_wfcontrol_igem_version.py b/igem/ge/migrations/0003_alter_logs_igem_version_alter_wfcontrol_igem_version.py old mode 100644 new mode 100755 diff --git a/igem/ge/migrations/0004_alter_logs_igem_version_alter_wfcontrol_igem_version.py b/igem/ge/migrations/0004_alter_logs_igem_version_alter_wfcontrol_igem_version.py old mode 100644 new mode 100755 diff --git a/igem/ge/migrations/0005_alter_wfcontrol_status.py b/igem/ge/migrations/0005_alter_wfcontrol_status.py old mode 100644 new mode 100755 diff --git a/igem/ge/migrations/0006_alter_logs_igem_version_alter_wfcontrol_igem_version.py b/igem/ge/migrations/0006_alter_logs_igem_version_alter_wfcontrol_igem_version.py old mode 100644 new mode 100755 diff --git a/igem/ge/models.py b/igem/ge/models.py old mode 100644 new mode 100755 diff --git a/igem/ge/templates/ge/pages/detailview_connector.html b/igem/ge/templates/ge/pages/detailview_connector.html old mode 100644 new mode 100755 diff --git a/igem/ge/templates/ge/pages/detailview_wordterm.html b/igem/ge/templates/ge/pages/detailview_wordterm.html old mode 100644 new mode 100755 diff --git a/igem/ge/templates/ge/pages/listview_connector.html b/igem/ge/templates/ge/pages/listview_connector.html old mode 100644 new mode 100755 diff --git a/igem/ge/templates/ge/pages/listview_wordterm.html b/igem/ge/templates/ge/pages/listview_wordterm.html old mode 100644 new mode 100755 diff --git a/igem/ge/templates/ge/partials/login_message.html b/igem/ge/templates/ge/partials/login_message.html old mode 100644 new mode 100755 diff --git a/igem/ge/tests/test_base.py b/igem/ge/tests/test_base.py old mode 100644 new mode 100755 diff --git a/igem/ge/tests/test_db.py b/igem/ge/tests/test_db.py old mode 100644 new mode 100755 diff --git a/igem/ge/tests/test_filter.py b/igem/ge/tests/test_filter.py old mode 100644 new mode 100755 diff --git a/igem/ge/tests/test_model.py b/igem/ge/tests/test_model.py old mode 100644 new mode 100755 diff --git a/igem/ge/tests/test_tag.py b/igem/ge/tests/test_tag.py old mode 100644 new mode 100755 diff --git a/igem/ge/urls.py b/igem/ge/urls.py old mode 100644 new mode 100755 diff --git a/igem/ge/utils/__init__.py b/igem/ge/utils/__init__.py old mode 100644 new mode 100755 diff --git a/igem/ge/utils/logs.py b/igem/ge/utils/logs.py old mode 100644 new mode 100755 diff --git a/igem/ge/views.py b/igem/ge/views.py old mode 100644 new mode 100755 diff --git a/igem/ge/views/__init__.py b/igem/ge/views/__init__.py old mode 100644 new mode 100755 diff --git a/igem/ge/views/detailview_connector.py b/igem/ge/views/detailview_connector.py old mode 100644 new mode 100755 diff --git a/igem/ge/views/detailview_wordterm.py b/igem/ge/views/detailview_wordterm.py old mode 100644 new mode 100755 diff --git a/igem/ge/views/listviews_all.py b/igem/ge/views/listviews_all.py old mode 100644 new mode 100755 diff --git a/igem/load/__init__.py b/igem/load/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/igem/load/plink/__init__.py b/igem/load/plink/__init__.py new file mode 100755 index 0000000..ac6a85e --- /dev/null +++ b/igem/load/plink/__init__.py @@ -0,0 +1,7 @@ +from .chunk import Chunk +from .read import plink1_xa + +__all__ = [ + "Chunk", + "plink1_xa", +] diff --git a/igem/load/plink/_bed_read.py b/igem/load/plink/_bed_read.py new file mode 100755 index 0000000..6c26972 --- /dev/null +++ b/igem/load/plink/_bed_read.py @@ -0,0 +1,88 @@ +from numpy import ( + absolute, + ascontiguousarray, + empty, + float32, + memmap, + nan, + uint8, + uint64, + zeros, +) + +from .allele import Allele + +__all__ = ["read_bed"] + + +def read_bed(filepath, nrows, ncols, row_chunk, col_chunk, ref: Allele): + from dask.array import concatenate, from_delayed + from dask.delayed import delayed + + row_size = (ncols + 3) // 4 + size = nrows * row_size + buff = memmap(filepath, uint8, "r", 3, shape=(size,)) + row_start = 0 + col_xs = [] + while row_start < nrows: + row_end = min(row_start + row_chunk, nrows) + col_start = 0 + row_xs = [] + while col_start < ncols: + col_end = min(col_start + col_chunk, ncols) + + x = delayed(_read_bed_chunk, None, True, None, False)( + buff, + nrows, + ncols, + row_start, + row_end, + col_start, + col_end, + ref, + ) + + shape = (row_end - row_start, col_end - col_start) + row_xs.append(from_delayed(x, shape, float32)) + col_start = col_end + + col_xs.append(concatenate(row_xs, 1, True)) + row_start = row_end + return concatenate(col_xs, 0, True) + + +def _read_bed_chunk( + buff, nrows, ncols, row_start, row_end, col_start, col_end, ref: Allele +): + from .bed_reader import ffi, lib + + base_type = uint8 + base_size = base_type().nbytes + base_repr = "uint8_t" + + X = zeros((row_end - row_start, col_end - col_start), base_type) + assert X.flags.aligned + + strides = empty(2, uint64) + strides[:] = X.strides + strides //= base_size + + lib.read_bed_chunk( + ffi.cast(f"{base_repr} *", buff.ctypes.data), + nrows, + ncols, + row_start, + col_start, + row_end, + col_end, + ffi.cast(f"{base_repr} *", X.ctypes.data), + ffi.cast("uint64_t *", strides.ctypes.data), + ) + + X = ascontiguousarray(X, float32) + X[X == 3] = nan + if ref == Allele.a0: + X -= 2 + absolute(X, out=X) + + return X diff --git a/igem/load/plink/allele.py b/igem/load/plink/allele.py new file mode 100755 index 0000000..bf30d00 --- /dev/null +++ b/igem/load/plink/allele.py @@ -0,0 +1,8 @@ +from enum import Enum + +__all__ = ["Allele"] + + +class Allele(Enum): + a0 = 0 + a1 = 1 diff --git a/igem/load/plink/bed_reader.c b/igem/load/plink/bed_reader.c new file mode 100755 index 0000000..de41cdf --- /dev/null +++ b/igem/load/plink/bed_reader.c @@ -0,0 +1,1044 @@ +#define _CFFI_ + +/* We try to define Py_LIMITED_API before including Python.h. + + Mess: we can only define it if Py_DEBUG, Py_TRACE_REFS and + Py_REF_DEBUG are not defined. This is a best-effort approximation: + we can learn about Py_DEBUG from pyconfig.h, but it is unclear if + the same works for the other two macros. Py_DEBUG implies them, + but not the other way around. + + The implementation is messy (issue #350): on Windows, with _MSC_VER, + we have to define Py_LIMITED_API even before including pyconfig.h. + In that case, we guess what pyconfig.h will do to the macros above, + and check our guess after the #include. + + Note that on Windows, with CPython 3.x, you need >= 3.5 and virtualenv + version >= 16.0.0. With older versions of either, you don't get a + copy of PYTHON3.DLL in the virtualenv. We can't check the version of + CPython *before* we even include pyconfig.h. ffi.set_source() puts + a ``#define _CFFI_NO_LIMITED_API'' at the start of this file if it is + running on Windows < 3.5, as an attempt at fixing it, but that's + arguably wrong because it may not be the target version of Python. + Still better than nothing I guess. As another workaround, you can + remove the definition of Py_LIMITED_API here. + + See also 'py_limited_api' in cffi/setuptools_ext.py. +*/ +#if !defined(_CFFI_USE_EMBEDDING) && !defined(Py_LIMITED_API) +# ifdef _MSC_VER +# if !defined(_DEBUG) && !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) && !defined(_CFFI_NO_LIMITED_API) +# define Py_LIMITED_API +# endif +# include + /* sanity-check: Py_LIMITED_API will cause crashes if any of these + are also defined. Normally, the Python file PC/pyconfig.h does not + cause any of these to be defined, with the exception that _DEBUG + causes Py_DEBUG. Double-check that. */ +# ifdef Py_LIMITED_API +# if defined(Py_DEBUG) +# error "pyconfig.h unexpectedly defines Py_DEBUG, but Py_LIMITED_API is set" +# endif +# if defined(Py_TRACE_REFS) +# error "pyconfig.h unexpectedly defines Py_TRACE_REFS, but Py_LIMITED_API is set" +# endif +# if defined(Py_REF_DEBUG) +# error "pyconfig.h unexpectedly defines Py_REF_DEBUG, but Py_LIMITED_API is set" +# endif +# endif +# else +# include +# if !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) && !defined(_CFFI_NO_LIMITED_API) +# define Py_LIMITED_API +# endif +# endif +#endif + +#include +#ifdef __cplusplus +extern "C" { +#endif +#include + +/* This part is from file 'cffi/parse_c_type.h'. It is copied at the + beginning of C sources generated by CFFI's ffi.set_source(). */ + +typedef void *_cffi_opcode_t; + +#define _CFFI_OP(opcode, arg) (_cffi_opcode_t)(opcode | (((uintptr_t)(arg)) << 8)) +#define _CFFI_GETOP(cffi_opcode) ((unsigned char)(uintptr_t)cffi_opcode) +#define _CFFI_GETARG(cffi_opcode) (((intptr_t)cffi_opcode) >> 8) + +#define _CFFI_OP_PRIMITIVE 1 +#define _CFFI_OP_POINTER 3 +#define _CFFI_OP_ARRAY 5 +#define _CFFI_OP_OPEN_ARRAY 7 +#define _CFFI_OP_STRUCT_UNION 9 +#define _CFFI_OP_ENUM 11 +#define _CFFI_OP_FUNCTION 13 +#define _CFFI_OP_FUNCTION_END 15 +#define _CFFI_OP_NOOP 17 +#define _CFFI_OP_BITFIELD 19 +#define _CFFI_OP_TYPENAME 21 +#define _CFFI_OP_CPYTHON_BLTN_V 23 // varargs +#define _CFFI_OP_CPYTHON_BLTN_N 25 // noargs +#define _CFFI_OP_CPYTHON_BLTN_O 27 // O (i.e. a single arg) +#define _CFFI_OP_CONSTANT 29 +#define _CFFI_OP_CONSTANT_INT 31 +#define _CFFI_OP_GLOBAL_VAR 33 +#define _CFFI_OP_DLOPEN_FUNC 35 +#define _CFFI_OP_DLOPEN_CONST 37 +#define _CFFI_OP_GLOBAL_VAR_F 39 +#define _CFFI_OP_EXTERN_PYTHON 41 + +#define _CFFI_PRIM_VOID 0 +#define _CFFI_PRIM_BOOL 1 +#define _CFFI_PRIM_CHAR 2 +#define _CFFI_PRIM_SCHAR 3 +#define _CFFI_PRIM_UCHAR 4 +#define _CFFI_PRIM_SHORT 5 +#define _CFFI_PRIM_USHORT 6 +#define _CFFI_PRIM_INT 7 +#define _CFFI_PRIM_UINT 8 +#define _CFFI_PRIM_LONG 9 +#define _CFFI_PRIM_ULONG 10 +#define _CFFI_PRIM_LONGLONG 11 +#define _CFFI_PRIM_ULONGLONG 12 +#define _CFFI_PRIM_FLOAT 13 +#define _CFFI_PRIM_DOUBLE 14 +#define _CFFI_PRIM_LONGDOUBLE 15 + +#define _CFFI_PRIM_WCHAR 16 +#define _CFFI_PRIM_INT8 17 +#define _CFFI_PRIM_UINT8 18 +#define _CFFI_PRIM_INT16 19 +#define _CFFI_PRIM_UINT16 20 +#define _CFFI_PRIM_INT32 21 +#define _CFFI_PRIM_UINT32 22 +#define _CFFI_PRIM_INT64 23 +#define _CFFI_PRIM_UINT64 24 +#define _CFFI_PRIM_INTPTR 25 +#define _CFFI_PRIM_UINTPTR 26 +#define _CFFI_PRIM_PTRDIFF 27 +#define _CFFI_PRIM_SIZE 28 +#define _CFFI_PRIM_SSIZE 29 +#define _CFFI_PRIM_INT_LEAST8 30 +#define _CFFI_PRIM_UINT_LEAST8 31 +#define _CFFI_PRIM_INT_LEAST16 32 +#define _CFFI_PRIM_UINT_LEAST16 33 +#define _CFFI_PRIM_INT_LEAST32 34 +#define _CFFI_PRIM_UINT_LEAST32 35 +#define _CFFI_PRIM_INT_LEAST64 36 +#define _CFFI_PRIM_UINT_LEAST64 37 +#define _CFFI_PRIM_INT_FAST8 38 +#define _CFFI_PRIM_UINT_FAST8 39 +#define _CFFI_PRIM_INT_FAST16 40 +#define _CFFI_PRIM_UINT_FAST16 41 +#define _CFFI_PRIM_INT_FAST32 42 +#define _CFFI_PRIM_UINT_FAST32 43 +#define _CFFI_PRIM_INT_FAST64 44 +#define _CFFI_PRIM_UINT_FAST64 45 +#define _CFFI_PRIM_INTMAX 46 +#define _CFFI_PRIM_UINTMAX 47 +#define _CFFI_PRIM_FLOATCOMPLEX 48 +#define _CFFI_PRIM_DOUBLECOMPLEX 49 +#define _CFFI_PRIM_CHAR16 50 +#define _CFFI_PRIM_CHAR32 51 + +#define _CFFI__NUM_PRIM 52 +#define _CFFI__UNKNOWN_PRIM (-1) +#define _CFFI__UNKNOWN_FLOAT_PRIM (-2) +#define _CFFI__UNKNOWN_LONG_DOUBLE (-3) + +#define _CFFI__IO_FILE_STRUCT (-1) + + +struct _cffi_global_s { + const char *name; + void *address; + _cffi_opcode_t type_op; + void *size_or_direct_fn; // OP_GLOBAL_VAR: size, or 0 if unknown + // OP_CPYTHON_BLTN_*: addr of direct function +}; + +struct _cffi_getconst_s { + unsigned long long value; + const struct _cffi_type_context_s *ctx; + int gindex; +}; + +struct _cffi_struct_union_s { + const char *name; + int type_index; // -> _cffi_types, on a OP_STRUCT_UNION + int flags; // _CFFI_F_* flags below + size_t size; + int alignment; + int first_field_index; // -> _cffi_fields array + int num_fields; +}; +#define _CFFI_F_UNION 0x01 // is a union, not a struct +#define _CFFI_F_CHECK_FIELDS 0x02 // complain if fields are not in the + // "standard layout" or if some are missing +#define _CFFI_F_PACKED 0x04 // for CHECK_FIELDS, assume a packed struct +#define _CFFI_F_EXTERNAL 0x08 // in some other ffi.include() +#define _CFFI_F_OPAQUE 0x10 // opaque + +struct _cffi_field_s { + const char *name; + size_t field_offset; + size_t field_size; + _cffi_opcode_t field_type_op; +}; + +struct _cffi_enum_s { + const char *name; + int type_index; // -> _cffi_types, on a OP_ENUM + int type_prim; // _CFFI_PRIM_xxx + const char *enumerators; // comma-delimited string +}; + +struct _cffi_typename_s { + const char *name; + int type_index; /* if opaque, points to a possibly artificial + OP_STRUCT which is itself opaque */ +}; + +struct _cffi_type_context_s { + _cffi_opcode_t *types; + const struct _cffi_global_s *globals; + const struct _cffi_field_s *fields; + const struct _cffi_struct_union_s *struct_unions; + const struct _cffi_enum_s *enums; + const struct _cffi_typename_s *typenames; + int num_globals; + int num_struct_unions; + int num_enums; + int num_typenames; + const char *const *includes; + int num_types; + int flags; /* future extension */ +}; + +struct _cffi_parse_info_s { + const struct _cffi_type_context_s *ctx; + _cffi_opcode_t *output; + unsigned int output_size; + size_t error_location; + const char *error_message; +}; + +struct _cffi_externpy_s { + const char *name; + size_t size_of_result; + void *reserved1, *reserved2; +}; + +#ifdef _CFFI_INTERNAL +static int parse_c_type(struct _cffi_parse_info_s *info, const char *input); +static int search_in_globals(const struct _cffi_type_context_s *ctx, + const char *search, size_t search_len); +static int search_in_struct_unions(const struct _cffi_type_context_s *ctx, + const char *search, size_t search_len); +#endif + +/* this block of #ifs should be kept exactly identical between + c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py + and cffi/_cffi_include.h */ +#if defined(_MSC_VER) +# include /* for alloca() */ +# if _MSC_VER < 1600 /* MSVC < 2010 */ + typedef __int8 int8_t; + typedef __int16 int16_t; + typedef __int32 int32_t; + typedef __int64 int64_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; + typedef __int8 int_least8_t; + typedef __int16 int_least16_t; + typedef __int32 int_least32_t; + typedef __int64 int_least64_t; + typedef unsigned __int8 uint_least8_t; + typedef unsigned __int16 uint_least16_t; + typedef unsigned __int32 uint_least32_t; + typedef unsigned __int64 uint_least64_t; + typedef __int8 int_fast8_t; + typedef __int16 int_fast16_t; + typedef __int32 int_fast32_t; + typedef __int64 int_fast64_t; + typedef unsigned __int8 uint_fast8_t; + typedef unsigned __int16 uint_fast16_t; + typedef unsigned __int32 uint_fast32_t; + typedef unsigned __int64 uint_fast64_t; + typedef __int64 intmax_t; + typedef unsigned __int64 uintmax_t; +# else +# include +# endif +# if _MSC_VER < 1800 /* MSVC < 2013 */ +# ifndef __cplusplus + typedef unsigned char _Bool; +# endif +# endif +#else +# include +# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) +# include +# endif +#endif + +#ifdef __GNUC__ +# define _CFFI_UNUSED_FN __attribute__((unused)) +#else +# define _CFFI_UNUSED_FN /* nothing */ +#endif + +#ifdef __cplusplus +# ifndef _Bool + typedef bool _Bool; /* semi-hackish: C++ has no _Bool; bool is builtin */ +# endif +#endif + +/********** CPython-specific section **********/ +#ifndef PYPY_VERSION + + +#if PY_MAJOR_VERSION >= 3 +# define PyInt_FromLong PyLong_FromLong +#endif + +#define _cffi_from_c_double PyFloat_FromDouble +#define _cffi_from_c_float PyFloat_FromDouble +#define _cffi_from_c_long PyInt_FromLong +#define _cffi_from_c_ulong PyLong_FromUnsignedLong +#define _cffi_from_c_longlong PyLong_FromLongLong +#define _cffi_from_c_ulonglong PyLong_FromUnsignedLongLong +#define _cffi_from_c__Bool PyBool_FromLong + +#define _cffi_to_c_double PyFloat_AsDouble +#define _cffi_to_c_float PyFloat_AsDouble + +#define _cffi_from_c_int(x, type) \ + (((type)-1) > 0 ? /* unsigned */ \ + (sizeof(type) < sizeof(long) ? \ + PyInt_FromLong((long)x) : \ + sizeof(type) == sizeof(long) ? \ + PyLong_FromUnsignedLong((unsigned long)x) : \ + PyLong_FromUnsignedLongLong((unsigned long long)x)) : \ + (sizeof(type) <= sizeof(long) ? \ + PyInt_FromLong((long)x) : \ + PyLong_FromLongLong((long long)x))) + +#define _cffi_to_c_int(o, type) \ + ((type)( \ + sizeof(type) == 1 ? (((type)-1) > 0 ? (type)_cffi_to_c_u8(o) \ + : (type)_cffi_to_c_i8(o)) : \ + sizeof(type) == 2 ? (((type)-1) > 0 ? (type)_cffi_to_c_u16(o) \ + : (type)_cffi_to_c_i16(o)) : \ + sizeof(type) == 4 ? (((type)-1) > 0 ? (type)_cffi_to_c_u32(o) \ + : (type)_cffi_to_c_i32(o)) : \ + sizeof(type) == 8 ? (((type)-1) > 0 ? (type)_cffi_to_c_u64(o) \ + : (type)_cffi_to_c_i64(o)) : \ + (Py_FatalError("unsupported size for type " #type), (type)0))) + +#define _cffi_to_c_i8 \ + ((int(*)(PyObject *))_cffi_exports[1]) +#define _cffi_to_c_u8 \ + ((int(*)(PyObject *))_cffi_exports[2]) +#define _cffi_to_c_i16 \ + ((int(*)(PyObject *))_cffi_exports[3]) +#define _cffi_to_c_u16 \ + ((int(*)(PyObject *))_cffi_exports[4]) +#define _cffi_to_c_i32 \ + ((int(*)(PyObject *))_cffi_exports[5]) +#define _cffi_to_c_u32 \ + ((unsigned int(*)(PyObject *))_cffi_exports[6]) +#define _cffi_to_c_i64 \ + ((long long(*)(PyObject *))_cffi_exports[7]) +#define _cffi_to_c_u64 \ + ((unsigned long long(*)(PyObject *))_cffi_exports[8]) +#define _cffi_to_c_char \ + ((int(*)(PyObject *))_cffi_exports[9]) +#define _cffi_from_c_pointer \ + ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[10]) +#define _cffi_to_c_pointer \ + ((char *(*)(PyObject *, struct _cffi_ctypedescr *))_cffi_exports[11]) +#define _cffi_get_struct_layout \ + not used any more +#define _cffi_restore_errno \ + ((void(*)(void))_cffi_exports[13]) +#define _cffi_save_errno \ + ((void(*)(void))_cffi_exports[14]) +#define _cffi_from_c_char \ + ((PyObject *(*)(char))_cffi_exports[15]) +#define _cffi_from_c_deref \ + ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[16]) +#define _cffi_to_c \ + ((int(*)(char *, struct _cffi_ctypedescr *, PyObject *))_cffi_exports[17]) +#define _cffi_from_c_struct \ + ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[18]) +#define _cffi_to_c_wchar_t \ + ((_cffi_wchar_t(*)(PyObject *))_cffi_exports[19]) +#define _cffi_from_c_wchar_t \ + ((PyObject *(*)(_cffi_wchar_t))_cffi_exports[20]) +#define _cffi_to_c_long_double \ + ((long double(*)(PyObject *))_cffi_exports[21]) +#define _cffi_to_c__Bool \ + ((_Bool(*)(PyObject *))_cffi_exports[22]) +#define _cffi_prepare_pointer_call_argument \ + ((Py_ssize_t(*)(struct _cffi_ctypedescr *, \ + PyObject *, char **))_cffi_exports[23]) +#define _cffi_convert_array_from_object \ + ((int(*)(char *, struct _cffi_ctypedescr *, PyObject *))_cffi_exports[24]) +#define _CFFI_CPIDX 25 +#define _cffi_call_python \ + ((void(*)(struct _cffi_externpy_s *, char *))_cffi_exports[_CFFI_CPIDX]) +#define _cffi_to_c_wchar3216_t \ + ((int(*)(PyObject *))_cffi_exports[26]) +#define _cffi_from_c_wchar3216_t \ + ((PyObject *(*)(int))_cffi_exports[27]) +#define _CFFI_NUM_EXPORTS 28 + +struct _cffi_ctypedescr; + +static void *_cffi_exports[_CFFI_NUM_EXPORTS]; + +#define _cffi_type(index) ( \ + assert((((uintptr_t)_cffi_types[index]) & 1) == 0), \ + (struct _cffi_ctypedescr *)_cffi_types[index]) + +static PyObject *_cffi_init(const char *module_name, Py_ssize_t version, + const struct _cffi_type_context_s *ctx) +{ + PyObject *module, *o_arg, *new_module; + void *raw[] = { + (void *)module_name, + (void *)version, + (void *)_cffi_exports, + (void *)ctx, + }; + + module = PyImport_ImportModule("_cffi_backend"); + if (module == NULL) + goto failure; + + o_arg = PyLong_FromVoidPtr((void *)raw); + if (o_arg == NULL) + goto failure; + + new_module = PyObject_CallMethod( + module, (char *)"_init_cffi_1_0_external_module", (char *)"O", o_arg); + + Py_DECREF(o_arg); + Py_DECREF(module); + return new_module; + + failure: + Py_XDECREF(module); + return NULL; +} + + +#ifdef HAVE_WCHAR_H +typedef wchar_t _cffi_wchar_t; +#else +typedef uint16_t _cffi_wchar_t; /* same random pick as _cffi_backend.c */ +#endif + +_CFFI_UNUSED_FN static uint16_t _cffi_to_c_char16_t(PyObject *o) +{ + if (sizeof(_cffi_wchar_t) == 2) + return (uint16_t)_cffi_to_c_wchar_t(o); + else + return (uint16_t)_cffi_to_c_wchar3216_t(o); +} + +_CFFI_UNUSED_FN static PyObject *_cffi_from_c_char16_t(uint16_t x) +{ + if (sizeof(_cffi_wchar_t) == 2) + return _cffi_from_c_wchar_t((_cffi_wchar_t)x); + else + return _cffi_from_c_wchar3216_t((int)x); +} + +_CFFI_UNUSED_FN static int _cffi_to_c_char32_t(PyObject *o) +{ + if (sizeof(_cffi_wchar_t) == 4) + return (int)_cffi_to_c_wchar_t(o); + else + return (int)_cffi_to_c_wchar3216_t(o); +} + +_CFFI_UNUSED_FN static PyObject *_cffi_from_c_char32_t(unsigned int x) +{ + if (sizeof(_cffi_wchar_t) == 4) + return _cffi_from_c_wchar_t((_cffi_wchar_t)x); + else + return _cffi_from_c_wchar3216_t((int)x); +} + +union _cffi_union_alignment_u { + unsigned char m_char; + unsigned short m_short; + unsigned int m_int; + unsigned long m_long; + unsigned long long m_longlong; + float m_float; + double m_double; + long double m_longdouble; +}; + +struct _cffi_freeme_s { + struct _cffi_freeme_s *next; + union _cffi_union_alignment_u alignment; +}; + +_CFFI_UNUSED_FN static int +_cffi_convert_array_argument(struct _cffi_ctypedescr *ctptr, PyObject *arg, + char **output_data, Py_ssize_t datasize, + struct _cffi_freeme_s **freeme) +{ + char *p; + if (datasize < 0) + return -1; + + p = *output_data; + if (p == NULL) { + struct _cffi_freeme_s *fp = (struct _cffi_freeme_s *)PyObject_Malloc( + offsetof(struct _cffi_freeme_s, alignment) + (size_t)datasize); + if (fp == NULL) + return -1; + fp->next = *freeme; + *freeme = fp; + p = *output_data = (char *)&fp->alignment; + } + memset((void *)p, 0, (size_t)datasize); + return _cffi_convert_array_from_object(p, ctptr, arg); +} + +_CFFI_UNUSED_FN static void +_cffi_free_array_arguments(struct _cffi_freeme_s *freeme) +{ + do { + void *p = (void *)freeme; + freeme = freeme->next; + PyObject_Free(p); + } while (freeme != NULL); +} + +/********** end CPython-specific section **********/ +#else +_CFFI_UNUSED_FN +static void (*_cffi_call_python_org)(struct _cffi_externpy_s *, char *); +# define _cffi_call_python _cffi_call_python_org +#endif + + +#define _cffi_array_len(array) (sizeof(array) / sizeof((array)[0])) + +#define _cffi_prim_int(size, sign) \ + ((size) == 1 ? ((sign) ? _CFFI_PRIM_INT8 : _CFFI_PRIM_UINT8) : \ + (size) == 2 ? ((sign) ? _CFFI_PRIM_INT16 : _CFFI_PRIM_UINT16) : \ + (size) == 4 ? ((sign) ? _CFFI_PRIM_INT32 : _CFFI_PRIM_UINT32) : \ + (size) == 8 ? ((sign) ? _CFFI_PRIM_INT64 : _CFFI_PRIM_UINT64) : \ + _CFFI__UNKNOWN_PRIM) + +#define _cffi_prim_float(size) \ + ((size) == sizeof(float) ? _CFFI_PRIM_FLOAT : \ + (size) == sizeof(double) ? _CFFI_PRIM_DOUBLE : \ + (size) == sizeof(long double) ? _CFFI__UNKNOWN_LONG_DOUBLE : \ + _CFFI__UNKNOWN_FLOAT_PRIM) + +#define _cffi_check_int(got, got_nonpos, expected) \ + ((got_nonpos) == (expected <= 0) && \ + (got) == (unsigned long long)expected) + +#ifdef MS_WIN32 +# define _cffi_stdcall __stdcall +#else +# define _cffi_stdcall /* nothing */ +#endif + +#ifdef __cplusplus +} +#endif + +/************************************************************/ + +#include +#include +#include + +#define MIN(a, b) ((a > b) ? b : a) + +void read_bed_chunk(uint8_t *buff, uint64_t nrows, uint64_t ncols, + uint64_t row_start, uint64_t col_start, uint64_t row_end, + uint64_t col_end, uint8_t *out, uint64_t *strides) +{ + char b, b0, b1, p0, p1; + uint64_t r; + uint64_t c, ce; + uint64_t row_chunk; + uint64_t row_size; + + // in bytes + row_chunk = (col_end - col_start + 3) / 4; + // in bytes + row_size = (ncols + 3) / 4; + + r = row_start; + buff += r * row_size + col_start / 4; + + while (r < row_end) + { + for (c = col_start; c < col_end;) + { + b = buff[(c - col_start) / 4]; + + b0 = b & 0x55; + b1 = (b & 0xAA) >> 1; + + p0 = b0 ^ b1; + p1 = (b0 | b1) & b0; + p1 <<= 1; + p0 |= p1; + ce = MIN(c + 4, col_end); + for (; c < ce; ++c) + { + out[(r - row_start) * strides[0] + + (c - col_start) * strides[1]] = p0 & 3; + p0 >>= 2; + } + } + ++r; + buff += row_size; + } +} + +#include +#include +#include + +/* xy */ +/* 0d = 00b -> 00b */ +/* 1d = 01b -> 10b */ +/* 2d = 10b -> 11b */ +/* 3d = 11b -> 01b */ +/* then shift to the left */ +static inline uint8_t convert(uint8_t v) +{ + uint8_t x = (v >> 1) & 0x01; + uint8_t y = (v >> 0) & 0x01; + + uint8_t new_x = (x & ~y) | (~x & y); + uint8_t new_y = x; + + return ((new_x << 1) | (new_y << 0)) << 6; +} + +int write_bed_header(char *filepath, uint8_t major) +{ + FILE *f = fopen(filepath, "wb"); + if (f == NULL) + { + fprintf(stderr, "Couldn't open %s to write.\n", filepath); + return -1; + } + + uint16_t magic_number = 0x1b6c; + if (fwrite(&magic_number, sizeof(magic_number), 1, f) != 1) + { + fprintf(stderr, "File error: %d.\n", ferror(f)); + fclose(f); + return -1; + } + + if (fwrite(&major, sizeof(major), 1, f) != 1) + { + fprintf(stderr, "File error: %d.\n", ferror(f)); + fclose(f); + return -1; + } + + fclose(f); + return 0; +} + +int write_bed_chunk(char *filepath, uint64_t ncols, uint64_t row_chunk, + uint8_t *data, uint64_t *strides) +{ + FILE *f = fopen(filepath, "ab"); + if (f == NULL) + { + fprintf(stderr, "Couldn't open %s to append.\n", filepath); + return -1; + } + + for (uint64_t r = 0; r < row_chunk; ++r) + { + uint64_t c = 0; + for (; c < ncols - ncols % 4; c += 4) + { + uint8_t byte = convert(data[r * strides[0] + (c + 0) * strides[1]]); + byte >>= 2; + byte |= convert(data[r * strides[0] + (c + 1) * strides[1]]); + byte >>= 2; + byte |= convert(data[r * strides[0] + (c + 2) * strides[1]]); + byte >>= 2; + byte |= convert(data[r * strides[0] + (c + 3) * strides[1]]); + if (fwrite(&byte, 1, 1, f) != 1) + { + fprintf(stderr, "File error: %d.\n", ferror(f)); + fclose(f); + return -1; + } + } + if (ncols % 4 > 0) + { + uint8_t byte = 0; + for (uint64_t i = 0; i < ncols % 4; ++i) + { + byte >>= 2; + byte |= convert(data[r * strides[0] + (c + i) * strides[1]]); + } + byte >>= 2 * (4 - ncols % 4); + if (fwrite(&byte, 1, 1, f) != 1) + { + fprintf(stderr, "File error: %d.\n", ferror(f)); + fclose(f); + return -1; + } + } + } + + fclose(f); + return 0; +} + + +/************************************************************/ + +static void *_cffi_types[] = { +/* 0 */ _CFFI_OP(_CFFI_OP_FUNCTION, 24), // int()(char *, uint64_t, uint64_t, uint8_t *, uint64_t *) +/* 1 */ _CFFI_OP(_CFFI_OP_POINTER, 23), // char * +/* 2 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 24), // uint64_t +/* 3 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 24), +/* 4 */ _CFFI_OP(_CFFI_OP_POINTER, 9), // uint8_t * +/* 5 */ _CFFI_OP(_CFFI_OP_POINTER, 2), // uint64_t * +/* 6 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0), +/* 7 */ _CFFI_OP(_CFFI_OP_FUNCTION, 24), // int()(char *, uint8_t) +/* 8 */ _CFFI_OP(_CFFI_OP_NOOP, 1), +/* 9 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 18), // uint8_t +/* 10 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0), +/* 11 */ _CFFI_OP(_CFFI_OP_FUNCTION, 25), // void()(uint8_t *, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint8_t *, uint64_t *) +/* 12 */ _CFFI_OP(_CFFI_OP_NOOP, 4), +/* 13 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 24), +/* 14 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 24), +/* 15 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 24), +/* 16 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 24), +/* 17 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 24), +/* 18 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 24), +/* 19 */ _CFFI_OP(_CFFI_OP_NOOP, 4), +/* 20 */ _CFFI_OP(_CFFI_OP_NOOP, 5), +/* 21 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0), +/* 22 */ _CFFI_OP(_CFFI_OP_POINTER, 23), // char const * +/* 23 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 2), // char +/* 24 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7), // int +/* 25 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 0), // void +}; + +static void _cffi_d_read_bed_chunk(uint8_t * x0, uint64_t x1, uint64_t x2, uint64_t x3, uint64_t x4, uint64_t x5, uint64_t x6, uint8_t * x7, uint64_t * x8) +{ + read_bed_chunk(x0, x1, x2, x3, x4, x5, x6, x7, x8); +} +#ifndef PYPY_VERSION +static PyObject * +_cffi_f_read_bed_chunk(PyObject *self, PyObject *args) +{ + uint8_t * x0; + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint8_t * x7; + uint64_t * x8; + Py_ssize_t datasize; + struct _cffi_freeme_s *large_args_free = NULL; + PyObject *arg0; + PyObject *arg1; + PyObject *arg2; + PyObject *arg3; + PyObject *arg4; + PyObject *arg5; + PyObject *arg6; + PyObject *arg7; + PyObject *arg8; + + if (!PyArg_UnpackTuple(args, "read_bed_chunk", 9, 9, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8)) + return NULL; + + datasize = _cffi_prepare_pointer_call_argument( + _cffi_type(4), arg0, (char **)&x0); + if (datasize != 0) { + x0 = ((size_t)datasize) <= 640 ? (uint8_t *)alloca((size_t)datasize) : NULL; + if (_cffi_convert_array_argument(_cffi_type(4), arg0, (char **)&x0, + datasize, &large_args_free) < 0) + return NULL; + } + + x1 = _cffi_to_c_int(arg1, uint64_t); + if (x1 == (uint64_t)-1 && PyErr_Occurred()) + return NULL; + + x2 = _cffi_to_c_int(arg2, uint64_t); + if (x2 == (uint64_t)-1 && PyErr_Occurred()) + return NULL; + + x3 = _cffi_to_c_int(arg3, uint64_t); + if (x3 == (uint64_t)-1 && PyErr_Occurred()) + return NULL; + + x4 = _cffi_to_c_int(arg4, uint64_t); + if (x4 == (uint64_t)-1 && PyErr_Occurred()) + return NULL; + + x5 = _cffi_to_c_int(arg5, uint64_t); + if (x5 == (uint64_t)-1 && PyErr_Occurred()) + return NULL; + + x6 = _cffi_to_c_int(arg6, uint64_t); + if (x6 == (uint64_t)-1 && PyErr_Occurred()) + return NULL; + + datasize = _cffi_prepare_pointer_call_argument( + _cffi_type(4), arg7, (char **)&x7); + if (datasize != 0) { + x7 = ((size_t)datasize) <= 640 ? (uint8_t *)alloca((size_t)datasize) : NULL; + if (_cffi_convert_array_argument(_cffi_type(4), arg7, (char **)&x7, + datasize, &large_args_free) < 0) + return NULL; + } + + datasize = _cffi_prepare_pointer_call_argument( + _cffi_type(5), arg8, (char **)&x8); + if (datasize != 0) { + x8 = ((size_t)datasize) <= 640 ? (uint64_t *)alloca((size_t)datasize) : NULL; + if (_cffi_convert_array_argument(_cffi_type(5), arg8, (char **)&x8, + datasize, &large_args_free) < 0) + return NULL; + } + + Py_BEGIN_ALLOW_THREADS + _cffi_restore_errno(); + { read_bed_chunk(x0, x1, x2, x3, x4, x5, x6, x7, x8); } + _cffi_save_errno(); + Py_END_ALLOW_THREADS + + (void)self; /* unused */ + if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free); + Py_INCREF(Py_None); + return Py_None; +} +#else +# define _cffi_f_read_bed_chunk _cffi_d_read_bed_chunk +#endif + +static int _cffi_d_write_bed_chunk(char * x0, uint64_t x1, uint64_t x2, uint8_t * x3, uint64_t * x4) +{ + return write_bed_chunk(x0, x1, x2, x3, x4); +} +#ifndef PYPY_VERSION +static PyObject * +_cffi_f_write_bed_chunk(PyObject *self, PyObject *args) +{ + char * x0; + uint64_t x1; + uint64_t x2; + uint8_t * x3; + uint64_t * x4; + Py_ssize_t datasize; + struct _cffi_freeme_s *large_args_free = NULL; + int result; + PyObject *pyresult; + PyObject *arg0; + PyObject *arg1; + PyObject *arg2; + PyObject *arg3; + PyObject *arg4; + + if (!PyArg_UnpackTuple(args, "write_bed_chunk", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4)) + return NULL; + + datasize = _cffi_prepare_pointer_call_argument( + _cffi_type(1), arg0, (char **)&x0); + if (datasize != 0) { + x0 = ((size_t)datasize) <= 640 ? (char *)alloca((size_t)datasize) : NULL; + if (_cffi_convert_array_argument(_cffi_type(1), arg0, (char **)&x0, + datasize, &large_args_free) < 0) + return NULL; + } + + x1 = _cffi_to_c_int(arg1, uint64_t); + if (x1 == (uint64_t)-1 && PyErr_Occurred()) + return NULL; + + x2 = _cffi_to_c_int(arg2, uint64_t); + if (x2 == (uint64_t)-1 && PyErr_Occurred()) + return NULL; + + datasize = _cffi_prepare_pointer_call_argument( + _cffi_type(4), arg3, (char **)&x3); + if (datasize != 0) { + x3 = ((size_t)datasize) <= 640 ? (uint8_t *)alloca((size_t)datasize) : NULL; + if (_cffi_convert_array_argument(_cffi_type(4), arg3, (char **)&x3, + datasize, &large_args_free) < 0) + return NULL; + } + + datasize = _cffi_prepare_pointer_call_argument( + _cffi_type(5), arg4, (char **)&x4); + if (datasize != 0) { + x4 = ((size_t)datasize) <= 640 ? (uint64_t *)alloca((size_t)datasize) : NULL; + if (_cffi_convert_array_argument(_cffi_type(5), arg4, (char **)&x4, + datasize, &large_args_free) < 0) + return NULL; + } + + Py_BEGIN_ALLOW_THREADS + _cffi_restore_errno(); + { result = write_bed_chunk(x0, x1, x2, x3, x4); } + _cffi_save_errno(); + Py_END_ALLOW_THREADS + + (void)self; /* unused */ + pyresult = _cffi_from_c_int(result, int); + if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free); + return pyresult; +} +#else +# define _cffi_f_write_bed_chunk _cffi_d_write_bed_chunk +#endif + +static int _cffi_d_write_bed_header(char * x0, uint8_t x1) +{ + return write_bed_header(x0, x1); +} +#ifndef PYPY_VERSION +static PyObject * +_cffi_f_write_bed_header(PyObject *self, PyObject *args) +{ + char * x0; + uint8_t x1; + Py_ssize_t datasize; + struct _cffi_freeme_s *large_args_free = NULL; + int result; + PyObject *pyresult; + PyObject *arg0; + PyObject *arg1; + + if (!PyArg_UnpackTuple(args, "write_bed_header", 2, 2, &arg0, &arg1)) + return NULL; + + datasize = _cffi_prepare_pointer_call_argument( + _cffi_type(1), arg0, (char **)&x0); + if (datasize != 0) { + x0 = ((size_t)datasize) <= 640 ? (char *)alloca((size_t)datasize) : NULL; + if (_cffi_convert_array_argument(_cffi_type(1), arg0, (char **)&x0, + datasize, &large_args_free) < 0) + return NULL; + } + + x1 = _cffi_to_c_int(arg1, uint8_t); + if (x1 == (uint8_t)-1 && PyErr_Occurred()) + return NULL; + + Py_BEGIN_ALLOW_THREADS + _cffi_restore_errno(); + { result = write_bed_header(x0, x1); } + _cffi_save_errno(); + Py_END_ALLOW_THREADS + + (void)self; /* unused */ + pyresult = _cffi_from_c_int(result, int); + if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free); + return pyresult; +} +#else +# define _cffi_f_write_bed_header _cffi_d_write_bed_header +#endif + +static const struct _cffi_global_s _cffi_globals[] = { + { "read_bed_chunk", (void *)_cffi_f_read_bed_chunk, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 11), (void *)_cffi_d_read_bed_chunk }, + { "write_bed_chunk", (void *)_cffi_f_write_bed_chunk, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 0), (void *)_cffi_d_write_bed_chunk }, + { "write_bed_header", (void *)_cffi_f_write_bed_header, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 7), (void *)_cffi_d_write_bed_header }, +}; + +static const struct _cffi_typename_s _cffi_typenames[] = { + { "LPCTSTR", 22 }, + { "LPTSTR", 1 }, + { "PCTSTR", 22 }, + { "PTBYTE", 1 }, + { "PTCHAR", 1 }, + { "PTSTR", 1 }, + { "TBYTE", 23 }, + { "TCHAR", 23 }, +}; + +static const struct _cffi_type_context_s _cffi_type_context = { + _cffi_types, + _cffi_globals, + NULL, /* no fields */ + NULL, /* no struct_unions */ + NULL, /* no enums */ + _cffi_typenames, + 3, /* num_globals */ + 0, /* num_struct_unions */ + 0, /* num_enums */ + 8, /* num_typenames */ + NULL, /* no includes */ + 26, /* num_types */ + 0, /* flags */ +}; + +#ifdef __GNUC__ +# pragma GCC visibility push(default) /* for -fvisibility= */ +#endif + +#ifdef PYPY_VERSION +PyMODINIT_FUNC +_cffi_pypyinit_bed_reader(const void *p[]) +{ + p[0] = (const void *)0x2601; + p[1] = &_cffi_type_context; +#if PY_MAJOR_VERSION >= 3 + return NULL; +#endif +} +# ifdef _MSC_VER + PyMODINIT_FUNC +# if PY_MAJOR_VERSION >= 3 + PyInit_bed_reader(void) { return NULL; } +# else + initbed_reader(void) { } +# endif +# endif +#elif PY_MAJOR_VERSION >= 3 +PyMODINIT_FUNC +PyInit_bed_reader(void) +{ + return _cffi_init("plink.bed_reader", 0x2601, &_cffi_type_context); +} +#else +PyMODINIT_FUNC +initbed_reader(void) +{ + _cffi_init("plink.bed_reader", 0x2601, &_cffi_type_context); +} +#endif + +#ifdef __GNUC__ +# pragma GCC visibility pop +#endif diff --git a/igem/load/plink/bed_reader.cpython-310-darwin.so b/igem/load/plink/bed_reader.cpython-310-darwin.so new file mode 100755 index 0000000..7997ae8 Binary files /dev/null and b/igem/load/plink/bed_reader.cpython-310-darwin.so differ diff --git a/igem/load/plink/bed_reader.o b/igem/load/plink/bed_reader.o new file mode 100755 index 0000000..c183e2a Binary files /dev/null and b/igem/load/plink/bed_reader.o differ diff --git a/igem/load/plink/chunk.py b/igem/load/plink/chunk.py new file mode 100755 index 0000000..5df565a --- /dev/null +++ b/igem/load/plink/chunk.py @@ -0,0 +1,10 @@ +from dataclasses import dataclass +from typing import Optional + +__all__ = ["Chunk"] + + +@dataclass +class Chunk: + nsamples: Optional[int] = 1024 + nvariants: Optional[int] = 1024 diff --git a/igem/load/plink/read.py b/igem/load/plink/read.py new file mode 100755 index 0000000..d2507b9 --- /dev/null +++ b/igem/load/plink/read.py @@ -0,0 +1,206 @@ +import warnings +from collections import OrderedDict as odict +from glob import glob +from typing import Optional + +import dask.array as da +import pandas as pd +from xarray import DataArray + +from ._bed_read import read_bed +from .allele import Allele +from .chunk import Chunk +from .util import last_replace + +__all__ = ["plink1_xa"] + + +def plink1_xa( + bed: str, + bim: Optional[str] = None, + fam: Optional[str] = None, + verbose: bool = True, + ref: str = "a1", + chunk: Chunk = Chunk(), +) -> DataArray: + + bed_files = sorted(glob(bed)) + if len(bed_files) == 0: + raise ValueError("No BED file has been found.") + + if bim is None: + bim_files = [last_replace(f, ".bed", ".bim") for f in bed_files] + else: + bim_files = sorted(glob(bim)) + if len(bim_files) == 0: + raise ValueError("No BIM file has been found.") + + if fam is None: + fam_files = [last_replace(f, ".bed", ".fam") for f in bed_files] + else: + fam_files = sorted(glob(fam)) + if len(fam_files) == 0: + raise ValueError("No FAM file has been found.") + + if len(bed_files) != len(bim_files): + raise ValueError("The numbers of BED and BIM files must match.") + + if len(fam_files) > 1: + msg = "More than one FAM file has been specified." + msg += "Only the first one will beconsidered." + if verbose: + warnings.warn(msg, UserWarning) + fam_files = fam_files[:1] + + bims = _read_file(bim_files, lambda f: _read_bim_noi(f)) + nmarkers = {bed_files[i]: b.shape[0] for i, b in enumerate(bims)} + bim_df = pd.concat(bims, axis=0, ignore_index=True) + fam_df = _read_file(fam_files, lambda f: _read_fam_noi(f))[0] + + nsamples = fam_df.shape[0] + sample_ids = fam_df["iid"] + nvariants = bim_df.shape[0] + variant_ids = [f"variant{i}" for i in range(nvariants)] + + if ref == "a1": + ref_al = Allele.a1 + elif ref == "a0": + ref_al = Allele.a0 + else: + raise ValueError("Unknown reference allele.") + + G = _read_file( + bed_files, lambda f: _read_bed(f, nsamples, nmarkers[f], ref_al, chunk) + ) + G = da.concatenate(G, axis=1) + + G = DataArray(G, dims=["sample", "variant"], coords=[ + sample_ids, + variant_ids + ]) + sample = {c: ("sample", fam_df[c]) for c in fam_df.columns} + variant = {c: ("variant", bim_df[c]) for c in iter(bim_df.columns)} + G = G.assign_coords(**sample) + G = G.assign_coords(**variant) + G.name = "genotype" + + return G + + +def _read_file(fn, read_func): + data = [] + for f in fn: + data.append(read_func(f)) + return data + + +def _read_csv(fn, header) -> pd.DataFrame: + + df = pd.read_csv( + fn, + delim_whitespace=True, + header=None, + names=list(header.keys()), + dtype=header, + compression=None, + engine="c", + iterator=False, + ) + assert isinstance(df, pd.DataFrame) + return df + + +def _read_bim_noi(fn): + from .type import bim + + header = odict( + [ + ("chrom", bim["chrom"]), + ("snp", bim["snp"]), + ("cm", bim["cm"]), + ("pos", bim["pos"]), + ("a0", bim["a0"]), + ("a1", bim["a1"]), + ] + ) + return _read_csv(fn, header) + + +def _read_fam_noi(fn): + from .type import fam + + header = odict( + [ + ("fid", fam["fid"]), + ("iid", fam["iid"]), + ("father", fam["father"]), + ("mother", fam["mother"]), + ("gender", fam["gender"]), + ("trait", fam["trait"]), + ] + ) + + return _read_csv(fn, header) + + +def _read_bed(fn, nsamples, nvariants, ref: Allele, chunk: Chunk): + _check_bed_header(fn) + major = _major_order(fn) + + # Assume major == "variant". + nrows = nvariants + ncols = nsamples + row_chunk = nrows if chunk.nvariants is None else min( + nrows, + chunk.nvariants + ) + col_chunk = ncols if chunk.nsamples is None else min( + ncols, + chunk.nsamples + ) + + if major == "sample": + nrows, ncols = ncols, nrows + row_chunk, col_chunk = col_chunk, row_chunk + + max_npartitions = 16_384 + row_chunk = max(nrows // max_npartitions, row_chunk) + col_chunk = max(ncols // max_npartitions, col_chunk) + + G = read_bed(fn, nrows, ncols, row_chunk, col_chunk, ref) + if major == "variant": + G = G.T + + return G + + +def _check_bed_header(fn): + with open(fn, "rb") as f: + arr = f.read(2) + if len(arr) < 2: + raise ValueError("Couldn't read BED header: %s." % fn) + ok = arr[0] == 108 and arr[1] == 27 + if not ok: + raise ValueError("Invalid BED file: %s." % fn) + + +def _major_order(fn): + """ + Major order. + + Variant-major lists all samples for first variant, all samples for second + variant, and so on. Sample-major lists all variants for first sample, all + variants for second sample, and so on. + """ + with open(fn, "rb") as f: + f.seek(2) + arr = f.read(1) + if len(arr) < 1: + raise ValueError("Couldn't read column order: %s." % fn) + if arr[0] == 1: + return "variant" + elif arr[0] == 0: + return "sample" + msg = "Invalid matrix layout. Maybe it is a PLINK2 file?" + msg += " PLINK2 is not supported yet." + raise ValueError(msg) diff --git a/igem/load/plink/type.py b/igem/load/plink/type.py new file mode 100755 index 0000000..9921431 --- /dev/null +++ b/igem/load/plink/type.py @@ -0,0 +1,22 @@ +from numpy import float64, int32 +from pandas import StringDtype + +__all__ = ["bim", "fam"] + +bim = { + "chrom": StringDtype(), + "snp": StringDtype(), + "cm": float64, + "pos": int32, + "a0": StringDtype(), + "a1": StringDtype(), +} + +fam = { + "fid": StringDtype(), + "iid": StringDtype(), + "father": StringDtype(), + "mother": StringDtype(), + "gender": StringDtype(), + "trait": StringDtype(), +} diff --git a/igem/load/plink/util.py b/igem/load/plink/util.py new file mode 100755 index 0000000..a87d302 --- /dev/null +++ b/igem/load/plink/util.py @@ -0,0 +1,3 @@ +def last_replace(s, old, new): + li = s.rsplit(old, 1) + return new.join(li) diff --git a/igem/load/test/__init__.py b/igem/load/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/igem/load/test/test_load_plink.py b/igem/load/test/test_load_plink.py new file mode 100755 index 0000000..97a2e6b --- /dev/null +++ b/igem/load/test/test_load_plink.py @@ -0,0 +1,39 @@ +from os.path import dirname, join, realpath + +from load.plink import plink1_xa +from numpy import dtype +from numpy.testing import assert_array_equal, assert_equal + + +def test_load_plink1_xa(): + + datafiles = join(dirname(realpath(__file__)), "data_files") + # file_prefix = join(datafiles, "data") + file_prefix = join(datafiles, "LURIC_AFFY_FINAL_clean") + bim = file_prefix + ".bim" + bed = file_prefix + ".bed" + fam = file_prefix + ".fam" + + G = plink1_xa(bed, bim, fam, verbose=False) + print(G.values) + assert_equal(G.data.dtype, dtype("float32")) + + snp = G.where((G.chrom == "1") & (G.pos == 711153), drop=True)["snp"].values # noqa E501 + assert_array_equal(snp, ["rs12565286"]) + # G.head() + + # shape = G.where(G.chrom == "1", drop=True).shape + # assert_array_equal(shape, [3, 10]) + + # shape = G.where(G.chrom == "2", drop=True).shape + # assert_array_equal(shape, [3, 0]) + + # g = G.where((G.fid == "Sample_2") & (G.iid == "Sample_2"), drop=True) + # assert_array_equal(g["trait"].values, ["-9"]) + + # arr = [ + # [2.0, 2.0, nan, nan, 2.0, 2.0, 2.0, 2.0, 1.0, 2.0], + # [2.0, 1.0, nan, nan, 2.0, 2.0, 1.0, 2.0, 2.0, 1.0], + # [1.0, 2.0, nan, 1.0, 2.0, 2.0, 0.0, 2.0, 2.0, 2.0], + # ] + # assert_array_equal(G, arr) diff --git a/igem/omics/admin.py b/igem/omics/admin.py old mode 100644 new mode 100755 diff --git a/igem/omics/apps.py b/igem/omics/apps.py old mode 100644 new mode 100755 diff --git a/igem/omics/db/__init__.py b/igem/omics/db/__init__.py old mode 100644 new mode 100755 diff --git a/igem/omics/db/dbSNP_XML_CSV.py b/igem/omics/db/dbSNP_XML_CSV.py old mode 100644 new mode 100755 diff --git a/igem/omics/db/get.py b/igem/omics/db/get.py old mode 100644 new mode 100755 diff --git a/igem/omics/db/load.py b/igem/omics/db/load.py old mode 100644 new mode 100755 index f7af892..57097a6 --- a/igem/omics/db/load.py +++ b/igem/omics/db/load.py @@ -11,13 +11,14 @@ try: x = str(settings.BASE_DIR) sys.path.append(x) - from omics.models import snpgene + from ge.models import Term + from omics.models import GeneMap, snpgene except Exception as e: print(e) raise -def load_data(chunk=100000, table=None, path=None) -> bool: +def load_data(chunk=10000000, table=None, path=None) -> bool: """ Loads data from a CSV file into the OMICS database. This process does not update existing data, it only inserts new records. @@ -65,7 +66,60 @@ def load_data(chunk=100000, table=None, path=None) -> bool: print(" Inform the path and the file in CSV format to load") return False - if v_table == "snp": + if v_table == "gene": + v_index = 0 + try: + for DFR in pd.read_csv( + v_path, dtype=str, index_col=False, chunksize=v_chunk + ): + DFR = DFR.apply(lambda x: x.astype(str).str.lower()) + df_term = pd.DataFrame(list(Term.objects.values())) + # TODO: Change the code by descriction + df_term = df_term[df_term['term_category_id'] == 5] + DFR["term_id"] = DFR.set_index("term").index.map( + df_term.set_index("term")["id"]) + + model_instances = [] + + for record in DFR.itertuples(): + term_id = record.term_id + + if not pd.isna(term_id): # Check if term_id is not NaN + term_id = int(term_id) + # Retrieve the Term instance + term_instance = Term.objects.get(pk=term_id) + else: + term_id = None # Set term_id to None for NaN values + term_instance = term_id + + gene_map_instance = GeneMap( + assembly=record.assembly, + gene_id=record.gene_id, + symbol=record.symbol, + chromosome=record.chromosome, + nucleotide_version=record.nucleotide_version, + start_position=record.start_position, + end_position=record.end_position, + orientation=record.orientation, + term=term_instance, # Set the term field + ) + model_instances.append(gene_map_instance) + + GeneMap.objects.bulk_create( + model_instances, ignore_conflicts=True + ) # noqa E501 + print(" Load with success to Gene Map table ") + v_index += 1 + print(" Cicle:", v_index, "/ Rows:", len(DFR.index)) + + except IOError as e: + print("ERRO:") + print(e) + return False + + return True + + elif v_table == "snp": v_index = 0 try: for DFR in pd.read_csv( diff --git a/igem/omics/management/commands/omics.py b/igem/omics/management/commands/omics.py old mode 100644 new mode 100755 diff --git a/igem/omics/migrations/0001_initial.py b/igem/omics/migrations/0001_initial.py old mode 100644 new mode 100755 diff --git a/igem/omics/migrations/0002_genemap.py b/igem/omics/migrations/0002_genemap.py new file mode 100755 index 0000000..1b8a1b9 --- /dev/null +++ b/igem/omics/migrations/0002_genemap.py @@ -0,0 +1,46 @@ +# Generated by Django 4.2.3 on 2023-10-20 13:02 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + ("ge", "0006_alter_logs_igem_version_alter_wfcontrol_igem_version"), + ("omics", "0001_initial"), + ] + + operations = [ + migrations.CreateModel( + name="GeneMap", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("assembly", models.CharField(max_length=20)), + ("gene_id", models.IntegerField()), + ("symbol", models.CharField(max_length=50)), + ("chromosome", models.IntegerField()), + ("nucleotide_version", models.CharField(max_length=50)), + ("start_position", models.IntegerField()), + ("end_position", models.IntegerField()), + ("orientation", models.CharField(max_length=1)), + ( + "term", + models.ForeignKey( + blank=True, + default=None, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="ge.term", + ), + ), + ], + ), + ] diff --git a/igem/omics/models.py b/igem/omics/models.py old mode 100644 new mode 100755 index 873d921..2ef0544 --- a/igem/omics/models.py +++ b/igem/omics/models.py @@ -1,4 +1,5 @@ from django.db import models +from ge.models import Term # Create your models here. @@ -19,3 +20,25 @@ class snpgene(models.Model): contig = models.CharField(max_length=20, verbose_name="Contig") geneid = models.CharField(max_length=15, verbose_name="Gene ID") genesymbol = models.CharField(max_length=30, verbose_name="Gene Symbol") + + +# Model to keep the Gene Range +class GeneMap(models.Model): + assembly = models.CharField(max_length=20) + gene_id = models.IntegerField() + symbol = models.CharField(max_length=50) + chromosome = models.IntegerField() + nucleotide_version = models.CharField(max_length=50) + start_position = models.IntegerField() + end_position = models.IntegerField() + orientation = models.CharField(max_length=1) + term = models.ForeignKey( + Term, + on_delete=models.SET_NULL, + null=True, + blank=True, + default=None + ) + + def __str__(self): + return self.symbol diff --git a/igem/omics/tests/test_ncbi.py b/igem/omics/tests/test_ncbi.py old mode 100644 new mode 100755 diff --git a/igem/omics/views.py b/igem/omics/views.py old mode 100644 new mode 100755 diff --git a/igem/server/admin.py b/igem/server/admin.py old mode 100644 new mode 100755 diff --git a/igem/server/apps.py b/igem/server/apps.py old mode 100644 new mode 100755 diff --git a/igem/server/etl/__init__.py b/igem/server/etl/__init__.py old mode 100644 new mode 100755 diff --git a/igem/server/etl/collect.py b/igem/server/etl/collect.py old mode 100644 new mode 100755 diff --git a/igem/server/etl/extractors.py b/igem/server/etl/extractors.py old mode 100644 new mode 100755 diff --git a/igem/server/etl/map.py b/igem/server/etl/map.py old mode 100644 new mode 100755 diff --git a/igem/server/etl/prepare.py b/igem/server/etl/prepare.py old mode 100644 new mode 100755 diff --git a/igem/server/etl/reduce.py b/igem/server/etl/reduce.py old mode 100644 new mode 100755 diff --git a/igem/server/etl/utils.py b/igem/server/etl/utils.py old mode 100644 new mode 100755 diff --git a/igem/server/management/commands/etl.py b/igem/server/management/commands/etl.py old mode 100644 new mode 100755 diff --git a/igem/server/management/commands/olds/collect.py b/igem/server/management/commands/olds/collect.py old mode 100644 new mode 100755 diff --git a/igem/server/management/commands/olds/create_table.py b/igem/server/management/commands/olds/create_table.py old mode 100644 new mode 100755 diff --git a/igem/server/management/commands/olds/db.py b/igem/server/management/commands/olds/db.py old mode 100644 new mode 100755 diff --git a/igem/server/management/commands/olds/filter.py b/igem/server/management/commands/olds/filter.py old mode 100644 new mode 100755 diff --git a/igem/server/management/commands/olds/filter_gene.py b/igem/server/management/commands/olds/filter_gene.py old mode 100644 new mode 100755 diff --git a/igem/server/management/commands/olds/map.py b/igem/server/management/commands/olds/map.py old mode 100644 new mode 100755 diff --git a/igem/server/management/commands/olds/prepare.py b/igem/server/management/commands/olds/prepare.py old mode 100644 new mode 100755 diff --git a/igem/server/management/commands/olds/reduce.py b/igem/server/management/commands/olds/reduce.py old mode 100644 new mode 100755 diff --git a/igem/server/management/commands/sql.py b/igem/server/management/commands/sql.py old mode 100644 new mode 100755 diff --git a/igem/server/models.py b/igem/server/models.py old mode 100644 new mode 100755 diff --git a/igem/server/sql/__init__.py b/igem/server/sql/__init__.py old mode 100644 new mode 100755 diff --git a/igem/server/sql/delete.py b/igem/server/sql/delete.py old mode 100644 new mode 100755 diff --git a/igem/server/sql/deploy.py b/igem/server/sql/deploy.py old mode 100644 new mode 100755 diff --git a/igem/server/sql/get.py b/igem/server/sql/get.py old mode 100644 new mode 100755 diff --git a/igem/server/sql/load.py b/igem/server/sql/load.py old mode 100644 new mode 100755 diff --git a/igem/server/sql/truncate.py b/igem/server/sql/truncate.py old mode 100644 new mode 100755 diff --git a/igem/server/tests/test_etl.py b/igem/server/tests/test_etl.py old mode 100644 new mode 100755 diff --git a/igem/server/tests/test_sql.py b/igem/server/tests/test_sql.py old mode 100644 new mode 100755 index d871c0e..8bcfde6 --- a/igem/server/tests/test_sql.py +++ b/igem/server/tests/test_sql.py @@ -19,7 +19,7 @@ def test_ge_db_load_and_delete(self): table="datasource", path=(self.path + "/datasource_alpha.csv") ) - assert load_alpha_ds is True + assert load_alpha_ds is False # CONNECTOR load_alpha_conn = sql.load_data( diff --git a/igem/server/views.py b/igem/server/views.py old mode 100644 new mode 100755 diff --git a/igem/src/asgi.py b/igem/src/asgi.py old mode 100644 new mode 100755 diff --git a/igem/src/settings.py b/igem/src/settings.py old mode 100644 new mode 100755 diff --git a/igem/src/settings_debug.py b/igem/src/settings_debug.py old mode 100644 new mode 100755 diff --git a/igem/src/urls.py b/igem/src/urls.py old mode 100644 new mode 100755 diff --git a/igem/src/wsgi.py b/igem/src/wsgi.py old mode 100644 new mode 100755 diff --git a/load/deploy_db.zip b/load/deploy_db.zip old mode 100644 new mode 100755 diff --git a/load/deploy_db/deploy_db.py b/load/deploy_db/deploy_db.py old mode 100644 new mode 100755 diff --git a/load/deploy_db/get_data.py b/load/deploy_db/get_data.py old mode 100644 new mode 100755 diff --git a/load/deploy_db/start.py b/load/deploy_db/start.py old mode 100644 new mode 100755 diff --git a/load/etl/caderno.ipynb b/load/etl/caderno.ipynb old mode 100644 new mode 100755 diff --git a/load/etl/extract.py b/load/etl/extract.py old mode 100644 new mode 100755 diff --git a/poetry.lock b/poetry.lock old mode 100644 new mode 100755 index d3d64fc..4b42901 --- a/poetry.lock +++ b/poetry.lock @@ -6,6 +6,14 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "appdirs" +version = "1.4.4" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "main" +optional = false +python-versions = "*" + [[package]] name = "asgiref" version = "3.7.2" @@ -21,26 +29,23 @@ typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] [[package]] -name = "babel" -version = "2.12.1" -description = "Internationalization utilities" -category = "dev" +name = "astroid" +version = "3.0.1" +description = "An abstract syntax tree for Python with inference support." +category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8.0" [package.dependencies] -pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] -name = "backports-zoneinfo" -version = "0.2.1" -description = "Backport of the standard library zoneinfo module" -category = "main" +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +category = "dev" optional = false -python-versions = ">=3.6" - -[package.extras] -tzdata = ["tzdata"] +python-versions = ">=3.7" [[package]] name = "black" @@ -94,7 +99,7 @@ python-versions = ">=3.7.0" [[package]] name = "clarite" -version = "2.3.4" +version = "2.3.5" description = "CLeaning to Analysis: Reproducibility-based Interface for Traits and Exposures" category = "main" optional = false @@ -138,6 +143,14 @@ python-versions = "*" [package.dependencies] sphinx = ">=1.6" +[[package]] +name = "cloudpickle" +version = "3.0.0" +description = "Pickler class to extend the standard pickle.Pickler functionality" +category = "main" +optional = false +python-versions = ">=3.8" + [[package]] name = "colorama" version = "0.4.6" @@ -210,6 +223,59 @@ click = "*" coloredlogs = "*" numpy = "*" +[[package]] +name = "dask" +version = "2023.10.0" +description = "Parallel PyData with Task Scheduling" +category = "main" +optional = false +python-versions = ">=3.9" + +[package.dependencies] +click = ">=8.0" +cloudpickle = ">=1.5.0" +fsspec = ">=2021.09.0" +importlib-metadata = ">=4.13.0" +packaging = ">=20.0" +partd = ">=1.2.0" +pyyaml = ">=5.3.1" +toolz = ">=0.10.0" + +[package.extras] +array = ["numpy (>=1.21)"] +complete = ["dask[array,dataframe,diagnostics,distributed]", "lz4 (>=4.3.2)", "pyarrow (>=7.0)"] +dataframe = ["dask[array]", "pandas (>=1.3)"] +diagnostics = ["bokeh (>=2.4.2)", "jinja2 (>=2.10.3)"] +distributed = ["distributed (==2023.10.0)"] +test = ["pandas[test]", "pre-commit", "pytest", "pytest-cov", "pytest-rerunfailures", "pytest-timeout", "pytest-xdist"] + +[[package]] +name = "datacache" +version = "1.2.1" +description = "Helpers for transparently downloading datasets" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +appdirs = ">=1.4.0" +mock = "*" +pandas = ">=0.15.2" +progressbar33 = ">=2.4" +requests = ">=2.5.1" +typechecks = ">=0.0.2" + +[[package]] +name = "dill" +version = "0.3.7" +description = "serialize all of Python" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +graph = ["objgraph (>=1.7.2)"] + [[package]] name = "django" version = "4.2.3" @@ -220,7 +286,6 @@ python-versions = ">=3.8" [package.dependencies] asgiref = ">=3.6.0,<4" -"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""} sqlparse = ">=0.3.1" tzdata = {version = "*", markers = "sys_platform == \"win32\""} @@ -292,6 +357,50 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.0.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +[[package]] +name = "fsspec" +version = "2023.9.2" +description = "File-system specification" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +devel = ["pytest", "pytest-cov"] +dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +fuse = ["fusepy"] +gcs = ["gcsfs"] +git = ["pygit2"] +github = ["requests"] +gs = ["gcsfs"] +gui = ["panel"] +hdfs = ["pyarrow (>=1)"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "requests"] +libarchive = ["libarchive-c"] +oci = ["ocifs"] +s3 = ["s3fs"] +sftp = ["paramiko"] +smb = ["smbprotocol"] +ssh = ["paramiko"] +tqdm = ["tqdm"] + +[[package]] +name = "gtfparse" +version = "1.3.0" +description = "GTF Parsing" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +numpy = ">=1.7" +pandas = ">=0.15" + [[package]] name = "humanfriendly" version = "10.0" @@ -355,6 +464,20 @@ category = "dev" optional = false python-versions = ">=3.7" +[[package]] +name = "isort" +version = "5.12.0" +description = "A Python utility / library to sort Python imports." +category = "main" +optional = false +python-versions = ">=3.8.0" + +[package.extras] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + [[package]] name = "jinja2" version = "3.1.2" @@ -385,6 +508,14 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "locket" +version = "1.0.0" +description = "File-based locks for Python on Linux and Windows" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + [[package]] name = "lxml" version = "4.9.3" @@ -428,6 +559,35 @@ pyparsing = ">=2.3.1,<3.1" python-dateutil = ">=2.7" setuptools_scm = ">=7" +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "memoized-property" +version = "1.0.3" +description = "A simple python decorator for defining properties that only run their fget function once" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "mock" +version = "5.1.0" +description = "Rolling backport of unittest.mock for all Pythons" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +build = ["blurb", "twine", "wheel"] +docs = ["sphinx"] +test = ["pytest", "pytest-cov"] + [[package]] name = "mypy" version = "0.991" @@ -455,6 +615,14 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "nose" +version = "1.3.7" +description = "nose extends unittest to make testing easier" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "numpy" version = "1.24.4" @@ -519,6 +687,21 @@ python-versions = ">=3.7" [package.extras] dev = ["jinja2"] +[[package]] +name = "partd" +version = "1.4.1" +description = "Appendable key-value storage" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +locket = "*" +toolz = "*" + +[package.extras] +complete = ["blosc", "numpy (>=1.9.0)", "pandas (>=0.19.0)", "pyzmq"] + [[package]] name = "pathspec" version = "0.11.1" @@ -566,7 +749,7 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa name = "platformdirs" version = "3.9.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" +category = "main" optional = false python-versions = ">=3.7" @@ -586,6 +769,14 @@ python-versions = ">=3.7" dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "progressbar33" +version = "2.4" +description = "Text progress bar library for Python." +category = "main" +optional = false +python-versions = "*" + [[package]] name = "psycopg2" version = "2.9.6" @@ -602,6 +793,25 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "pyensembl" +version = "2.2.9" +description = "Python interface to ensembl reference genome metadata" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +datacache = ">=1.1.4" +gtfparse = ">=1.3.0,<2.0.0" +memoized-property = ">=1.0.2" +nose = ">=1.3.3" +pandas = ">=1.3.5" +pylint = ">=1.4.4" +serializable = "*" +tinytimer = "*" +typechecks = ">=0.0.2" + [[package]] name = "pygments" version = "2.15.1" @@ -613,6 +823,29 @@ python-versions = ">=3.7" [package.extras] plugins = ["importlib-metadata"] +[[package]] +name = "pylint" +version = "3.0.2" +description = "python code static checker" +category = "main" +optional = false +python-versions = ">=3.8.0" + +[package.dependencies] +astroid = ">=3.0.1,<=3.1.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = {version = ">=0.2", markers = "python_version < \"3.11\""} +isort = ">=4.2.5,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + [[package]] name = "pyparsing" version = "3.0.9" @@ -677,6 +910,14 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "requests" version = "2.31.0" @@ -704,7 +945,6 @@ optional = false python-versions = ">=3.7" [package.dependencies] -"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""} cffi = ">=1.10.0" jinja2 = "*" packaging = {version = "*", markers = "platform_system == \"Windows\""} @@ -771,6 +1011,19 @@ dev = ["flake8", "flit", "mypy", "pandas-stubs", "pre-commit", "pytest", "pytest docs = ["ipykernel", "nbconvert", "numpydoc", "pydata_sphinx_theme (==0.10.0rc2)", "pyyaml", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] stats = ["scipy (>=1.3)", "statsmodels (>=0.10)"] +[[package]] +name = "serializable" +version = "0.2.1" +description = "Base class with serialization helpers for user-defined Python objects" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +simplejson = "*" +six = ">=1.9.0" +typechecks = ">=0.0.2" + [[package]] name = "setuptools" version = "68.0.0" @@ -802,6 +1055,14 @@ typing-extensions = "*" test = ["pytest (>=6.2)", "virtualenv (>20)"] toml = ["setuptools (>=42)"] +[[package]] +name = "simplejson" +version = "3.19.2" +description = "Simple, fast, extensible JSON encoder/decoder for Python" +category = "main" +optional = false +python-versions = ">=2.5, !=3.0.*, !=3.1.*, !=3.2.*" + [[package]] name = "six" version = "1.16.0" @@ -1080,6 +1341,14 @@ category = "main" optional = false python-versions = ">=3.8" +[[package]] +name = "tinytimer" +version = "0.0.0" +description = "Tiny Python benchmarking library" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "tomli" version = "2.0.1" @@ -1088,6 +1357,47 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "tomlkit" +version = "0.12.3" +description = "Style preserving TOML library" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "toolz" +version = "0.12.0" +description = "List processing tools and functional utilities" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "tqdm" +version = "4.66.1" +description = "Fast, Extensible Progress Meter" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "typechecks" +version = "0.1.0" +description = "Helper functions for runtime type checking" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "types-requests" version = "2.31.0.1" @@ -1148,6 +1458,26 @@ secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17. socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] +[[package]] +name = "xarray" +version = "2023.10.1" +description = "N-D labeled arrays and datasets in Python" +category = "main" +optional = false +python-versions = ">=3.9" + +[package.dependencies] +numpy = ">=1.22" +packaging = ">=21.3" +pandas = ">=1.4" + +[package.extras] +accel = ["bottleneck", "flox", "numbagg", "scipy"] +complete = ["xarray[accel,io,parallel,viz]"] +io = ["cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap", "scipy", "zarr"] +parallel = ["dask[complete]"] +viz = ["matplotlib", "nc-time-axis", "seaborn"] + [[package]] name = "zipp" version = "3.16.2" @@ -1162,40 +1492,30 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "1.1" -python-versions = ">=3.8.0,<3.11.0" -content-hash = "bead742f61dce9942e07e93ca4f0b38df8e853b89403cad1766c0385dc28dc3a" +python-versions = ">=3.9.0,<3.11.0" +content-hash = "dd28f2c9e447c2f9a4ca290655a9794f70f7be9ff97c5c04e94d744ee1cdaf0f" [metadata.files] alabaster = [ {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, ] +appdirs = [ + {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, + {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, +] asgiref = [ {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"}, {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"}, ] +astroid = [ + {file = "astroid-3.0.1-py3-none-any.whl", hash = "sha256:7d5895c9825e18079c5aeac0572bc2e4c83205c95d416e0b4fee8bc361d2d9ca"}, + {file = "astroid-3.0.1.tar.gz", hash = "sha256:86b0bb7d7da0be1a7c4aedb7974e391b32d4ed89e33de6ed6902b4b15c97577e"}, +] babel = [ {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, ] -backports-zoneinfo = [ - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, - {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, -] black = [ {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, @@ -1368,8 +1688,8 @@ charset-normalizer = [ {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] clarite = [ - {file = "clarite-2.3.4-py3-none-any.whl", hash = "sha256:a55f3fd2cbd82b75db183358545cbf365535e521622850836a695521df930001"}, - {file = "clarite-2.3.4.tar.gz", hash = "sha256:998a2f0b80de2d7c5860d23da2b05efc011cb90c85d538dd4e46737b03291149"}, + {file = "clarite-2.3.5-py3-none-any.whl", hash = "sha256:45d444c534ed609480ebe0044d3088421db5e3f73db8eec1acc1e85be158c285"}, + {file = "clarite-2.3.5.tar.gz", hash = "sha256:d92c65b0f807c534aad8db15dc222c8a8bf5713d3739add43fcb0eeccfc97392"}, ] click = [ {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, @@ -1379,6 +1699,10 @@ cloud-sptheme = [ {file = "cloud_sptheme-1.10.1.post20200504175005-py2.py3-none-any.whl", hash = "sha256:82be47ddebbc045e7386269fc062f79d6f87cefe8e5c1e35fe0e9f4266a57723"}, {file = "cloud_sptheme-1.10.1.post20200504175005.tar.gz", hash = "sha256:caf47ac4c6346eef47fc11e799adbeaf645921c712cc099cf2530560e7ecde44"}, ] +cloudpickle = [ + {file = "cloudpickle-3.0.0-py3-none-any.whl", hash = "sha256:246ee7d0c295602a036e86369c77fecda4ab17b506496730f2f576d9016fd9c7"}, + {file = "cloudpickle-3.0.0.tar.gz", hash = "sha256:996d9a482c6fb4f33c1a35335cf8afd065d2a56e973270364840712d9131a882"}, +] colorama = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -1511,6 +1835,17 @@ cyvcf2 = [ {file = "cyvcf2-0.30.22-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb1f18e41a04d114cc83e160c99dbb8096f392558127ad218d30e1281543e9eb"}, {file = "cyvcf2-0.30.22.tar.gz", hash = "sha256:324613c41f9bbb322533f351fd8d33a4454b391d76841da0a28a7075a0e15d84"}, ] +dask = [ + {file = "dask-2023.10.0-py3-none-any.whl", hash = "sha256:cb133919ff6f1fc021efe1eef24df0e4acecf33a7708e7b04d2dea6b45e166bb"}, + {file = "dask-2023.10.0.tar.gz", hash = "sha256:3fdfdbdb5f9f3a556487bf37142e5a730dab2f2c8eca0b6c79d11199c30220e3"}, +] +datacache = [ + {file = "datacache-1.2.1.tar.gz", hash = "sha256:ed24c419ed9791ef0f0375ca5552b2300922235ee9ffa81d200f002c6f7d7955"}, +] +dill = [ + {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, + {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, +] django = [ {file = "Django-4.2.3-py3-none-any.whl", hash = "sha256:f7c7852a5ac5a3da5a8d5b35cc6168f31b605971441798dac845f17ca8028039"}, {file = "Django-4.2.3.tar.gz", hash = "sha256:45a747e1c5b3d6df1b141b1481e193b033fd1fdbda3ff52677dc81afdaacbaed"}, @@ -1567,6 +1902,13 @@ fonttools = [ {file = "fonttools-4.41.0-py3-none-any.whl", hash = "sha256:5b1c2b21b40229166a864f2b0aec06d37f0a204066deb1734c93370e0c76339d"}, {file = "fonttools-4.41.0.tar.gz", hash = "sha256:6faff25991dec48f8cac882055a09ae1a29fd15bc160bc3d663e789e994664c2"}, ] +fsspec = [ + {file = "fsspec-2023.9.2-py3-none-any.whl", hash = "sha256:603dbc52c75b84da501b9b2ec8c11e1f61c25984c4a0dda1f129ef391fbfc9b4"}, + {file = "fsspec-2023.9.2.tar.gz", hash = "sha256:80bfb8c70cc27b2178cc62a935ecf242fc6e8c3fb801f9c571fc01b1e715ba7d"}, +] +gtfparse = [ + {file = "gtfparse-1.3.0.tar.gz", hash = "sha256:d957f18e5f70413f89a28ef83068c461b6407eb38fd30e99b8da3d69143527b1"}, +] humanfriendly = [ {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, @@ -1591,6 +1933,10 @@ iniconfig = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +isort = [ + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, +] jinja2 = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, @@ -1669,6 +2015,10 @@ kiwisolver = [ {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, ] +locket = [ + {file = "locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3"}, + {file = "locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632"}, +] lxml = [ {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, @@ -1858,6 +2208,17 @@ matplotlib = [ {file = "matplotlib-3.7.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:20f844d6be031948148ba49605c8b96dfe7d3711d1b63592830d650622458c11"}, {file = "matplotlib-3.7.2.tar.gz", hash = "sha256:a8cdb91dddb04436bd2f098b8fdf4b81352e68cf4d2c6756fcc414791076569b"}, ] +mccabe = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] +memoized-property = [ + {file = "memoized-property-1.0.3.tar.gz", hash = "sha256:4be4d0209944b9b9b678dae9d7e312249fe2e6fb8bdc9bdaa1da4de324f0fcf5"}, +] +mock = [ + {file = "mock-5.1.0-py3-none-any.whl", hash = "sha256:18c694e5ae8a208cdb3d2c20a993ca1a7b0efa258c247a1e565150f477f83744"}, + {file = "mock-5.1.0.tar.gz", hash = "sha256:5e96aad5ccda4718e0a229ed94b2024df75cc2d55575ba5762d31f5767b8767d"}, +] mypy = [ {file = "mypy-0.991-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab"}, {file = "mypy-0.991-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d"}, @@ -1894,6 +2255,11 @@ mypy-extensions = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +nose = [ + {file = "nose-1.3.7-py2-none-any.whl", hash = "sha256:dadcddc0aefbf99eea214e0f1232b94f2fa9bd98fa8353711dacb112bfcbbb2a"}, + {file = "nose-1.3.7-py3-none-any.whl", hash = "sha256:9ff7c6cc443f8c51994b34a667bbcf45afd6d945be7477b52e97516fd17c53ac"}, + {file = "nose-1.3.7.tar.gz", hash = "sha256:f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98"}, +] numpy = [ {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, @@ -1965,6 +2331,10 @@ parameterized = [ {file = "parameterized-0.9.0-py2.py3-none-any.whl", hash = "sha256:4e0758e3d41bea3bbd05ec14fc2c24736723f243b28d702081aef438c9372b1b"}, {file = "parameterized-0.9.0.tar.gz", hash = "sha256:7fc905272cefa4f364c1a3429cbbe9c0f98b793988efb5bf90aac80f08db09b1"}, ] +partd = [ + {file = "partd-1.4.1-py3-none-any.whl", hash = "sha256:27e766663d36c161e2827aa3e28541c992f0b9527d3cca047e13fb3acdb989e6"}, + {file = "partd-1.4.1.tar.gz", hash = "sha256:56c25dd49e6fea5727e731203c466c6e092f308d8f0024e199d02f6aa2167f67"}, +] pathspec = [ {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, @@ -2041,6 +2411,9 @@ pluggy = [ {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] +progressbar33 = [ + {file = "progressbar33-2.4.tar.gz", hash = "sha256:51fe0d9b3b4023db2f983eeccdfc8c9846b84db8443b9bee002c7f58f4376eff"}, +] psycopg2 = [ {file = "psycopg2-2.9.6-cp310-cp310-win32.whl", hash = "sha256:f7a7a5ee78ba7dc74265ba69e010ae89dae635eea0e97b055fb641a01a31d2b1"}, {file = "psycopg2-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:f75001a1cbbe523e00b0ef896a5a1ada2da93ccd752b7636db5a99bc57c44494"}, @@ -2060,10 +2433,17 @@ pycparser = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] +pyensembl = [ + {file = "pyensembl-2.2.9.tar.gz", hash = "sha256:f570073181130855be0bfd813c605546cbd97aa3017aa82998ddbc0595ddf24d"}, +] pygments = [ {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, ] +pylint = [ + {file = "pylint-3.0.2-py3-none-any.whl", hash = "sha256:60ed5f3a9ff8b61839ff0348b3624ceeb9e6c2a92c514d81c9cc273da3b6bcda"}, + {file = "pylint-3.0.2.tar.gz", hash = "sha256:0d4c286ef6d2f66c8bfb527a7f8a629009e42c99707dec821a03e1b51a4c1496"}, +] pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, @@ -2084,6 +2464,48 @@ pytz = [ {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, ] +pyyaml = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] requests = [ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, @@ -2146,6 +2568,9 @@ seaborn = [ {file = "seaborn-0.12.2-py3-none-any.whl", hash = "sha256:ebf15355a4dba46037dfd65b7350f014ceb1f13c05e814eda2c9f5fd731afc08"}, {file = "seaborn-0.12.2.tar.gz", hash = "sha256:374645f36509d0dcab895cba5b47daf0586f77bfe3b36c97c607db7da5be0139"}, ] +serializable = [ + {file = "serializable-0.2.1.tar.gz", hash = "sha256:ec604e5df0c1236c06d190043a407495c4412dd6b6fd3b45a8514518173ed961"}, +] setuptools = [ {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, @@ -2154,6 +2579,106 @@ setuptools-scm = [ {file = "setuptools_scm-7.1.0-py3-none-any.whl", hash = "sha256:73988b6d848709e2af142aa48c986ea29592bbcfca5375678064708205253d8e"}, {file = "setuptools_scm-7.1.0.tar.gz", hash = "sha256:6c508345a771aad7d56ebff0e70628bf2b0ec7573762be9960214730de278f27"}, ] +simplejson = [ + {file = "simplejson-3.19.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3471e95110dcaf901db16063b2e40fb394f8a9e99b3fe9ee3acc6f6ef72183a2"}, + {file = "simplejson-3.19.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:3194cd0d2c959062b94094c0a9f8780ffd38417a5322450a0db0ca1a23e7fbd2"}, + {file = "simplejson-3.19.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:8a390e56a7963e3946ff2049ee1eb218380e87c8a0e7608f7f8790ba19390867"}, + {file = "simplejson-3.19.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1537b3dd62d8aae644f3518c407aa8469e3fd0f179cdf86c5992792713ed717a"}, + {file = "simplejson-3.19.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a8617625369d2d03766413bff9e64310feafc9fc4f0ad2b902136f1a5cd8c6b0"}, + {file = "simplejson-3.19.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:2c433a412e96afb9a3ce36fa96c8e61a757af53e9c9192c97392f72871e18e69"}, + {file = "simplejson-3.19.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:f1c70249b15e4ce1a7d5340c97670a95f305ca79f376887759b43bb33288c973"}, + {file = "simplejson-3.19.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:287e39ba24e141b046812c880f4619d0ca9e617235d74abc27267194fc0c7835"}, + {file = "simplejson-3.19.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6f0a0b41dd05eefab547576bed0cf066595f3b20b083956b1405a6f17d1be6ad"}, + {file = "simplejson-3.19.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f98d918f7f3aaf4b91f2b08c0c92b1774aea113334f7cde4fe40e777114dbe6"}, + {file = "simplejson-3.19.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d74beca677623481810c7052926365d5f07393c72cbf62d6cce29991b676402"}, + {file = "simplejson-3.19.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7f2398361508c560d0bf1773af19e9fe644e218f2a814a02210ac2c97ad70db0"}, + {file = "simplejson-3.19.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ad331349b0b9ca6da86064a3599c425c7a21cd41616e175ddba0866da32df48"}, + {file = "simplejson-3.19.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:332c848f02d71a649272b3f1feccacb7e4f7e6de4a2e6dc70a32645326f3d428"}, + {file = "simplejson-3.19.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25785d038281cd106c0d91a68b9930049b6464288cea59ba95b35ee37c2d23a5"}, + {file = "simplejson-3.19.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18955c1da6fc39d957adfa346f75226246b6569e096ac9e40f67d102278c3bcb"}, + {file = "simplejson-3.19.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:11cc3afd8160d44582543838b7e4f9aa5e97865322844b75d51bf4e0e413bb3e"}, + {file = "simplejson-3.19.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b01fda3e95d07a6148702a641e5e293b6da7863f8bc9b967f62db9461330562c"}, + {file = "simplejson-3.19.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:778331444917108fa8441f59af45886270d33ce8a23bfc4f9b192c0b2ecef1b3"}, + {file = "simplejson-3.19.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9eb117db8d7ed733a7317c4215c35993b815bf6aeab67523f1f11e108c040672"}, + {file = "simplejson-3.19.2-cp310-cp310-win32.whl", hash = "sha256:39b6d79f5cbfa3eb63a869639cfacf7c41d753c64f7801efc72692c1b2637ac7"}, + {file = "simplejson-3.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:5675e9d8eeef0aa06093c1ff898413ade042d73dc920a03e8cea2fb68f62445a"}, + {file = "simplejson-3.19.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed628c1431100b0b65387419551e822987396bee3c088a15d68446d92f554e0c"}, + {file = "simplejson-3.19.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:adcb3332979cbc941b8fff07181f06d2b608625edc0a4d8bc3ffc0be414ad0c4"}, + {file = "simplejson-3.19.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:08889f2f597ae965284d7b52a5c3928653a9406d88c93e3161180f0abc2433ba"}, + {file = "simplejson-3.19.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef7938a78447174e2616be223f496ddccdbf7854f7bf2ce716dbccd958cc7d13"}, + {file = "simplejson-3.19.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a970a2e6d5281d56cacf3dc82081c95c1f4da5a559e52469287457811db6a79b"}, + {file = "simplejson-3.19.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:554313db34d63eac3b3f42986aa9efddd1a481169c12b7be1e7512edebff8eaf"}, + {file = "simplejson-3.19.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d36081c0b1c12ea0ed62c202046dca11438bee48dd5240b7c8de8da62c620e9"}, + {file = "simplejson-3.19.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a3cd18e03b0ee54ea4319cdcce48357719ea487b53f92a469ba8ca8e39df285e"}, + {file = "simplejson-3.19.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:66e5dc13bfb17cd6ee764fc96ccafd6e405daa846a42baab81f4c60e15650414"}, + {file = "simplejson-3.19.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:972a7833d4a1fcf7a711c939e315721a88b988553fc770a5b6a5a64bd6ebeba3"}, + {file = "simplejson-3.19.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3e74355cb47e0cd399ead3477e29e2f50e1540952c22fb3504dda0184fc9819f"}, + {file = "simplejson-3.19.2-cp311-cp311-win32.whl", hash = "sha256:1dd4f692304854352c3e396e9b5f0a9c9e666868dd0bdc784e2ac4c93092d87b"}, + {file = "simplejson-3.19.2-cp311-cp311-win_amd64.whl", hash = "sha256:9300aee2a8b5992d0f4293d88deb59c218989833e3396c824b69ba330d04a589"}, + {file = "simplejson-3.19.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b8d940fd28eb34a7084877747a60873956893e377f15a32ad445fe66c972c3b8"}, + {file = "simplejson-3.19.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4969d974d9db826a2c07671273e6b27bc48e940738d768fa8f33b577f0978378"}, + {file = "simplejson-3.19.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c594642d6b13d225e10df5c16ee15b3398e21a35ecd6aee824f107a625690374"}, + {file = "simplejson-3.19.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2f5a398b5e77bb01b23d92872255e1bcb3c0c719a3be40b8df146570fe7781a"}, + {file = "simplejson-3.19.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176a1b524a3bd3314ed47029a86d02d5a95cc0bee15bd3063a1e1ec62b947de6"}, + {file = "simplejson-3.19.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3c7363a8cb8c5238878ec96c5eb0fc5ca2cb11fc0c7d2379863d342c6ee367a"}, + {file = "simplejson-3.19.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:346820ae96aa90c7d52653539a57766f10f33dd4be609206c001432b59ddf89f"}, + {file = "simplejson-3.19.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de9a2792612ec6def556d1dc621fd6b2073aff015d64fba9f3e53349ad292734"}, + {file = "simplejson-3.19.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1c768e7584c45094dca4b334af361e43b0aaa4844c04945ac7d43379eeda9bc2"}, + {file = "simplejson-3.19.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:9652e59c022e62a5b58a6f9948b104e5bb96d3b06940c6482588176f40f4914b"}, + {file = "simplejson-3.19.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9c1a4393242e321e344213a90a1e3bf35d2f624aa8b8f6174d43e3c6b0e8f6eb"}, + {file = "simplejson-3.19.2-cp312-cp312-win32.whl", hash = "sha256:7cb98be113911cb0ad09e5523d0e2a926c09a465c9abb0784c9269efe4f95917"}, + {file = "simplejson-3.19.2-cp312-cp312-win_amd64.whl", hash = "sha256:6779105d2fcb7fcf794a6a2a233787f6bbd4731227333a072d8513b252ed374f"}, + {file = "simplejson-3.19.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:061e81ea2d62671fa9dea2c2bfbc1eec2617ae7651e366c7b4a2baf0a8c72cae"}, + {file = "simplejson-3.19.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4280e460e51f86ad76dc456acdbfa9513bdf329556ffc8c49e0200878ca57816"}, + {file = "simplejson-3.19.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11c39fbc4280d7420684494373b7c5904fa72a2b48ef543a56c2d412999c9e5d"}, + {file = "simplejson-3.19.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bccb3e88ec26ffa90f72229f983d3a5d1155e41a1171190fa723d4135523585b"}, + {file = "simplejson-3.19.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bb5b50dc6dd671eb46a605a3e2eb98deb4a9af787a08fcdddabe5d824bb9664"}, + {file = "simplejson-3.19.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:d94245caa3c61f760c4ce4953cfa76e7739b6f2cbfc94cc46fff6c050c2390c5"}, + {file = "simplejson-3.19.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d0e5ffc763678d48ecc8da836f2ae2dd1b6eb2d27a48671066f91694e575173c"}, + {file = "simplejson-3.19.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d222a9ed082cd9f38b58923775152003765016342a12f08f8c123bf893461f28"}, + {file = "simplejson-3.19.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8434dcdd347459f9fd9c526117c01fe7ca7b016b6008dddc3c13471098f4f0dc"}, + {file = "simplejson-3.19.2-cp36-cp36m-win32.whl", hash = "sha256:c9ac1c2678abf9270e7228133e5b77c6c3c930ad33a3c1dfbdd76ff2c33b7b50"}, + {file = "simplejson-3.19.2-cp36-cp36m-win_amd64.whl", hash = "sha256:92c4a4a2b1f4846cd4364855cbac83efc48ff5a7d7c06ba014c792dd96483f6f"}, + {file = "simplejson-3.19.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0d551dc931638e2102b8549836a1632e6e7cf620af3d093a7456aa642bff601d"}, + {file = "simplejson-3.19.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73a8a4653f2e809049999d63530180d7b5a344b23a793502413ad1ecea9a0290"}, + {file = "simplejson-3.19.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40847f617287a38623507d08cbcb75d51cf9d4f9551dd6321df40215128325a3"}, + {file = "simplejson-3.19.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be893258d5b68dd3a8cba8deb35dc6411db844a9d35268a8d3793b9d9a256f80"}, + {file = "simplejson-3.19.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9eb3cff1b7d71aa50c89a0536f469cb8d6dcdd585d8f14fb8500d822f3bdee4"}, + {file = "simplejson-3.19.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d0f402e787e6e7ee7876c8b05e2fe6464820d9f35ba3f172e95b5f8b699f6c7f"}, + {file = "simplejson-3.19.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fbbcc6b0639aa09b9649f36f1bcb347b19403fe44109948392fbb5ea69e48c3e"}, + {file = "simplejson-3.19.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:2fc697be37585eded0c8581c4788fcfac0e3f84ca635b73a5bf360e28c8ea1a2"}, + {file = "simplejson-3.19.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b0a3eb6dd39cce23801a50c01a0976971498da49bc8a0590ce311492b82c44b"}, + {file = "simplejson-3.19.2-cp37-cp37m-win32.whl", hash = "sha256:49f9da0d6cd17b600a178439d7d2d57c5ef01f816b1e0e875e8e8b3b42db2693"}, + {file = "simplejson-3.19.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c87c22bd6a987aca976e3d3e23806d17f65426191db36d40da4ae16a6a494cbc"}, + {file = "simplejson-3.19.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e4c166f743bb42c5fcc60760fb1c3623e8fda94f6619534217b083e08644b46"}, + {file = "simplejson-3.19.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0a48679310e1dd5c9f03481799311a65d343748fe86850b7fb41df4e2c00c087"}, + {file = "simplejson-3.19.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0521e0f07cb56415fdb3aae0bbd8701eb31a9dfef47bb57206075a0584ab2a2"}, + {file = "simplejson-3.19.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d2d5119b1d7a1ed286b8af37357116072fc96700bce3bec5bb81b2e7057ab41"}, + {file = "simplejson-3.19.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c1467d939932901a97ba4f979e8f2642415fcf02ea12f53a4e3206c9c03bc17"}, + {file = "simplejson-3.19.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49aaf4546f6023c44d7e7136be84a03a4237f0b2b5fb2b17c3e3770a758fc1a0"}, + {file = "simplejson-3.19.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60848ab779195b72382841fc3fa4f71698a98d9589b0a081a9399904487b5832"}, + {file = "simplejson-3.19.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0436a70d8eb42bea4fe1a1c32d371d9bb3b62c637969cb33970ad624d5a3336a"}, + {file = "simplejson-3.19.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:49e0e3faf3070abdf71a5c80a97c1afc059b4f45a5aa62de0c2ca0444b51669b"}, + {file = "simplejson-3.19.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ff836cd4041e16003549449cc0a5e372f6b6f871eb89007ab0ee18fb2800fded"}, + {file = "simplejson-3.19.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3848427b65e31bea2c11f521b6fc7a3145d6e501a1038529da2391aff5970f2f"}, + {file = "simplejson-3.19.2-cp38-cp38-win32.whl", hash = "sha256:3f39bb1f6e620f3e158c8b2eaf1b3e3e54408baca96a02fe891794705e788637"}, + {file = "simplejson-3.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:0405984f3ec1d3f8777c4adc33eac7ab7a3e629f3b1c05fdded63acc7cf01137"}, + {file = "simplejson-3.19.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:445a96543948c011a3a47c8e0f9d61e9785df2544ea5be5ab3bc2be4bd8a2565"}, + {file = "simplejson-3.19.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4a8c3cc4f9dfc33220246760358c8265dad6e1104f25f0077bbca692d616d358"}, + {file = "simplejson-3.19.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af9c7e6669c4d0ad7362f79cb2ab6784d71147503e62b57e3d95c4a0f222c01c"}, + {file = "simplejson-3.19.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:064300a4ea17d1cd9ea1706aa0590dcb3be81112aac30233823ee494f02cb78a"}, + {file = "simplejson-3.19.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9453419ea2ab9b21d925d0fd7e3a132a178a191881fab4169b6f96e118cc25bb"}, + {file = "simplejson-3.19.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e038c615b3906df4c3be8db16b3e24821d26c55177638ea47b3f8f73615111c"}, + {file = "simplejson-3.19.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16ca9c90da4b1f50f089e14485db8c20cbfff2d55424062791a7392b5a9b3ff9"}, + {file = "simplejson-3.19.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1018bd0d70ce85f165185d2227c71e3b1e446186f9fa9f971b69eee223e1e3cd"}, + {file = "simplejson-3.19.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e8dd53a8706b15bc0e34f00e6150fbefb35d2fd9235d095b4f83b3c5ed4fa11d"}, + {file = "simplejson-3.19.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:2d022b14d7758bfb98405672953fe5c202ea8a9ccf9f6713c5bd0718eba286fd"}, + {file = "simplejson-3.19.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:febffa5b1eda6622d44b245b0685aff6fb555ce0ed734e2d7b1c3acd018a2cff"}, + {file = "simplejson-3.19.2-cp39-cp39-win32.whl", hash = "sha256:4edcd0bf70087b244ba77038db23cd98a1ace2f91b4a3ecef22036314d77ac23"}, + {file = "simplejson-3.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:aad7405c033d32c751d98d3a65801e2797ae77fac284a539f6c3a3e13005edc4"}, + {file = "simplejson-3.19.2-py3-none-any.whl", hash = "sha256:bcedf4cae0d47839fee7de344f96b5694ca53c786f28b5f773d4f0b265a159eb"}, + {file = "simplejson-3.19.2.tar.gz", hash = "sha256:9eb442a2442ce417801c912df68e1f6ccfcd41577ae7274953ab3ad24ef7d82c"}, +] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -2314,10 +2839,28 @@ threadpoolctl = [ {file = "threadpoolctl-3.2.0-py3-none-any.whl", hash = "sha256:2b7818516e423bdaebb97c723f86a7c6b0a83d3f3b0970328d66f4d9104dc032"}, {file = "threadpoolctl-3.2.0.tar.gz", hash = "sha256:c96a0ba3bdddeaca37dc4cc7344aafad41cdb8c313f74fdfe387a867bba93355"}, ] +tinytimer = [ + {file = "tinytimer-0.0.0.tar.gz", hash = "sha256:6ad13c8f01ab6094e58081a5367ffc4c5831f2d6b29034d2434d8ae106308fa5"}, +] tomli = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] +tomlkit = [ + {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, + {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, +] +toolz = [ + {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, + {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, +] +tqdm = [ + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, +] +typechecks = [ + {file = "typechecks-0.1.0.tar.gz", hash = "sha256:7d801a6018f60d2a10aa3debc3af65f590c96c455de67159f39b9b183107c83b"}, +] types-requests = [ {file = "types-requests-2.31.0.1.tar.gz", hash = "sha256:3de667cffa123ce698591de0ad7db034a5317457a596eb0b4944e5a9d9e8d1ac"}, {file = "types_requests-2.31.0.1-py3-none-any.whl", hash = "sha256:afb06ef8f25ba83d59a1d424bd7a5a939082f94b94e90ab5e6116bd2559deaa3"}, @@ -2342,6 +2885,10 @@ urllib3 = [ {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, ] +xarray = [ + {file = "xarray-2023.10.1-py3-none-any.whl", hash = "sha256:71ea549e9be6dfeab19c2736acf659967b861aad2397691a80e5fad0c61db2ad"}, + {file = "xarray-2023.10.1.tar.gz", hash = "sha256:9eeee170c3fc2f3321eb6ba40c17ffe4d8c98d49d55e4a3fba66a75bdc7dd9e5"}, +] zipp = [ {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, diff --git a/pyproject.toml b/pyproject.toml old mode 100644 new mode 100755 index 51dd1b2..1fd1199 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,14 +1,14 @@ [tool.poetry] name = "igem" -version = "0.1.4" +version = "0.1.6" description = "" authors = ["Andre Rico <97684721+AndreRicoPSU@users.noreply.github.com>"] license = "BSD-3-Clause" readme = "README.txt" [tool.poetry.dependencies] -python = ">=3.8.0,<3.11.0" -clarite = ">=2.3.4" +python = ">=3.9.0,<3.11.0" +clarite = ">=2.3.5" django = "^4.1.5" patool = "^1.12" requests = "^2.28.2" @@ -18,6 +18,10 @@ django-thread = "^0.0.1" psycopg2 = "^2.9.5" lxml = "^4.9.2" scikit-learn = "^1.2.2" +xarray = "^2023.10.1" +tqdm = "^4.66.1" +dask = "^2023.7.1" +pyensembl = "^2.2.9" [tool.poetry.group.dev.dependencies] sphinx-rtd-theme = "^1.2.0" @@ -31,6 +35,7 @@ django-debug-toolbar = "^3.8.1" pytest-django = "^4.5.2" black = "^23.1.0" pytest = "^7.2.1" +django_debug_toolbar = "3.8.1" [build-system] requires = ["poetry-core"]