genome-spy-python 0.5.0__tar.gz → 0.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- genome_spy_python-0.7.0/.agents/skills/commit/SKILL.md +48 -0
- genome_spy_python-0.7.0/.agents/skills/proper-code-review/SKILL.md +73 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.gitignore +3 -0
- genome_spy_python-0.7.0/AGENTS.md +65 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/CHANGELOG.md +57 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/CONTRIBUTING.md +20 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/PKG-INFO +102 -28
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/README.md +99 -27
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/THIRD_PARTY_NOTICES.md +26 -0
- genome_spy_python-0.7.0/docs/_ext/genomespy_agents.py +36 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_ext/genomespy_gallery.py +9 -0
- genome_spy_python-0.7.0/docs/_static/gallery/airway_ma_plot.png +0 -0
- genome_spy_python-0.7.0/docs/_static/gallery/airway_volcano_plot.png +0 -0
- genome_spy_python-0.7.0/docs/_static/gallery/clustered_heatmap.png +0 -0
- genome_spy_python-0.7.0/docs/_static/gallery/multiple_sequence_alignment.png +0 -0
- genome_spy_python-0.7.0/docs/_static/gallery/pbmc_cell_heatmap.png +0 -0
- genome_spy_python-0.7.0/docs/_static/gallery/pbmc_expression_tracks.png +0 -0
- genome_spy_python-0.7.0/docs/_static/gallery/pbmc_marker_matrix.png +0 -0
- genome_spy_python-0.7.0/docs/_static/gallery/pbmc_umap.png +0 -0
- genome_spy_python-0.7.0/docs/_static/gallery/pbmc_umap_genes.png +0 -0
- genome_spy_python-0.7.0/docs/_static/gallery/sequence_logo.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/genomespy.css +12 -0
- genome_spy_python-0.7.0/docs/_static/readme-manhattan.webp +0 -0
- genome_spy_python-0.7.0/docs/_static/readme-sequence-logo.webp +0 -0
- genome_spy_python-0.7.0/docs/_static/snaketie.svg +1 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/workflows.css +6 -4
- genome_spy_python-0.7.0/docs/agents/data.md +121 -0
- genome_spy_python-0.7.0/docs/agents/encodings.md +144 -0
- genome_spy_python-0.7.0/docs/agents/manifest.json +92 -0
- genome_spy_python-0.7.0/docs/agents/quickstart.md +81 -0
- genome_spy_python-0.7.0/docs/agents/rendering.md +64 -0
- genome_spy_python-0.7.0/docs/agents/scales-axes-legends.md +100 -0
- genome_spy_python-0.7.0/docs/agents/skill-distribution.md +62 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/api.md +40 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/conf.py +3 -1
- genome_spy_python-0.7.0/docs/contributing/standards.md +75 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/datasets.md +10 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/airway_ma_plot.py +63 -50
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/airway_volcano_plot.py +63 -50
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/ascat_fitting.py +41 -34
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/bam_read_alignments.py +5 -4
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/bam_read_pileup.py +3 -2
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/bigbed_ccre_track.py +3 -2
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/clinvar_variants.py +3 -2
- genome_spy_python-0.7.0/docs/examples/clustered_heatmap.md +47 -0
- genome_spy_python-0.7.0/docs/examples/clustered_heatmap.py +394 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/combined_laml_oncoplot.py +1 -1
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/composing_genome_browser.py +3 -2
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/dynseq_adaptive_bqtl.py +22 -16
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/dynseq_bqtl.py +22 -16
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/hcc1954_sv_cnv.py +10 -4
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/independent_scales.md +14 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/indexed_fasta_sequence.py +3 -2
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/luad_oncoprint.py +12 -10
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/multiple_sequence_alignment.py +9 -8
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/oncoprint.py +14 -12
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/p53_sequence_comparison.py +1 -1
- genome_spy_python-0.7.0/docs/examples/pbmc_cell_heatmap.md +24 -0
- genome_spy_python-0.7.0/docs/examples/pbmc_cell_heatmap.py +103 -0
- genome_spy_python-0.7.0/docs/examples/pbmc_expression_tracks.md +18 -0
- genome_spy_python-0.7.0/docs/examples/pbmc_expression_tracks.py +124 -0
- genome_spy_python-0.7.0/docs/examples/pbmc_marker_matrix.md +24 -0
- genome_spy_python-0.7.0/docs/examples/pbmc_marker_matrix.py +160 -0
- genome_spy_python-0.7.0/docs/examples/pbmc_umap.md +15 -0
- genome_spy_python-0.7.0/docs/examples/pbmc_umap.py +58 -0
- genome_spy_python-0.7.0/docs/examples/pbmc_umap_genes.md +18 -0
- genome_spy_python-0.7.0/docs/examples/pbmc_umap_genes.py +96 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/pik3ca_tcga_brca_lollipop.py +3 -2
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/pisa_interaction_matrix.md +15 -13
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/pisa_interaction_matrix.py +98 -72
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/pisa_squid.md +17 -12
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/pisa_squid.py +64 -68
- genome_spy_python-0.7.0/docs/examples/point_mark.md +14 -0
- genome_spy_python-0.7.0/docs/examples/rect_heatmap.md +15 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/rnf7_direct_rna.py +2 -2
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/sashimi_plot.py +9 -1
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/sequence_logo.py +2 -3
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/six_frame_translation.py +5 -4
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/upset_mutations.md +4 -3
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/upset_mutations.py +29 -39
- genome_spy_python-0.7.0/docs/examples/vertical_concat.md +14 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/index.md +3 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/composition.py +34 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/encoding_channels.py +9 -0
- genome_spy_python-0.7.0/docs/tutorials/expressions.py +34 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/interaction.py +10 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/composition.md +39 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/data.md +54 -5
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/encodings.md +23 -2
- genome_spy_python-0.7.0/docs/user-guide/expressions.md +90 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/index.md +2 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/interaction.md +79 -52
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/transforms.md +9 -22
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/workflows/index.md +2 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/notebooks/edit_sequence.ipynb +7 -3
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/notebooks/pick_genes.ipynb +3 -1
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/notebooks/select_genes.ipynb +3 -1
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/pyproject.toml +14 -2
- genome_spy_python-0.7.0/skills/create-genomespy-visualization/SKILL.md +91 -0
- genome_spy_python-0.7.0/skills/create-genomespy-visualization/agents/openai.yaml +4 -0
- genome_spy_python-0.7.0/skills/create-genomespy-visualization/references/grouped-charts.md +102 -0
- genome_spy_python-0.7.0/skills/create-genomespy-visualization/references/table-chart.md +157 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/__init__.py +112 -57
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/_chart_authoring.py +6 -1
- genome_spy_python-0.7.0/src/genome_spy/_skill_install.py +158 -0
- genome_spy_python-0.7.0/src/genome_spy/anndata.py +159 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/api.py +81 -27
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/arrow.py +7 -2
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/channels.py +5 -2
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/chart.py +66 -6
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/__init__.py +2 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/_airway.py +35 -47
- genome_spy_python-0.7.0/src/genome_spy/datasets/_pbmc.py +87 -0
- genome_spy_python-0.7.0/src/genome_spy/datasets/data/airway_review.json.gz +0 -0
- genome_spy_python-0.7.0/src/genome_spy/datasets/data/pbmc_markers.json.gz +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schema/__init__.py +31 -1
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schema/_kwds.py +72 -45
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schema/_typing.py +3 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schema/capabilities.json +25 -2
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schema/channels.py +1115 -282
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schema/composition.py +464 -21
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schema/core.py +24746 -13714
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schema/ergonomics.py +105 -48
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schema/expressions.py +7 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schema/genome-spy-schema.json +13765 -5658
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schema/lazy.py +3 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schema/mixins.py +2507 -780
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/schemapi.py +1 -5
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/static/controls.js +1 -1
- genome_spy_python-0.7.0/src/genome_spy/static/genome-spy.js +1131 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/static/inspector.js +4 -4
- genome_spy_python-0.7.0/tests/browser/test_core_upgrade.py +80 -0
- genome_spy_python-0.7.0/tests/browser/test_docs_theme.py +68 -0
- genome_spy_python-0.7.0/tests/fixtures/upstream_examples/README.md +15 -0
- genome_spy_python-0.7.0/tests/fixtures/upstream_examples/bpreveal-pisa-matrix.json +445 -0
- genome_spy_python-0.7.0/tests/fixtures/upstream_examples/clustered-heatmap.json +594 -0
- genome_spy_python-0.7.0/tests/fixtures/upstream_examples/upsetr-mutations.json +403 -0
- genome_spy_python-0.7.0/tests/test_agent_docs.py +262 -0
- genome_spy_python-0.7.0/tests/test_anndata.py +287 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_arrow.py +4 -1
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_chart.py +1 -1
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_conditions.py +29 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_datasets.py +8 -13
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_docs_api_reference.py +8 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_docs_gallery.py +116 -122
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_docs_tutorial.py +2 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_generated_schema_package.py +72 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_licensing.py +2 -0
- genome_spy_python-0.7.0/tests/test_new_compositions.py +159 -0
- genome_spy_python-0.7.0/tests/test_pbmc_gallery.py +354 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_pisa_gallery.py +26 -8
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_schema_codegen.py +73 -0
- genome_spy_python-0.7.0/tests/test_skill_install.py +130 -0
- genome_spy_python-0.7.0/tests/test_upstream_surround_gallery.py +161 -0
- genome_spy_python-0.7.0/tools/agent_docs.py +239 -0
- genome_spy_python-0.7.0/tools/agent_markdown.py +277 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tools/docs_gallery.py +8 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tools/docs_workflows.py +15 -11
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tools/generate_api_docs.py +12 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tools/generate_schema_wrapper.py +24 -4
- genome_spy_python-0.7.0/tools/prepare_airway_review.py +55 -0
- genome_spy_python-0.7.0/tools/prepare_pbmc_gallery_data.py +244 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tools/schemapi/codegen.py +92 -63
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/uv.lock +703 -17
- genome_spy_python-0.5.0/.agents/skills/proper-code-review/SKILL.md +0 -165
- genome_spy_python-0.5.0/.claude/skills/commit/SKILL.md +0 -105
- genome_spy_python-0.5.0/AGENTS.md +0 -153
- genome_spy_python-0.5.0/docs/_static/gallery/airway_ma_plot.png +0 -0
- genome_spy_python-0.5.0/docs/_static/gallery/airway_volcano_plot.png +0 -0
- genome_spy_python-0.5.0/docs/_static/gallery/multiple_sequence_alignment.png +0 -0
- genome_spy_python-0.5.0/docs/_static/gallery/sequence_logo.png +0 -0
- genome_spy_python-0.5.0/docs/_static/snaketie.svg +0 -74
- genome_spy_python-0.5.0/src/genome_spy/static/genome-spy.js +0 -1009
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.agents/skills/proper-code-review/references/correctness.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.agents/skills/proper-code-review/references/design.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.agents/skills/proper-code-review/references/performance.md +0 -0
- {genome_spy_python-0.5.0/.agents → genome_spy_python-0.7.0/.claude}/skills/commit/SKILL.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.claude/skills/proper-code-review/SKILL.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.claude/skills/proper-code-review/references/correctness.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.claude/skills/proper-code-review/references/design.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.claude/skills/proper-code-review/references/performance.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.gitattributes +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.github/workflows/ci.yml +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.github/workflows/docs.yml +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.github/workflows/release.yml +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.pre-commit-config.yaml +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/.python-version +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/CLAUDE.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/LICENSE +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/LICENSES/ALTAIR-BSD-3-Clause.txt +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/LICENSES/CC-BY-4.0.txt +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/LICENSES/CC-BY-NC-SA-4.0.txt +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/LICENSES/CC0-1.0.txt +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/LICENSES/DATA-SOURCE-REPOSITORIES-MIT.txt +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/LICENSES/GENOMESPY-MIT.txt +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/LICENSES/LATO-OFL-1.1.txt +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/LICENSES/VEGA-BSD-3-Clause.txt +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/LICENSES/VEGA-LITE-BSD-3-Clause.txt +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/data/README.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/data/airway_metadata.csv +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/data/airway_scaledcounts.csv +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/data/hapmap_gwas.csv +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/data/oncoprint_dataset3.json +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/data/pik3ca_mutations.json +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/external-links.js +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/ascat_copy_number.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/ascat_fitting.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/bam_read_alignments.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/bam_read_pileup.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/bigbed_ccre_track.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/brush_linked_genome_tracks.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/clinvar_variants.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/combined_laml_oncoplot.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/composing_genome_browser.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/copy_number.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/coverage_pileup.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/cytobands.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/diverging_bars.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/dynseq_adaptive_bqtl.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/dynseq_bqtl.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/genome_tracks.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/geometric_zoom.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/gff3_gene_annotations.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/hcc1954_sv_cnv.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/heatmap_with_text.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/independent_scales.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/indexed_fasta_sequence.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/layered_lollipop.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/link_mark.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/luad_oncoprint.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/manhattan_plot.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/needle_plot.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/oncoprint.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/p53_sequence_comparison.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/penguin_brush.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/pik3ca_tcga_brca_lollipop.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/pisa_interaction_matrix.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/pisa_squid.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/point_mark.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/point_styles.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/rainfall_plot.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/ranged_rule.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/rect_heatmap.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/refseq_scored_genes.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/rnf7_direct_rna.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/sashimi_plot.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/scrollable_viewport.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/six_frame_translation.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/stacked_bar.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/stacked_genome_browser.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/tcga_ov_gistic.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/tsne.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/upset_mutations.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/vertical_concat.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/gallery/volcano_plot.png +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/showcase.js +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_static/workflows.js +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_templates/autosummary/class.rst +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_templates/autosummary/class_own_members.rst +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_templates/base.html +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/_templates/components/view-this-page.html +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/about.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/airway_ma_plot.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/airway_volcano_plot.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/ascat_copy_number.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/ascat_copy_number.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/ascat_fitting.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/bam_read_alignments.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/bam_read_pileup.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/brush_linked_genome_tracks.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/brush_linked_genome_tracks.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/clinvar_variants.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/combined_laml_oncoplot.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/composing_genome_browser.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/copy_number.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/coverage_pileup.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/coverage_pileup.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/cytobands.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/cytobands.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/diverging_bars.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/diverging_bars.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/dynseq_adaptive_bqtl.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/dynseq_bqtl.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/genome_tracks.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/geometric_zoom.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/geometric_zoom.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/gff3_gene_annotations.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/gff3_gene_annotations.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/hcc1954_sv_cnv.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/heatmap_with_text.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/heatmap_with_text.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/independent_scales.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/layered_lollipop.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/layered_lollipop.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/link_mark.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/luad_oncoprint.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/manhattan_plot.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/manhattan_plot.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/multiple_sequence_alignment.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/needle_plot.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/oncoprint.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/p53_sequence_comparison.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/penguin_brush.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/penguin_brush.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/pik3ca_tcga_brca_lollipop.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/point_mark.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/point_styles.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/point_styles.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/rainfall_plot.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/rainfall_plot.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/ranged_rule.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/rect_heatmap.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/refseq_scored_genes.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/refseq_scored_genes.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/rnf7_direct_rna.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/sashimi_plot.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/scrollable_viewport.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/six_frame_translation.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/stacked_bar.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/stacked_bar.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/stacked_genome_browser.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/tcga_ov_gistic.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/tcga_ov_gistic.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/tsne.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/tsne.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/vertical_concat.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/volcano_plot.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/examples/volcano_plot.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/getting-started.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/integration/component.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/integration/index.html +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/integration/notebook.ipynb +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/integration/server.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/annotations.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/charts_and_marks.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/configuration.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/data_inputs.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/display_controls.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/genome_browser_layouts.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/genomic_coordinates.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/genomic_data.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/getting_started.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/importing_specifications.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/notebooks.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/scales_and_guides.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/serialization.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/tutorials/transforms.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/annotations.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/charts.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/configuration.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/connect-python.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/display-controls.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/embed-api.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/genome-browser-layouts.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/genomic-axes.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/genomic-data.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/importing-specifications.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/notebooks.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/scales-axes-legends.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/serialization.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/using-charts.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/workflows/annotate-intervals.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/workflows/edit-sequence.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/workflows/pick-genes.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/docs/user-guide/workflows/select-genes.md +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/notebooks/annotate_genomic_intervals.ipynb +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/notebooks/brush_linked_genome_tracks.ipynb +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/notebooks/embed_api.ipynb +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/_conditions.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/_embed.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/_expressions.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/_parameters.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/_render.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/_utils.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/_widget.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/data.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/data_transformers.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/_annotations.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/_direct_rna.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/_gistic.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/_grammar.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/_hapmap.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/_mutation.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/_oncoprint.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/airway_metadata.csv +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/airway_scaledcounts.csv +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/brca.maf.gz +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/hapmap_gwas.csv +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/mutation_impact_reference.json +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/oncoprint_dataset3.json +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/p53_sequence_comparison_aligned.fasta.gz +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/pik3ca_mutations.json +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/pik3ca_tcga_brca_lollipop.json +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/refseq_gene_bodies.csv.gz +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/rnf7_direct_rna.json.gz +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/tal1_alphagenome_reference.json.gz +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/tcga.tsv +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/tcga_laml.maf.gz +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/tcga_laml_annot.tsv +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/tcga_laml_combined_oncoplot.json.gz +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/tcga_ov_gistic_lesions.tsv.gz +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/datasets/data/tcga_ov_gistic_scores.tsv.gz +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/embed.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/helpers.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/jupyter.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/py.typed +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/static/embed-bridge.js +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/src/genome_spy/static/widget.js +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/__init__.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/browser/test_docs_workflows.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/browser/test_embed_api.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/browser/test_offline_rendering.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/browser/test_python_web_example.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/embed-bridge.test.mjs +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_combined_gallery_data.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_data_transformers.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_embed.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_embed_notebook.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_expressions.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_generated_transform_methods.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_javascript_assets.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_python_connection_example.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_render_thumbnails.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_rnf7_direct_rna_example.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_widget.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/test_workflow_notebooks.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tests/widget.test.mjs +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tools/check_notebook_rendering.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tools/prepare_combined_gallery_data.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tools/prepare_refseq_gene_annotations.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tools/render_thumbnails.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tools/schemapi/__init__.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tools/schemapi/expression_codegen.py +0 -0
- {genome_spy_python-0.5.0 → genome_spy_python-0.7.0}/tools/vendor_javascript.py +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: commit
|
|
3
|
+
description: Commit repository changes in small thematic chunks using conventional commits and concise changelog staging.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Commit workflow
|
|
7
|
+
|
|
8
|
+
Prefer small, independently understandable commits. Keep unrelated user changes
|
|
9
|
+
unstaged. Do not amend, rewrite history, revert, force-push, or add co-author
|
|
10
|
+
trailers unless explicitly requested.
|
|
11
|
+
|
|
12
|
+
## Inspect and commit
|
|
13
|
+
|
|
14
|
+
1. Start with `git status --short` and `git diff --stat`.
|
|
15
|
+
2. Group changes into thematic slices. Split separate features, fixes, refactors,
|
|
16
|
+
tooling/configuration, documentation, and unrelated test work when separable;
|
|
17
|
+
do not split mechanically by file.
|
|
18
|
+
3. Keep implementation with its direct tests, API/schema changes with required
|
|
19
|
+
supporting code, and generated files with their source change.
|
|
20
|
+
4. Read targeted diffs only when needed, including when grouping is unclear:
|
|
21
|
+
`git diff -- <files>`. Minimize token use; do not read the full diff or re-review
|
|
22
|
+
code by default.
|
|
23
|
+
5. Stage one slice, check `git diff --cached --stat`, and commit with a conventional
|
|
24
|
+
message. Repeat for remaining slices.
|
|
25
|
+
6. Finish with `git status --short`, update changelog staging once if needed, and
|
|
26
|
+
report commit hashes and remaining uncommitted files.
|
|
27
|
+
|
|
28
|
+
## Commit messages
|
|
29
|
+
|
|
30
|
+
Use `<type>(<scope>): <description>`. Common types: `feat`, `fix`, `refactor`,
|
|
31
|
+
`perf`, `test`, `docs`, `chore`, `build`, and `ci`.
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
feat(parser): add strand-aware bigwig loading
|
|
35
|
+
fix(cache): invalidate stale entries
|
|
36
|
+
refactor(pipeline): simplify track dispatch
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Changelog staging
|
|
40
|
+
|
|
41
|
+
`CHANGELOG_STAGING.md` holds future release notes. Update it once per commit
|
|
42
|
+
session only for release-relevant changes:
|
|
43
|
+
|
|
44
|
+
- Read only the context needed.
|
|
45
|
+
- Add concise bullets under `Added`, `Changed`, `Fixed`, `Removed`, or `Performance`.
|
|
46
|
+
- Prefer one resulting-change bullet over one per commit; avoid duplicates.
|
|
47
|
+
- Omit routine refactors, formatting, test-only work, and internal details unless
|
|
48
|
+
release-relevant.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: proper-code-review
|
|
3
|
+
description: Review code changes for correctness, simplicity, readability, maintainability, architectural fit, and meaningful system-level performance. Use when asked to review a diff, implementation, branch, or recent code changes.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Code review
|
|
7
|
+
|
|
8
|
+
Review as a senior engineer. Prioritize correctness and low lifecycle complexity:
|
|
9
|
+
simple, readable, maintainable code that fits the repository and performs well for
|
|
10
|
+
realistic workloads. Prefer a few high-confidence findings over exhaustive
|
|
11
|
+
commentary; do not manufacture findings.
|
|
12
|
+
|
|
13
|
+
Added complexity must provide a concrete benefit: correctness, meaningful reuse,
|
|
14
|
+
change locality, real variation, necessary scalability, or material performance.
|
|
15
|
+
Prefer local reasoning and localized changes. Reuse suitable repository concepts,
|
|
16
|
+
avoid duplicated knowledge and parallel mechanisms, and reject speculative
|
|
17
|
+
abstraction/extensibility. Judge performance across the system, not just locally.
|
|
18
|
+
|
|
19
|
+
## Review method
|
|
20
|
+
|
|
21
|
+
1. **Understand the change.** Read the diff first. Identify its problem, behavior
|
|
22
|
+
changes, affected interfaces, invariants, state, and architectural concepts.
|
|
23
|
+
Read only enough surrounding code to answer concrete questions, not the whole
|
|
24
|
+
repository. When relevant, inspect callers for compatibility, tests for intended
|
|
25
|
+
behavior/invariants, existing mechanisms before proposing new ones, analogous
|
|
26
|
+
implementations for duplication/fit, and broader execution paths for performance.
|
|
27
|
+
2. **Verify hypotheses.** Check concerns against repository evidence when possible.
|
|
28
|
+
Locate duplicated representations, inspect callers before claiming breakage,
|
|
29
|
+
search for existing abstractions, and establish performance significance before
|
|
30
|
+
criticizing or recommending optimization. Do not present assumptions as facts.
|
|
31
|
+
3. **Review correctness.** Look for concrete behavioral bugs/regressions, broken
|
|
32
|
+
invariants, invalid assumptions, relevant edge cases, unsafe mutations/state
|
|
33
|
+
transitions, error/resource lifecycle issues, concurrency problems, and
|
|
34
|
+
unintended compatibility changes. Passing tests are evidence, not proof.
|
|
35
|
+
Read [correctness](references/correctness.md) for deeper analysis.
|
|
36
|
+
4. **Review design.** Consider simplicity (KISS), readability, maintainability,
|
|
37
|
+
cohesion, coupling, abstraction, change locality, blast radius, and fit together.
|
|
38
|
+
Check whether a simpler solution supports local understanding/change, whether
|
|
39
|
+
synchronized edits duplicate knowledge, whether machinery is unnecessary,
|
|
40
|
+
whether abstractions share real semantics, and whether scope is proportional.
|
|
41
|
+
Apply YAGNI: avoid cleverness or future machinery without concrete benefit.
|
|
42
|
+
Read [design](references/design.md) for deeper analysis.
|
|
43
|
+
5. **Review performance.** Check algorithmic complexity, repeated expensive work,
|
|
44
|
+
I/O, memory/copying, serialization/data movement, CPU/GPU synchronization, and
|
|
45
|
+
realistic scaling. Judge end-to-end impact; reject meaningful complexity for
|
|
46
|
+
negligible local gains. Read [performance](references/performance.md) when relevant.
|
|
47
|
+
6. **Validate findings.** Each problem must be concrete, consequential, supported
|
|
48
|
+
by evidence, and paired with a proportionate fix that reduces total complexity.
|
|
49
|
+
Remove speculative, cosmetic, generic, and low-value comments. No finding is
|
|
50
|
+
better than a weak finding.
|
|
51
|
+
|
|
52
|
+
## Output
|
|
53
|
+
|
|
54
|
+
Order findings by practical impact. For each, use:
|
|
55
|
+
|
|
56
|
+
### `[Severity] Short problem statement`
|
|
57
|
+
|
|
58
|
+
- **Location:** Smallest useful code region.
|
|
59
|
+
- **Problem:** What is wrong.
|
|
60
|
+
- **Impact:** Why it matters here.
|
|
61
|
+
- **Recommendation:** Smallest reasonable fix.
|
|
62
|
+
|
|
63
|
+
Severity:
|
|
64
|
+
|
|
65
|
+
- **Critical:** Correctness, data loss, security, or severe failure.
|
|
66
|
+
- **Important:** Substantial behavioral, architectural, maintainability,
|
|
67
|
+
performance, or scalability issue.
|
|
68
|
+
- **Minor:** Worthwhile simplification or readability improvement.
|
|
69
|
+
|
|
70
|
+
Combine findings with the same root cause and state uncertainty explicitly.
|
|
71
|
+
Normally omit stylistic nits. Do not add generic best-practice advice, speculative
|
|
72
|
+
future concerns, praise for unaffected code, or alternative architectures merely
|
|
73
|
+
because they are possible. If none remain, say no significant issues were found.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Repository instructions
|
|
2
|
+
|
|
3
|
+
`genome-spy-python` wraps GenomeSpy in an idiomatic Python API, as Altair wraps
|
|
4
|
+
Vega-Lite. Users author compatible specs, serialize JSON, and render in notebooks.
|
|
5
|
+
Treat it as a library with a clean public API. Build the reusable Core grammar
|
|
6
|
+
before app-specific concepts. Notebook rendering is first-class; prefer `anywidget`.
|
|
7
|
+
|
|
8
|
+
## Layout
|
|
9
|
+
|
|
10
|
+
| Path | Purpose |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| `src/genome_spy/` | Installable library |
|
|
13
|
+
| `tests/` | pytest suite |
|
|
14
|
+
| `scripts/` | Helpers run via `uv run` |
|
|
15
|
+
| `plans/` | Plans, context, and implementation notes |
|
|
16
|
+
| `material/` | Local reference documents; not committed |
|
|
17
|
+
| `tmp/` | External reference code/repos; not committed |
|
|
18
|
+
|
|
19
|
+
## Working rules
|
|
20
|
+
|
|
21
|
+
- Think before coding: state assumptions and tradeoffs; push back when warranted.
|
|
22
|
+
- Solve the current problem with minimal code. Avoid speculative features and
|
|
23
|
+
premature abstractions; duplicate a little first. If 200 lines could be 50,
|
|
24
|
+
rewrite them.
|
|
25
|
+
- Make surgical changes: match existing style, remove imports/variables orphaned
|
|
26
|
+
by your edits, and leave unrelated code alone.
|
|
27
|
+
- Set verifiable goals and give a brief plan for multi-step work.
|
|
28
|
+
- Keep core logic pure Python; isolate I/O and integration at the edges.
|
|
29
|
+
- Follow the linked [language, docstring, formatting, and gallery standards](docs/contributing/standards.md).
|
|
30
|
+
Read the relevant sections before Python or gallery edits; they are requirements.
|
|
31
|
+
|
|
32
|
+
## Testing and handoff
|
|
33
|
+
|
|
34
|
+
Use pytest. Add or update tests for behavior changes, with fixed seeds for random
|
|
35
|
+
behavior. Keep tests small and focused on one behavior. Apply the "Suspicious
|
|
36
|
+
Check": tighten any test that could pass for the wrong reason.
|
|
37
|
+
|
|
38
|
+
Use `uv` for environments and dependencies. Before handoff, run targeted tests for
|
|
39
|
+
changed behavior and lint. Format before finalizing non-trivial edits; type-check
|
|
40
|
+
when public Python code changes. Report anything you could not validate locally.
|
|
41
|
+
Ruff is the formatting/lint authority; fix issues rather than suppressing them by
|
|
42
|
+
default.
|
|
43
|
+
|
|
44
|
+
| Task | Command |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| Sync environment | `uv sync --dev` |
|
|
47
|
+
| Run tests | `uv run pytest tests/ -x` |
|
|
48
|
+
| Lint | `uv run ruff check .` |
|
|
49
|
+
| Format | `uv run ruff format .` |
|
|
50
|
+
| Type-check | `uv run mypy src/` |
|
|
51
|
+
| Install hooks | `uv run pre-commit install` |
|
|
52
|
+
|
|
53
|
+
Make small, thematic commits. Use conventional commits:
|
|
54
|
+
`<type>(<scope>): <description>` when a scope helps. Do not rewrite history unless
|
|
55
|
+
explicitly asked.
|
|
56
|
+
|
|
57
|
+
## Plans and references
|
|
58
|
+
|
|
59
|
+
| Document | Read when |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| `plans/implementation_plan.md` | Starting implementation; understand phases and open questions |
|
|
62
|
+
| `plans/deferred.md` | Adding scope; avoid intentionally deferred work |
|
|
63
|
+
| `plans/architecture.md` | Changing public API shape, schema strategy, or notebook integration |
|
|
64
|
+
| `plans/tmp_repo_index.md` | Using `tmp/` repos for wrapper/widget design |
|
|
65
|
+
| `plans/project_bootstrap.md` | Updating or extending the initial scaffold |
|
|
@@ -5,6 +5,58 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.7.0] - 2026-10-20
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Typed facet and surround compositions, dendrogram transforms, secondary-offset
|
|
13
|
+
channels, and the remaining schema and expression additions from GenomeSpy 1.2.0.
|
|
14
|
+
- Discoverable named field arguments on encoding constructors and named setters
|
|
15
|
+
for inline schema objects, with automatic public exports for generated channels.
|
|
16
|
+
- A DepMap clustered heatmap gallery example adapted from the official GenomeSpy
|
|
17
|
+
surround specification.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Upgrade the bundled GenomeSpy Core, controls, Inspector, and schema to 1.2.0.
|
|
22
|
+
- Use surround layouts in the PISA interaction matrix, UpSet mutations, PBMC
|
|
23
|
+
marker matrix, and PBMC cell heatmap examples.
|
|
24
|
+
- Use named Python arguments and schema objects throughout gallery configuration,
|
|
25
|
+
and Python expression objects in the updated surround examples.
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- Keep chart colors aligned with the documentation's selected light or dark theme.
|
|
30
|
+
- Serialize named channel objects in shared surround-side encodings.
|
|
31
|
+
- Preserve secondary-offset field and expression types according to the schema.
|
|
32
|
+
- Support named resolution settings on unit charts and omit forbidden schema
|
|
33
|
+
properties from generated signatures.
|
|
34
|
+
- Avoid redundant validation of nested schema objects when validation is explicitly
|
|
35
|
+
disabled, while retaining default validation checks.
|
|
36
|
+
|
|
37
|
+
## [0.6.0] - 2026-10-01
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- Add the prepared `airway_review` dataset for gene-review examples.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- Upgrade GenomeSpy Core, controls, and Inspector to 1.0.0 and regenerate
|
|
46
|
+
the Python schema API, including configurable `displace2d` animation half-life.
|
|
47
|
+
- Extend the sequence-editing notebook to support multi-base edits across the
|
|
48
|
+
displayed locus.
|
|
49
|
+
- Improve interaction and PISA documentation, gallery expressions, and README
|
|
50
|
+
animations.
|
|
51
|
+
|
|
52
|
+
### Fixed
|
|
53
|
+
|
|
54
|
+
- Expose selection predicate classes through `gs` and support typed endpoint
|
|
55
|
+
projection setters, avoiding raw dictionaries in composed conditions.
|
|
56
|
+
- Restrict sequence-logo and alignment-logo zoom to the position axis and share
|
|
57
|
+
one bottom alignment axis.
|
|
58
|
+
- Render the ASCAT fitting example title as literal text.
|
|
59
|
+
|
|
8
60
|
## [0.5.0] - 2026-09-25
|
|
9
61
|
|
|
10
62
|
### Added
|
|
@@ -18,6 +70,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
18
70
|
|
|
19
71
|
### Changed
|
|
20
72
|
|
|
73
|
+
- Use browser-side `displace2d` label placement in the airway volcano and MA
|
|
74
|
+
gallery plots, with denser gene annotations and adaptive leader lines.
|
|
75
|
+
|
|
21
76
|
- Reorganize the gallery into 13 categories, separating regulatory model
|
|
22
77
|
interpretation, read alignments and RNA splicing, sequences and alignments,
|
|
23
78
|
and interaction examples from the broader browser, annotation, and basic groups.
|
|
@@ -126,6 +181,8 @@ First public alpha release, targeting GenomeSpy Core 0.87.0.
|
|
|
126
181
|
- Packaged example datasets, documentation, tutorials, and an interactive
|
|
127
182
|
visualization gallery.
|
|
128
183
|
|
|
184
|
+
[0.7.0]: https://github.com/genome-spy/genome-spy-python/compare/v0.6.0...v0.7.0
|
|
185
|
+
[0.6.0]: https://github.com/genome-spy/genome-spy-python/compare/v0.5.0...v0.6.0
|
|
129
186
|
[0.5.0]: https://github.com/genome-spy/genome-spy-python/compare/v0.4.0...v0.5.0
|
|
130
187
|
[0.4.0]: https://github.com/genome-spy/genome-spy-python/compare/v0.3.0...v0.4.0
|
|
131
188
|
[0.3.0]: https://github.com/genome-spy/genome-spy-python/compare/v0.2.0...v0.3.0
|
|
@@ -90,6 +90,7 @@ Regenerate after changing that version or the generator:
|
|
|
90
90
|
|
|
91
91
|
```bash
|
|
92
92
|
uv run python tools/generate_schema_wrapper.py
|
|
93
|
+
uv run python tools/vendor_javascript.py
|
|
93
94
|
```
|
|
94
95
|
|
|
95
96
|
This requires `npm` and internet access. Use `--package-dir` for a local package,
|
|
@@ -111,6 +112,25 @@ New transforms should be generated from the schema. Add overrides in
|
|
|
111
112
|
`tools/generate_schema_wrapper.py` only for Python conventions the schema
|
|
112
113
|
cannot describe.
|
|
113
114
|
|
|
115
|
+
The generator emits explicit typed constructor and setter arguments from schema
|
|
116
|
+
properties, including inline objects; avoid replacing these with untyped
|
|
117
|
+
`**kwargs` or runtime-only signature patches. Channel imports and `__all__` are
|
|
118
|
+
generated too. A new channel must appear in the public namespace automatically.
|
|
119
|
+
New composition families still need renderable chart classes, serialization and
|
|
120
|
+
round-trip support. The schema-derived root coverage test must fail until that
|
|
121
|
+
support exists, rather than silently omitting unfamiliar roots.
|
|
122
|
+
|
|
123
|
+
When adapting examples, use named schema objects or nested setters such as
|
|
124
|
+
`gs.Scale().zoom(extent="data")`. Keep dictionaries for data records and authored
|
|
125
|
+
names such as datasets, templates and parameter values. Test generated signatures
|
|
126
|
+
and type-check a consumer example as well as validating its serialized JSON.
|
|
127
|
+
|
|
128
|
+
Altair uses the same separation between a generated schema API and handwritten
|
|
129
|
+
chart operations. Its [constructor and setter generator](https://github.com/vega/altair/blob/main/tools/schemapi/codegen.py)
|
|
130
|
+
emits typed signatures and overloads; its [property-setter runtime](https://github.com/vega/altair/blob/main/altair/utils/schemapi.py)
|
|
131
|
+
also supplies signatures for interactive completion. Prefer our existing explicit
|
|
132
|
+
Python methods so completion, static checking and runtime calls agree.
|
|
133
|
+
|
|
114
134
|
## Documentation
|
|
115
135
|
|
|
116
136
|
### API reference
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: genome-spy-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: genome-spy-python is a declarative genomics visualization library for Python, built on top of the genome-spy JSON specification.
|
|
5
5
|
Project-URL: Homepage, https://github.com/genome-spy/genome-spy-python
|
|
6
6
|
Project-URL: Documentation, https://genomespy.app/genome-spy-python/
|
|
@@ -33,6 +33,8 @@ Requires-Python: >=3.11
|
|
|
33
33
|
Requires-Dist: anywidget>=0.11.0
|
|
34
34
|
Requires-Dist: jsonschema>=4.26.0
|
|
35
35
|
Requires-Dist: traitlets>=5.14.3
|
|
36
|
+
Provides-Extra: anndata
|
|
37
|
+
Requires-Dist: anndata>=0.11.0; extra == 'anndata'
|
|
36
38
|
Provides-Extra: arrow
|
|
37
39
|
Requires-Dist: pyarrow>=18.0.0; extra == 'arrow'
|
|
38
40
|
Description-Content-Type: text/markdown
|
|
@@ -100,61 +102,130 @@ for supported tables and live updates.
|
|
|
100
102
|
|
|
101
103
|
See the [getting-started guide](docs/getting-started.md) for the first example.
|
|
102
104
|
|
|
105
|
+
## Agent skill
|
|
106
|
+
|
|
107
|
+
The package bundles a visualization skill for Codex and Claude Code. Installation
|
|
108
|
+
is explicit; importing or installing the Python package does not modify agent
|
|
109
|
+
configuration. To install for both agents in the current project:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
genome-spy-install-skills
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Use `--agent codex` or `--agent claude` to select one agent, `--project PATH` for
|
|
116
|
+
another project, or `--user` for personal installation. Existing modified skills
|
|
117
|
+
are preserved unless `--force` is supplied. See
|
|
118
|
+
[installation and update details](docs/agents/skill-distribution.md).
|
|
119
|
+
|
|
103
120
|
## Examples
|
|
104
121
|
|
|
122
|
+
A zoomable Manhattan plot using the bundled HapMap data (requires `pandas`):
|
|
123
|
+
|
|
105
124
|
```python
|
|
106
125
|
import genome_spy as gs
|
|
126
|
+
from genome_spy.datasets import load_dataset
|
|
107
127
|
|
|
108
128
|
chart = (
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
.mark_point(size=
|
|
129
|
+
# Load data.
|
|
130
|
+
gs.Chart(load_dataset("hapmap_gwas"))
|
|
131
|
+
# Format chromosome names.
|
|
132
|
+
.transform_formula(expr="datum.CHR == 23 ? 'chrX' : 'chr' + datum.CHR", as_="chrom")
|
|
133
|
+
# Calculate −log10 p.
|
|
134
|
+
.transform_formula(expr="-log(datum.P) / log(10)", as_="neglogp")
|
|
135
|
+
# Draw variants.
|
|
136
|
+
.mark_point(size=12)
|
|
137
|
+
# Set positions and colors.
|
|
117
138
|
.encode(
|
|
118
|
-
x="
|
|
119
|
-
y="
|
|
120
|
-
color="
|
|
139
|
+
x=gs.Locus("chrom", "BP").scale(assembly="hg18"),
|
|
140
|
+
y=gs.Y("neglogp:Q").title("−log10 p"),
|
|
141
|
+
color=gs.Color("CHR:N").scale(range=["#5b8fd6", "#8f98a3"]).legend(None),
|
|
121
142
|
)
|
|
122
143
|
)
|
|
123
|
-
|
|
124
144
|
chart
|
|
125
145
|
```
|
|
126
146
|
|
|
127
|
-
|
|
128
|
-
|
|
147
|
+

|
|
148
|
+
|
|
149
|
+
[Explore the full example and data provenance](https://genomespy.app/genome-spy-python/gallery/manhattan_plot.html).
|
|
150
|
+
|
|
151
|
+
A sequence logo and aligned sequences with shared horizontal zoom:
|
|
129
152
|
|
|
130
153
|
```python
|
|
131
154
|
import genome_spy as gs
|
|
132
155
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
]
|
|
137
|
-
|
|
156
|
+
logo = (
|
|
157
|
+
gs.Chart()
|
|
158
|
+
# Count bases at each position.
|
|
159
|
+
.transform_aggregate(groupby=["pos", "sequence"])
|
|
160
|
+
# Handle gaps.
|
|
161
|
+
.transform_formula(expr="datum.sequence == '-' ? null : datum.sequence", as_="base")
|
|
162
|
+
# Stack bases by information content.
|
|
163
|
+
.transform_stack(
|
|
164
|
+
field="count",
|
|
165
|
+
groupby=["pos"],
|
|
166
|
+
offset="information",
|
|
167
|
+
baseField="base",
|
|
168
|
+
as_=["y0", "y1"],
|
|
169
|
+
)
|
|
170
|
+
# Draw logo letters.
|
|
171
|
+
.mark_text(logoLetters=True, fitToBand=True, fontWeight="bold")
|
|
172
|
+
# Set stack bounds.
|
|
173
|
+
.encode(
|
|
174
|
+
y=gs.Y("y0:Q").scale(domain=[0, 2], zoom=False).title("Bits"),
|
|
175
|
+
y2="y1:Q",
|
|
176
|
+
text="base:N",
|
|
177
|
+
)
|
|
178
|
+
.properties(height=100)
|
|
179
|
+
)
|
|
180
|
+
# Create sequence rows.
|
|
181
|
+
rows = gs.Chart().encode(y=gs.Y("identifier:N").scale(zoom=False).axis(None))
|
|
182
|
+
# Add base labels.
|
|
183
|
+
letters = rows.mark_text(size=11, fitToBand=True, opacity=0.7).encode(
|
|
184
|
+
text="sequence:N", color=gs.value("black")
|
|
185
|
+
)
|
|
186
|
+
# Layer tiles and labels.
|
|
187
|
+
sequences = (rows.mark_rect() + letters).properties(
|
|
188
|
+
height=gs.step(16), viewportHeight=160
|
|
189
|
+
)
|
|
138
190
|
chart = (
|
|
139
|
-
|
|
140
|
-
|
|
191
|
+
# Combine panels.
|
|
192
|
+
(logo & sequences)
|
|
193
|
+
# Load data.
|
|
194
|
+
.properties(
|
|
195
|
+
data=gs.Data(
|
|
196
|
+
url="https://data.genomespy.app/sample-data/16SRNA_Deino_87seq.aln",
|
|
197
|
+
format=gs.data_format(type="fasta"),
|
|
198
|
+
)
|
|
199
|
+
)
|
|
200
|
+
# Split sequences into bases.
|
|
201
|
+
.transform_flatten_sequence()
|
|
202
|
+
# Set positions and colors.
|
|
141
203
|
.encode(
|
|
142
|
-
x=gs.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
204
|
+
x=gs.X("pos:I").scale(domain=[190, 310], zoom=True).title(None),
|
|
205
|
+
color=gs.Color("sequence:N")
|
|
206
|
+
.scale(
|
|
207
|
+
domain=list("ACTGN-"),
|
|
208
|
+
range=["#4FBF45", "#4D96E8", "#E85F78", "#E8B322", "#BDBDBD", "#f5f5f5"],
|
|
209
|
+
)
|
|
210
|
+
.legend(None),
|
|
146
211
|
)
|
|
212
|
+
# Share zoom and colors.
|
|
213
|
+
.resolve_scale(x="shared", color="shared")
|
|
214
|
+
.resolve_axis(x="shared")
|
|
147
215
|
)
|
|
148
|
-
|
|
149
216
|
chart
|
|
150
217
|
```
|
|
151
218
|
|
|
219
|
+

|
|
220
|
+
|
|
152
221
|
Charts can be serialized to a portable GenomeSpy specification or standalone
|
|
153
222
|
HTML:
|
|
154
223
|
|
|
155
224
|
```python
|
|
225
|
+
# Export JSON.
|
|
156
226
|
chart.to_json()
|
|
157
|
-
|
|
227
|
+
# Save HTML.
|
|
228
|
+
chart.save("chart.html")
|
|
158
229
|
```
|
|
159
230
|
|
|
160
231
|
### Update data without recreating the chart
|
|
@@ -165,12 +236,15 @@ existing GenomeSpy instance, so view state such as zoom is preserved.
|
|
|
165
236
|
|
|
166
237
|
```python
|
|
167
238
|
chart = (
|
|
239
|
+
# Create an empty chart.
|
|
168
240
|
gs.Chart(data={"name": "table"}, datasets={"table": []})
|
|
169
241
|
.mark_point()
|
|
170
242
|
.encode(x="x:Q", y="y:Q")
|
|
171
243
|
)
|
|
244
|
+
# Show widget.
|
|
172
245
|
view = chart.widget()
|
|
173
246
|
|
|
247
|
+
# Update data.
|
|
174
248
|
view.set_dataset("table", updated_dataframe)
|
|
175
249
|
```
|
|
176
250
|
|
|
@@ -61,61 +61,130 @@ for supported tables and live updates.
|
|
|
61
61
|
|
|
62
62
|
See the [getting-started guide](docs/getting-started.md) for the first example.
|
|
63
63
|
|
|
64
|
+
## Agent skill
|
|
65
|
+
|
|
66
|
+
The package bundles a visualization skill for Codex and Claude Code. Installation
|
|
67
|
+
is explicit; importing or installing the Python package does not modify agent
|
|
68
|
+
configuration. To install for both agents in the current project:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
genome-spy-install-skills
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Use `--agent codex` or `--agent claude` to select one agent, `--project PATH` for
|
|
75
|
+
another project, or `--user` for personal installation. Existing modified skills
|
|
76
|
+
are preserved unless `--force` is supplied. See
|
|
77
|
+
[installation and update details](docs/agents/skill-distribution.md).
|
|
78
|
+
|
|
64
79
|
## Examples
|
|
65
80
|
|
|
81
|
+
A zoomable Manhattan plot using the bundled HapMap data (requires `pandas`):
|
|
82
|
+
|
|
66
83
|
```python
|
|
67
84
|
import genome_spy as gs
|
|
85
|
+
from genome_spy.datasets import load_dataset
|
|
68
86
|
|
|
69
87
|
chart = (
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
.mark_point(size=
|
|
88
|
+
# Load data.
|
|
89
|
+
gs.Chart(load_dataset("hapmap_gwas"))
|
|
90
|
+
# Format chromosome names.
|
|
91
|
+
.transform_formula(expr="datum.CHR == 23 ? 'chrX' : 'chr' + datum.CHR", as_="chrom")
|
|
92
|
+
# Calculate −log10 p.
|
|
93
|
+
.transform_formula(expr="-log(datum.P) / log(10)", as_="neglogp")
|
|
94
|
+
# Draw variants.
|
|
95
|
+
.mark_point(size=12)
|
|
96
|
+
# Set positions and colors.
|
|
78
97
|
.encode(
|
|
79
|
-
x="
|
|
80
|
-
y="
|
|
81
|
-
color="
|
|
98
|
+
x=gs.Locus("chrom", "BP").scale(assembly="hg18"),
|
|
99
|
+
y=gs.Y("neglogp:Q").title("−log10 p"),
|
|
100
|
+
color=gs.Color("CHR:N").scale(range=["#5b8fd6", "#8f98a3"]).legend(None),
|
|
82
101
|
)
|
|
83
102
|
)
|
|
84
|
-
|
|
85
103
|
chart
|
|
86
104
|
```
|
|
87
105
|
|
|
88
|
-
|
|
89
|
-
|
|
106
|
+

|
|
107
|
+
|
|
108
|
+
[Explore the full example and data provenance](https://genomespy.app/genome-spy-python/gallery/manhattan_plot.html).
|
|
109
|
+
|
|
110
|
+
A sequence logo and aligned sequences with shared horizontal zoom:
|
|
90
111
|
|
|
91
112
|
```python
|
|
92
113
|
import genome_spy as gs
|
|
93
114
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
]
|
|
98
|
-
|
|
115
|
+
logo = (
|
|
116
|
+
gs.Chart()
|
|
117
|
+
# Count bases at each position.
|
|
118
|
+
.transform_aggregate(groupby=["pos", "sequence"])
|
|
119
|
+
# Handle gaps.
|
|
120
|
+
.transform_formula(expr="datum.sequence == '-' ? null : datum.sequence", as_="base")
|
|
121
|
+
# Stack bases by information content.
|
|
122
|
+
.transform_stack(
|
|
123
|
+
field="count",
|
|
124
|
+
groupby=["pos"],
|
|
125
|
+
offset="information",
|
|
126
|
+
baseField="base",
|
|
127
|
+
as_=["y0", "y1"],
|
|
128
|
+
)
|
|
129
|
+
# Draw logo letters.
|
|
130
|
+
.mark_text(logoLetters=True, fitToBand=True, fontWeight="bold")
|
|
131
|
+
# Set stack bounds.
|
|
132
|
+
.encode(
|
|
133
|
+
y=gs.Y("y0:Q").scale(domain=[0, 2], zoom=False).title("Bits"),
|
|
134
|
+
y2="y1:Q",
|
|
135
|
+
text="base:N",
|
|
136
|
+
)
|
|
137
|
+
.properties(height=100)
|
|
138
|
+
)
|
|
139
|
+
# Create sequence rows.
|
|
140
|
+
rows = gs.Chart().encode(y=gs.Y("identifier:N").scale(zoom=False).axis(None))
|
|
141
|
+
# Add base labels.
|
|
142
|
+
letters = rows.mark_text(size=11, fitToBand=True, opacity=0.7).encode(
|
|
143
|
+
text="sequence:N", color=gs.value("black")
|
|
144
|
+
)
|
|
145
|
+
# Layer tiles and labels.
|
|
146
|
+
sequences = (rows.mark_rect() + letters).properties(
|
|
147
|
+
height=gs.step(16), viewportHeight=160
|
|
148
|
+
)
|
|
99
149
|
chart = (
|
|
100
|
-
|
|
101
|
-
|
|
150
|
+
# Combine panels.
|
|
151
|
+
(logo & sequences)
|
|
152
|
+
# Load data.
|
|
153
|
+
.properties(
|
|
154
|
+
data=gs.Data(
|
|
155
|
+
url="https://data.genomespy.app/sample-data/16SRNA_Deino_87seq.aln",
|
|
156
|
+
format=gs.data_format(type="fasta"),
|
|
157
|
+
)
|
|
158
|
+
)
|
|
159
|
+
# Split sequences into bases.
|
|
160
|
+
.transform_flatten_sequence()
|
|
161
|
+
# Set positions and colors.
|
|
102
162
|
.encode(
|
|
103
|
-
x=gs.
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
163
|
+
x=gs.X("pos:I").scale(domain=[190, 310], zoom=True).title(None),
|
|
164
|
+
color=gs.Color("sequence:N")
|
|
165
|
+
.scale(
|
|
166
|
+
domain=list("ACTGN-"),
|
|
167
|
+
range=["#4FBF45", "#4D96E8", "#E85F78", "#E8B322", "#BDBDBD", "#f5f5f5"],
|
|
168
|
+
)
|
|
169
|
+
.legend(None),
|
|
107
170
|
)
|
|
171
|
+
# Share zoom and colors.
|
|
172
|
+
.resolve_scale(x="shared", color="shared")
|
|
173
|
+
.resolve_axis(x="shared")
|
|
108
174
|
)
|
|
109
|
-
|
|
110
175
|
chart
|
|
111
176
|
```
|
|
112
177
|
|
|
178
|
+

|
|
179
|
+
|
|
113
180
|
Charts can be serialized to a portable GenomeSpy specification or standalone
|
|
114
181
|
HTML:
|
|
115
182
|
|
|
116
183
|
```python
|
|
184
|
+
# Export JSON.
|
|
117
185
|
chart.to_json()
|
|
118
|
-
|
|
186
|
+
# Save HTML.
|
|
187
|
+
chart.save("chart.html")
|
|
119
188
|
```
|
|
120
189
|
|
|
121
190
|
### Update data without recreating the chart
|
|
@@ -126,12 +195,15 @@ existing GenomeSpy instance, so view state such as zoom is preserved.
|
|
|
126
195
|
|
|
127
196
|
```python
|
|
128
197
|
chart = (
|
|
198
|
+
# Create an empty chart.
|
|
129
199
|
gs.Chart(data={"name": "table"}, datasets={"table": []})
|
|
130
200
|
.mark_point()
|
|
131
201
|
.encode(x="x:Q", y="y:Q")
|
|
132
202
|
)
|
|
203
|
+
# Show widget.
|
|
133
204
|
view = chart.widget()
|
|
134
205
|
|
|
206
|
+
# Update data.
|
|
135
207
|
view.set_dataset("table", updated_dataframe)
|
|
136
208
|
```
|
|
137
209
|
|