genome-spy-python 0.1.0__py3-none-any.whl

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.
Files changed (64) hide show
  1. genome_spy/__init__.py +199 -0
  2. genome_spy/_chart_authoring.py +231 -0
  3. genome_spy/_conditions.py +72 -0
  4. genome_spy/_embed.py +87 -0
  5. genome_spy/_expressions.py +271 -0
  6. genome_spy/_parameters.py +267 -0
  7. genome_spy/_render.py +207 -0
  8. genome_spy/_utils.py +75 -0
  9. genome_spy/_widget.py +262 -0
  10. genome_spy/api.py +198 -0
  11. genome_spy/arrow.py +155 -0
  12. genome_spy/channels.py +193 -0
  13. genome_spy/chart.py +1240 -0
  14. genome_spy/data.py +56 -0
  15. genome_spy/data_transformers.py +267 -0
  16. genome_spy/datasets/__init__.py +189 -0
  17. genome_spy/datasets/_airway.py +219 -0
  18. genome_spy/datasets/_annotations.py +37 -0
  19. genome_spy/datasets/_gistic.py +43 -0
  20. genome_spy/datasets/_grammar.py +66 -0
  21. genome_spy/datasets/_hapmap.py +180 -0
  22. genome_spy/datasets/_mutation.py +289 -0
  23. genome_spy/datasets/_oncoprint.py +523 -0
  24. genome_spy/datasets/data/airway_metadata.csv +9 -0
  25. genome_spy/datasets/data/airway_scaledcounts.csv +38695 -0
  26. genome_spy/datasets/data/brca.maf.gz +0 -0
  27. genome_spy/datasets/data/hapmap_gwas.csv +14413 -0
  28. genome_spy/datasets/data/mutation_impact_reference.json +27 -0
  29. genome_spy/datasets/data/oncoprint_dataset3.json +266 -0
  30. genome_spy/datasets/data/p53_sequence_comparison.json.gz +0 -0
  31. genome_spy/datasets/data/pik3ca_mutations.json +1 -0
  32. genome_spy/datasets/data/pik3ca_tcga_brca_lollipop.json +38 -0
  33. genome_spy/datasets/data/refseq_gene_bodies.csv.gz +0 -0
  34. genome_spy/datasets/data/tal1_alphagenome_reference.json.gz +0 -0
  35. genome_spy/datasets/data/tcga.tsv +146 -0
  36. genome_spy/datasets/data/tcga_laml.maf.gz +0 -0
  37. genome_spy/datasets/data/tcga_laml_annot.tsv +201 -0
  38. genome_spy/datasets/data/tcga_laml_combined_oncoplot.json.gz +0 -0
  39. genome_spy/datasets/data/tcga_ov_gistic_lesions.tsv.gz +0 -0
  40. genome_spy/datasets/data/tcga_ov_gistic_scores.tsv.gz +0 -0
  41. genome_spy/helpers.py +185 -0
  42. genome_spy/jupyter.py +5 -0
  43. genome_spy/py.typed +0 -0
  44. genome_spy/schema/__init__.py +784 -0
  45. genome_spy/schema/_kwds.py +1394 -0
  46. genome_spy/schema/_typing.py +186 -0
  47. genome_spy/schema/capabilities.json +593 -0
  48. genome_spy/schema/channels.py +8943 -0
  49. genome_spy/schema/composition.py +1064 -0
  50. genome_spy/schema/core.py +51821 -0
  51. genome_spy/schema/ergonomics.py +2056 -0
  52. genome_spy/schema/expressions.py +476 -0
  53. genome_spy/schema/genome-spy-schema.json +33657 -0
  54. genome_spy/schema/lazy.py +326 -0
  55. genome_spy/schema/mixins.py +11684 -0
  56. genome_spy/schemapi.py +264 -0
  57. genome_spy/static/widget.js +345 -0
  58. genome_spy_python-0.1.0.dist-info/METADATA +185 -0
  59. genome_spy_python-0.1.0.dist-info/RECORD +64 -0
  60. genome_spy_python-0.1.0.dist-info/WHEEL +4 -0
  61. genome_spy_python-0.1.0.dist-info/licenses/LICENSE +21 -0
  62. genome_spy_python-0.1.0.dist-info/licenses/LICENSES/ALTAIR-BSD-3-Clause.txt +27 -0
  63. genome_spy_python-0.1.0.dist-info/licenses/LICENSES/GALLERY-DATA-MIT.txt +22 -0
  64. genome_spy_python-0.1.0.dist-info/licenses/THIRD_PARTY_NOTICES.md +42 -0
