Grammar of Scalable Linked Interactive Nucleotide Graphics

Overview

Gosling.js

npm version build status codecov code style: prettier online editor docs

Gosling.js is a declarative grammar for interactive (epi)genomics visualization on the Web.

teaser

โš ๏ธ Please be aware that the grammar of Gosling.js may change to some extent before the first official release.

Why Gosling?

The Gosling's key features compared to existing visualization libraries and grammars are as follows:

  • Encoding/Data Scalability: Gosling scales from whole genomes to single nucleotides via semantic zooming that updates visual encodings dynamically and by using the rendering and data access capabilities of our HiGlass genomics visualization framework.

  • Expressiveness: Gosling is designed to be expressive enough to generate pretty much any visualization of genome-mapped data, which we accomplished by basing the grammar on our taxonomy of (epi)genomics data visualizations.

  • Interactivity: Gosling has intuitive and effective user interactions built in, including zooming and panning and brushing and linking. This enables flexible visualizations that cover a wide range of visual analysis scenarios, like overview + detail views with brushes or comparative views.

Learn More About Gosling

Contributing to Gosling.js

We welcome and greatly appreciate your contribution to this project! Please read CONTRIBUTING.md to find guidelines.

Contact

Team

Citation

L'Yi et al., 2021. โ€œGosling: A Grammar-based Toolkit for Scalable and Interactive Genomics Data Visualization.โ€

