gbdraw 0.14.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.
- gbdraw/__init__.py +58 -0
- gbdraw/_build_support.py +261 -0
- gbdraw/_web_assets.py +197 -0
- gbdraw/analysis/__init__.py +49 -0
- gbdraw/analysis/collinearity.py +1794 -0
- gbdraw/analysis/collinearity_units.py +303 -0
- gbdraw/analysis/conservation.py +603 -0
- gbdraw/analysis/depth.py +300 -0
- gbdraw/analysis/depth_tracks.py +833 -0
- gbdraw/analysis/gc.py +115 -0
- gbdraw/analysis/ortholog_paths.py +436 -0
- gbdraw/analysis/protein_artifacts.py +835 -0
- gbdraw/analysis/protein_colinearity.py +6669 -0
- gbdraw/analysis/skew.py +153 -0
- gbdraw/annotations/__init__.py +92 -0
- gbdraw/annotations/feature_underlays.py +228 -0
- gbdraw/annotations/io.py +340 -0
- gbdraw/annotations/label_search.py +28 -0
- gbdraw/annotations/layout.py +265 -0
- gbdraw/annotations/legend.py +68 -0
- gbdraw/annotations/models.py +522 -0
- gbdraw/annotations/planning.py +116 -0
- gbdraw/annotations/resolve.py +460 -0
- gbdraw/api/__init__.py +411 -0
- gbdraw/api/config.py +55 -0
- gbdraw/api/diagram.py +4113 -0
- gbdraw/api/io.py +196 -0
- gbdraw/api/migration_report.py +25 -0
- gbdraw/api/options.py +1601 -0
- gbdraw/api/prepared.py +965 -0
- gbdraw/api/record_planning.py +1836 -0
- gbdraw/api/region_drawing.py +525 -0
- gbdraw/api/render.py +240 -0
- gbdraw/api/request_render.py +3350 -0
- gbdraw/api/requests.py +856 -0
- gbdraw/api/session_compat.py +1893 -0
- gbdraw/api/tracks.py +53 -0
- gbdraw/auto_sizes.py +349 -0
- gbdraw/canvas/__init__.py +16 -0
- gbdraw/canvas/circular.py +182 -0
- gbdraw/canvas/linear.py +426 -0
- gbdraw/circular.py +1532 -0
- gbdraw/cli.py +248 -0
- gbdraw/cli_utils/__init__.py +28 -0
- gbdraw/cli_utils/common.py +772 -0
- gbdraw/cli_utils/losat_output.py +39 -0
- gbdraw/cli_utils/session.py +1348 -0
- gbdraw/comparisons/__init__.py +1 -0
- gbdraw/comparisons/circular_losat.py +254 -0
- gbdraw/comparisons/linear_losat.py +278 -0
- gbdraw/comparisons/losat_jobs.py +485 -0
- gbdraw/comparisons/losat_runtime.py +916 -0
- gbdraw/config/__init__.py +3 -0
- gbdraw/config/models/__init__.py +39 -0
- gbdraw/config/models/canvas.py +262 -0
- gbdraw/config/models/common.py +24 -0
- gbdraw/config/models/labels.py +286 -0
- gbdraw/config/models/objects.py +662 -0
- gbdraw/config/models/render_profiles.py +113 -0
- gbdraw/config/models/root.py +173 -0
- gbdraw/config/modify.py +502 -0
- gbdraw/config/toml.py +54 -0
- gbdraw/configurators/__init__.py +21 -0
- gbdraw/configurators/blast.py +106 -0
- gbdraw/configurators/depth.py +58 -0
- gbdraw/configurators/features.py +101 -0
- gbdraw/configurators/gc.py +128 -0
- gbdraw/configurators/legend.py +375 -0
- gbdraw/contract_shapes.py +370 -0
- gbdraw/core/__init__.py +3 -0
- gbdraw/core/color.py +119 -0
- gbdraw/core/fonts.py +1044 -0
- gbdraw/core/numeric.py +194 -0
- gbdraw/core/record_metadata.py +354 -0
- gbdraw/core/sequence.py +167 -0
- gbdraw/core/text.py +811 -0
- gbdraw/crop_genbank.py +267 -0
- gbdraw/data/LiberationMono-Bold.ttf +0 -0
- gbdraw/data/LiberationMono-BoldItalic.ttf +0 -0
- gbdraw/data/LiberationMono-Italic.ttf +0 -0
- gbdraw/data/LiberationMono-Regular.ttf +0 -0
- gbdraw/data/LiberationSans-Bold.ttf +0 -0
- gbdraw/data/LiberationSans-BoldItalic.ttf +0 -0
- gbdraw/data/LiberationSans-Italic.ttf +0 -0
- gbdraw/data/LiberationSans-Regular.ttf +0 -0
- gbdraw/data/LiberationSerif-Bold.ttf +0 -0
- gbdraw/data/LiberationSerif-BoldItalic.ttf +0 -0
- gbdraw/data/LiberationSerif-Italic.ttf +0 -0
- gbdraw/data/LiberationSerif-Regular.ttf +0 -0
- gbdraw/data/__init__.py +0 -0
- gbdraw/data/color_palettes.toml +841 -0
- gbdraw/data/config.toml +425 -0
- gbdraw/data/losat-release.json +39 -0
- gbdraw/definition_line_styles.py +206 -0
- gbdraw/diagrams/__init__.py +16 -0
- gbdraw/diagrams/circular/__init__.py +15 -0
- gbdraw/diagrams/circular/assemble.py +3411 -0
- gbdraw/diagrams/circular/builders.py +542 -0
- gbdraw/diagrams/circular/positioning.py +136 -0
- gbdraw/diagrams/circular/presets.py +532 -0
- gbdraw/diagrams/circular/radial_layout.py +2795 -0
- gbdraw/diagrams/linear/__init__.py +7 -0
- gbdraw/diagrams/linear/annotation_labels.py +617 -0
- gbdraw/diagrams/linear/assemble.py +3403 -0
- gbdraw/diagrams/linear/builders.py +559 -0
- gbdraw/diagrams/linear/orthogroup_alignment.py +272 -0
- gbdraw/diagrams/linear/positioning.py +39 -0
- gbdraw/diagrams/linear/precalc.py +289 -0
- gbdraw/diagrams/linear/track_slots.py +795 -0
- gbdraw/exceptions.py +127 -0
- gbdraw/features/__init__.py +90 -0
- gbdraw/features/colors.py +164 -0
- gbdraw/features/coordinates.py +247 -0
- gbdraw/features/factory.py +425 -0
- gbdraw/features/ids.py +343 -0
- gbdraw/features/objects.py +291 -0
- gbdraw/features/overrides.py +328 -0
- gbdraw/features/placement.py +512 -0
- gbdraw/features/selector_values.py +477 -0
- gbdraw/features/shapes.py +155 -0
- gbdraw/features/source.py +369 -0
- gbdraw/features/tracks.py +465 -0
- gbdraw/features/visibility.py +369 -0
- gbdraw/interface.py +1254 -0
- gbdraw/io/__init__.py +8 -0
- gbdraw/io/cli_tables.py +999 -0
- gbdraw/io/colors.py +530 -0
- gbdraw/io/comparison_sequences.py +184 -0
- gbdraw/io/comparisons.py +390 -0
- gbdraw/io/filenames.py +51 -0
- gbdraw/io/genome.py +492 -0
- gbdraw/io/record_select.py +170 -0
- gbdraw/io/regions.py +412 -0
- gbdraw/io/table_text.py +214 -0
- gbdraw/labels/__init__.py +3 -0
- gbdraw/labels/circular.py +5531 -0
- gbdraw/labels/circular_candidates.py +110 -0
- gbdraw/labels/circular_fit.py +658 -0
- gbdraw/labels/circular_leaders.py +228 -0
- gbdraw/labels/circular_radial.py +456 -0
- gbdraw/labels/circular_repair.py +938 -0
- gbdraw/labels/circular_types.py +175 -0
- gbdraw/labels/coordinates.py +77 -0
- gbdraw/labels/filtering.py +589 -0
- gbdraw/labels/fit.py +728 -0
- gbdraw/labels/label_ink.py +241 -0
- gbdraw/labels/label_style.py +146 -0
- gbdraw/labels/linear.py +1318 -0
- gbdraw/labels/linear_types.py +90 -0
- gbdraw/labels/policy.py +24 -0
- gbdraw/layout/__init__.py +45 -0
- gbdraw/layout/_immutable.py +30 -0
- gbdraw/layout/circular.py +448 -0
- gbdraw/layout/circular_depth_axis.py +86 -0
- gbdraw/layout/common.py +16 -0
- gbdraw/layout/composition.py +778 -0
- gbdraw/layout/linear.py +735 -0
- gbdraw/layout/linear_coords.py +17 -0
- gbdraw/layout/linear_multi_record.py +479 -0
- gbdraw/layout/record_coordinates.py +438 -0
- gbdraw/layout/record_labels.py +21 -0
- gbdraw/layout/record_placement.py +184 -0
- gbdraw/layout/scalar_axis.py +210 -0
- gbdraw/layout/similarity_alignment.py +1041 -0
- gbdraw/layout/spatial.py +362 -0
- gbdraw/layout/text_geometry.py +362 -0
- gbdraw/legend/__init__.py +3 -0
- gbdraw/legend/circular_layout.py +571 -0
- gbdraw/legend/linear_layout.py +470 -0
- gbdraw/legend/metrics.py +47 -0
- gbdraw/legend/row_facts.py +149 -0
- gbdraw/legend/sources.py +215 -0
- gbdraw/legend/table.py +630 -0
- gbdraw/linear.py +1834 -0
- gbdraw/linear_comparison.py +499 -0
- gbdraw/losat_setup.py +269 -0
- gbdraw/mode_profiles.py +303 -0
- gbdraw/render/__init__.py +9 -0
- gbdraw/render/composition.py +403 -0
- gbdraw/render/document.py +163 -0
- gbdraw/render/drawers/__init__.py +11 -0
- gbdraw/render/drawers/annotation_marks.py +135 -0
- gbdraw/render/drawers/circular/__init__.py +20 -0
- gbdraw/render/drawers/circular/annotations.py +863 -0
- gbdraw/render/drawers/circular/conservation.py +152 -0
- gbdraw/render/drawers/circular/definition.py +108 -0
- gbdraw/render/drawers/circular/depth.py +182 -0
- gbdraw/render/drawers/circular/features.py +563 -0
- gbdraw/render/drawers/circular/gc_content.py +256 -0
- gbdraw/render/drawers/circular/gc_skew.py +89 -0
- gbdraw/render/drawers/circular/labels.py +219 -0
- gbdraw/render/drawers/label_backing.py +249 -0
- gbdraw/render/drawers/linear/__init__.py +18 -0
- gbdraw/render/drawers/linear/annotations.py +524 -0
- gbdraw/render/drawers/linear/depth.py +198 -0
- gbdraw/render/drawers/linear/features.py +348 -0
- gbdraw/render/drawers/linear/gc_content.py +289 -0
- gbdraw/render/drawers/linear/gc_skew.py +101 -0
- gbdraw/render/drawers/linear/labels.py +39 -0
- gbdraw/render/export.py +383 -0
- gbdraw/render/font_embedding.py +618 -0
- gbdraw/render/formats.py +174 -0
- gbdraw/render/group_content.py +342 -0
- gbdraw/render/groups/__init__.py +11 -0
- gbdraw/render/groups/circular/__init__.py +28 -0
- gbdraw/render/groups/circular/axis.py +43 -0
- gbdraw/render/groups/circular/conservation.py +115 -0
- gbdraw/render/groups/circular/definition.py +508 -0
- gbdraw/render/groups/circular/depth.py +58 -0
- gbdraw/render/groups/circular/gc_content.py +63 -0
- gbdraw/render/groups/circular/gc_skew.py +63 -0
- gbdraw/render/groups/circular/labels.py +111 -0
- gbdraw/render/groups/circular/legend.py +258 -0
- gbdraw/render/groups/circular/seq_record.py +138 -0
- gbdraw/render/groups/circular/ticks.py +126 -0
- gbdraw/render/groups/linear/__init__.py +32 -0
- gbdraw/render/groups/linear/definition.py +464 -0
- gbdraw/render/groups/linear/depth.py +77 -0
- gbdraw/render/groups/linear/feature_identity.py +68 -0
- gbdraw/render/groups/linear/gc_content.py +112 -0
- gbdraw/render/groups/linear/gc_skew.py +86 -0
- gbdraw/render/groups/linear/legend.py +309 -0
- gbdraw/render/groups/linear/length_bar.py +339 -0
- gbdraw/render/groups/linear/pairwise_match.py +649 -0
- gbdraw/render/groups/linear/plot_title.py +52 -0
- gbdraw/render/groups/linear/seq_record.py +487 -0
- gbdraw/render/interactive_context.py +211 -0
- gbdraw/render/interactive_svg.py +1783 -0
- gbdraw/render/label_binding.py +26 -0
- gbdraw/render/output_paths.py +279 -0
- gbdraw/render/patterns.py +59 -0
- gbdraw/render/track_slot_metadata.py +62 -0
- gbdraw/render_stages.py +930 -0
- gbdraw/session.py +1578 -0
- gbdraw/session_contract.py +504 -0
- gbdraw/session_drawings.py +492 -0
- gbdraw/session_io.py +7256 -0
- gbdraw/session_legacy_values.py +32 -0
- gbdraw/session_migration.py +616 -0
- gbdraw/session_request_codec.py +5601 -0
- gbdraw/session_resources.py +361 -0
- gbdraw/svg/__init__.py +3 -0
- gbdraw/svg/arrows.py +169 -0
- gbdraw/svg/circular_conservation.py +85 -0
- gbdraw/svg/circular_features.py +886 -0
- gbdraw/svg/circular_ticks.py +674 -0
- gbdraw/svg/circular_tracks.py +226 -0
- gbdraw/svg/elements.py +105 -0
- gbdraw/svg/ids.py +149 -0
- gbdraw/svg/linear_features.py +420 -0
- gbdraw/svg/linear_tracks.py +197 -0
- gbdraw/svg/text_path.py +68 -0
- gbdraw/tracks/__init__.py +68 -0
- gbdraw/tracks/circular.py +916 -0
- gbdraw/tracks/linear.py +605 -0
- gbdraw/tracks/parsing.py +314 -0
- gbdraw/tracks/scalars.py +77 -0
- gbdraw/version.py +7 -0
- gbdraw/web/__init__.py +0 -0
- gbdraw/web/assets/favicon.ico +0 -0
- gbdraw/web/assets/gbdraw-logo-title-outlined.svg +5 -0
- gbdraw/web/assets/gbdraw-logo-title.png +0 -0
- gbdraw/web/assets/gbdraw-logo-title.svg +108 -0
- gbdraw/web/assets/gbdraw-logo.svg +100 -0
- gbdraw/web/css/tailwind.css +103 -0
- gbdraw/web/gallery/palettes/palettes.json +853 -0
- gbdraw/web/gbdraw-0.14.0-py3-none-any.whl +0 -0
- gbdraw/web/index.html +9071 -0
- gbdraw/web/js/app/annotations/record-catalog.js +292 -0
- gbdraw/web/js/app/annotations/record-selector.js +223 -0
- gbdraw/web/js/app/annotations/table-codec.js +242 -0
- gbdraw/web/js/app/annotations/target-actions.js +138 -0
- gbdraw/web/js/app/annotations/validation.js +78 -0
- gbdraw/web/js/app/annotations.js +349 -0
- gbdraw/web/js/app/app-messages.js +151 -0
- gbdraw/web/js/app/app-setup.js +7641 -0
- gbdraw/web/js/app/auto-value-display.js +619 -0
- gbdraw/web/js/app/candidate-render.js +956 -0
- gbdraw/web/js/app/circular-track-slots/measure-input.js +84 -0
- gbdraw/web/js/app/circular-track-slots/track-index-input.js +46 -0
- gbdraw/web/js/app/circular-track-slots.js +2014 -0
- gbdraw/web/js/app/comparison-ui.js +665 -0
- gbdraw/web/js/app/depth-tracks.js +29 -0
- gbdraw/web/js/app/feature-editor/color-actions.js +1940 -0
- gbdraw/web/js/app/feature-editor/feature-edit-table.js +181 -0
- gbdraw/web/js/app/feature-editor/label-actions.js +1842 -0
- gbdraw/web/js/app/feature-editor/pattern-drafts.js +118 -0
- gbdraw/web/js/app/feature-editor/placement-actions.js +266 -0
- gbdraw/web/js/app/feature-editor/rule-actions.js +1162 -0
- gbdraw/web/js/app/feature-editor/svg-actions.js +2165 -0
- gbdraw/web/js/app/feature-editor/visibility-actions.js +791 -0
- gbdraw/web/js/app/feature-editor.js +324 -0
- gbdraw/web/js/app/feature-search/preview-actions.js +522 -0
- gbdraw/web/js/app/feature-search/preview-svg.js +274 -0
- gbdraw/web/js/app/feature-search/search-core.js +837 -0
- gbdraw/web/js/app/feature-selection.js +784 -0
- gbdraw/web/js/app/font-settings.js +400 -0
- gbdraw/web/js/app/history-inputs.js +297 -0
- gbdraw/web/js/app/history-shortcuts.js +66 -0
- gbdraw/web/js/app/label-fit-dialog.js +191 -0
- gbdraw/web/js/app/legend/drag-actions.js +241 -0
- gbdraw/web/js/app/legend/entry-actions.js +895 -0
- gbdraw/web/js/app/legend/layout-actions.js +243 -0
- gbdraw/web/js/app/legend/sort-actions.js +87 -0
- gbdraw/web/js/app/legend/stroke-actions.js +152 -0
- gbdraw/web/js/app/legend/track-data-styles.js +138 -0
- gbdraw/web/js/app/legend-layout/canvas-actions.js +110 -0
- gbdraw/web/js/app/legend-layout/composition-actions.js +1603 -0
- gbdraw/web/js/app/legend-layout/decoration-continuity.js +173 -0
- gbdraw/web/js/app/legend-layout/diagram-drag.js +573 -0
- gbdraw/web/js/app/legend-layout/reposition-actions.js +156 -0
- gbdraw/web/js/app/legend-layout.js +175 -0
- gbdraw/web/js/app/legend.js +111 -0
- gbdraw/web/js/app/linear-record-selector.js +408 -0
- gbdraw/web/js/app/linear-track-slots.js +1174 -0
- gbdraw/web/js/app/linear-typography.js +58 -0
- gbdraw/web/js/app/losat-settings.js +236 -0
- gbdraw/web/js/app/orthogroups.js +1012 -0
- gbdraw/web/js/app/pairwise-match-popup.js +2473 -0
- gbdraw/web/js/app/palettes.js +113 -0
- gbdraw/web/js/app/preview-item-popup.js +513 -0
- gbdraw/web/js/app/preview-runtime.js +1162 -0
- gbdraw/web/js/app/python-helpers.js +1801 -0
- gbdraw/web/js/app/record-display/feature-anchor.js +433 -0
- gbdraw/web/js/app/record-display/feature-record-rotation.js +670 -0
- gbdraw/web/js/app/record-display-options.js +549 -0
- gbdraw/web/js/app/record-groups.js +94 -0
- gbdraw/web/js/app/record-selection.js +227 -0
- gbdraw/web/js/app/result-paint-record.js +188 -0
- gbdraw/web/js/app/results.js +283 -0
- gbdraw/web/js/app/right-drawer.js +87 -0
- gbdraw/web/js/app/rule-matching.js +392 -0
- gbdraw/web/js/app/run-analysis.js +6363 -0
- gbdraw/web/js/app/run-info.js +2339 -0
- gbdraw/web/js/app/settings-pane.js +239 -0
- gbdraw/web/js/app/similarity-alignment.js +2380 -0
- gbdraw/web/js/app/svg-styles.js +357 -0
- gbdraw/web/js/app/track-slot-colors.js +111 -0
- gbdraw/web/js/app/track-slot-edits.js +64 -0
- gbdraw/web/js/app/ui-language.js +72 -0
- gbdraw/web/js/app/ui.js +592 -0
- gbdraw/web/js/app/watchers.js +675 -0
- gbdraw/web/js/app.js +68 -0
- gbdraw/web/js/components.js +1005 -0
- gbdraw/web/js/config.js +25 -0
- gbdraw/web/js/contracts/request-shape.generated.js +1569 -0
- gbdraw/web/js/contracts/request.generated.js +488 -0
- gbdraw/web/js/contracts/schema.generated.js +255 -0
- gbdraw/web/js/contracts/session-shape.generated.js +795 -0
- gbdraw/web/js/contracts/session.generated.js +795 -0
- gbdraw/web/js/mode-profiles.generated.js +114 -0
- gbdraw/web/js/mode-profiles.js +247 -0
- gbdraw/web/js/mode-scoped-settings.generated.js +242 -0
- gbdraw/web/js/services/alignment-review-view.js +298 -0
- gbdraw/web/js/services/annotation-state.js +214 -0
- gbdraw/web/js/services/artifact-slot.js +111 -0
- gbdraw/web/js/services/bounded-json-transport.js +237 -0
- gbdraw/web/js/services/browser-preferences.js +63 -0
- gbdraw/web/js/services/byte-utils.js +132 -0
- gbdraw/web/js/services/canonical-comparisons.js +71 -0
- gbdraw/web/js/services/canonical-resource-references.js +36 -0
- gbdraw/web/js/services/circular-track-measure.js +98 -0
- gbdraw/web/js/services/circular-track-slot-model.js +1132 -0
- gbdraw/web/js/services/comparison-warnings.js +44 -0
- gbdraw/web/js/services/config-field-readers.js +1550 -0
- gbdraw/web/js/services/config.js +6869 -0
- gbdraw/web/js/services/conservation-series.js +412 -0
- gbdraw/web/js/services/current-option-values.js +392 -0
- gbdraw/web/js/services/current-worker-result-source.js +61 -0
- gbdraw/web/js/services/definition-line-style-state.js +109 -0
- gbdraw/web/js/services/depth-file-codec.js +98 -0
- gbdraw/web/js/services/depth-track-state.js +915 -0
- gbdraw/web/js/services/diagram-generation.js +1084 -0
- gbdraw/web/js/services/diagram-resource-staging.js +188 -0
- gbdraw/web/js/services/diagram-worker-protocol.js +177 -0
- gbdraw/web/js/services/drawn-groups.js +60 -0
- gbdraw/web/js/services/export.js +625 -0
- gbdraw/web/js/services/feature-catalog.js +1412 -0
- gbdraw/web/js/services/feature-dom.js +133 -0
- gbdraw/web/js/services/feature-edit-migration.js +784 -0
- gbdraw/web/js/services/feature-identity.js +347 -0
- gbdraw/web/js/services/feature-metadata-extraction.js +517 -0
- gbdraw/web/js/services/feature-override-identity.js +321 -0
- gbdraw/web/js/services/feature-placement.js +446 -0
- gbdraw/web/js/services/feature-selector.js +253 -0
- gbdraw/web/js/services/feature-sequence-fasta.js +236 -0
- gbdraw/web/js/services/feature-utils.js +375 -0
- gbdraw/web/js/services/feature-visibility.js +1067 -0
- gbdraw/web/js/services/file-content-cache.js +123 -0
- gbdraw/web/js/services/file-imports.js +457 -0
- gbdraw/web/js/services/font-families.js +149 -0
- gbdraw/web/js/services/font-store.js +305 -0
- gbdraw/web/js/services/gallery-examples.js +113 -0
- gbdraw/web/js/services/gallery-session-migration.js +785 -0
- gbdraw/web/js/services/gallery-session-publication.js +486 -0
- gbdraw/web/js/services/genbank-header.js +138 -0
- gbdraw/web/js/services/history-files.js +138 -0
- gbdraw/web/js/services/history-snapshot.js +2160 -0
- gbdraw/web/js/services/history.js +1831 -0
- gbdraw/web/js/services/imported-comparison-intent.js +629 -0
- gbdraw/web/js/services/json-clone.js +29 -0
- gbdraw/web/js/services/label-fit.js +225 -0
- gbdraw/web/js/services/label-override-table.js +203 -0
- gbdraw/web/js/services/layout-preferences.js +451 -0
- gbdraw/web/js/services/legacy-render-request.js +453 -0
- gbdraw/web/js/services/legacy-similarity-alignment.js +290 -0
- gbdraw/web/js/services/legend-layout.js +1148 -0
- gbdraw/web/js/services/legend-row-names.js +133 -0
- gbdraw/web/js/services/legend-svg.js +785 -0
- gbdraw/web/js/services/linear-comparisons.js +1148 -0
- gbdraw/web/js/services/linear-label-visibility.js +94 -0
- gbdraw/web/js/services/linear-record-layout.js +197 -0
- gbdraw/web/js/services/linear-sources.js +528 -0
- gbdraw/web/js/services/linear-track-slot-model.js +760 -0
- gbdraw/web/js/services/losat-cache.js +997 -0
- gbdraw/web/js/services/losat-normalization.js +91 -0
- gbdraw/web/js/services/losat-runtime.js +227 -0
- gbdraw/web/js/services/losat-thread-plan.js +65 -0
- gbdraw/web/js/services/losat.js +1093 -0
- gbdraw/web/js/services/main-session-comparison-frame.js +335 -0
- gbdraw/web/js/services/match-sequences.js +1251 -0
- gbdraw/web/js/services/mode-scoped-migration.js +577 -0
- gbdraw/web/js/services/orthogroup-feature-metadata.js +720 -0
- gbdraw/web/js/services/pdf-fonts.js +201 -0
- gbdraw/web/js/services/pyodide-assets.js +54 -0
- gbdraw/web/js/services/record-discovery.js +440 -0
- gbdraw/web/js/services/record-display-model.js +349 -0
- gbdraw/web/js/services/record-draw-selection.js +380 -0
- gbdraw/web/js/services/record-options.js +363 -0
- gbdraw/web/js/services/record-source-coordinates.js +88 -0
- gbdraw/web/js/services/reset.js +240 -0
- gbdraw/web/js/services/resource-payload-owner.js +37 -0
- gbdraw/web/js/services/result-normalization.js +82 -0
- gbdraw/web/js/services/result-paint-bases.js +38 -0
- gbdraw/web/js/services/right-drawer-state.js +120 -0
- gbdraw/web/js/services/rule-matchers.js +217 -0
- gbdraw/web/js/services/runtime-capabilities.js +98 -0
- gbdraw/web/js/services/runtime-test-hooks.js +33 -0
- gbdraw/web/js/services/safe-object-keys.js +44 -0
- gbdraw/web/js/services/session-active-config-contract.js +638 -0
- gbdraw/web/js/services/session-authority.js +1582 -0
- gbdraw/web/js/services/session-feature-metadata.js +260 -0
- gbdraw/web/js/services/session-feature-recovery.js +1289 -0
- gbdraw/web/js/services/session-file.js +367 -0
- gbdraw/web/js/services/session-fonts.js +97 -0
- gbdraw/web/js/services/session-import-client.js +113 -0
- gbdraw/web/js/services/session-request.js +6877 -0
- gbdraw/web/js/services/session-resource-backing.js +715 -0
- gbdraw/web/js/services/session-resources.js +528 -0
- gbdraw/web/js/services/setting-application.js +183 -0
- gbdraw/web/js/services/settings-pane-state.js +110 -0
- gbdraw/web/js/services/settings-sections.js +187 -0
- gbdraw/web/js/services/specific-color-rules.js +680 -0
- gbdraw/web/js/services/standalone-interactivity-assets.js +6918 -0
- gbdraw/web/js/services/standalone-interactivity.js +2146 -0
- gbdraw/web/js/services/style-overrides.js +132 -0
- gbdraw/web/js/services/svg-result-ingestion.js +1851 -0
- gbdraw/web/js/services/svg-result-normalization.js +177 -0
- gbdraw/web/js/services/svg-sanitization.js +242 -0
- gbdraw/web/js/services/svg-serialization.js +248 -0
- gbdraw/web/js/services/svg-transform.js +89 -0
- gbdraw/web/js/services/text-download.js +52 -0
- gbdraw/web/js/services/track-legend-rows.js +363 -0
- gbdraw/web/js/services/track-slot-display.js +238 -0
- gbdraw/web/js/services/track-slot-validation.js +1808 -0
- gbdraw/web/js/state.js +1329 -0
- gbdraw/web/js/utils/clipboard.js +27 -0
- gbdraw/web/js/utils/color-utils.js +444 -0
- gbdraw/web/js/utils/contract-repair.js +411 -0
- gbdraw/web/js/utils/contract-shape.js +195 -0
- gbdraw/web/js/utils/download-names.js +26 -0
- gbdraw/web/js/utils/error-normalization.js +865 -0
- gbdraw/web/js/utils/error-text.js +20 -0
- gbdraw/web/js/utils/feature-rendering.js +147 -0
- gbdraw/web/js/utils/field-reading.js +163 -0
- gbdraw/web/js/utils/font-family-rules.generated.js +71 -0
- gbdraw/web/js/utils/hosted-build.js +19 -0
- gbdraw/web/js/utils/i18n-catalogs/es.js +2788 -0
- gbdraw/web/js/utils/i18n-catalogs/fr.js +2788 -0
- gbdraw/web/js/utils/i18n-catalogs/id.js +2788 -0
- gbdraw/web/js/utils/i18n-catalogs/ja.js +2788 -0
- gbdraw/web/js/utils/i18n-catalogs/ko.js +2788 -0
- gbdraw/web/js/utils/i18n-catalogs/pt.js +2788 -0
- gbdraw/web/js/utils/i18n-catalogs/th.js +2788 -0
- gbdraw/web/js/utils/i18n-catalogs/vi.js +2788 -0
- gbdraw/web/js/utils/i18n-catalogs/zh-Hans.js +2788 -0
- gbdraw/web/js/utils/i18n-catalogs/zh-Hant.js +2788 -0
- gbdraw/web/js/utils/i18n.js +294 -0
- gbdraw/web/js/utils/inert-markup.js +22 -0
- gbdraw/web/js/utils/legend-font-metrics.generated.js +1576 -0
- gbdraw/web/js/utils/load-repairs.js +349 -0
- gbdraw/web/js/utils/markup-preview.js +27 -0
- gbdraw/web/js/utils/named-colors.js +51 -0
- gbdraw/web/js/utils/optional-positive-number.js +73 -0
- gbdraw/web/js/utils/own-entry.js +30 -0
- gbdraw/web/js/utils/png.js +82 -0
- gbdraw/web/js/utils/popup-bounds.js +142 -0
- gbdraw/web/js/utils/tsv-cell.js +6 -0
- gbdraw/web/js/utils/vue-raw.js +10 -0
- gbdraw/web/js/utils/zip.js +186 -0
- gbdraw/web/js/web-ux-profile.js +20 -0
- gbdraw/web/js/workers/diagram-generation-worker.js +1442 -0
- gbdraw/web/js/workers/losat-threaded-worker.js +440 -0
- gbdraw/web/js/workers/losat-wasi-thread-worker.js +191 -0
- gbdraw/web/js/workers/losat-worker.js +172 -0
- gbdraw/web/js/workers/pyodide-snapshot.js +586 -0
- gbdraw/web/js/workers/session-import-worker.js +49 -0
- gbdraw/web/js/workers/worker-font-registry.js +135 -0
- gbdraw/web/open-source-notices.html +1373 -0
- gbdraw/web/presets/bakta_color_table.txt +26 -0
- gbdraw/web/presets/pharokka_color_table.txt +16 -0
- gbdraw/web/tutorial-data/aminoglycoside-bgc-five/BGC0000708-BGC0000713_default_colors.tsv +1 -0
- gbdraw/web/tutorial-data/aminoglycoside-bgc-five/BGC0000708-BGC0000713_specific_colors.tsv +4 -0
- gbdraw/web/tutorial-data/aminoglycoside-bgc-five/BGC0000708.gbk +1633 -0
- gbdraw/web/tutorial-data/aminoglycoside-bgc-five/BGC0000709.gbk +1837 -0
- gbdraw/web/tutorial-data/aminoglycoside-bgc-five/BGC0000711.gbk +1088 -0
- gbdraw/web/tutorial-data/aminoglycoside-bgc-five/BGC0000712.gbk +2147 -0
- gbdraw/web/tutorial-data/aminoglycoside-bgc-five/BGC0000713.gbk +1232 -0
- gbdraw/web/tutorial-data/de3/NC_042057.1.gb +1855 -0
- gbdraw/web/tutorial-data/depth-1kb/AP027133.DRR394922.depth-1kb.tsv +608 -0
- gbdraw/web/tutorial-data/depth-1kb/AP027133.gb +20196 -0
- gbdraw/web/tutorial-data/hepatoplasmataceae-five/AP027078.gb +20180 -0
- gbdraw/web/tutorial-data/hepatoplasmataceae-five/AP027131.gb +21876 -0
- gbdraw/web/tutorial-data/hepatoplasmataceae-five/AP027132.gb +21337 -0
- gbdraw/web/tutorial-data/hepatoplasmataceae-five/NZ_CP006932.gb +25445 -0
- gbdraw/web/tutorial-data/human-mitochondrion/HmmtDNA.gbk +1165 -0
- gbdraw/web/tutorial-data/human-mitochondrion/HmmtDNA_feature_visibility.tsv +4 -0
- gbdraw/web/tutorial-data/lambda/NC_001416.gb +3221 -0
- gbdraw/web/tutorial-data/lambda-de3-comparison/lambda-de3.losatn.tsv +6 -0
- gbdraw/web/tutorial-data/lambda-de3-comparison/lambda-de3.tlosatx.tsv +397 -0
- gbdraw/web/tutorial-data/lambda-gff3/NC_001416.fna +694 -0
- gbdraw/web/tutorial-data/lambda-gff3/NC_001416.gff3 +167 -0
- gbdraw/web/tutorial-data/manifest.json +2175 -0
- gbdraw/web/tutorial-data/metazoan-mitochondria-comparison/NC_001328.1.fna +231 -0
- gbdraw/web/tutorial-data/metazoan-mitochondria-comparison/NC_002333.2.fna +278 -0
- gbdraw/web/tutorial-data/metazoan-mitochondria-comparison/NC_024511.2.fna +327 -0
- gbdraw/web/tutorial-data/metazoan-mitochondria-comparison/caenorhabditis-human.tlosatx.tsv +66 -0
- gbdraw/web/tutorial-data/metazoan-mitochondria-comparison/danio-human.tlosatx.tsv +276 -0
- gbdraw/web/tutorial-data/metazoan-mitochondria-comparison/drosophila-human.tlosatx.tsv +93 -0
- gbdraw/web/tutorial-data/metazoan-mitochondria-four/NC_001328.1.gb +690 -0
- gbdraw/web/tutorial-data/metazoan-mitochondria-four/NC_002333.2.gb +987 -0
- gbdraw/web/tutorial-data/metazoan-mitochondria-four/NC_024511.2.gb +1233 -0
- gbdraw/web/tutorial-data/shared/cds_gene_qualifier_priority.tsv +1 -0
- gbdraw/web/tutorial-data/tobacco-plastome-regions/NC_001879.gbk +5285 -0
- gbdraw/web/tutorial-data/tobacco-plastome-regions/chloroplast_specific_table.tsv +71 -0
- gbdraw/web/tutorial-data/tobacco-plastome-regions/modified_default_colors.tsv +6 -0
- gbdraw/web/tutorial-data/tobacco-plastome-regions/nicotiana-tabacum-regions-span.tsv +9 -0
- gbdraw/web/tutorial-data/tobacco-plastome-regions/nicotiana-tabacum-regions.tsv +5 -0
- gbdraw/web/tutorial-data/tobacco-plastome-regions/qualifier_priority.tsv +1 -0
- gbdraw/web/vendor/browser_wasi_shim/dist/debug.js +1 -0
- gbdraw/web/vendor/browser_wasi_shim/dist/fd.js +1 -0
- gbdraw/web/vendor/browser_wasi_shim/dist/fs_mem.js +1 -0
- gbdraw/web/vendor/browser_wasi_shim/dist/fs_opfs.js +1 -0
- gbdraw/web/vendor/browser_wasi_shim/dist/index.js +1 -0
- gbdraw/web/vendor/browser_wasi_shim/dist/strace.js +1 -0
- gbdraw/web/vendor/browser_wasi_shim/dist/wasi.js +1 -0
- gbdraw/web/vendor/browser_wasi_shim/dist/wasi_defs.js +1 -0
- gbdraw/web/vendor/dompurify/purify.min.js +3 -0
- gbdraw/web/vendor/fonts/inter/inter-latin-300-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/inter/inter-latin-400-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/inter/inter-latin-500-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/inter/inter-latin-600-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/inter/inter-latin-700-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/inter/inter-vietnamese-300-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/inter/inter-vietnamese-400-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/inter/inter-vietnamese-500-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/inter/inter-vietnamese-600-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/inter/inter-vietnamese-700-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/noto-sans-jp/noto-sans-jp-japanese-300-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/noto-sans-jp/noto-sans-jp-japanese-400-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/noto-sans-jp/noto-sans-jp-japanese-500-normal.woff2 +0 -0
- gbdraw/web/vendor/fonts/noto-sans-jp/noto-sans-jp-japanese-700-normal.woff2 +0 -0
- gbdraw/web/vendor/jspdf/jspdf.umd.min.js +373 -0
- gbdraw/web/vendor/phosphor-icons/regular/Phosphor.svg +3056 -0
- gbdraw/web/vendor/phosphor-icons/regular/Phosphor.ttf +0 -0
- gbdraw/web/vendor/phosphor-icons/regular/Phosphor.woff +0 -0
- gbdraw/web/vendor/phosphor-icons/regular/Phosphor.woff2 +0 -0
- gbdraw/web/vendor/phosphor-icons/regular/style.css +4627 -0
- gbdraw/web/vendor/pyodide/v0.29.0/full/micropip-0.11.0-py3-none-any.whl +0 -0
- gbdraw/web/vendor/pyodide/v0.29.0/full/package.json +126 -0
- gbdraw/web/vendor/pyodide/v0.29.0/full/pyodide-lock.json +1 -0
- gbdraw/web/vendor/pyodide/v0.29.0/full/pyodide.asm.js +15 -0
- gbdraw/web/vendor/pyodide/v0.29.0/full/pyodide.asm.wasm +0 -0
- gbdraw/web/vendor/pyodide/v0.29.0/full/pyodide.js +6 -0
- gbdraw/web/vendor/pyodide/v0.29.0/full/pyodide.mjs +4 -0
- gbdraw/web/vendor/pyodide/v0.29.0/full/python_stdlib.zip +0 -0
- gbdraw/web/vendor/pyodide/v0.29.0/full/tzdata-2025.2-py2.py3-none-any.whl +0 -0
- gbdraw/web/vendor/pyodide-wheels/bcbio_gff-0.7.1-py3-none-any.whl +0 -0
- gbdraw/web/vendor/pyodide-wheels/biopython-1.85-cp313-cp313-pyodide_2025_0_wasm32.whl +0 -0
- gbdraw/web/vendor/pyodide-wheels/fonttools-4.56.0-py3-none-any.whl +0 -0
- gbdraw/web/vendor/pyodide-wheels/numpy-2.2.5-cp313-cp313-pyodide_2025_0_wasm32.whl +0 -0
- gbdraw/web/vendor/pyodide-wheels/pandas-2.3.2-cp313-cp313-pyodide_2025_0_wasm32.whl +0 -0
- gbdraw/web/vendor/pyodide-wheels/python_dateutil-2.9.0.post0-py2.py3-none-any.whl +0 -0
- gbdraw/web/vendor/pyodide-wheels/pytz-2025.2-py2.py3-none-any.whl +0 -0
- gbdraw/web/vendor/pyodide-wheels/six-1.17.0-py2.py3-none-any.whl +0 -0
- gbdraw/web/vendor/pyodide-wheels/svgwrite-1.4.3-py3-none-any.whl +0 -0
- gbdraw/web/vendor/svg2pdf.js/svg2pdf.umd.min.js +3 -0
- gbdraw/web/vendor/vue/vue.global.prod.js +13 -0
- gbdraw/web/wasm/losat/README.md +29 -0
- gbdraw/web/wasm/losat/losat-threaded.wasm +0 -0
- gbdraw/web/wasm/losat/losat.wasm +0 -0
- gbdraw/web_support/__init__.py +30 -0
- gbdraw/web_support/capabilities.py +77 -0
- gbdraw/web_support/comparison_sequences.py +44 -0
- gbdraw/web_support/config_overrides.py +243 -0
- gbdraw/web_support/error_adapter.py +378 -0
- gbdraw/web_support/export_fonts.py +74 -0
- gbdraw/web_support/feature_catalog.py +2735 -0
- gbdraw/web_support/feature_metadata.py +611 -0
- gbdraw/web_support/feature_override_table.py +26 -0
- gbdraw/web_support/label_fit.py +352 -0
- gbdraw/web_support/mode_scoped_settings.py +376 -0
- gbdraw/web_support/orthogroup_metadata.py +538 -0
- gbdraw/web_support/request_render.py +704 -0
- gbdraw/web_support/rule_matching.py +84 -0
- gbdraw/web_support/similarity_alignment.py +610 -0
- gbdraw/web_support/stored_protein_frames.py +78 -0
- gbdraw-0.14.0.dist-info/METADATA +152 -0
- gbdraw-0.14.0.dist-info/RECORD +624 -0
- gbdraw-0.14.0.dist-info/WHEEL +5 -0
- gbdraw-0.14.0.dist-info/entry_points.txt +2 -0
- gbdraw-0.14.0.dist-info/licenses/LICENSE.txt +21 -0
- gbdraw-0.14.0.dist-info/licenses/LICENSE_LIBERATION_FONTS.txt +102 -0
- gbdraw-0.14.0.dist-info/top_level.txt +1 -0
gbdraw/__init__.py
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""Public Python interface for gbdraw."""
|
|
2
|
+
|
|
3
|
+
from .interface import (
|
|
4
|
+
CircularLayout,
|
|
5
|
+
CircularOptions,
|
|
6
|
+
CircularTrackOptions,
|
|
7
|
+
ComparisonRingOptions,
|
|
8
|
+
ComparisonRingTrackOptions,
|
|
9
|
+
ConservationOptions,
|
|
10
|
+
ConservationTrackOptions,
|
|
11
|
+
DepthTrackOptions,
|
|
12
|
+
Diagram,
|
|
13
|
+
FeatureOptions,
|
|
14
|
+
LabelOptions,
|
|
15
|
+
LinearComparisonOptions,
|
|
16
|
+
LinearLayout,
|
|
17
|
+
LinearOptions,
|
|
18
|
+
LinearTrackOptions,
|
|
19
|
+
Thresholds,
|
|
20
|
+
TitleOptions,
|
|
21
|
+
draw_circular,
|
|
22
|
+
draw_linear,
|
|
23
|
+
read_genbank,
|
|
24
|
+
read_gff,
|
|
25
|
+
)
|
|
26
|
+
from .version import __version__
|
|
27
|
+
from .api.requests import RecordDisplayOptions
|
|
28
|
+
from .features.placement import FeaturePlacementOverride, FeaturePlacementTarget
|
|
29
|
+
from .layout.similarity_alignment import SimilarityAlignmentReference
|
|
30
|
+
|
|
31
|
+
__all__ = [
|
|
32
|
+
"CircularLayout",
|
|
33
|
+
"CircularOptions",
|
|
34
|
+
"CircularTrackOptions",
|
|
35
|
+
"ComparisonRingOptions",
|
|
36
|
+
"ComparisonRingTrackOptions",
|
|
37
|
+
"ConservationOptions",
|
|
38
|
+
"ConservationTrackOptions",
|
|
39
|
+
"DepthTrackOptions",
|
|
40
|
+
"Diagram",
|
|
41
|
+
"FeatureOptions",
|
|
42
|
+
"FeaturePlacementOverride",
|
|
43
|
+
"FeaturePlacementTarget",
|
|
44
|
+
"LabelOptions",
|
|
45
|
+
"LinearComparisonOptions",
|
|
46
|
+
"LinearLayout",
|
|
47
|
+
"LinearOptions",
|
|
48
|
+
"LinearTrackOptions",
|
|
49
|
+
"RecordDisplayOptions",
|
|
50
|
+
"SimilarityAlignmentReference",
|
|
51
|
+
"Thresholds",
|
|
52
|
+
"TitleOptions",
|
|
53
|
+
"__version__",
|
|
54
|
+
"draw_circular",
|
|
55
|
+
"draw_linear",
|
|
56
|
+
"read_genbank",
|
|
57
|
+
"read_gff",
|
|
58
|
+
]
|
gbdraw/_build_support.py
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import re
|
|
5
|
+
import sys
|
|
6
|
+
import zipfile
|
|
7
|
+
from datetime import datetime
|
|
8
|
+
from importlib.util import module_from_spec, spec_from_file_location
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
13
|
+
PYPROJECT_PATH = REPO_ROOT / "pyproject.toml"
|
|
14
|
+
WEB_ROOT = Path(__file__).resolve().parent / "web"
|
|
15
|
+
CONFIG_PATH = WEB_ROOT / "js" / "config.js"
|
|
16
|
+
|
|
17
|
+
BROWSER_WHEEL_BUILD_ENV = "GBDRAW_BUILDING_BROWSER_WHEEL"
|
|
18
|
+
|
|
19
|
+
_PROJECT_VERSION_RE = re.compile(r'^version\s*=\s*"([^"]+)"\s*$', re.MULTILINE)
|
|
20
|
+
_WHEEL_NAME_RE = re.compile(r'^(export const GBDRAW_WHEEL_NAME\s*=\s*")[^"]+(";\s*)$', re.MULTILINE)
|
|
21
|
+
_WHEEL_CACHE_BUST_RE = re.compile(r'^(export const GBDRAW_WHEEL_CACHE_BUST\s*=\s*")[^"]+(";\s*)$', re.MULTILINE)
|
|
22
|
+
|
|
23
|
+
_PYTHON_RUNTIME_PACKAGE_DATA = [
|
|
24
|
+
"data/color_palettes.toml",
|
|
25
|
+
"data/config.toml",
|
|
26
|
+
"data/losat-release.json",
|
|
27
|
+
"data/*.ttf",
|
|
28
|
+
"web/js/services/standalone-interactivity-assets.js",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
_WEB_APP_PACKAGE_DATA = [
|
|
32
|
+
"web/index.html",
|
|
33
|
+
"web/css/tailwind.css",
|
|
34
|
+
"web/open-source-notices.html",
|
|
35
|
+
"web/gallery/palettes/palettes.json",
|
|
36
|
+
"web/assets/*.ico",
|
|
37
|
+
"web/assets/*.png",
|
|
38
|
+
"web/assets/*.svg",
|
|
39
|
+
"web/js/*.js",
|
|
40
|
+
"web/js/app/*.js",
|
|
41
|
+
"web/js/app/*/*.js",
|
|
42
|
+
"web/js/contracts/*.js",
|
|
43
|
+
"web/js/workers/*.js",
|
|
44
|
+
"web/js/services/*.js",
|
|
45
|
+
"web/js/utils/*.js",
|
|
46
|
+
"web/js/utils/*/*.js",
|
|
47
|
+
"web/presets/*.txt",
|
|
48
|
+
"web/presets/*.tsv",
|
|
49
|
+
"web/tutorial-data/*.json",
|
|
50
|
+
"web/tutorial-data/*/*.fna",
|
|
51
|
+
"web/tutorial-data/*/*.gb",
|
|
52
|
+
"web/tutorial-data/*/*.gbk",
|
|
53
|
+
"web/tutorial-data/*/*.gff3",
|
|
54
|
+
"web/tutorial-data/*/*.tsv",
|
|
55
|
+
"web/vendor/fonts/*.ttf",
|
|
56
|
+
"web/vendor/*/*.css",
|
|
57
|
+
"web/vendor/*/*.js",
|
|
58
|
+
"web/vendor/*/*.json",
|
|
59
|
+
"web/vendor/*/*.svg",
|
|
60
|
+
"web/vendor/*/*.ttf",
|
|
61
|
+
"web/vendor/*/*.whl",
|
|
62
|
+
"web/vendor/*/*.woff",
|
|
63
|
+
"web/vendor/*/*.woff2",
|
|
64
|
+
"web/vendor/*/*/*.css",
|
|
65
|
+
"web/vendor/*/*/*.js",
|
|
66
|
+
"web/vendor/*/*/*.json",
|
|
67
|
+
"web/vendor/*/*/*.mjs",
|
|
68
|
+
"web/vendor/*/*/*.svg",
|
|
69
|
+
"web/vendor/*/*/*.ttf",
|
|
70
|
+
"web/vendor/*/*/*.whl",
|
|
71
|
+
"web/vendor/*/*/*.woff",
|
|
72
|
+
"web/vendor/*/*/*.woff2",
|
|
73
|
+
"web/vendor/*/*/*.zip",
|
|
74
|
+
"web/vendor/*/*/*.wasm",
|
|
75
|
+
"web/vendor/*/*/*/*.js",
|
|
76
|
+
"web/vendor/*/*/*/*.json",
|
|
77
|
+
"web/vendor/*/*/*/*.mjs",
|
|
78
|
+
"web/vendor/*/*/*/*.whl",
|
|
79
|
+
"web/vendor/*/*/*/*.zip",
|
|
80
|
+
"web/vendor/*/*/*/*.wasm",
|
|
81
|
+
"web/wasm/*/*.md",
|
|
82
|
+
"web/wasm/*/*.wasm",
|
|
83
|
+
]
|
|
84
|
+
|
|
85
|
+
BROWSER_WHEEL_MAX_BYTES = 20 * 1024 * 1024
|
|
86
|
+
|
|
87
|
+
_BROWSER_WHEEL_FORBIDDEN_PREFIXES = (
|
|
88
|
+
"gbdraw/bin/",
|
|
89
|
+
"gbdraw/web/assets/",
|
|
90
|
+
"gbdraw/web/css/",
|
|
91
|
+
"gbdraw/web/gallery/",
|
|
92
|
+
"gbdraw/web/js/",
|
|
93
|
+
"gbdraw/web/presets/",
|
|
94
|
+
"gbdraw/web/tutorial-data/",
|
|
95
|
+
"gbdraw/web/vendor/",
|
|
96
|
+
"gbdraw/web/wasm/",
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
_BROWSER_WHEEL_FORBIDDEN_FILES = {
|
|
100
|
+
"gbdraw/web/index.html",
|
|
101
|
+
"gbdraw/web/open-source-notices.html",
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
_BROWSER_WHEEL_ALLOWED_FILES = {
|
|
105
|
+
"gbdraw/web/js/services/standalone-interactivity-assets.js",
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def is_browser_wheel_build() -> bool:
|
|
110
|
+
return os.environ.get(BROWSER_WHEEL_BUILD_ENV) == "1"
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def get_package_data_patterns(*, include_browser_wheel: bool) -> list[str]:
|
|
114
|
+
patterns = list(_PYTHON_RUNTIME_PACKAGE_DATA)
|
|
115
|
+
if not is_browser_wheel_build():
|
|
116
|
+
patterns.extend(_WEB_APP_PACKAGE_DATA)
|
|
117
|
+
if include_browser_wheel and not is_browser_wheel_build():
|
|
118
|
+
patterns.insert(3, f"web/{expected_browser_wheel_name()}")
|
|
119
|
+
return patterns
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def get_excluded_package_data_patterns(*, include_browser_wheel: bool) -> list[str]:
|
|
123
|
+
excluded = ["bin/*/*"]
|
|
124
|
+
if not include_browser_wheel:
|
|
125
|
+
excluded.append("web/*.whl")
|
|
126
|
+
return excluded
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def read_project_version() -> str:
|
|
130
|
+
pyproject_text = PYPROJECT_PATH.read_text(encoding="utf-8")
|
|
131
|
+
match = _PROJECT_VERSION_RE.search(pyproject_text)
|
|
132
|
+
if match is None:
|
|
133
|
+
raise RuntimeError(f"Could not determine project version from {PYPROJECT_PATH}")
|
|
134
|
+
return match.group(1)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def expected_browser_wheel_name(version: str | None = None) -> str:
|
|
138
|
+
if version is None:
|
|
139
|
+
version = read_project_version()
|
|
140
|
+
return f"gbdraw-{version}-py3-none-any.whl"
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def read_browser_wheel_name_from_config() -> str:
|
|
144
|
+
config_text = CONFIG_PATH.read_text(encoding="utf-8")
|
|
145
|
+
match = _WHEEL_NAME_RE.search(config_text)
|
|
146
|
+
if match is None:
|
|
147
|
+
raise RuntimeError(f"Could not determine GBDRAW_WHEEL_NAME from {CONFIG_PATH}")
|
|
148
|
+
_, value = match.group(0).split("=", 1)
|
|
149
|
+
return value.strip().strip(";").strip().strip('"').strip("'")
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def generate_cache_bust_token() -> str:
|
|
153
|
+
return datetime.now().strftime("%Y%m%d-%H%M%S")
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def update_browser_wheel_config(*, wheel_name: str, cache_bust: str | None = None) -> None:
|
|
157
|
+
config_text = CONFIG_PATH.read_text(encoding="utf-8")
|
|
158
|
+
updated_text, replacements = _WHEEL_NAME_RE.subn(
|
|
159
|
+
lambda match: f'{match.group(1)}{wheel_name}{match.group(2)}',
|
|
160
|
+
config_text,
|
|
161
|
+
count=1,
|
|
162
|
+
)
|
|
163
|
+
if replacements != 1:
|
|
164
|
+
raise RuntimeError(f"Could not update GBDRAW_WHEEL_NAME in {CONFIG_PATH}")
|
|
165
|
+
if cache_bust is not None:
|
|
166
|
+
updated_text, cache_bust_replacements = _WHEEL_CACHE_BUST_RE.subn(
|
|
167
|
+
lambda match: f'{match.group(1)}{cache_bust}{match.group(2)}',
|
|
168
|
+
updated_text,
|
|
169
|
+
count=1,
|
|
170
|
+
)
|
|
171
|
+
if cache_bust_replacements != 1:
|
|
172
|
+
raise RuntimeError(f"Could not update GBDRAW_WHEEL_CACHE_BUST in {CONFIG_PATH}")
|
|
173
|
+
if updated_text != config_text:
|
|
174
|
+
CONFIG_PATH.write_text(updated_text, encoding="utf-8")
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def refresh_open_source_notices() -> None:
|
|
178
|
+
generator_path = REPO_ROOT / "tools" / "generate_open_source_notices.py"
|
|
179
|
+
spec = spec_from_file_location("gbdraw_generate_open_source_notices", generator_path)
|
|
180
|
+
if spec is None or spec.loader is None:
|
|
181
|
+
raise RuntimeError(f"Could not load open source notices generator from {generator_path}")
|
|
182
|
+
|
|
183
|
+
module = module_from_spec(spec)
|
|
184
|
+
sys.modules[spec.name] = module
|
|
185
|
+
spec.loader.exec_module(module)
|
|
186
|
+
module.write_open_source_notices()
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def inspect_browser_wheel_payload(path: Path) -> None:
|
|
190
|
+
if path.stat().st_size > BROWSER_WHEEL_MAX_BYTES:
|
|
191
|
+
raise RuntimeError(
|
|
192
|
+
f"Browser wheel {path.relative_to(REPO_ROOT)} is too large: "
|
|
193
|
+
f"{path.stat().st_size} bytes, expected at most {BROWSER_WHEEL_MAX_BYTES}. "
|
|
194
|
+
"Run `python tools/prepare_browser_wheel.py`."
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
with zipfile.ZipFile(path) as zf:
|
|
198
|
+
names = set(zf.namelist())
|
|
199
|
+
|
|
200
|
+
forbidden = sorted(
|
|
201
|
+
name
|
|
202
|
+
for name in names
|
|
203
|
+
if name in _BROWSER_WHEEL_FORBIDDEN_FILES
|
|
204
|
+
or (
|
|
205
|
+
name not in _BROWSER_WHEEL_ALLOWED_FILES
|
|
206
|
+
and any(name.startswith(prefix) for prefix in _BROWSER_WHEEL_FORBIDDEN_PREFIXES)
|
|
207
|
+
)
|
|
208
|
+
or (name.startswith("gbdraw/web/gbdraw-") and name.endswith(".whl"))
|
|
209
|
+
)
|
|
210
|
+
if forbidden:
|
|
211
|
+
preview = "\n".join(forbidden[:20])
|
|
212
|
+
if len(forbidden) > 20:
|
|
213
|
+
preview += f"\n... and {len(forbidden) - 20} more"
|
|
214
|
+
raise RuntimeError(
|
|
215
|
+
"Browser wheel contains hosted web assets that should remain outside the "
|
|
216
|
+
"Pyodide runtime wheel:\n"
|
|
217
|
+
f"{preview}\n"
|
|
218
|
+
"Run `python tools/prepare_browser_wheel.py`."
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
required = {
|
|
222
|
+
"gbdraw/data/color_palettes.toml",
|
|
223
|
+
"gbdraw/data/config.toml",
|
|
224
|
+
"gbdraw/web/js/services/standalone-interactivity-assets.js",
|
|
225
|
+
}
|
|
226
|
+
missing = sorted(required - names)
|
|
227
|
+
if missing:
|
|
228
|
+
raise RuntimeError(
|
|
229
|
+
"Browser wheel is missing required Python runtime package data:\n"
|
|
230
|
+
+ "\n".join(missing)
|
|
231
|
+
+ "\nRun `python tools/prepare_browser_wheel.py`."
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def validate_browser_wheel_prepared() -> Path:
|
|
236
|
+
expected_name = expected_browser_wheel_name()
|
|
237
|
+
expected_path = WEB_ROOT / expected_name
|
|
238
|
+
existing_wheels = sorted(WEB_ROOT.glob("gbdraw-*.whl"))
|
|
239
|
+
|
|
240
|
+
if not expected_path.exists():
|
|
241
|
+
raise FileNotFoundError(
|
|
242
|
+
f"Missing browser wheel {expected_path.relative_to(REPO_ROOT)}. "
|
|
243
|
+
"Run `python tools/prepare_browser_wheel.py`."
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
unexpected_wheels = [path.name for path in existing_wheels if path.name != expected_name]
|
|
247
|
+
if unexpected_wheels:
|
|
248
|
+
raise RuntimeError(
|
|
249
|
+
"Unexpected browser wheel files in gbdraw/web: "
|
|
250
|
+
f"{', '.join(unexpected_wheels)}. Run `python tools/prepare_browser_wheel.py` to refresh them."
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
configured_name = read_browser_wheel_name_from_config()
|
|
254
|
+
if configured_name != expected_name:
|
|
255
|
+
raise RuntimeError(
|
|
256
|
+
f"gbdraw/web/js/config.js points to {configured_name}, expected {expected_name}. "
|
|
257
|
+
"Run `python tools/prepare_browser_wheel.py`."
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
inspect_browser_wheel_payload(expected_path)
|
|
261
|
+
return expected_path
|
gbdraw/_web_assets.py
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
8
|
+
WEB_ROOT = REPO_ROOT / "gbdraw" / "web"
|
|
9
|
+
VENDOR_ROOT = WEB_ROOT / "vendor"
|
|
10
|
+
PYODIDE_RUNTIME_DIR = VENDOR_ROOT / "pyodide" / "v0.29.0" / "full"
|
|
11
|
+
|
|
12
|
+
# The Vue build that index.html loads: the global production build, which
|
|
13
|
+
# still contains the template compiler that the in-DOM templates need.
|
|
14
|
+
VUE_RUNTIME_FILE = Path("vendor") / "vue" / "vue.global.prod.js"
|
|
15
|
+
|
|
16
|
+
ASSET_URLS = {
|
|
17
|
+
"vue": f"https://unpkg.com/vue@3.5.25/dist/{VUE_RUNTIME_FILE.name}",
|
|
18
|
+
"pyodide_core": "https://github.com/pyodide/pyodide/releases/download/0.29.0/pyodide-core-0.29.0.tar.bz2",
|
|
19
|
+
"micropip": "https://cdn.jsdelivr.net/pyodide/v0.29.0/full/micropip-0.11.0-py3-none-any.whl",
|
|
20
|
+
"tzdata": "https://cdn.jsdelivr.net/pyodide/v0.29.0/full/tzdata-2025.2-py2.py3-none-any.whl",
|
|
21
|
+
"browser_wasi_shim": "https://registry.npmjs.org/@bjorn3/browser_wasi_shim/-/browser_wasi_shim-0.4.2.tgz",
|
|
22
|
+
"jspdf": "https://registry.npmjs.org/jspdf/-/jspdf-3.0.3.tgz",
|
|
23
|
+
"svg2pdf": "https://registry.npmjs.org/svg2pdf.js/-/svg2pdf.js-2.6.0.tgz",
|
|
24
|
+
"dompurify": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.7.tgz",
|
|
25
|
+
"phosphor": "https://registry.npmjs.org/@phosphor-icons/web/-/web-2.1.2.tgz",
|
|
26
|
+
"inter": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz",
|
|
27
|
+
"noto_sans_jp": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.2.9.tgz",
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
PYODIDE_CORE_FILES = {
|
|
31
|
+
"package.json",
|
|
32
|
+
"pyodide.asm.js",
|
|
33
|
+
"pyodide.asm.wasm",
|
|
34
|
+
"pyodide.js",
|
|
35
|
+
"pyodide.mjs",
|
|
36
|
+
"pyodide-lock.json",
|
|
37
|
+
"python_stdlib.zip",
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
PYODIDE_RUNTIME_PACKAGE_WHEELS = {
|
|
41
|
+
"micropip": "micropip-0.11.0-py3-none-any.whl",
|
|
42
|
+
"tzdata": "tzdata-2025.2-py2.py3-none-any.whl",
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
PYODIDE_LOCAL_WHEELS = (
|
|
46
|
+
Path("vendor") / "pyodide-wheels" / "six-1.17.0-py2.py3-none-any.whl",
|
|
47
|
+
Path("vendor") / "pyodide-wheels" / "python_dateutil-2.9.0.post0-py2.py3-none-any.whl",
|
|
48
|
+
Path("vendor") / "pyodide-wheels" / "pytz-2025.2-py2.py3-none-any.whl",
|
|
49
|
+
Path("vendor") / "pyodide-wheels" / "numpy-2.2.5-cp313-cp313-pyodide_2025_0_wasm32.whl",
|
|
50
|
+
Path("vendor") / "pyodide-wheels" / "biopython-1.85-cp313-cp313-pyodide_2025_0_wasm32.whl",
|
|
51
|
+
Path("vendor") / "pyodide-wheels" / "fonttools-4.56.0-py3-none-any.whl",
|
|
52
|
+
Path("vendor") / "pyodide-wheels" / "svgwrite-1.4.3-py3-none-any.whl",
|
|
53
|
+
Path("vendor") / "pyodide-wheels" / "bcbio_gff-0.7.1-py3-none-any.whl",
|
|
54
|
+
Path("vendor") / "pyodide-wheels" / "pandas-2.3.2-cp313-cp313-pyodide_2025_0_wasm32.whl",
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
PYODIDE_RUNTIME_WHEELS = tuple(
|
|
58
|
+
Path("vendor") / "pyodide" / "v0.29.0" / "full" / filename
|
|
59
|
+
for filename in PYODIDE_RUNTIME_PACKAGE_WHEELS.values()
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
PYODIDE_BUNDLED_WHEELS = PYODIDE_LOCAL_WHEELS + PYODIDE_RUNTIME_WHEELS
|
|
63
|
+
|
|
64
|
+
UI_FONT_ASSETS = {
|
|
65
|
+
"inter": (
|
|
66
|
+
"inter-latin-300-normal.woff2",
|
|
67
|
+
"inter-latin-400-normal.woff2",
|
|
68
|
+
"inter-latin-500-normal.woff2",
|
|
69
|
+
"inter-latin-600-normal.woff2",
|
|
70
|
+
"inter-latin-700-normal.woff2",
|
|
71
|
+
"inter-vietnamese-300-normal.woff2",
|
|
72
|
+
"inter-vietnamese-400-normal.woff2",
|
|
73
|
+
"inter-vietnamese-500-normal.woff2",
|
|
74
|
+
"inter-vietnamese-600-normal.woff2",
|
|
75
|
+
"inter-vietnamese-700-normal.woff2",
|
|
76
|
+
),
|
|
77
|
+
"noto-sans-jp": (
|
|
78
|
+
"noto-sans-jp-japanese-300-normal.woff2",
|
|
79
|
+
"noto-sans-jp-japanese-400-normal.woff2",
|
|
80
|
+
"noto-sans-jp-japanese-500-normal.woff2",
|
|
81
|
+
"noto-sans-jp-japanese-700-normal.woff2",
|
|
82
|
+
),
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
REQUIRED_UI_FONT_FILES = tuple(
|
|
86
|
+
Path("vendor") / "fonts" / family / filename
|
|
87
|
+
for family, filenames in UI_FONT_ASSETS.items()
|
|
88
|
+
for filename in filenames
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@dataclass(frozen=True)
|
|
93
|
+
class WebAssetNotice:
|
|
94
|
+
display_name: str
|
|
95
|
+
version: str
|
|
96
|
+
license_expression: str
|
|
97
|
+
source_url: str
|
|
98
|
+
bundled_path: str
|
|
99
|
+
notice: str
|
|
100
|
+
license_text_anchors: tuple[str, ...] = ()
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
WEB_ASSET_NOTICES = (
|
|
104
|
+
WebAssetNotice(
|
|
105
|
+
display_name="Vue.js",
|
|
106
|
+
version="3.5.25",
|
|
107
|
+
license_expression="MIT",
|
|
108
|
+
source_url=ASSET_URLS["vue"],
|
|
109
|
+
bundled_path=VUE_RUNTIME_FILE.as_posix(),
|
|
110
|
+
notice="Copyright (c) 2018-present Yuxi (Evan) You and Vue contributors.",
|
|
111
|
+
license_text_anchors=("license-mit",),
|
|
112
|
+
),
|
|
113
|
+
WebAssetNotice(
|
|
114
|
+
display_name="Tailwind CSS (generated stylesheet)",
|
|
115
|
+
version="3.4.17",
|
|
116
|
+
license_expression="MIT",
|
|
117
|
+
source_url="https://tailwindcss.com",
|
|
118
|
+
bundled_path="css/tailwind.css",
|
|
119
|
+
notice=(
|
|
120
|
+
"Copyright (c) Tailwind Labs, Inc. The stylesheet is generated with the "
|
|
121
|
+
"Tailwind CSS compiler and contains its base styles (Preflight)."
|
|
122
|
+
),
|
|
123
|
+
license_text_anchors=("license-mit",),
|
|
124
|
+
),
|
|
125
|
+
WebAssetNotice(
|
|
126
|
+
display_name="Pyodide core runtime",
|
|
127
|
+
version="0.29.0",
|
|
128
|
+
license_expression="MPL-2.0",
|
|
129
|
+
source_url=ASSET_URLS["pyodide_core"],
|
|
130
|
+
bundled_path="vendor/pyodide/v0.29.0/full/",
|
|
131
|
+
notice="The local Pyodide package.json declares MPL-2.0.",
|
|
132
|
+
license_text_anchors=("license-mpl-2.0",),
|
|
133
|
+
),
|
|
134
|
+
WebAssetNotice(
|
|
135
|
+
display_name="browser_wasi_shim",
|
|
136
|
+
version="0.4.2",
|
|
137
|
+
license_expression="MIT OR Apache-2.0",
|
|
138
|
+
source_url=ASSET_URLS["browser_wasi_shim"],
|
|
139
|
+
bundled_path="vendor/browser_wasi_shim/dist/",
|
|
140
|
+
notice="The package metadata identifies the author as bjorn3.",
|
|
141
|
+
license_text_anchors=("license-mit", "license-apache-2.0"),
|
|
142
|
+
),
|
|
143
|
+
WebAssetNotice(
|
|
144
|
+
display_name="jsPDF",
|
|
145
|
+
version="3.0.3",
|
|
146
|
+
license_expression="MIT",
|
|
147
|
+
source_url=ASSET_URLS["jspdf"],
|
|
148
|
+
bundled_path="vendor/jspdf/jspdf.umd.min.js",
|
|
149
|
+
notice="Copyright (c) 2010-2025 James Hall and contributors.",
|
|
150
|
+
license_text_anchors=("license-mit",),
|
|
151
|
+
),
|
|
152
|
+
WebAssetNotice(
|
|
153
|
+
display_name="svg2pdf.js",
|
|
154
|
+
version="2.6.0",
|
|
155
|
+
license_expression="MIT",
|
|
156
|
+
source_url=ASSET_URLS["svg2pdf"],
|
|
157
|
+
bundled_path="vendor/svg2pdf.js/svg2pdf.umd.min.js",
|
|
158
|
+
notice="Authored by the yFiles for HTML Support Team at yWorks.",
|
|
159
|
+
license_text_anchors=("license-mit",),
|
|
160
|
+
),
|
|
161
|
+
WebAssetNotice(
|
|
162
|
+
display_name="DOMPurify",
|
|
163
|
+
version="3.2.7",
|
|
164
|
+
license_expression="MPL-2.0 OR Apache-2.0",
|
|
165
|
+
source_url=ASSET_URLS["dompurify"],
|
|
166
|
+
bundled_path="vendor/dompurify/purify.min.js",
|
|
167
|
+
notice="The distributed header identifies Cure53 and other contributors.",
|
|
168
|
+
license_text_anchors=("license-mpl-2.0", "license-apache-2.0"),
|
|
169
|
+
),
|
|
170
|
+
WebAssetNotice(
|
|
171
|
+
display_name="Phosphor Icons Web",
|
|
172
|
+
version="2.1.2",
|
|
173
|
+
license_expression="MIT",
|
|
174
|
+
source_url=ASSET_URLS["phosphor"],
|
|
175
|
+
bundled_path="vendor/phosphor-icons/regular/",
|
|
176
|
+
notice="Package author: rektdeckard.",
|
|
177
|
+
license_text_anchors=("license-mit",),
|
|
178
|
+
),
|
|
179
|
+
WebAssetNotice(
|
|
180
|
+
display_name="Inter font package",
|
|
181
|
+
version="Fontsource package 5.2.8",
|
|
182
|
+
license_expression="OFL-1.1",
|
|
183
|
+
source_url=ASSET_URLS["inter"],
|
|
184
|
+
bundled_path="vendor/fonts/inter/",
|
|
185
|
+
notice="Font package metadata identifies Google Inc. as the author.",
|
|
186
|
+
license_text_anchors=("license-ofl-1.1",),
|
|
187
|
+
),
|
|
188
|
+
WebAssetNotice(
|
|
189
|
+
display_name="Noto Sans JP font package",
|
|
190
|
+
version="Fontsource package 5.2.9",
|
|
191
|
+
license_expression="OFL-1.1",
|
|
192
|
+
source_url=ASSET_URLS["noto_sans_jp"],
|
|
193
|
+
bundled_path="vendor/fonts/noto-sans-jp/",
|
|
194
|
+
notice="Font package metadata identifies Google Inc. as the author.",
|
|
195
|
+
license_text_anchors=("license-ofl-1.1",),
|
|
196
|
+
),
|
|
197
|
+
)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""Sequence / genome analysis helpers (internal)."""
|
|
2
|
+
|
|
3
|
+
from .collinearity import (
|
|
4
|
+
CollinearityAnchor,
|
|
5
|
+
CollinearityAnchorMode,
|
|
6
|
+
CollinearityBlock,
|
|
7
|
+
CollinearityResult,
|
|
8
|
+
CollinearitySearchScope,
|
|
9
|
+
LosslessCollinearityParameters,
|
|
10
|
+
build_orthogroup_collinearity_blocks,
|
|
11
|
+
convert_collinearity_blocks_to_comparisons,
|
|
12
|
+
iter_collinearity_search_pairs,
|
|
13
|
+
normalize_collinearity_anchor_mode,
|
|
14
|
+
normalize_collinearity_search_scope,
|
|
15
|
+
)
|
|
16
|
+
from .depth import clear_depth_tsv_cache, depth_df, read_depth_tsv
|
|
17
|
+
from .conservation import (
|
|
18
|
+
ConservationLoadResult,
|
|
19
|
+
ConservationSource,
|
|
20
|
+
ConservationTrack,
|
|
21
|
+
load_conservation_sources,
|
|
22
|
+
normalize_conservation_tracks_for_record,
|
|
23
|
+
resolve_conservation_reference_side,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
__all__ = [
|
|
27
|
+
"CollinearityAnchor",
|
|
28
|
+
"CollinearityAnchorMode",
|
|
29
|
+
"CollinearityBlock",
|
|
30
|
+
"CollinearityResult",
|
|
31
|
+
"CollinearitySearchScope",
|
|
32
|
+
"LosslessCollinearityParameters",
|
|
33
|
+
"build_orthogroup_collinearity_blocks",
|
|
34
|
+
"convert_collinearity_blocks_to_comparisons",
|
|
35
|
+
"iter_collinearity_search_pairs",
|
|
36
|
+
"normalize_collinearity_anchor_mode",
|
|
37
|
+
"normalize_collinearity_search_scope",
|
|
38
|
+
"clear_depth_tsv_cache",
|
|
39
|
+
"ConservationLoadResult",
|
|
40
|
+
"ConservationSource",
|
|
41
|
+
"ConservationTrack",
|
|
42
|
+
"depth_df",
|
|
43
|
+
"load_conservation_sources",
|
|
44
|
+
"normalize_conservation_tracks_for_record",
|
|
45
|
+
"read_depth_tsv",
|
|
46
|
+
"resolve_conservation_reference_side",
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
|