@@ -0,0 +1,185 @@
1
+ Metadata-Version: 2.5
2
+ Name: genome-spy-python
3
+ Version: 0.1.0
4
+ Summary: genome-spy-python is a declarative genomics visualization library for Python, built on top of the genome-spy JSON specification.
5
+ Project-URL: Homepage, https://github.com/genome-spy/genome-spy-python
6
+ Project-URL: Documentation, https://genomespy.app/genome-spy-python/
7
+ Project-URL: Repository, https://github.com/genome-spy/genome-spy-python
8
+ Project-URL: Issues, https://github.com/genome-spy/genome-spy-python/issues
9
+ Author-email: Oskari Lehtonen <oskarilehtonen4@gmail.com>
10
+ License-Expression: MIT AND BSD-3-Clause
11
+ License-File: LICENSE
12
+ License-File: LICENSES/ALTAIR-BSD-3-Clause.txt
13
+ License-File: LICENSES/GALLERY-DATA-MIT.txt
14
+ License-File: THIRD_PARTY_NOTICES.md
15
+ Keywords: anywidget,genome-spy,genomics,jupyter,visualization
16
+ Classifier: Development Status :: 3 - Alpha
17
+ Classifier: Framework :: Jupyter
18
+ Classifier: Intended Audience :: Science/Research
19
+ Classifier: Programming Language :: Python :: 3 :: Only
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
24
+ Classifier: Topic :: Scientific/Engineering :: Visualization
25
+ Requires-Python: >=3.11
26
+ Requires-Dist: anywidget>=0.9.18
27
+ Requires-Dist: jsonschema>=4.26.0
28
+ Requires-Dist: traitlets>=5.14.3
29
+ Provides-Extra: arrow
30
+ Requires-Dist: pyarrow>=18.0.0; extra == 'arrow'
31
+ Description-Content-Type: text/markdown
32
+
33
+ <p align="center">
34
+ <img src="docs/_static/snaketie.svg" width="180" alt="GenomeSpy for Python logo">
35
+ </p>
36
+
37
+ <h1 align="center">genome-spy-python</h1>
38
+
39
+ `genome-spy-python` is a Python interface for
40
+ <a href="https://genomespy.app/" target="_blank" rel="noopener noreferrer">GenomeSpy</a>,
41
+ a grammar for interactive and scalable genomic visualization. It lets Python
42
+ users build GenomeSpy specifications with a declarative, fluent API, serialize
43
+ them to JSON, and display them in Jupyter or Marimo notebooks.
44
+
45
+ Read the [documentation](https://genomespy.app/genome-spy-python/) for the
46
+ getting-started guide, user guide, examples, and API reference.
47
+
48
+ <a href="https://altair-viz.github.io/" target="_blank" rel="noopener noreferrer">Altair</a>
49
+ is the project's main source of inspiration. This codebase follows Altair's
50
+ approach of combining schema-backed specification objects with a small
51
+ handwritten Python API for marks, encodings, composition, and rendering. It
52
+ adapts that model to GenomeSpy's genomics-native grammar: locus scales, genomic
53
+ data sources, and coordinated genomic views.
54
+
55
+ The project is under active development. The current focus is the reusable
56
+ GenomeSpy Core grammar and notebook rendering; GenomeSpy App-specific features
57
+ will come later.
58
+
59
+ ## Installation
60
+
61
+ The package requires Python 3.11 or newer.
62
+
63
+ From PyPI:
64
+
65
+ ```bash
66
+ pip install genome-spy-python
67
+ ```
68
+
69
+ From source:
70
+
71
+ ```bash
72
+ pip install uv
73
+ git clone https://github.com/genome-spy/genome-spy-python.git
74
+ cd genome-spy-python
75
+ uv sync
76
+ ```
77
+
78
+ For notebook use, install with Arrow support. This includes PyArrow for
79
+ dataframe transport:
80
+
81
+ ```bash
82
+ pip install "genome-spy-python[arrow]"
83
+ ```
84
+
85
+ See [creating and updating charts in notebooks](docs/user-guide/notebooks.md)
86
+ for supported tables and live updates.
87
+
88
+ See the [getting-started guide](docs/getting-started.md) for the first example.
89
+
90
+ ## Examples
91
+
92
+ ```python
93
+ import genome_spy as gs
94
+
95
+ chart = (
96
+ gs.Chart(
97
+ [
98
+ {"x": 1, "y": 4, "group": "A"},
99
+ {"x": 2, "y": 3, "group": "B"},
100
+ {"x": 3, "y": 5, "group": "A"},
101
+ ]
102
+ )
103
+ .mark_point(size=80)
104
+ .encode(
105
+ x="x:Q",
106
+ y="y:Q",
107
+ color="group:N",
108
+ )
109
+ )
110
+
111
+ chart
112
+ ```
113
+
114
+ GenomeSpy also has locus-scaled axes for genomic coordinates. This small
115
+ example renders intervals along a region of chromosome 1:
116
+
117
+ ```python
118
+ import genome_spy as gs
119
+
120
+ intervals = [
121
+ {"chrom": "chr1", "start": 100, "end": 220, "name": "gene A"},
122
+ {"chrom": "chr1", "start": 280, "end": 420, "name": "gene B"},
123
+ ]
124
+
125
+ chart = (
126
+ gs.Chart(intervals)
127
+ .mark_rect()
128
+ .encode(
129
+ x=gs.Locus("chrom", "start"),
130
+ x2="end:Q",
131
+ y="name:N",
132
+ color="name:N",
133
+ )
134
+ )
135
+
136
+ chart
137
+ ```
138
+
139
+ Charts can be serialized to a portable GenomeSpy specification or standalone
140
+ HTML:
141
+
142
+ ```python
143
+ chart.to_json()
144
+ chart.save("intervals.html")
145
+ ```
146
+
147
+ ### Update data without recreating the chart
148
+
149
+ For reactive Jupyter or Marimo notebooks, create a widget with an explicitly
150
+ named dataset and replace that dataset as inputs change. The browser keeps the
151
+ existing GenomeSpy instance, so view state such as zoom is preserved.
152
+
153
+ ```python
154
+ chart = (
155
+ gs.Chart(data={"name": "table"}, datasets={"table": []})
156
+ .mark_point()
157
+ .encode(x="x:Q", y="y:Q")
158
+ )
159
+ view = chart.widget()
160
+
161
+ view.set_dataset("table", updated_dataframe)
162
+ ```
163
+
164
+ See [creating and updating charts in notebooks](docs/user-guide/notebooks.md)
165
+ for the Marimo pattern.
166
+
167
+ ## Contributing
168
+
169
+ Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for development
170
+ setup, testing, code generation, documentation, gallery, and pull-request
171
+ guidelines.
172
+
173
+ ## References
174
+
175
+ - <a href="https://genomespy.app/" target="_blank" rel="noopener noreferrer">GenomeSpy</a>
176
+ — the upstream visualization grammar and JavaScript renderer.
177
+ - <a href="https://altair-viz.github.io/" target="_blank" rel="noopener noreferrer">Altair</a>
178
+ — a schema-wrapper design reference.
179
+ - <a href="https://gosling-lang.org/" target="_blank" rel="noopener noreferrer">Gos</a>
180
+ — a related grammar and Python-wrapper design reference for
181
+ genomics visualization.
182
+
183
+ Portions of the schema-wrapper implementation and selected tests are adapted
184
+ from Altair under its BSD-3-Clause license. See
185
+ [Third-party notices](THIRD_PARTY_NOTICES.md) for the exact sources and license.
@@ -0,0 +1,64 @@
1
+ genome_spy/__init__.py,sha256=Uo8ZuBpB5SykUtvpVJvG3nvEkh2vUOwo8zFlUHG6Gf4,3138
2
+ genome_spy/_chart_authoring.py,sha256=LJZxoNtab5Kt3hvPzlL9h-B3rAUkUg-ZatECHjAHciI,7335
3
+ genome_spy/_conditions.py,sha256=SPB482xOQCDXDqtTRb9dQlvqrBieAoC9d9D4XDjH-SM,2263
4
+ genome_spy/_embed.py,sha256=b4OZ6V9--MzNdVLQPRB1CkaSBSC5ORVQZEUNycP4dkQ,2876
5
+ genome_spy/_expressions.py,sha256=E3k8ddv2KxRK7yTqIiroIbLGg_cwdGH4ASyXg1aOhMU,8237
6
+ genome_spy/_parameters.py,sha256=qfClD9IIbaMEQd_ECca6ssN6HwoH5sXTjI3JALlbgkg,8964
7
+ genome_spy/_render.py,sha256=1iY4BpBZOB--zzAKNmv0m6KExrVfXksqHRlkhu518q4,7068
8
+ genome_spy/_utils.py,sha256=cW4zwPWeKXalA6ieFbZPH5D-Oj-_qNwx3neUJndD6n4,2087
9
+ genome_spy/_widget.py,sha256=YMebtpxD6cTPsMWfwzPhxT4s3rrJFlA-pMbdTJ1yVHM,9925
10
+ genome_spy/api.py,sha256=t_egryopu5nFwZOtshxpM_H6uaaQWqHxDFZoCTFfvR4,3313
11
+ genome_spy/arrow.py,sha256=poy8v4348fPDXlUi3Lt5927WPJ31mtBqEL8P1Gatddg,5316
12
+ genome_spy/channels.py,sha256=cemNP4o0G64AvT_EmvFOpZrpiVXq8N0YiNFiFUg1muo,5981
13
+ genome_spy/chart.py,sha256=fcP2yEdaCHErp4X_qLCxvBVYOAvPo8QBgY9we5ZgPx8,45274
14
+ genome_spy/data.py,sha256=uJ69JDAac-4Cq06nXkt2JSHGDv6LXmzLDKzM0YJnUTE,1878
15
+ genome_spy/data_transformers.py,sha256=DuAwsrf38cGR63uivQCkjlMu0vs8qgO55TsojyxlpTg,10060
16
+ genome_spy/helpers.py,sha256=5V13-ghuZGroxDe8Qi6obHrPDeUcs3hMwEt17AzFLX0,4961
17
+ genome_spy/jupyter.py,sha256=WB5wNtRkStSe21rPD8ZcnjwOkybGFV7qjtEyoBWaulY,129
18
+ genome_spy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ genome_spy/schemapi.py,sha256=9APJ-y-ygVTYkwp3FUn8Qn0qoVa_P2cq8v8H9mM7LKk,8818
20
+ genome_spy/datasets/__init__.py,sha256=ObuUwqG72VlOaBUvFSoysDYV5y13jiYc-6zODeYvzmw,6057
21
+ genome_spy/datasets/_airway.py,sha256=YQHB9LJO6AIhZ3vn1PZCb7nYpHCY-foAITCTekIC1NU,7902
22
+ genome_spy/datasets/_annotations.py,sha256=QxpUrMHPB3N_ohc-hYsDY5Xe_RTkiXEK-PKy5J8bWSU,1145
23
+ genome_spy/datasets/_gistic.py,sha256=rJFwzF4E_zIF2cewC69XjwzMo00-qW2evZw4L6Bk63I,1328
24
+ genome_spy/datasets/_grammar.py,sha256=sK7vyA3me4pfWhbBnNZCCE7VfS3VV_bpvHkxKeJMaW4,1918
25
+ genome_spy/datasets/_hapmap.py,sha256=YEicK7SNYvdskZB67eF3d3xDQwma2q4si_Q73jIClvA,5734
26
+ genome_spy/datasets/_mutation.py,sha256=MyITlOiczSbH0SfjYSJ3sxsAbnknSPE7d1GBhADh0Y8,9916
27
+ genome_spy/datasets/_oncoprint.py,sha256=H9NgFK1qMWhB-68r364P1E1m8lLDAfNIpA4nOYJs_Nw,19101
28
+ genome_spy/datasets/data/airway_metadata.csv,sha256=Bb1-eKDKWyovYOxxUpY4HKGfMajFpR5wyfYFg_qfz5c,325
29
+ genome_spy/datasets/data/airway_scaledcounts.csv,sha256=TTTfFa_6IvpdVTmHThSDeOoY2xydcx0XXvG59zy8KSc,2102792
30
+ genome_spy/datasets/data/brca.maf.gz,sha256=YdU1XpYL1IC-xPJFuPCW4jM0CGWc7Q0ZbkKw443j1yQ,24011
31
+ genome_spy/datasets/data/hapmap_gwas.csv,sha256=IOtmjaZ0MWea_B-YFqBR8DfCCbmQJ7y7bDMBnwBsZUc,939280
32
+ genome_spy/datasets/data/mutation_impact_reference.json,sha256=geHUu1gD44Io6A29rsj_RQzMz53Bxcocl2RtzSaI8Eg,1180
33
+ genome_spy/datasets/data/oncoprint_dataset3.json,sha256=4Hqmrpz09fOp8zHZl5hVzPM7xH7Ruy9Lhxk5tHwqCe8,5622
34
+ genome_spy/datasets/data/p53_sequence_comparison.json.gz,sha256=2gsrFrmzZNL1BM-Z2zFM6_exJk-wWwyzzFkg7RI-C7Y,57687
35
+ genome_spy/datasets/data/pik3ca_mutations.json,sha256=TzbfmtlgwUKYJ1IrvU_ODLR1INFKXGQqvopVlp8Xeuw,5770
36
+ genome_spy/datasets/data/pik3ca_tcga_brca_lollipop.json,sha256=PRMpETS0vTr4AYSKi-OEsIk2-5nSNxs0--Sd8A5C5oU,4027
37
+ genome_spy/datasets/data/refseq_gene_bodies.csv.gz,sha256=bsuPEtEgzBBySoFtTcb4699eRo9yWVCAneUIL42xd4U,1297641
38
+ genome_spy/datasets/data/tal1_alphagenome_reference.json.gz,sha256=EHAuqu5j0qT2AL8j6k-skT23IKulbTOGiw8yWQ_Ht34,36438
39
+ genome_spy/datasets/data/tcga.tsv,sha256=OakPwfUOvNETw3_QOJT7QbF9yk1gFPfvzw4_I0yVd0I,149070
40
+ genome_spy/datasets/data/tcga_laml.maf.gz,sha256=0QKwcaBSJltviteUe60dWNPjA2_RfWsnT36gmjds1qA,64020
41
+ genome_spy/datasets/data/tcga_laml_annot.tsv,sha256=cDMDDVKGjpoPNf_Xj0Wp16Emwu3vkM-edOT114mQpxA,4478
42
+ genome_spy/datasets/data/tcga_laml_combined_oncoplot.json.gz,sha256=jhzUnqji-PezC0nYO3aqa9dKaixNm2zJXwSVW4kW74o,14749
43
+ genome_spy/datasets/data/tcga_ov_gistic_lesions.tsv.gz,sha256=rCptRFpPCFQZmHYp5_1j93u-36y55QyfDAa0PsUP1uI,159542
44
+ genome_spy/datasets/data/tcga_ov_gistic_scores.tsv.gz,sha256=Y2FjiikhyuSr0TlWzXEANesx9cwL_VVP4VX2Hyp4g74,1709045
45
+ genome_spy/schema/__init__.py,sha256=6T-Vavy47aeJ252C1m2rTjAjdwVg70uaNqcIf45nsIU,17461
46
+ genome_spy/schema/_kwds.py,sha256=OTIUu9Mzk0S26kTyGaub1XIR5jDmvOpwRhs1cZCs47A,41469
47
+ genome_spy/schema/_typing.py,sha256=y4dE2qaitJvYMZdiyreRJOD1EtERqx47PnJVKzXor2s,5490
48
+ genome_spy/schema/capabilities.json,sha256=daZ75m_f2g_4vpcTSYcqt94Tl4XwrS88dWvuzw7NsGM,13376
49
+ genome_spy/schema/channels.py,sha256=Ku5yF0Gs8vGuOZtTNrEkQyldwc6FZBAY4IN1LNozFz0,647255
50
+ genome_spy/schema/composition.py,sha256=hYW6kbWbmb-dxb2Fur2yDOrZj8qc2tiaBpqtbN2VbOg,69894
51
+ genome_spy/schema/core.py,sha256=BbtjNofCgb33DTn-wWZziMXZMSryOD7vQFSSlXn3lz0,2668215
52
+ genome_spy/schema/ergonomics.py,sha256=E-peikSwjOTiXSKTUttXb6Pt-mbkO9ocqf9ZWljcRo0,135198
53
+ genome_spy/schema/expressions.py,sha256=hoDyt-TnV5kLF2fbmhWg9PD40u8lwW32JwbXhJibI_M,16969
54
+ genome_spy/schema/genome-spy-schema.json,sha256=elqwiUGlNSeKydS7F_md1vn8tD7KuctyLH5RRjuh6DI,1527228
55
+ genome_spy/schema/lazy.py,sha256=DHEBoqLLA7b95gTfs9KMwrlAznWZvsoItI4ma3pqXow,20468
56
+ genome_spy/schema/mixins.py,sha256=2skDgP7aW2dJ3rE3-z1-Pa5-qOpT6anMLSJ79I2rvAU,831812
57
+ genome_spy/static/widget.js,sha256=h7AbXoybl7zGqyE5I4pMUme5_Yj1uf3Ht-u7MiVKLpg,10432
58
+ genome_spy_python-0.1.0.dist-info/METADATA,sha256=KrnqyGBJHP5xah32mgyR-KMVmDkPZRed6v1Cut5tKnw,5805
59
+ genome_spy_python-0.1.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
60
+ genome_spy_python-0.1.0.dist-info/licenses/LICENSE,sha256=-sg2zehCHmFRJF1OlSWWt6qC5KKcmYhNRj3erFJ3l-o,1072
61
+ genome_spy_python-0.1.0.dist-info/licenses/LICENSES/ALTAIR-BSD-3-Clause.txt,sha256=Gly1VgeIhY1HjM6BECJkyiihOFP5KPUjeSp2AKYRCww,1496
62
+ genome_spy_python-0.1.0.dist-info/licenses/LICENSES/GALLERY-DATA-MIT.txt,sha256=4gWWXgkU6YDuSbuQZIHPmf9lYhQlATFJe1Tz3tzTmzA,1148
63
+ genome_spy_python-0.1.0.dist-info/licenses/THIRD_PARTY_NOTICES.md,sha256=7iw5OZxTDSKBjYffxPaVttrwEChS2fSox-BczrLZfds,1938
64
+ genome_spy_python-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Oskari Lehtonen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,27 @@
1
+ Copyright (c) 2015-2025, Vega-Altair Developers
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of vega-altair nor the names of its
15
+ contributors may be used to endorse or promote products derived from
16
+ this software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,22 @@
1
+ maftools: Copyright (c) 2018 Anand Mayakonda
2
+ Plotly datasets: Copyright (c) 2019-2024 Plotly Technologies Inc.
3
+
4
+ MIT License
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
@@ -0,0 +1,42 @@
1
+ # Third-party notices
2
+
3
+ ## Gallery data from maftools and Plotly
4
+
5
+ `tcga_laml_combined_oncoplot.json.gz` contains prepared TCGA LAML tables from
6
+ maftools revision `015a4cf8c69ba89a55a3fdcea911421509e9a198` (Anand Mayakonda,
7
+ MIT). `p53_sequence_comparison.json.gz` contains p53 sequences and derived
8
+ display tables from Plotly's datasets revision
9
+ `0c447c47b757ad74edecab31f0d72f849d2e67c2` (Plotly Technologies Inc., MIT).
10
+ Source file hashes are retained in the packaged data. The corresponding gallery
11
+ pages describe processing. Copyright notices and terms are included in
12
+ `LICENSES/GALLERY-DATA-MIT.txt`.
13
+
14
+ ## Code adapted from Vega-Altair
15
+
16
+ Parts of this project are adapted from
17
+ [Vega-Altair](https://github.com/vega/altair), copyright 2015–2025 the
18
+ Vega-Altair Developers, under the BSD-3-Clause license. The complete license
19
+ is in [`LICENSES/ALTAIR-BSD-3-Clause.txt`](LICENSES/ALTAIR-BSD-3-Clause.txt).
20
+
21
+ The adapted areas are:
22
+
23
+ - `src/genome_spy/schemapi.py`, a reduced schema-wrapper runtime based on
24
+ `altair/utils/schemapi.py`;
25
+ - `tools/schemapi/codegen.py`, whose schema-wrapper generation architecture is
26
+ adapted from Altair's `tools/schemapi/` package and
27
+ `tools/generate_schema_wrapper.py`;
28
+ - the multifeature penguins and cars strip-plot cases in `tests/test_chart.py`,
29
+ adapted from Altair's example suite and mark documentation.
30
+
31
+ Each adapted source location identifies its corresponding upstream source.
32
+
33
+ ## Design references
34
+
35
+ Altair also informed the separation between generated schema bindings and the
36
+ handwritten chart API, composition operators, channel shorthand, and API
37
+ reference organization. Those areas use project-specific implementations and
38
+ are acknowledged as design references rather than adapted Altair code.
39
+
40
+ MutGlyph informed the generic scored gene-annotation track used by the
41
+ rainfall and GISTIC examples. The implementation and UCSC-derived data are
42
+ maintained independently in this repository.