@article{lyi2021gosling,
  title={Gosling: A Grammar-based Toolkit for Scalable and Interactive Genomics Data Visualization},
  author={Sehi L'Yi and Qianwen Wang and Fritz Lekschas and Nils Gehlenborg},
  year={2021},
  journal={IEEE Transactions on Visualization and Computer Graphics},
  publisher={IEEE},
  doi={10.1109/TVCG.2021.3114876},
}

License

This project is licensed under the terms of the MIT license.

Comments
  • feat(editor): support javascript editor

    feat(editor): support javascript editor

    image

    Supporting a javascript editor enables:

    • more structured and easy-to-read code, especially for multi-view visualizations
    • comments & annotations in the code example
    opened by wangqianwen0418 14
  • Grammars about the responsive design

    Grammars about the responsive design

    @sehilyi, I am planning to update docs about the responsive design. Going through the responsive examples, I have some thoughts and questions and would like to hear your opinions.

    • I am wondering whether we can specify the conditions using a more unified expression, e.g., something like alt.condtion in altair. Instead of specifying a spec at two different places,
          "layout": "circular",
          "responsiveSpec": [
            {
              "spec": {"layout": "linear"},
              "selectivity": [
                {"measure": "aspectRatio", "operation": "GT", "threshold": 1.5}
              ]
            }
          ],
    

    maybe we can use something like (assuming now the type layout = string|condition)

      "layout": {
        "ifTrue": "linear", 
        "ifFalse": "circular",
        "condition":  {"measure": "aspectRatio", "operation": "GT", "threshold": 1.5}
      }
    
    • the same goes for the responsiveSize. instead of specifying it at two places
    "responsiveSize": {"width": true},
     "width": 400,
    

    do you think it will be more convenient to write the below?

    "width": {
      "ifTrue": 400,
      "ifFalse": "vw", // not sure what is the best way to express the screen size here
      "condition": {"measure": "width", "operation": "GT", "threshold": 1000}
    }
    

    or just "width": "vw" if the width is always the width of the screen.

    This definition is also consistent with the type definition of the visibility object, by considering the default value as "ifTrue": "visible", "ifFalse": "invisible".

    • In a circular layout, the height of a track has no meaning in terms of the number of pixels. Will it be confusing if a user wants a circular chart to respond to the change of (screen) height? What is the proper way to define that?
    enhancement 
    opened by wangqianwen0418 13
  • feat: replace webpack/webpack-dev-server with vite

    feat: replace webpack/webpack-dev-server with vite

    Builds off of #494, but replaces the webpack-dev-server/build with vite. I think ideally we could just use Vite to unify the build, but the build.js script gives us better control over the "package".

    opened by manzt 11
  • feat: replace jest with vitest

    feat: replace jest with vitest

    Vitest is a unit-testing framework that is intended to be a drop-in replacement for Jest. The main benefit is that is reuses Vite's config, transformers, resolvers, and plugins. This means that the testing environment more closely mimics the final build, and we no longer need to worry about making things work in Jest and our build.

    opened by manzt 8
  • feat!: merge axis channels (e.g., `x` and `xe`); group channels as an `encoding` property

    feat!: merge axis channels (e.g., `x` and `xe`); group channels as an `encoding` property

    Fix #506 Fix #482

    Summary of Changes

    In addition to #533, this PR changes grammar around visual channels.

    This PR contains a relatively large amount of changes, but many parts are changes on the examples (src/example/*.ts) and tests (*.test.ts) reflecting the grammatical changes that have been introduced in this PR. This PR introduces the following major grammatical changes.

    C1. Axis channels are combined

    from:

    x: { field: 'start', type: 'genomic', axis: 'top', linkingId: 'overview' },
    xe: { field: 'end', type: 'genomic', axis: 'top' }
    

    to:

    x: { startField: 'start', endField: 'end', type: 'genomic', axis: 'top', linkingId: 'overview' }
    

    This way, axis channels convey a more clear meaning:

    • multiple axes do not exist for the x-axis (i.e., x and xe) or the y-axis (i.e., y and ye).
    • Instead, multiple fields can be used for a single axis (i.e., startField and endField in an x channel).

    More importantly, this prevents users from making uncertain specs, such as

    • using different types for the single axis (e.g., nominal field for y and then quantitative field for ye)
    • defining properties multiple times for a single axis that should be defined only once (e.g., axis: 'top' or linkingId: 'overview'):
    x: { field: 'start', type: 'genomic', axis: 'top', linkingId: 'overview' },
    xe: { field: 'end', type: 'genomic', axis: 'bottom', linkingId: 'ab' }
    

    C2. The encoding property is added

    Track now has a encoding property that wraps all channels:

    tracks: [{
       mark: 'line',
       encoding: {
          x: { startField: 'start', endField: 'end', type: 'genomic', axis: 'top', linkingId: 'overview' },
          color: { value: 'black' }
       },
       width: 100,
       height: 30
    }]
    

    This is consistent with the Vega-Lite and is beneficial in gos (https://github.com/gosling-lang/gos/issues/34#issuecomment-904798525).

    C3. TemplateTrack modified accordingly

    As we made a grammatical change to channels (i.e., x and xe --> x: { startField: ...., endField: ..., ...}), the template mapper logic was changed as well:

    // part of a TemplateTrackDef spec
    x: { base: { startField: 'startPosition', endField: 'endPosition', ... }
    

    C4. DataTrack is removed entirely

    We did not support DataTrack anymore, but it was still included in our code. I removed all related codes. We could support a similar feature with Track Templates in Gosling in the future:

    { template: 'vector-track', data: { ... }, width: 1000, height: 30}
    

    To Test Locally

    Run the following command to update your local gosling.schema.json since this PR updates the grammar.

    yarn schema
    

    BREAKING CHANGE

    This PR introduces breaking changes. To change your existing specification for previous versions (~v0.9.9), you need to change your spec following the instructions described below.

    If you are using multiple fields for a single axis in your spec:

    x: { field: 'start', type: 'genomic', axis: 'top', linkingId: 'overview' },
    xe: { field: 'end', type: 'genomic', axis: 'top' }
    

    You need to combine them to a single axis using up to four fields (i.e., startField, endField, startField2, endField2):

    x: { startField: 'start', endField: 'end', type: 'genomic', axis: 'top', linkingId: 'overview' }
    

    Single-field axes are not changed (i.e., field properties are used):

    x: { field: 'position', type: 'genomic', axis: 'top', linkingId: 'overview' }
    

    Add an encoding property to all tracks.

    From:

    tracks: [{
       data: ...,
       mark: ...,
       x: ...,
       y: ...,
       ...
    }]
    

    To:

    tracks: [{
       data: ...,
       mark: ...,
       encoding: {
          x: ...,
          y: ...,
          ...
       },
       ...
    }]
    

    TODO

    • [x] Update all example specs that use multiple fields for a single axis
    • [x] Update encoding parts of all marks
    • [x] Update all tests
    • [ ] Rename '|xe - x|' threshold to 'assignedWidth'?
    opened by sehilyi 8
  • zoomToGene doesn't work as expected

    zoomToGene doesn't work as expected

    There are 3 views in the following spec: 1) ideogram, 2) CN point plot, 3) gene annotation. The views are linked using the same linkingId. zoomToGene jumps to a specific gene, the first views go to the right region, but the last one keeps intact.

    I built a search bar for jumping to any region. How can I use higlass auto-completion to get gene suggestion and then go to the corresponding location?

    export const getOverviewSpec = (hoveredGene, hotGenes, enabled) => {
      return {
        "arrangement": "vertical",
        "title": "Large Rearrangment Auditing",
        "assembly": "hg19",
        "spacing": 0,
        "views": [
          {
            //"xDomain": { "chromosome": "1" },
            "linkingId": "mychoics_plus",
            "width": 1000,
            "height": 20, // reduce the track height
            "data": {
              "url": "https://dataviz.brbiotech.com/shared/cytoBand.hg19.tsv",
              "type": "csv",
              "separator": "\t",
              "chromosomeField": "chrom",
              "genomicFields": ["chromStart", "chromEnd"]
            },
            "x": {
              "field": "chromStart",
              "type": "genomic",
              "axis": "none"
            },
            "xe": { "field": "chromEnd", "type": "genomic" },
            "alignment": "overlay",
            "tracks": [
              {
                id: "ov-track-1",
                "mark": "text",
                "dataTransform": [{ "type": "filter", "field": "gieStain", "oneOf": ["acen"], "not": true }],
                "text": { "field": "name", "type": "nominal" },
                "color": {
                  "field": "gieStain",
                  "type": "nominal",
                  "domain": ["gneg", "gpos25", "gpos50", "gpos75", "gpos100", "gvar"],
                  "range": ["black", "black", "black", "black", "white", "black"]
                },
                "visibility": [
                  {
                    "operation": "less-than",
                    "measure": "width",
                    "threshold": "|xe-x|",
                    "transitionPadding": 10,
                    "target": "mark"
                  }
                ],
                "style": { "textStrokeWidth": 0 }
              },
              {
                id: "ov-track-2",
                "mark": "rect",
                "dataTransform": [{ "type": "filter", "field": "gieStain", "oneOf": ["acen"], "not": true }],
                "color": {
                  "field": "gieStain",
                  "type": "nominal",
                  "domain": ["gneg", "gpos25", "gpos50", "gpos75", "gpos100", "gvar"],
                  "range": [
                    "white",
                    "#D9D9D9",
                    "#979797",
                    "#636363",
                    "black",
                    "#A0A0F2"
                  ]
                }
              },
              {
                id: "ov-track-3",
                "mark": "triangleRight",
                "dataTransform": [
                  { "type": "filter", "field": "gieStain", "oneOf": ["acen"] },
                  { "type": "filter", "field": "name", "include": "q" }
                ],
                "color": { "value": "#B40101" }
              },
              {
                id: "ov-track-4",
                "mark": "triangleLeft",
                "dataTransform": [
                  { "type": "filter", "field": "gieStain", "oneOf": ["acen"] },
                  { "type": "filter", "field": "name", "include": "p" }
                ],
                "color": { "value": "#B40101" }
              }
            ],
            "size": { "value": 20 },
            "stroke": { "value": "gray" },
            "strokeWidth": { "value": 0.5 }
          },
          {
            alignment: "overlay",
            "linkingId": "mychoics_plus",
            genomePositionSearchBox: {
                autocompleteServer: 'https://higlass.io/api/v1',
                autocompleteId: 'P0PLbQMwTYGy-5uPIQid7A',
                chromInfoServer: 'https://higlass.io/api/v1',
                chromInfoId: 'hg19'
            },
    				data: {
    					url: "https://dataviz.brbiotech.com/RS20210907013FFP.panelData.tsv",
    					type: "csv",
    					separator: "\t",
    					sampleLength: 10000,
    					chromosomeField: "chr",
    					genomicFields: ["uniProbeStart"],
    					quantitativeFields: ["CN"]
    				},
            mark: "point",
            x: { field: "uniProbeStart", type: "genomic" },
            y: { field: "CN", type: "quantitative" },
            size: { value: 4 },
            tooltip: [
              { field: "chr", type: "nominal", alt: "Chromosome" },
              { field: "uniProbeStart", type: "genomic", alt: "Position" },
              { field: "gene", type: "nominal", alt: "Gene" },
            ],
            opacity: { value: 0.5 },
            tracks: [
              {
                id: "ov-track-5",
                color: { value: "#C7D2FE" },
                //overlayOnPreviousTrack: true,
              },
              { 
                "id": "ov-track-6",
                dataTransform: [
                  { type: 'filter', field: 'gene', oneOf: [hoveredGene] }
                ],
                "color": { "value": "#6366F1" },
                //overlayOnPreviousTrack: true,
              },
              {
                id: "ov-track-6-2",
                dataTransform: [
                  { type: 'filter', field: 'gene', oneOf: hotGenes }
                ],
                "color": {
                  "field": "gene",
                  "type": "nominal",
                  legend: true,
                  "domain": hotGenes,
                },
                //overlayOnPreviousTrack: true,
              }
            ],
            style: { inlineLegend: true },
            width: 1000,
            height: 400
          },
          {
            "alignment": "overlay",
            "title": "hg19 | Genes",
            "linkingId": "mychoics_plus",
            //"xDomain": { "chromosome": "1" },
            "data": {
              "url": "https://higlass.io/api/v1/tileset_info/?d=OHJakQICQD6gTD7skx4EWA",
              "type": "beddb",
              "genomicFields": [
                {"index": 1, "name": "start"},
                {"index": 2, "name": "end"}
              ],
              "valueFields": [
                {"index": 5, "name": "strand", "type": "nominal"},
                {"index": 3, "name": "name", "type": "nominal"}
              ],
              "exonIntervalFields": [
                {"index": 12, "name": "start"},
                {"index": 13, "name": "end"}
              ]
            },
            "tracks": [
              {
                id: "ov-track-8",
                "dataTransform": [
                  {"type": "filter", "field": "type", "oneOf": ["gene"]}
                ],
                "mark": "text",
                "text": {"field": "name", "type": "nominal"},
                "x": {"field": "start", "type": "genomic"},
                "xe": {"field": "end", "type": "genomic"},
                "style": {"dy": -15, "outline": "black", "outlineWidth": 0}
              },
              {
                id: "ov-track-7",
                "dataTransform": [
                  {"type": "filter", "field": "type", "oneOf": ["gene"]},
                  {"type": "filter", "field": "strand", "oneOf": ["+"]}
                ],
                "mark": "triangleRight",
                "x": {"field": "end", "type": "genomic", "axis": "none"},
                "size": {"value": 15}
              },
              {
                id: "ov-track-9",
                "dataTransform": [
                  {"type": "filter", "field": "type", "oneOf": ["gene"]},
                  {"type": "filter", "field": "strand", "oneOf": ["-"]}
                ],
                "mark": "triangleLeft",
                "x": {"field": "start", "type": "genomic"},
                "size": {"value": 15},
                "style": {
                  "align": "right",
                  "outline": "black",
                  "outlineWidth": 0
                }
              },
              {
                id: "ov-track-10",
                "dataTransform": [
                  {"type": "filter", "field": "type", "oneOf": ["exon"]}
                ],
                "mark": "rect",
                "x": {"field": "start", "type": "genomic"},
                "size": {"value": 15},
                "xe": {"field": "end", "type": "genomic"}
              },
              {
                id: "ov-track-11",
                "dataTransform": [
                  {"type": "filter", "field": "type", "oneOf": ["gene"]},
                  {"type": "filter", "field": "strand", "oneOf": ["+"]}
                ],
                "mark": "rule",
                "x": {"field": "start", "type": "genomic"},
                "strokeWidth": {"value": 2},
                "xe": {"field": "end", "type": "genomic"},
                "style": {
                  "linePattern": {"type": "triangleRight", "size": 3.5},
                  "outline": "black",
                  "outlineWidth": 0
                }
              },
              {
                id: "ov-track-12",
                "dataTransform": [
                  {"type": "filter", "field": "type", "oneOf": ["gene"]},
                  {"type": "filter", "field": "strand", "oneOf": ["-"]}
                ],
                "mark": "rule",
                "x": {"field": "start", "type": "genomic"},
                "strokeWidth": {"value": 2},
                "xe": {"field": "end", "type": "genomic"},
                "style": {
                  "linePattern": {"type": "triangleLeft", "size": 3.5},
                  "outline": "black",
                  "outlineWidth": 0
                }
              }
            ],
            "row": {
              "field": "strand",
              "type": "nominal",
              "domain": ["+", "-"]
            },
            "color": {
              "field": "strand",
              "type": "nominal",
              "domain": ["+", "-"],
            },
            "visibility": [
              {
                "operation": "less-than",
                "measure": "width",
                "threshold": "|xe-x|",
                "transitionPadding": 10,
                "target": "mark"
              }
            ],
            "width": 1000,
            "height": 100
          },
        ]
      };
    };
    
    
    bug๐Ÿ› documentation 
    opened by zhangzhen 8
  • feat: support native matrix visualization

    feat: support native matrix visualization

    This PR adds native support of matrix data. Example of drawing matrix using matrix format data:

    {
         data: {
              url: GOSLING_PUBLIC_DATA.matrixMicroC,
              type: 'matrix'
          },
          mark: 'bar',
          x: { field: 'xs', type: 'genomic', axis: 'none' },
          xe: { field: 'xe', type: 'genomic', axis: 'none' },
          y: { field: 'ys', type: 'genomic', axis: 'none' },
          ye: { field: 'ye', type: 'genomic', axis: 'none' },
          color: { field: 'value', type: 'quantitative', range: 'warm' },
          width: 600,
          height: 600
    }
    

    Screenshots

    Screen Shot 2021-12-16 at 5 48 01 PM

    https://user-images.githubusercontent.com/9922882/146459349-a7f10f91-2476-40f6-8f3e-e99b488946bc.mov

    There are multiple follow up things to do:

    • [ ] Axis on 2D tracks seem to be broken. This needs to be fixed.
    • [ ] Improving the rendering performance. Zooming is slow with dense Hi-C data.
    • [ ] Supporting log scale color (e.g., color: { ..., scale: 'log' })
    • [ ] Supporting horizontal rules. Currently, we support vertical rules (see the MATRIX example).
    • [ ] Somehow, the right-top part along the diagonal is zero values. Need to confirm if data itself only contains the left-bottom part to reduce performance. In this case, we need to properly manipulate data when loaded.
    opened by sehilyi 7
  • Support custom chromsizes

    Support custom chromsizes

    Adding a custom-defined genome is easy for higlass, while doing this is hard for gosling. Could you please guide me in modifying the source code for gosling to achieve this? After finishing the modification, zooming, panning and zoom_to are expected to function correctly. Besides, sequence abstraction can be easily implemented by add a custom-defined genome to gosling.

    enhancement P5 D? 
    opened by zhangzhen 6
  • Axis w/o

    Axis w/o "chr"?

    Hi,

    I'm playing around with using gosling to display information w/o a chromosome (a random contig and annotations), and was wondering if it's possible to remove the "chrN: " from the axis? e.g.

    image

    Thanks!

    enhancement question 
    opened by tshauck 6
  • More concise (text-based) columnar data definitions

    More concise (text-based) columnar data definitions

    Apologies for the lack on context behind the choice, but I don't know if I understand the motivation for including quantitativeFields, genomicFields, and chromosomeField in the CSV data definition. These fields aren't marked as required in the docs, but every example I've seen includes their use.

    Motivation

    To my knowledge, these columns inform how the CSV is parsed but this interpretation is also captured elsewhere in the track definition (type: genomic, quantitative, categorical, etc), so really it's an abstraction leak. I see how the chromosomeField is currently necessary, but I'm curious if that information could also be captured in the "genomic" type rather than the data definition.

    As a motivating example, what is the expected behavior if I use a field type that differs from the data definition? I assume the track type takes precedent, and if so we don't need the data definition since a type is required on all tracks.

    import gosling as gos
    
    data = gos.csv('./data.csv', genomicFields=['start', 'end'], chromosomeField='chr', quantitativeFields=['value'])
    
    gos.Track(data).encode(x=gos.Channel('start:G'), y=gos.Channel('value:N')) # value doesn't match data definition
    

    Proposal

    Remove quantitativeFields, genomicFields, and maybe chromosomeField from CSV definition. This would make specifying CSV data more concise and avoid the case where data definition does not match track definition.

    import gosling as gos
    import pandas as pd
    
    data = gos.csv('./data.csv')
    data = pd.read_csv('./data.csv').gos.csv() # no arguments needed
    

    Approach

    Use build-in (d3?) auto-parsing of CSV into memory. We can coerce any data-types that are mis-interpreted based on the track definition. Perhaps as an extension to #575, we can think about if there is a way to include chromosome field in the X encoding definition.

    interface X {
      type: 'genomic';
      // tuples represent chromosome position OR chromosome region
      field: [chrom: string, start: string] | [chrom: string, start: string, end: string];
      // ...
    }
    
    documentation enhancement 
    opened by manzt 5
  • feat: more precise channel types (e.g., `X`, `Y`, and `Color` instead of `Channel`)

    feat: more precise channel types (e.g., `X`, `Y`, and `Color` instead of `Channel`)

    This PR uses more precise types of individual channels, like X, Y, and Color. This allows checking gosling.js specs more precisely, e.g., row cannot be encoded with a genomic field:

    row: { ..., type: "genomic" } // Error
    

    or x is always mapped to a genomic field:

    x: { ..., type: "quantitative" } // Error
    

    Genomic domain is used for only x-axis channels:

    y: { ..., domain: { chromosome: '1' } } // Error
    

    Towards #506

    opened by sehilyi 5
  • chore(deps): bump json5 from 1.0.1 to 1.0.2

    chore(deps): bump json5 from 1.0.1 to 1.0.2

    Bumps json5 from 1.0.1 to 1.0.2.

    Release notes

    Sourced from json5's releases.

    v1.0.2

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295). This has been backported to v1. (#298)
    Changelog

    Sourced from json5's changelog.

    Unreleased [code, diff]

    v2.2.3 [code, diff]

    v2.2.2 [code, diff]

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).

    v2.2.1 [code, diff]

    • Fix: Removed dependence on minimist to patch CVE-2021-44906. (#266)

    v2.2.0 [code, diff]

    • New: Accurate and documented TypeScript declarations are now included. There is no need to install @types/json5. (#236, #244)

    v2.1.3 [code, diff]

    • Fix: An out of memory bug when parsing numbers has been fixed. (#228, #229)

    v2.1.2 [code, diff]

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • chore(deps): bump decode-uri-component from 0.2.0 to 0.2.2

    chore(deps): bump decode-uri-component from 0.2.0 to 0.2.2

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • chore(deps): bump qs from 6.10.1 to 6.11.0

    chore(deps): bump qs from 6.10.1 to 6.11.0

    Bumps qs from 6.10.1 to 6.11.0.

    Changelog

    Sourced from qs's changelog.

    6.11.0

    • [New] [Fix] stringify: revert 0e903c0; add commaRoundTrip option (#442)
    • [readme] fix version badge

    6.10.5

    • [Fix] stringify: with arrayFormat: comma, properly include an explicit [] on a single-item array (#434)

    6.10.4

    • [Fix] stringify: with arrayFormat: comma, include an explicit [] on a single-item array (#441)
    • [meta] use npmignore to autogenerate an npmignore file
    • [Dev Deps] update eslint, @ljharb/eslint-config, aud, has-symbol, object-inspect, tape

    6.10.3

    • [Fix] parse: ignore __proto__ keys (#428)
    • [Robustness] stringify: avoid relying on a global undefined (#427)
    • [actions] reuse common workflows
    • [Dev Deps] update eslint, @ljharb/eslint-config, object-inspect, tape

    6.10.2

    • [Fix] stringify: actually fix cyclic references (#426)
    • [Fix] stringify: avoid encoding arrayformat comma when encodeValuesOnly = true (#424)
    • [readme] remove travis badge; add github actions/codecov badges; update URLs
    • [Docs] add note and links for coercing primitive values (#408)
    • [actions] update codecov uploader
    • [actions] update workflows
    • [Tests] clean up stringify tests slightly
    • [Dev Deps] update eslint, @ljharb/eslint-config, aud, object-inspect, safe-publish-latest, tape
    Commits
    • 56763c1 v6.11.0
    • ddd3e29 [readme] fix version badge
    • c313472 [New] [Fix] stringify: revert 0e903c0; add commaRoundTrip option
    • 95bc018 v6.10.5
    • 0e903c0 [Fix] stringify: with arrayFormat: comma, properly include an explicit `[...
    • ba9703c v6.10.4
    • 4e44019 [Fix] stringify: with arrayFormat: comma, include an explicit [] on a s...
    • 113b990 [Dev Deps] update object-inspect
    • c77f38f [Dev Deps] update eslint, @ljharb/eslint-config, aud, has-symbol, tape
    • 2cf45b2 [meta] use npmignore to autogenerate an npmignore file
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • gos.overlay Fails when

    gos.overlay Fails when "background" parameter is filled in.

    Here is a screenshot:

    image

    When the "background" parameter is set in mark_line(), the gos.overlay() does not overlay the marks inside "tracks". Instead it does a simple line graph using the LAST gosling track inside "tracks"

    Using streamlit, the output looks like this. image

    When I remove the "background parameter from mark_line() as such:

    image

    I get the intended display. However, if I want the background to be anything other than white I cannot.

    image

    bug๐Ÿ› P5 
    opened by AlexAdrian-Hamazaki 1
  • Ability to label Vertically Aligned views or Track Stacks

    Ability to label Vertically Aligned views or Track Stacks

    Hi, I am currently using the python implementation of gos. As far as I'm aware, I don't believe there is an option to "label" a set of vertical views, or a several vertically stacked tracks. Please correct me if I'm wrong!

    This could be a potentially important feature in the future.

    enhancement 
    opened by AlexAdrian-Hamazaki 2
Releases(v0.9.28)
Owner
Gosling
The data visualization grammar of scalable linked interactive nucleotide graphics. A project of the Gehlenborg Lab at @hms-dbmi.
Gosling
A module to prevent invites and joins to Matrix rooms by checking the involved server(s)' domain.

Synapse Domain Rule Checker A module to prevent invites and joins to Matrix rooms by checking the involved server(s)' domain. Installation From the vi

matrix.org 4 Oct 24, 2022
Python / C++ based particle reaction-diffusion simulator

ReaDDy (Reaction Diffusion Dynamics) is an open source particle based reaction-diffusion simulator that can be configured and run via Python. Currentl

ReaDDy 46 Dec 09, 2022
A new mini-batch framework for optimal transport in deep generative models, deep domain adaptation, approximate Bayesian computation, color transfer, and gradient flow.

BoMb-OT Python3 implementation of the papers On Transportation of Mini-batches: A Hierarchical Approach and Improving Mini-batch Optimal Transport via

Khai Ba Nguyen 18 Nov 14, 2022
Ronin - Create Fud Meterpreter Payload To Hack Windows 11

Ronin - Create Fud Meterpreter Payload To Hack Windows 11

Dj4w3d H4mm4di 6 May 09, 2022
Code for the manim-generated scenes used in 3blue1brown videos

This project contains the code used to generate the explanatory math videos found on 3Blue1Brown. This almost entirely consists of scenes generated us

Grant Sanderson 4.1k Jan 02, 2023
Starscape is a Blender add-on for adding stars to the background of a scene.

Starscape Starscape is a Blender add-on for adding stars to the background of a scene. Features The add-on provides the following features: Procedural

Marco Rossini 5 Jun 24, 2022
Play tic-tac-toe in PowerPoint

The presentation has around 6,000 slides representing every possible game state (and some impossible ones, since I didn't check for wins or ties). You play by clicking on the squares, which are hyper

Jesse Li 3 Dec 18, 2021
Meower a social media platform written in Scratch 3.0 and Python

Meower Meower is a social media platform written in Scratch 3.0 and Python, ported to HTML for self-hosting. Try Beta 4.6 Changelog for 4.6 Start impl

Meower Media Co. 23 Dec 02, 2022
A Python3 script to decode an encoded VBScript file, often seen with a .vbe file extension

vbe-decoder.py Decode one or multiple encoded VBScript files, often seen with a .vbe file extension. Usage usage: vbe-decoder.py [-h] [-o output] file

John Hammond 147 Nov 15, 2022
A tool converting rpk (่ฎฐไนŽ) to apkg (Anki Package)

RpkConverter This tool is used to convert rpk file to Anki apkg. ๅฆ‚ๆžœ้‡ๅˆฐไปปไฝ•้—ฎ้ข˜๏ผŒ่ฏทๅ‘่ตทissue๏ผŒๅนถๆ่ฟฐๆƒ…ๅ†ตใ€‚ๅฆ‚ๆžœ่ฝฌๆขrpkๅ‡บ็Žฐ้—ฎ้ข˜๏ผŒ่ฏทๅฐ†ๆ–‡ไปถๅ‘ๅˆฐ้‚ฎ็ฎฑ ssqyang [AT] outlook.com๏ผŒๆˆ‘ไผšdebugๅนถไฟฎๅค้—ฎ้ข˜ใ€‚ ไธ‹

9 Nov 01, 2021
Markov Chain Composer

Markov Chain Composer Using Markov Chain to represent relationships between words in song lyrics and then generating new lyrics.. ahem interpretive po

Kylie 85 Dec 09, 2022
March-madness - March Madness results 1985-2021

march-madness Results for all 2,268 NCAA Division I Men's Basketball Tournament games since the modern format was introduced in 1985. Includes years,

Darik Harter 2 Feb 26, 2022
Albert launcher extension for rolling dice.

dice-roll-albert-ext Extension for rolling dice in Albert launcher Installation Locate the modules directory in the Python extension data directory. T

Jonah Lawrence 1 Nov 18, 2021
My attempt at this years Advent of Code!

Advent-of-code-2021 My attempt at this years Advent of Code! day 1: ** day 2: ** day 3: ** day 4: ** day 5: ** day 6: ** day 7: ** day 8: * day 9: day

1 Jul 06, 2022
Data Poisoning based on Adversarial Attacks using Non-Robust Features

Data Poisoning based on Adversarial Attacks using Non-Robust Features Usage python main.py [-h] [--gpu | -g GPU] [--eps |-e EPSILON] [--pert | -p PER

Jonathan E. 1 Nov 02, 2021
A Python wrapper for Matrix Synapse admin API

Synapse-admin-api-python A Python wrapper for Matrix Synapse admin API. Versioning This library now supports up to Synapse 1.45.0, any Admin API intro

Knugi 9 Sep 28, 2022
This project intends to take the user's CEP (brazilian adress code) and return the local in which the CEP is placed.

This project aims to simply return the CEP's (the brazilian resident adress code) User of the application. The project uses a request and passes on to

Daniel Soares Saldanha 4 Nov 17, 2021
A C-like hardware description language (HDL) adding high level synthesis(HLS)-like automatic pipelining as a language construct/compiler feature.

โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ• โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆ

Julian Kemmerer 391 Jan 01, 2023
AdventOfCode 2021 solutions from the Devcord server

adventofcode-21 Ein Sammel-Repository fรผr Advent of Code 2021-Lรถsungen der deutschen DevCord-Community. A repository collecting Advent of Code 2021 so

Devcord 12 Aug 26, 2022
InfiniPy has some neat features - like the endpoint for function

InfiniPy has some neat features - like the endpoint for function

ZeroTwo 7 Nov 20, 2022