genome-spy-python 0.1.0__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.github/workflows/ci.yml +29 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/CHANGELOG.md +19 -0
- genome_spy_python-0.2.0/CONTRIBUTING.md +201 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/PKG-INFO +8 -2
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/README.md +6 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/pik3ca_tcga_brca_lollipop.py +5 -1
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/notebooks.md +8 -0
- genome_spy_python-0.2.0/notebooks/brush_linked_genome_tracks.ipynb +355 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/pyproject.toml +2 -2
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/__init__.py +1 -1
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/__init__.py +1 -1
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schema/expressions.py +18 -6
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_chart.py +1 -1
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_docs_gallery.py +10 -1
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_expressions.py +34 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_generated_schema_package.py +29 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_schema_codegen.py +2 -0
- genome_spy_python-0.2.0/tools/check_notebook_rendering.py +145 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tools/schemapi/codegen.py +13 -7
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/uv.lock +2 -2
- genome_spy_python-0.1.0/CONTRIBUTING.md +0 -218
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.agents/skills/commit/SKILL.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.agents/skills/proper-code-review/SKILL.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.agents/skills/proper-code-review/references/correctness.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.agents/skills/proper-code-review/references/design.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.agents/skills/proper-code-review/references/performance.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.claude/skills/commit/SKILL.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.claude/skills/proper-code-review/SKILL.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.claude/skills/proper-code-review/references/correctness.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.claude/skills/proper-code-review/references/design.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.claude/skills/proper-code-review/references/performance.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.gitattributes +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.github/workflows/docs.yml +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.github/workflows/release.yml +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.gitignore +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.pre-commit-config.yaml +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/.python-version +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/AGENTS.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/CLAUDE.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/LICENSE +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/LICENSES/ALTAIR-BSD-3-Clause.txt +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/LICENSES/GALLERY-DATA-MIT.txt +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/THIRD_PARTY_NOTICES.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_ext/genomespy_gallery.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/data/README.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/data/airway_metadata.csv +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/data/airway_scaledcounts.csv +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/data/hapmap_gwas.csv +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/data/oncoprint_dataset3.json +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/data/pik3ca_mutations.json +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/external-links.js +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/airway_ma_plot.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/airway_volcano_plot.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/ascat_copy_number.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/ascat_fitting.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/bam_read_alignments.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/bigbed_ccre_track.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/brush_linked_genome_tracks.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/clinvar_variants.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/combined_laml_oncoplot.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/composing_genome_browser.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/copy_number.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/cytobands.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/dynseq_bqtl.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/genome_tracks.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/gff3_gene_annotations.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/hcc1954_sv_cnv.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/indexed_fasta_sequence.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/link_mark.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/luad_oncoprint.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/manhattan_plot.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/multiple_sequence_alignment.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/needle_plot.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/oncoprint.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/p53_sequence_comparison.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/pik3ca_tcga_brca_lollipop.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/point_mark.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/rainfall_plot.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/ranged_rule.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/rect_heatmap.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/refseq_scored_genes.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/sashimi_plot.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/scrollable_viewport.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/sequence_logo.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/six_frame_translation.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/stacked_genome_browser.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/tcga_ov_gistic.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/upset_mutations.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/vertical_concat.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/gallery/volcano_plot.png +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/genomespy.css +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_static/snaketie.svg +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_templates/autosummary/class.rst +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_templates/autosummary/class_own_members.rst +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/_templates/components/view-this-page.html +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/about.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/api.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/conf.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/datasets.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/airway_ma_plot.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/airway_ma_plot.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/airway_volcano_plot.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/airway_volcano_plot.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/ascat_copy_number.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/ascat_copy_number.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/ascat_fitting.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/ascat_fitting.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/bam_read_alignments.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/bam_read_alignments.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/bigbed_ccre_track.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/brush_linked_genome_tracks.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/brush_linked_genome_tracks.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/clinvar_variants.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/clinvar_variants.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/combined_laml_oncoplot.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/combined_laml_oncoplot.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/composing_genome_browser.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/composing_genome_browser.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/copy_number.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/cytobands.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/cytobands.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/dynseq_bqtl.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/dynseq_bqtl.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/genome_tracks.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/gff3_gene_annotations.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/gff3_gene_annotations.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/hcc1954_sv_cnv.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/hcc1954_sv_cnv.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/indexed_fasta_sequence.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/link_mark.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/luad_oncoprint.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/luad_oncoprint.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/manhattan_plot.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/manhattan_plot.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/multiple_sequence_alignment.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/multiple_sequence_alignment.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/needle_plot.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/oncoprint.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/oncoprint.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/p53_sequence_comparison.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/p53_sequence_comparison.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/pik3ca_tcga_brca_lollipop.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/point_mark.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/rainfall_plot.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/rainfall_plot.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/ranged_rule.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/rect_heatmap.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/refseq_scored_genes.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/refseq_scored_genes.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/sashimi_plot.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/sashimi_plot.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/scrollable_viewport.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/sequence_logo.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/six_frame_translation.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/six_frame_translation.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/stacked_genome_browser.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/tcga_ov_gistic.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/tcga_ov_gistic.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/upset_mutations.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/upset_mutations.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/vertical_concat.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/volcano_plot.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/volcano_plot.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/getting-started.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/index.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/annotations.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/charts_and_marks.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/composition.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/configuration.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/data_inputs.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/display_controls.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/encoding_channels.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/genome_browser_layouts.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/genomic_coordinates.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/genomic_data.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/getting_started.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/importing_specifications.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/interaction.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/notebooks.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/scales_and_guides.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/serialization.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/tutorials/transforms.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/annotations.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/charts.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/composition.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/configuration.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/data.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/display-controls.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/encodings.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/genome-browser-layouts.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/genomic-axes.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/genomic-data.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/importing-specifications.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/index.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/interaction.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/scales-axes-legends.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/serialization.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/user-guide/transforms.md +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/_chart_authoring.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/_conditions.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/_embed.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/_expressions.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/_parameters.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/_render.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/_utils.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/_widget.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/api.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/arrow.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/channels.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/chart.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/data.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/data_transformers.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/_airway.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/_annotations.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/_gistic.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/_grammar.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/_hapmap.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/_mutation.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/_oncoprint.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/airway_metadata.csv +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/airway_scaledcounts.csv +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/brca.maf.gz +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/hapmap_gwas.csv +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/mutation_impact_reference.json +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/oncoprint_dataset3.json +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/p53_sequence_comparison.json.gz +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/pik3ca_mutations.json +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/pik3ca_tcga_brca_lollipop.json +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/refseq_gene_bodies.csv.gz +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/tal1_alphagenome_reference.json.gz +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/tcga.tsv +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/tcga_laml.maf.gz +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/tcga_laml_annot.tsv +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/tcga_laml_combined_oncoplot.json.gz +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/tcga_ov_gistic_lesions.tsv.gz +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/datasets/data/tcga_ov_gistic_scores.tsv.gz +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/helpers.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/jupyter.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/py.typed +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schema/__init__.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schema/_kwds.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schema/_typing.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schema/capabilities.json +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schema/channels.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schema/composition.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schema/core.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schema/ergonomics.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schema/genome-spy-schema.json +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schema/lazy.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schema/mixins.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/schemapi.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/src/genome_spy/static/widget.js +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/__init__.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_arrow.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_combined_gallery_data.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_data_transformers.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_datasets.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_docs_api_reference.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_docs_tutorial.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_generated_transform_methods.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_render_thumbnails.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/test_widget.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tests/widget.test.mjs +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tools/docs_gallery.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tools/generate_api_docs.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tools/generate_schema_wrapper.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tools/prepare_combined_gallery_data.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tools/prepare_refseq_gene_annotations.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tools/render_thumbnails.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tools/schemapi/__init__.py +0 -0
- {genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/tools/schemapi/expression_codegen.py +0 -0
|
@@ -68,3 +68,32 @@ jobs:
|
|
|
68
68
|
- run: uv run python tools/generate_schema_wrapper.py
|
|
69
69
|
- run: uv run ruff format src/genome_spy/schema src/genome_spy/helpers.py src/genome_spy/api.py src/genome_spy/__init__.py
|
|
70
70
|
- run: git diff --exit-code src/genome_spy/schema src/genome_spy/helpers.py src/genome_spy/api.py src/genome_spy/__init__.py tools
|
|
71
|
+
|
|
72
|
+
notebook-rendering:
|
|
73
|
+
runs-on: ubuntu-latest
|
|
74
|
+
timeout-minutes: 10
|
|
75
|
+
steps:
|
|
76
|
+
- uses: actions/checkout@v7
|
|
77
|
+
- uses: astral-sh/setup-uv@v9.0.0
|
|
78
|
+
with:
|
|
79
|
+
python-version: "3.11"
|
|
80
|
+
- run: uv build --wheel
|
|
81
|
+
- name: Install the wheel with the minimum supported AnyWidget
|
|
82
|
+
run: |
|
|
83
|
+
uv venv --seed --python 3.11 "$RUNNER_TEMP/notebook-env"
|
|
84
|
+
for wheel in "$GITHUB_WORKSPACE"/dist/*.whl; do
|
|
85
|
+
uv pip install --python "$RUNNER_TEMP/notebook-env/bin/python" \
|
|
86
|
+
"$wheel[arrow]" "anywidget==0.11.0" jupyterlab pandas numpy playwright pillow
|
|
87
|
+
done
|
|
88
|
+
"$RUNNER_TEMP/notebook-env/bin/python" -m playwright install --with-deps chromium
|
|
89
|
+
- name: Render the brush notebook in JupyterLab
|
|
90
|
+
run: |
|
|
91
|
+
"$RUNNER_TEMP/notebook-env/bin/python" tools/check_notebook_rendering.py \
|
|
92
|
+
notebooks/brush_linked_genome_tracks.ipynb \
|
|
93
|
+
--screenshot "$RUNNER_TEMP/notebook-rendering.png"
|
|
94
|
+
- uses: actions/upload-artifact@v7
|
|
95
|
+
if: always()
|
|
96
|
+
with:
|
|
97
|
+
name: notebook-rendering
|
|
98
|
+
path: ${{ runner.temp }}/notebook-rendering.png
|
|
99
|
+
if-no-files-found: ignore
|
|
@@ -5,6 +5,24 @@ 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.2.0] - 2026-09-09
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Python lists and tuples in `gs.expr()` for array expressions containing
|
|
13
|
+
values, parameters, and calculations.
|
|
14
|
+
- A brush-linked notebook example with an Open in Colab link in the README.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Require AnyWidget 0.11.0 or newer to match the widget lifecycle API used for rendering.
|
|
19
|
+
- Simplified the contributing guide and added brief notebook troubleshooting advice.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- PIK3CA lollipop connectors now reach the protein track.
|
|
24
|
+
- Packaged datasets can be imported on Python 3.14.
|
|
25
|
+
|
|
8
26
|
## [0.1.0] - 2026-09-09
|
|
9
27
|
|
|
10
28
|
First public alpha release, targeting GenomeSpy Core 0.87.0.
|
|
@@ -27,4 +45,5 @@ First public alpha release, targeting GenomeSpy Core 0.87.0.
|
|
|
27
45
|
- Packaged example datasets, documentation, tutorials, and an interactive
|
|
28
46
|
visualization gallery.
|
|
29
47
|
|
|
48
|
+
[0.2.0]: https://github.com/genome-spy/genome-spy-python/compare/v0.1.0...v0.2.0
|
|
30
49
|
[0.1.0]: https://github.com/genome-spy/genome-spy-python/releases/tag/v0.1.0
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# Contributing to genome-spy-python
|
|
2
|
+
|
|
3
|
+
Bug reports, documentation, examples, tests, and code contributions are welcome.
|
|
4
|
+
|
|
5
|
+
## How to contribute
|
|
6
|
+
|
|
7
|
+
Open an issue before starting a large change. Small fixes can go straight to a
|
|
8
|
+
pull request.
|
|
9
|
+
|
|
10
|
+
Explain what your pull request changes and why. Keep unrelated changes separate,
|
|
11
|
+
and update tests and docs when behavior or the public API changes.
|
|
12
|
+
|
|
13
|
+
## Development setup
|
|
14
|
+
|
|
15
|
+
Use Python 3.11 or newer and [`uv`](https://docs.astral.sh/uv/). Install the
|
|
16
|
+
development and docs dependencies from the repository root:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
uv sync --group dev --group docs
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Main directories:
|
|
23
|
+
|
|
24
|
+
- `src/genome_spy/` — library code
|
|
25
|
+
- `tests/` — tests
|
|
26
|
+
- `docs/examples/` — gallery examples
|
|
27
|
+
- `tools/` — code and documentation generators
|
|
28
|
+
|
|
29
|
+
Install pre-commit hooks to check changes before committing:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
uv run pre-commit install
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Coding practices
|
|
36
|
+
|
|
37
|
+
### Python and typing
|
|
38
|
+
|
|
39
|
+
Use type hints such as `list[T]`, `dict[K, V]`, and `X | Y` for public APIs.
|
|
40
|
+
Add Google-style docstrings covering purpose, arguments, results, exceptions,
|
|
41
|
+
and an example. Keep file, network, and notebook code separate from core logic.
|
|
42
|
+
|
|
43
|
+
Keep changes small. Prefer generating APIs from the GenomeSpy schema over
|
|
44
|
+
adding handwritten alternatives.
|
|
45
|
+
|
|
46
|
+
### Formatting and linting
|
|
47
|
+
|
|
48
|
+
Format and lint with [Ruff](https://docs.astral.sh/ruff/):
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
uv run ruff format .
|
|
52
|
+
uv run ruff check .
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Check types after changing library code:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
uv run mypy src/
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Testing
|
|
62
|
+
|
|
63
|
+
Add a focused test for each behavior change. Run the Python tests with:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
uv run pytest tests/ -x
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Run the widget's JavaScript tests with:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
node --test tests/widget.test.mjs
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Run the checks relevant to your changes before submitting a pull request.
|
|
76
|
+
CI also checks generated code, docs, and the installed package.
|
|
77
|
+
|
|
78
|
+
### Performance
|
|
79
|
+
|
|
80
|
+
Avoid unnecessary data copies and large chart specifications. Measure performance
|
|
81
|
+
before adding complexity to make code faster.
|
|
82
|
+
|
|
83
|
+
## Generated schema and expression APIs
|
|
84
|
+
|
|
85
|
+
Do not edit generated files in `src/genome_spy/schema/` by hand. The generator
|
|
86
|
+
uses the GenomeSpy version in `pyproject.toml`, its schema, and the matching
|
|
87
|
+
GenomeSpy and Vega expression documentation.
|
|
88
|
+
|
|
89
|
+
Regenerate after changing that version or the generator:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
uv run python tools/generate_schema_wrapper.py
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
This requires `npm` and internet access. Use `--package-dir` for a local package,
|
|
96
|
+
or both `--genome-spy-expression-docs` and `--vega-expression-docs` for local
|
|
97
|
+
expression docs.
|
|
98
|
+
|
|
99
|
+
Then check the results:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
uv run pytest tests/test_schema_codegen.py -x
|
|
103
|
+
uv run ruff format src/genome_spy/schema src/genome_spy/helpers.py src/genome_spy/api.py src/genome_spy/__init__.py
|
|
104
|
+
git diff --check
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Review and commit the generated files alongside your changes. CI checks that
|
|
108
|
+
regenerating them produces no differences.
|
|
109
|
+
|
|
110
|
+
New transforms should be generated from the schema. Add overrides in
|
|
111
|
+
`tools/generate_schema_wrapper.py` only for Python conventions the schema
|
|
112
|
+
cannot describe.
|
|
113
|
+
|
|
114
|
+
## Documentation
|
|
115
|
+
|
|
116
|
+
### API reference
|
|
117
|
+
|
|
118
|
+
After changing the public API, regenerate `docs/api.md` from `genome_spy.__all__`:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
uv run python tools/generate_api_docs.py
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Sphinx creates the individual pages in `docs/generated/`; do not commit them.
|
|
125
|
+
|
|
126
|
+
### Build and preview
|
|
127
|
+
|
|
128
|
+
Build the docs and check for warnings:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
uv run sphinx-build -b html -W --keep-going docs docs/_build/html
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Rerun the same command to rebuild changed pages and examples. Keep `docs/_build/`
|
|
135
|
+
and avoid `-E` and `-a` for faster builds. Changes to shared code, data, build
|
|
136
|
+
tools, or the lockfile regenerate all examples.
|
|
137
|
+
|
|
138
|
+
To force example regeneration, delete the gallery cache (normally
|
|
139
|
+
`docs/_build/html/.doctrees/genomespy-gallery`). Changes to remote data or files
|
|
140
|
+
outside the tracked dependencies are not detected automatically.
|
|
141
|
+
|
|
142
|
+
Preview locally:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
cd docs/_build/html
|
|
146
|
+
python3 -m http.server
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Open <http://localhost:8000>. Interactive examples need internet access to load
|
|
150
|
+
GenomeSpy.
|
|
151
|
+
|
|
152
|
+
### Gallery examples
|
|
153
|
+
|
|
154
|
+
Write examples in `docs/examples/`. Put explanations, data sources, any
|
|
155
|
+
necessary disclaimers, and upstream links in an optional Markdown file with
|
|
156
|
+
the same name.
|
|
157
|
+
|
|
158
|
+
Focus on plotting, not data preparation: load prepared packaged datasets and
|
|
159
|
+
prefer Python expressions such as `gs.datum.score > 0`. Remember that
|
|
160
|
+
`.transform_*()` defines work that GenomeSpy runs in the browser, not Python.
|
|
161
|
+
|
|
162
|
+
After editing an example, run:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
uv run pytest tests/test_docs_gallery.py -q
|
|
166
|
+
uv run sphinx-build -b html -W --keep-going docs docs/_build/html
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Check the chart visually before updating its committed thumbnail.
|
|
170
|
+
|
|
171
|
+
### Notebook rendering
|
|
172
|
+
|
|
173
|
+
CI checks that the brush notebook renders in a fresh environment. Follow
|
|
174
|
+
[the workflow](.github/workflows/ci.yml) for setup, then run with that
|
|
175
|
+
environment's Python:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
python -m playwright install chromium
|
|
179
|
+
python tools/check_notebook_rendering.py notebooks/brush_linked_genome_tracks.ipynb --screenshot /tmp/notebook-rendering.png
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Commit guidelines
|
|
183
|
+
|
|
184
|
+
Keep each commit focused on one change. Use
|
|
185
|
+
[Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/):
|
|
186
|
+
|
|
187
|
+
```text
|
|
188
|
+
feat(expressions): generate runtime helpers
|
|
189
|
+
fix(widget): preserve zoom during data updates
|
|
190
|
+
docs(gallery): add a sequence example
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Do not rewrite shared history unless reviewers ask you to.
|
|
194
|
+
|
|
195
|
+
## Community and communication
|
|
196
|
+
|
|
197
|
+
Report wrapper bugs and request features in the
|
|
198
|
+
[Python package issue tracker](https://github.com/genome-spy/genome-spy-python/issues).
|
|
199
|
+
For GenomeSpy's grammar or renderer, use the upstream
|
|
200
|
+
[discussions](https://github.com/genome-spy/genome-spy/discussions) or
|
|
201
|
+
[issues](https://github.com/genome-spy/genome-spy/issues).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: genome-spy-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.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/
|
|
@@ -23,7 +23,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
23
23
|
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
24
24
|
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
25
25
|
Requires-Python: >=3.11
|
|
26
|
-
Requires-Dist: anywidget>=0.
|
|
26
|
+
Requires-Dist: anywidget>=0.11.0
|
|
27
27
|
Requires-Dist: jsonschema>=4.26.0
|
|
28
28
|
Requires-Dist: traitlets>=5.14.3
|
|
29
29
|
Provides-Extra: arrow
|
|
@@ -36,6 +36,12 @@ Description-Content-Type: text/markdown
|
|
|
36
36
|
|
|
37
37
|
<h1 align="center">genome-spy-python</h1>
|
|
38
38
|
|
|
39
|
+
<p align="center">
|
|
40
|
+
<a href="https://github.com/genome-spy/genome-spy-python/actions/workflows/ci.yml"><img src="https://github.com/genome-spy/genome-spy-python/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI status"></a>
|
|
41
|
+
<a href="https://pypi.org/project/genome-spy-python/"><img src="https://img.shields.io/pypi/v/genome-spy-python" alt="PyPI version"></a>
|
|
42
|
+
<a href="https://colab.research.google.com/github/genome-spy/genome-spy-python/blob/main/notebooks/brush_linked_genome_tracks.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open brush example in Colab"></a>
|
|
43
|
+
</p>
|
|
44
|
+
|
|
39
45
|
`genome-spy-python` is a Python interface for
|
|
40
46
|
<a href="https://genomespy.app/" target="_blank" rel="noopener noreferrer">GenomeSpy</a>,
|
|
41
47
|
a grammar for interactive and scalable genomic visualization. It lets Python
|
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
<h1 align="center">genome-spy-python</h1>
|
|
6
6
|
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://github.com/genome-spy/genome-spy-python/actions/workflows/ci.yml"><img src="https://github.com/genome-spy/genome-spy-python/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI status"></a>
|
|
9
|
+
<a href="https://pypi.org/project/genome-spy-python/"><img src="https://img.shields.io/pypi/v/genome-spy-python" alt="PyPI version"></a>
|
|
10
|
+
<a href="https://colab.research.google.com/github/genome-spy/genome-spy-python/blob/main/notebooks/brush_linked_genome_tracks.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open brush example in Colab"></a>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
7
13
|
`genome-spy-python` is a Python interface for
|
|
8
14
|
<a href="https://genomespy.app/" target="_blank" rel="noopener noreferrer">GenomeSpy</a>,
|
|
9
15
|
a grammar for interactive and scalable genomic visualization. It lets Python
|
{genome_spy_python-0.1.0 → genome_spy_python-0.2.0}/docs/examples/pik3ca_tcga_brca_lollipop.py
RENAMED
|
@@ -115,6 +115,8 @@ mutation_view = (
|
|
|
115
115
|
.properties(
|
|
116
116
|
data=gs.Data(name="mutations"),
|
|
117
117
|
)
|
|
118
|
+
# Let the anchors extend below their track to meet the protein.
|
|
119
|
+
.configure_mark(clip="x")
|
|
118
120
|
.encode(
|
|
119
121
|
x=gs.X("position:I").axis(None),
|
|
120
122
|
xOffset=gs.XOffset("xDisplacement:Q").scale(None),
|
|
@@ -129,7 +131,9 @@ mutation_view = (
|
|
|
129
131
|
length=DISPLACEMENT_LENGTH,
|
|
130
132
|
as_="xDisplacement",
|
|
131
133
|
positionFactor=pixels_per_residue,
|
|
132
|
-
extent=gs.expr(
|
|
134
|
+
extent=gs.expr(
|
|
135
|
+
[0.5, protein_length + 0.5 - 25 / gs.expr.max(1, pixels_per_residue)]
|
|
136
|
+
),
|
|
133
137
|
)
|
|
134
138
|
)
|
|
135
139
|
|
|
@@ -138,3 +138,11 @@ Marimo control changes.
|
|
|
138
138
|
|
|
139
139
|
See the {py:class}`genome_spy.api.JupyterChart` reference for multiple datasets,
|
|
140
140
|
transport options, and method signatures.
|
|
141
|
+
|
|
142
|
+
## If a chart does not appear
|
|
143
|
+
|
|
144
|
+
Make sure the package is installed in the Python environment your notebook
|
|
145
|
+
uses. After installing or upgrading it, restart the notebook's Python session
|
|
146
|
+
and rerun the cells. The chart also needs internet access to load its display
|
|
147
|
+
code. As an alternative, use {py:meth}`~genome_spy.TopLevelSpec.save` to save an
|
|
148
|
+
HTML file and open it in a browser.
|