Skip to Content
ReferenceAPILoading data

Loading data

A loader reads what it can from the file and takes the rest as declarations. What it inferred, and from where, is recorded on the result: dataset.dimension("reference").source says declared or names the header it came from.

reference

reference( path: 'str', *, organism: 'str | Sequence[str] | None' = None, build: 'str | None' = None, frame: 'tuple[str, int] | None' = None, release: 'str | None' = None, ) -> 'Reference'

Load a reference FASTA, inferring its contigs.

Each contig’s MD5 is computed here, over the uppercased sequence, as the SAM specification defines @SQ M5. Computing it ourselves is what lets us check an aligner’s claim about which reference it used.

Parameters

ParameterDescription
pathThe FASTA, optionally gzipped.
organismThe organism, e.g. HIV-1. A FASTA cannot record this. Give a list for data that is about more than one organism, such as a host-pathogen dataset, a metagenome or a xenograft; two sets of organisms are equal when they name the same ones, whatever the order.
buildA human label such as HXB2 or hg38. Display only — reference identity never rests on a label, so two files both labelled hg38 still fail to match if their contigs disagree.
frameWhich coordinate frame this reference’s positions are numbered along, as (frame, first): base 1 of this file is base first of frame, 1-based, so a whole genome declares ("K03455", 1) and the usual pol slice declares ("K03455", 2085). Declared because no FASTA records it. A 3,012-base slice of K03455 and a 3,012-base genome of something else are identical from the outside, and a step whose own coordinates are fixed — lg.hivdb.interpret holds the HIV-1 gene windows as positions in K03455 — cannot tell them apart without being told. Leave it unset for a whole-genome reference such as HXB2 itself, which is recognised by its length; a step that needs a frame and cannot work one out asks for it by name.
releaseWhich release of the reference this is, e.g. GRCh38.p14 or Ensembl 110. A FASTA cannot record it, and two releases of one build can differ in sequence while sharing a name. It is compared by equality: two references declare the same release only if their labels are identical after trimming, so GRCh38.p13 and GRCh38.p14 do not match.

Returns

The loaded reference.

Raises

RaisesWhen
ValueErrorIf organism names no organism (an empty list, or only blank names), or release is blank.
TypeErrorIf organism is neither a string nor a sequence of strings.
LoadErrorIf the file cannot be read or is not a FASTA.

reads

reads( r1: 'str', r2: 'str | None' = None, *, organism: 'str | Sequence[str] | None' = None, sample: 'str | None' = None, ) -> 'Reads'

Load sequencing reads, inferring what a FASTQ can tell us.

The quality encoding comes from the observed score range, and comes back unknown rather than guessed when the scores fall in the range Phred+33 and Phred+64 share. Guessing would shift every quality value by 31, which no downstream tool would notice.

Parameters

ParameterDescription
r1The reads, or the first mate of a pair. Optionally gzipped.
r2The second mate, if the reads are paired.
organismThe organism. A FASTQ does not record it. Give a list for data that is about more than one organism, such as a host-pathogen dataset, a metagenome or a xenograft; two sets of organisms are equal when they name the same ones, whatever the order.
sampleThe sample identifier, overriding the one taken from the filename.

Returns

The loaded reads.

Raises

RaisesWhen
ValueErrorIf organism names no organism: an empty list, or only blank names.
TypeErrorIf organism is neither a string nor a sequence of strings.
LoadErrorIf a file cannot be read or is not a FASTQ.

samples

samples( pattern: 'str', *, paired: 'bool' = False, organism: 'str | Sequence[str] | None' = None, ) -> 'Samples'

Find sequencing runs and group them into samples.

Parameters

ParameterDescription
patternA glob, e.g. data/*.fastq.gz. Matches are taken in sorted order, so the samples come back in a stable order on every machine.
pairedWhether the files are mates of a pair. When true, they are paired by filename — <sample>_1/<sample>_2 or <sample>_R1/<sample>_R2 — and a file whose mate cannot be identified is an error rather than a guess. Mis-pairing two samples’ files would produce results for a mixture of two people without anything crashing.
organismThe organism. A FASTQ does not record it. Give a list for data that is about more than one organism, such as a host-pathogen dataset, a metagenome or a xenograft; two sets of organisms are equal when they name the same ones, whatever the order.

Returns

The samples, in the order their files appeared. Use .map() to apply a chain of steps to every one of them.

Raises

RaisesWhen
ValueErrorIf organism names no organism: an empty list, or only blank names.
TypeErrorIf organism is neither a string nor a sequence of strings.
LoadErrorIf a file cannot be read, or the files cannot be grouped into whole samples.

alignment

alignment( path: 'str', *, organism: 'str | Sequence[str] | None' = None, build: 'str | None' = None, samples: 'list[str] | None' = None, ) -> 'Alignment'

Load a SAM or BAM, inferring dimensions from its header.

Both containers yield identical dimensions: a lossless samtools view -b changes nothing biological.

Parameters

ParameterDescription
pathThe alignment file.
organismThe organism. SAM and BAM headers do not record it. Give a list for data that is about more than one organism, such as a host-pathogen dataset, a metagenome or a xenograft; two sets of organisms are equal when they name the same ones, whatever the order.
buildA human label for the reference build. Display only.
samplesThe sample identifiers, overriding the @RG SM tags.

Returns

The loaded alignment.

Raises

RaisesWhen
ValueErrorIf organism names no organism: an empty list, or only blank names.
TypeErrorIf organism is neither a string nor a sequence of strings.
LoadErrorIf the file cannot be read or is not a SAM/BAM.

variants

variants( path: 'str', *, organism: 'str | Sequence[str] | None' = None, build: 'str | None' = None, samples: 'list[str] | None' = None, ) -> 'Variants'

Load a VCF, inferring dimensions from its header.

Identity comes from ##contig alone. ##reference is deliberately not trusted: it holds a path, and two runs pointing at /refs/genome.fa can be pointing at different genomes.

Parameters

ParameterDescription
pathThe VCF, optionally gzipped or BGZF-compressed.
organismThe organism. A VCF does not record it. Give a list for data that is about more than one organism, such as a host-pathogen dataset, a metagenome or a xenograft; two sets of organisms are equal when they name the same ones, whatever the order.
buildA human label for the reference build. Display only.
samplesThe sample identifiers, overriding the header columns.

Returns

The loaded variant calls.

Raises

RaisesWhen
ValueErrorIf organism names no organism: an empty list, or only blank names.
TypeErrorIf organism is neither a string nor a sequence of strings.
LoadErrorIf the file cannot be read or is not a VCF.

intervals

intervals( path: 'str', *, format: 'str | None' = None, organism: 'str | Sequence[str] | None' = None, build: 'str | None' = None, ) -> 'Intervals'

Load genomic intervals from a BED or GFF, inferring what they say.

The coordinate convention comes from the format — BED is 0-based half-open, GFF and GTF are 1-based closed — and that is the point: a tool handed the wrong one produces results that are off by one base and look fine.

Contigs come from the records, so they carry no length and no checksum. They are still compared against a reference by name, because comparing what is present is what makes these files checkable at all.

Parameters

ParameterDescription
pathThe BED, GFF3 or GTF, optionally gzipped.
formatbed, gff, gff3 or gtf, when the filename does not say. A format is never guessed: guessing it wrong shifts every interval by a base.
organismThe organism. An interval file does not record it. Give a list for data that is about more than one organism, such as a host-pathogen dataset, a metagenome or a xenograft; two sets of organisms are equal when they name the same ones, whatever the order.
buildA human label for the reference build. Display only.

Returns

The loaded intervals.

Raises

RaisesWhen
ValueErrorIf organism names no organism: an empty list, or only blank names.
TypeErrorIf organism is neither a string nor a sequence of strings.
LoadErrorIf the file cannot be read, is not in the format given, or its format cannot be told from its name.

entity_set

entity_set( path: 'str', *, id_column: 'str' = 'id', organism: 'str | Sequence[str] | None' = None, identifier_namespace: 'str | None' = None, subject: 'str | None' = None, release: 'str | None' = None, ) -> 'EntitySet'

Load a set of genes or proteins from a TSV with a header.

The first type here that holds no sequence. What it carries instead is the identifier space its names live in, which is the dimension it exists for: a list of HGNC symbols joined to a table of Ensembl IDs overlaps in nothing, and until now nothing said so.

Parameters

ParameterDescription
pathThe TSV, optionally gzipped. It must have a header row.
id_columnThe column holding the identifiers. Every other column is an attribute, carried without being read.
organismThe organism these entities belong to. A gene list does not record it. Give a list for data about more than one organism; two sets of organisms are equal when they name the same ones, whatever the order.
identifier_namespaceWhich space the identifiers are in, such as HGNC symbol, Ensembl gene, Entrez gene or UniProt accession — or whatever an in-house list calls its own spelling, since a curated set’s names are a space too. Leave it out and the space is read off the identifiers themselves, but only where every one of them matches a single known pattern: a file mixing two spaces, a file with no rows, and a file holding one name the engine cannot place all come back with the dimension unknown rather than guessed. Declared, it is recorded rather than checked — the engine knows seven spaces and there are more than seven, so it cannot tell a space it has never heard of from a wrong declaration.
subjectWhat the list is about when that is one named thing: a disease, a cell line, a cohort. Compared by equality.
releaseWhich release named these entities, such as HGNC 2026-09 or Ensembl 110. Compared by equality, so HGNC 2026-03 and HGNC 2026-09 do not match — which is the point, because a symbol can mean different genes in two releases.

Returns

The loaded set. Anything the loader noticed about the identifiers — a symbol a spreadsheet has turned into a date, say — is on notes.

Raises

RaisesWhen
ValueErrorIf organism names no organism (an empty list, or only blank names), or if identifier_namespace, subject or release is blank.
TypeErrorIf organism is neither a string nor a sequence of strings.
LoadErrorIf the file cannot be read, has no header row, has no column named id_column, or holds a row its header cannot account for.

ranked_list

ranked_list( path: 'str', *, id_column: 'str' = 'id', organism: 'str | Sequence[str] | None' = None, identifier_namespace: 'str | None' = None, subject: 'str | None' = None, release: 'str | None' = None, ) -> 'RankedList'

Load a ranked list from a TSV with a header, highest rank first.

An entity_set and one more thing: the row order is the result. Rank is the row position, so a ranking reordered is a different ranking and has a different semantic hash — where every other type in Ligase, this one’s own unranked sibling included, treats record order as saying nothing. Ranked differentially-expressed genes, ranked drug targets and a leaderboard of candidates are all this type.

Parameters

ParameterDescription
pathThe TSV, optionally gzipped. It must have a header row, and its rows must be in rank order: best first.
id_columnThe column holding the identifiers. Every other column is an attribute, carried without being read — a score, a rank, an adjusted p-value. A ranked table often has a rank column of its own, so this is more often worth naming than for a gene list.
organismThe organism these entities belong to. A ranked list does not record it. Give a list for data about more than one organism.
identifier_namespaceWhich space the identifiers are in, such as HGNC symbol or Ensembl gene — or whatever an in-house list calls its own spelling. Left out, it is read off the identifiers themselves where every one of them matches a single known pattern, exactly as for entity_set.
subjectWhat the ranking is of when that is one named thing: a disease, a cell line, a cohort. Compared by equality.
releaseWhich release named these entities, such as HGNC 2026-09. Compared by equality, so a ranking named by one release will not score against a list named by another — which is the point, because a symbol can mean different genes in two releases.

Returns

The loaded ranking. Anything the loader noticed about the identifiers — a symbol a spreadsheet has turned into a date, say — is on notes.

Raises

RaisesWhen
ValueErrorIf organism names no organism (an empty list, or only blank names), or if identifier_namespace, subject or release is blank.
TypeErrorIf organism is neither a string nor a sequence of strings.
LoadErrorIf the file cannot be read, has no header row, has no column named id_column, or holds a row its header cannot account for.

knowledge_graph

knowledge_graph( path: 'str', *, organism: 'str | Sequence[str] | None' = None, identifier_namespace: 'str | None' = None, subject: 'str | None' = None, release: 'str | None' = None, source_set: 'Sequence[str] | None' = None, ) -> 'KnowledgeGraph'

Load a knowledge graph of typed nodes and edges from JSON.

The first type here that is assembled rather than measured, and what follows from that is the dimension it exists for. What a graph holds is a function of which evidence sources were folded into it: add DisGeNET to a graph that had Open Targets and a literature-mined set and edges appear, neighbourhoods widen and every propagated score moves. Nothing in the file says which sources went in, so two graphs that differ only in that diff and score against each other without complaint, and the difference reads as biology.

So the sources are a dimension, and this loader reads them off the graph’s own nodes and edges rather than asking you for them.

The JSON is one object with a nodes array and an edges array. A node needs a string id; an edge needs a string source, target and type. A sources list on a node, on an edge, or at the top level is the per-edge provenance the dimension is read from, and a node’s ids are its other names. Everything else either carries is kept without being read, exactly as a gene list’s attribute columns are.

Parameters

ParameterDescription
pathThe JSON file, optionally gzipped.
organismThe organisms the graph’s entities belong to. A graph does not record them, and a graph joining human genes to evidence from model organisms is legitimately about several — give a list for that.
identifier_namespaceWhich space the node ids are in, such as Ensembl gene or HGNC symbol. Left out, it is read off the node ids where every one of them matches a single known pattern; a graph holding more than one kind of entity will not, which is ordinary rather than a fault, and leaves the dimension unknown rather than guessed.
subjectWhat the graph is a graph of when that is one named thing: a disease, a cohort, a therapeutic area. Compared by equality.
releaseWhich release the sources were drawn from, such as Open Targets 24.09. Compared by equality, so 24.06 and 24.09 do not match — which is the point.
source_setThe sources the graph was assembled from. Left out, the loader reads them off the graph. Declare it where the graph’s own names are a mirror, a shard or an internal pipeline stage rather than the source a reader would recognise. Compared exactly, case included: s3://bucket/A.json and s3://bucket/a.json are two objects by specification.

Returns

The loaded graph.

Raises

RaisesWhen
ValueErrorIf organism or source_set names none (an empty list, or only blank names), or if identifier_namespace, subject or release is blank.
TypeErrorIf organism is neither a string nor a sequence of strings.
LoadErrorIf the file cannot be read, is not JSON, has no nodes or edges array, or holds a node with no id or an edge with no source, target or type.

molecule_set

molecule_set( path: 'str', *, organism: 'str | Sequence[str] | None' = None, representation: 'str | None' = None, subject: 'str | None' = None, release: 'str | None' = None, ) -> 'MoleculeSet'

Load a set of molecules from a tab-separated table.

The type the representation dimension exists for. The same substance has different InChIKeys depending on what was done to it before the key was computed: of thirty ordinary drugs measured across six RDKit releases, twelve change key under a different standardisation state, and aspirin has three. So two compound sets prepared differently overlap in nothing for the substances affected while the rest still match, and what comes out is a hit rate that is small, non-zero and reads as poor enrichment rather than as a mismatch.

Nothing about two columns of twenty-seven-character keys says which standardisation produced them. That is what makes this the one dimension in Ligase no glance at the data can catch, and why the engine refuses to join two sets that disagree about it.

The table needs an inchikey column or a smiles column. Every other column is carried without being read, a score or an activity included. A #ligase representation: line above the header is where the dimension is read from, and lg.chem.standardize is what writes one.

Parameters

ParameterDescription
pathThe tab-separated table, optionally gzipped.
organismThe organisms the compounds were measured against. A compound table does not record them.
representationHow this table’s names were arrived at, spelled as inchikey; salt-stripped, charge-neutralised — an identity, then the standardisations applied, or as given for none. Left out, it is read off the table’s own representation line; a table of InChIKeys with no such line leaves the dimension unknown, never as given, because a ChEMBL download is standardised and a vendor list is not, and assuming the weaker state would be inventing the most dangerous of the possible answers.
subjectWhat the set is of when that is one named thing: a target, an assay, a therapeutic area. Compared by equality.
releaseWhich release of a compound collection this came from, such as ChEMBL 34. Compared by equality, so 34 and 35 do not match — which is the point.

Returns

The loaded set.

Raises

RaisesWhen
ValueErrorIf organism names none, if subject or release is blank, or if representation is not a spelling the engine can read.
TypeErrorIf organism is neither a string nor a sequence of strings.
LoadErrorIf the file cannot be read, has no header row, has neither identity column, holds a row its header cannot account for, or carries a representation line naming a standardisation the engine does not know.

molecule_ranking

molecule_ranking( path: 'str', *, organism: 'str | Sequence[str] | None' = None, representation: 'str | None' = None, subject: 'str | None' = None, release: 'str | None' = None, ) -> 'MoleculeRanking'

Load a ranking of molecules, whose row order is the answer.

Everything lg.molecule_set reads, with one difference that is the whole reason the type exists: the canonical form keeps the row order. A ranking of docked compounds answers which of them to order, rank is the row position, and the same ten thousand compounds in two orders are two different answers. A cache that sorted them would serve one for the other in silence, and for a virtual screen the order decides the length of the prefix anybody actually buys.

A score column is optional and compared exactly, with no tolerance: no drift has been measured for one, and a guessed tolerance would be baked into every cache key below it.

Parameters

ParameterDescription
pathThe tab-separated table, optionally gzipped, in rank order.
organismAs lg.molecule_set.
representationAs lg.molecule_set.
subjectAs lg.molecule_set — for a ranking this is usually the target the compounds were scored against.
releaseAs lg.molecule_set.

Returns

The loaded ranking.

Raises

RaisesWhen
ValueErrorAs lg.molecule_set.
TypeErrorAs lg.molecule_set.
LoadErrorAs lg.molecule_set.

remote

remote( locator: 'str', *, kind: 'type[DatasetT]', digest: 'str | None' = None, organism: 'str | Sequence[str] | None' = None, build: 'str | None' = None, frame: 'tuple[str, int] | None' = None, release: 'str | None' = None, samples: 'list[str] | None' = None, identifier_namespace: 'str | None' = None, subject: 'str | None' = None, source_set: 'Sequence[str] | None' = None, representation: 'str | None' = None, ) -> 'DatasetT'

Fetch a pinned remote input, and load what arrives.

The first step of nearly every pipeline is a fetch, and until now it sat outside everything this engine promises: a shell script downloaded some reads and the engine took its word for what had arrived. A remote declared here is an input like any other, with dimensions read from its own bytes and a content hash in every cache key below it.

A pinned remote promises the same bytes forever, from the source. An SRA run, an NCBI accession, a numbered release: the archive undertakes not to change them, so anyone, anywhere, at any time can obtain this input and check it. That is what makes digest= worth writing, and why a digest that does not match is a loud failure rather than a quiet re-fetch. A source that promises nothing needs the other half of this design, a recorded query, and is not what this function is for.

When it happens, and what it costs

It resolves when you call it, while the pipeline is still being read. That is not an optimisation to be deferred: a remote’s dimensions cannot be known until its bytes are in hand, and the engine checks dimensions before any compute. So a wrong digest fails before any step runs, because the failure happens before the graph is even built.

On a second run nothing is fetched. The locator and its digest are in the store, the objects are there, and resolution is a lookup — which is why a pipeline built on remotes runs offline once it has run online.

What digest is over

What the file means, not what its bytes are: the canonical form of what arrives, read as kind, folded over its files in order. A source that reflows a FASTA or rewords a defline has not changed the biology, and a pin that broke on that would teach you to bump pins without reading — after which the one that matters gets bumped too. Such a rewrite is reported as a note instead. A change in what the data means is the failure.

Leave it out on the first run: the digest of what arrived is reported and recorded, and you paste it in to make every later run a checked one.

Parameters

ParameterDescription
locatorWhere it comes from, as one of four schemes. sra:SRR32217726 is an SRA run, served by ENA as a pair of gzipped FASTQs. ncbi:K03455.1 is an NCBI nucleotide accession, fetched as FASTA. ensembl:release-110/... is a path under Ensembl’s public tree. https://... is an exact URL, for everything else. Anything else is an error naming the four.
kindWhat the bytes are, as one of the types in ligase.types: Reference for a FASTA, Reads for a FASTQ pair. Required, and not inferred from the locator, because it decides how the file is read and therefore what its digest is over — and because it is what the result is typed as, so a step annotated Reference will not accept reads by mistake.
digestThe digest this input must have, as the 64 hexadecimal characters a previous run reported. None fetches whatever the source serves and records its digest, which is how you get the value to pin.
organismThe organism, as for the matching loader. A fetched file records no more about itself than a local one does.
buildA human label for the reference build. Display only.
frameWhich coordinate frame a reference’s positions are numbered along, as (frame, first).
releaseWhich release of the data this is. Compared by equality.
samplesThe sample identifiers. Required for reads, and only for them: a local FASTQ’s sample comes from its filename, and a fetched one is stored under the hash of its bytes, which is no sample identifier at all. The run accession is usually what you want, but say so rather than have the engine assume it — one sample can have several runs.
identifier_namespaceWhich identifier space an entity set’s names live in.
subjectWhat the data is about, when that is one named thing.
source_setThe sources a knowledge graph was assembled from. Left out, they are read off the graph’s own nodes and edges.
representationHow a molecule table’s names were arrived at, spelled as inchikey; salt-stripped, charge-neutralised. Left out, it is read off the table’s own representation line — and a downloaded table of InChIKeys usually has none, so this is the fetch that most often needs it.

Returns

The loaded data, of the class kind named — so the call is typed as a Reference or a Reads and not as a bare dataset — carrying the dimensions inferred from what arrived and a record of where it came from. That record is what puts the fetch in the methods paragraph and the reproducibility bundle.

Raises

RaisesWhen
RemoteErrorIf the locator names no scheme Ligase has, if the source cannot be reached — which includes a run configured offline by ligase.remotes.configure whose store does not hold this input — if what arrives cannot be read as kind, since an archive asked for an accession it does not have answers with an error page and a 200, or if the digest does not match.
ValueErrorIf kind is not a kind of data Ligase knows, if digest is not 64 hexadecimal characters, if kind is Reads and no samples are named, or if a declared dimension is blank.
LoadErrorIf what arrives cannot be parsed.

query

query( locator: 'str', *, kind: 'type[DatasetT]', auth_env: 'str | None' = None, organism: 'str | Sequence[str] | None' = None, build: 'str | None' = None, frame: 'tuple[str, int] | None' = None, release: 'str | None' = None, samples: 'list[str] | None' = None, identifier_namespace: 'str | None' = None, subject: 'str | None' = None, source_set: 'Sequence[str] | None' = None, representation: 'str | None' = None, ) -> 'DatasetT'

Record a live query’s answer, or replay the answer already recorded.

The other half of remote, for a source that promises nothing. An Open Targets query will answer differently next quarter, because it is supposed to — new evidence arrives — and a pipeline that re-asked it on every run would quietly stop being the pipeline that produced the paper.

A recorded query promises the same bytes forever, from the record. Not from the source, which is the promise remote makes and this one cannot. What makes that enough is that the canonicalised response body goes into the content-addressed store rather than merely its digest: the body is then an ordinary input with a content hash, everything below it is deterministic by construction, and a reviewer replays the whole run with no network and no API key.

The three modes, which are a setting for the run

ModeWhat happens
autoreplay a record that exists, record one that does not. The default
replayreplay only: a query with no record is an error
refreshask the source anyway, and report what changed

Set by ligase run --replay and --refresh, or by ligase.remotes.configure(mode=...), and set for the run rather than for the step — because a run that replayed some of its queries and fetched the rest would be reporting a result nobody can repeat. In replay a query with no record is refused rather than fetched, and the run report always says which of the three each query did.

A refresh never overwrites a record. It writes a new dated one beside the old, so a pipeline refreshing weekly is a series of runs, each replayable forever.

What identifies a record

The request, not the order it was asked in: the method, the URL with its parameters sorted, and the body. A step making twenty paginated calls therefore writes twenty records and finds them all again next time whatever order it asks in.

Parameters

ParameterDescription
locatorWhere to ask, as one of the four schemes — in practice https://..., since a query is a question and the other three name archives. Parameters may be in any order: two URLs differing only in that are one record.
kindWhat the answer is, as one of the types in ligase.types. Required, and not inferred, because it decides how the body is read and therefore what the digest is over. An answer that will not read as kind is refused rather than recorded: an API asked for something it does not have answers with an error page and a 200.
auth_envThe name of an environment variable holding a bearer token, sent as Authorization: Bearer <value>. The name, not the token: a bundle carries the pipeline file, so a token written in the pipeline would travel in every bundle. Nothing the engine stores has a field for a header, so the record and the bundle hold no trace of it.
organismThe organism, as for the matching loader.
buildA human label for the reference build. Display only.
frameWhich coordinate frame a reference’s positions are numbered along, as (frame, first).
releaseWhich release of the data this is. Compared by equality.
samplesThe sample identifiers. Required for reads.
identifier_namespaceWhich identifier space an entity set’s names live in. Worth declaring for a query, because an API’s own namespace is rarely the one the rest of your pipeline uses.
subjectWhat the data is about, when that is one named thing.
source_setThe sources a knowledge graph was assembled from. Left out, they are read off the graph’s own nodes and edges — which for a query means off the answer the service gave.
representationHow a molecule table’s names were arrived at, spelled as inchikey; salt-stripped, charge-neutralised. A service that answers with compounds rarely says what standardised them, so this is usually the only way to state it.

Returns

The loaded data, of the class kind named, carrying the dimensions inferred from the recorded body and a record of where it came from — which is what puts the query in the methods paragraph and its response in the reproducibility bundle.

Raises

RaisesWhen
RemoteErrorIf the locator names no scheme Ligase has, if the source cannot be reached, if this run may only replay and there is no record of this query, if the answer is larger than the 32 MiB a record may hold — an answer that large is a dataset, and a dataset has a version to pin with remote instead — if the answer cannot be read as kind, or if auth_env names a variable that is not set.
ValueErrorIf kind is not a kind of data Ligase knows, or a declared dimension is blank.
LoadErrorIf the recorded body cannot be parsed.
Last updated on