vibesketch.document.model¶
The vibe-sketch document, schema version 1.
A .vsk file is one JSON object. It carries the canvas state verbatim, in
the engine’s own format (KET), so a drawing survives a round trip without
loss, and a normalized layer the compute side reads: species with their
identifiers, charge, multiplicity and 3D conformers; reactions with roles,
arrows and conditions; program-neutral job specifications; the figure style;
and provenance. The design is roadmap section 3.1; docs/document.md
describes every field.
The model is strict. Unknown fields are refused rather than ignored, and the
cross-references (a reaction’s species, a job’s species) must resolve, so an
agent that writes a document gets told what is wrong instead of having its
data silently dropped. schema/vibe-sketch-1.schema.json is generated from
these classes (vibe-sketch schema) and must not be edited by hand.
Module Attributes
The value of a version-1 document's |
|
The arrows a reaction can carry (roadmap WP 3.1). |
|
the structure only. |
|
The longest HELM a species records, or CXSMILES a generic structure has: well beyond the longest sequence vibe-sketch lays out. |
|
an edge or end termination or a sidewall group. |
|
terminated by a group, or closed with a fullerene hemisphere. |
|
IUPAC's (s), (l), (g), (aq), and (ads) for an adsorbed species, also written with an asterisk. |
|
The reference electrodes a potential can be stated against. |
|
|
Okabe and Ito's colour-universal-design palette, by name (see vibesketch.document.highlights). |
Classes
|
What was entered for one participant of a reaction; nothing is inferred from the drawing. |
|
Finite-cluster binding, with explicit free fragments and complex. |
|
One ordinary writer job, including combined optimisation/frequencies. |
|
A vibe-queue campaign compiled from a recipe: where it is and what its nodes are. |
|
The drawing as the canvas engine stores it, embedded verbatim. |
|
How a labelled generic structure became a calculable species: its cap (#139). |
|
A nanotube wall's chiral indices (n, m), with 0 <= m <= n. |
|
An explicit thermodynamic choice; units are supplied by its field name. |
|
A participant's stoichiometric coefficient as drawn, such as the 2 of 2H2O (#141). |
|
One 3D structure of a species: element symbols and Cartesian coordinates. |
|
Application provenance of an imported geometry; relaxation is opaque JSON. |
|
A coordinate an optimisation holds fixed. |
|
A lattice defect: a missing carbon, or a C-C bond turned by 90 degrees (Stone-Wales). |
|
A geometry optimisation on a Kohn-Sham surface. |
|
A molecular Kohn-Sham surface: what energies, gradients and Hessians are taken on. |
|
A DLPNO coupled-cluster single point at the parent's accepted geometry. |
|
A vibe-sketch document, schema version 1. |
|
One revision of the document: who changed it, through what, and why. |
|
The electrons a half-reaction takes up or gives off, as drawn: 2e⁻ (#141). |
|
Buckminsterfullerene C60 (Ih) or C70 (D5h). |
|
A structure in the drawing that is not one species (#90). |
|
Where a stage takes its starting geometry. |
|
A rectangular graphene flake: zigzag edges along its width, armchair along its length. |
|
A finite-difference Hessian on a Kohn-Sham surface, at the parent's accepted geometry. |
|
Atoms of a species marked in a colour, in every drawing and figure of it. |
|
A calculation to run on one species with one program. |
|
A program-neutral description of a calculation. |
|
A MACE optimisation: the model, its device and precision, the convergence. |
|
A name for a species, with where it came from and how sure it is. |
|
Where on a nanostructure a group or defect goes; the nearest carbon is taken. |
|
A graphene nanoribbon, N-AGNR or N-ZGNR, a whole number of periods long. |
|
How a generated species was made: the parameters, and the graph its coordinates lack. |
|
A single- or multi-walled carbon nanotube segment. |
|
The one-dimensional cell a finite segment repeats, recorded for periodic models. |
|
Where the document came from. |
|
A condition at the arrow read with its unit: potential, pH, temperature, time (#141). |
|
An R-group's definition: its substituents and conditions (#90). |
|
One step of a scheme: who reacts, under which conditions, to give what. |
|
A saved, reviewable staged workflow for species of the document. |
|
Reduction thermodynamics at 298.15 K, with explicit electron/proton conventions. |
|
What a job may use on the machine that runs it. |
|
An absolute energy, with its location in the source output. |
|
The excited states a result lists, with their absorption lines. |
|
A content-addressed result artifact, never a client-controlled server path. |
|
One harmonic vibration; an intensity the output does not give is null, never zero. |
|
One nucleus's isotropic shielding, by its atom index in the job's input. |
|
Absolute NMR shieldings of every nucleus, as the program printed them. |
|
One excited state; an oscillator strength the output does not give is null. |
|
Absolute thermal energies at one stated temperature and pressure. |
|
The harmonic vibrations a frequency result lists, with their IR and Raman lines. |
|
One submission of a job to a queue. |
|
Verified output bound to the job and input species, not a reaction delta. |
|
The monomer form of a peptide or nucleic acid the species was built from (#98). |
|
A group bonded to a basal-plane carbon, which becomes sp3. |
|
A solid given by its formula, without a molecular graph (#142). |
|
An implicit solvation model and the solvent it describes. |
|
A molecule or ion that appears in the drawing. |
|
One step of a recipe: what runs, after which stage, from which geometry. |
|
A participant's state as drawn beside it, such as Pb(s) or H+(aq) (#141). |
|
How exported figures look. |
|
A schematic surface, not a physical atomistic or periodic model (#140). |
|
A schematic attachment point, fractions of the image box; y runs down. |
- vibesketch.document.model.MAX_HELM = 50000¶
The longest HELM a species records, or CXSMILES a generic structure has: well beyond the longest sequence vibe-sketch lays out.
- vibesketch.document.model.SCHEMA_ID: Final = 'vibe-sketch/1'¶
The value of a version-1 document’s
schemafield.
- vibesketch.document.model.Arrow¶
The arrows a reaction can carry (roadmap WP 3.1).
alias of
Literal[‘forward’, ‘equilibrium’, ‘retrosynthetic’, ‘resonance’]
- class vibesketch.document.model.Canvas(*, format, data=<factory>)[source]¶
Bases:
_StrictThe drawing as the canvas engine stores it, embedded verbatim.
- format: Literal['ket']¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Capping(*, generic, cxsmiles, cap, labels)[source]¶
Bases:
_StrictHow a labelled generic structure became a calculable species: its cap (#139).
Each attachment atom (CNT, Au, …) of the generic structure
cxsmileswas replaced bycap, as the user chose; nothing is capped unasked.- Parameters:
generic (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)])
cxsmiles (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=50000, pattern=^\S+( \|[^\n]*\|)?$, ascii_only=None)])
cap (Literal['H', 'CH3'])
labels (Annotated[list[Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=500, pattern=None, ascii_only=None)]], MinLen(min_length=1)])
- generic: _Identifier¶
- cxsmiles: _CXSmiles¶
- cap: Literal['H', 'CH3']¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.SolidFormula(*, text, formula, key, polymorph=None, state=None, composition, molar_mass_g_mol=None)[source]¶
Bases:
_StrictA solid given by its formula, without a molecular graph (#142).
Oxides, salts, catalysts and scales: Fe2O3, Pb3(CO3)2(OH)2, CuSO4·5H2O, Fe3−xCrxO4, γ-Al2O3.
key(the canonical formula with polymorph and state) identifies it instead of an InChIKey. Nothing is calculated for it: that needs its structure (roadmap Phase 5).- Parameters:
text (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=500, pattern=None, ascii_only=None)])
formula (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=200, pattern=None, ascii_only=None)])
key (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=220, pattern=None, ascii_only=None)])
polymorph (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=1, pattern=None, ascii_only=None)] | None)
state (Literal['s', 'l', 'g', 'aq', 'ads'] | None)
molar_mass_g_mol (Annotated[float | None, Gt(gt=0), AllowInfNan(allow_inf_nan=False)])
- text: _Text¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Coefficient(*, species, value)[source]¶
Bases:
_StrictA participant’s stoichiometric coefficient as drawn, such as the 2 of 2H2O (#141).
- Parameters:
- species: _Identifier¶
- value: _Positive¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Electrons(*, side, count)[source]¶
Bases:
_StrictThe electrons a half-reaction takes up or gives off, as drawn: 2e⁻ (#141).
Electrons are no species, as SMILES cannot write one; they are counted in the charge balance on their
side.- side: Literal['reactants', 'products']¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Quantity(*, kind, value, unit, reference=None, kcl_mol_l=None, text)[source]¶
Bases:
_StrictA condition at the arrow read with its unit: potential, pH, temperature, time (#141).
- Parameters:
kind (Literal['potential', 'ph', 'temperature', 'time'])
unit (Literal['V', 'pH', '°C', 'K', 's', 'min', 'h', 'd'])
reference (Literal['SHE', 'NHE', 'SCE', 'RHE', 'Ag/AgCl'] | None)
kcl_mol_l (Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Gt(gt=0), AllowInfNan(allow_inf_nan=False)])] | None)
text (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=500, pattern=None, ascii_only=None)])
- kind: Literal['potential', 'ph', 'temperature', 'time']¶
- unit: Literal['V', 'pH', '°C', 'K', 's', 'min', 'h', 'd']¶
- reference: ReferenceElectrode | None¶
- text: _Text¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- vibesketch.document.model.ReferenceElectrode¶
The reference electrodes a potential can be stated against.
alias of
Literal[‘SHE’, ‘NHE’, ‘SCE’, ‘RHE’, ‘Ag/AgCl’]
- vibesketch.document.model.State¶
IUPAC’s (s), (l), (g), (aq), and (ads) for an adsorbed species, also written with an asterisk.
- Type:
The states a participant’s label can give
alias of
Literal[‘s’, ‘l’, ‘g’, ‘aq’, ‘ads’]
- class vibesketch.document.model.StateLabel(*, species, state)[source]¶
Bases:
_StrictA participant’s state as drawn beside it, such as Pb(s) or H+(aq) (#141).
- Parameters:
- species: _Identifier¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Chirality(*, n, m=0)[source]¶
Bases:
_StrictA nanotube wall’s chiral indices (n, m), with 0 <= m <= n.
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Conformer(*, method, symbols, xyz_angstrom, source=None)[source]¶
Bases:
_StrictOne 3D structure of a species: element symbols and Cartesian coordinates.
- Parameters:
- method: _Token¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Defect(*, kind, site)[source]¶
Bases:
_StrictA lattice defect: a missing carbon, or a C-C bond turned by 90 degrees (Stone-Wales).
- kind: Literal['vacancy', 'stone-wales']¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Fullerene(*, kind, size)[source]¶
Bases:
_StrictBuckminsterfullerene C60 (Ih) or C70 (D5h).
- kind: Literal['fullerene']¶
- size: Literal[60, 70]¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Graphene(*, kind, width_nm, length_nm, edges='H', sidewall=<factory>, defects=<factory>)[source]¶
Bases:
_StrictA rectangular graphene flake: zigzag edges along its width, armchair along its length.
- Parameters:
- kind: Literal['graphene']¶
- sidewall: list[SidewallGroup]¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- vibesketch.document.model.NanoGroup¶
an edge or end termination or a sidewall group.
- Type:
A group bonded to a nanostructure’s carbon
alias of
Literal[‘H’, ‘OH’, ‘COOH’]
- class vibesketch.document.model.NanoSite(*, along, around=None, across=None)[source]¶
Bases:
_StrictWhere on a nanostructure a group or defect goes; the nearest carbon is taken.
alongis the fraction of the length;aroundis the angle about a nanotube’s axis in degrees,acrossthe fraction of a sheet’s or ribbon’s width.- Parameters:
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Nanoribbon(*, kind, edge, width, periods, edges='H', sidewall=<factory>, defects=<factory>)[source]¶
Bases:
_StrictA graphene nanoribbon, N-AGNR or N-ZGNR, a whole number of periods long.
- Parameters:
- kind: Literal['nanoribbon']¶
- edge: Literal['armchair', 'zigzag']¶
- sidewall: list[SidewallGroup]¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Nanostructure(*, parameters, identity, key, description, formula, bonds, periodic=None)[source]¶
Bases:
_StrictHow a generated species was made: the parameters, and the graph its coordinates lack.
The atoms are the species’ first conformer (method
nanostructure);bondsconnect them. A nanostructure has no SMILES or InChI;keyidentifies it instead, from the parameters alone.- Parameters:
parameters (Nanotube | Graphene | Nanoribbon | Fullerene)
identity (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=4000, pattern=None, ascii_only=None)])
key (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^NANO-[0-9A-F]{20}$, ascii_only=None)])
description (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=500, pattern=None, ascii_only=None)])
formula (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^([A-Z][a-z]?[0-9]*)+$, ascii_only=None)])
bonds (list[tuple[Annotated[int, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0)])], Annotated[int, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0)])], float]])
periodic (PeriodicCell | None)
- parameters: NanostructureParameters¶
- description: _Text¶
- periodic: PeriodicCell | None¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Nanotube(*, kind, walls, length_nm=None, periods=None, ends=('H', 'H'), sidewall=<factory>, defects=<factory>)[source]¶
Bases:
_StrictA single- or multi-walled carbon nanotube segment.
- Parameters:
kind (Literal['nanotube'])
walls (Annotated[list[Chirality], MinLen(min_length=1), MaxLen(max_length=10)])
length_nm (Annotated[float | None, Gt(gt=0), Le(le=1000), AllowInfNan(allow_inf_nan=False)])
ends (tuple[Literal['H', 'OH', 'COOH', 'capped'], ~typing.Literal['H', 'OH', 'COOH', 'capped']])
sidewall (Annotated[list[SidewallGroup], MaxLen(max_length=200)])
- kind: Literal['nanotube']¶
- sidewall: list[SidewallGroup]¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.PeriodicCell(*, axis='z', translation_angstrom, carbons_per_period)[source]¶
Bases:
_StrictThe one-dimensional cell a finite segment repeats, recorded for periodic models.
Nothing writes it yet; it is what a periodic calculation of the infinite structure needs (roadmap Phase 5).
- Parameters:
- axis: Literal['z']¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.SidewallGroup(*, group, site)[source]¶
Bases:
_StrictA group bonded to a basal-plane carbon, which becomes sp3.
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- vibesketch.document.model.TubeEnd¶
terminated by a group, or closed with a fullerene hemisphere.
- Type:
How a nanotube end is finished
alias of
Literal[‘H’, ‘OH’, ‘COOH’, ‘capped’]
- class vibesketch.document.model.Generic(*, id, kind, cxsmiles, label=None, rgroups=<factory>, labels=<factory>)[source]¶
Bases:
_StrictA structure in the drawing that is not one species (#90).
An R-group core, whose R-group atoms are labelled
_R1and so on, a group in polymer brackets (SRU, COP, MUL or GEN), or a structure bonded to labelled attachment atoms that stand for a material, such asCNTorAu(#139), as CXSMILES without coordinates. Derived from the drawing like species; the drawing is the source of truth.- Parameters:
id (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)])
kind (Literal['rgroup-core', 'bracketed', 'labelled'])
cxsmiles (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=50000, pattern=^\S+( \|[^\n]*\|)?$, ascii_only=None)])
label (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=500, pattern=None, ascii_only=None)] | None)
rgroups (list[Annotated[int, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=1)])]])
labels (list[Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=500, pattern=None, ascii_only=None)]])
- id: _Identifier¶
- kind: Literal['rgroup-core', 'bracketed', 'labelled']¶
- cxsmiles: _CXSmiles¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Constraint(*, kind, atoms, value=None)[source]¶
Bases:
_StrictA coordinate an optimisation holds fixed.
Atoms are 0-based indices into the species’ conformer: the drawing’s atoms first, then the hydrogens.
- Parameters:
- kind: Literal['distance', 'angle', 'dihedral', 'position']¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Document(*, schema='vibe-sketch/1', revision=0, canvas=<factory>, species=<factory>, reactions=<factory>, jobs=<factory>, recipes=<factory>, highlights=<factory>, generics=<factory>, rgroups=<factory>, surfaces=<factory>, style=<factory>, provenance)[source]¶
Bases:
_StrictA vibe-sketch document, schema version 1.
- Parameters:
- model_config = {'extra': 'forbid', 'json_schema_extra': {'description': 'A .vsk file: a drawing and what to compute from it.'}, 'populate_by_name': True, 'title': 'vibe-sketch document', 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- schema_id: Literal['vibe-sketch/1']¶
- provenance: Provenance¶
- class vibesketch.document.model.Edit(*, revision, at, actor, client=None, summary)[source]¶
Bases:
_StrictOne revision of the document: who changed it, through what, and why.
- Parameters:
at (AwareDatetime)
actor (Literal['human', 'agent', 'system'])
client (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[a-z0-9][a-z0-9_.:+-]{0,63}$, ascii_only=None)] | None)
summary (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=500, pattern=None, ascii_only=None)])
- at: AwareDatetime¶
- actor: Literal['human', 'agent', 'system']¶
- summary: _Text¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Job(*, id, species, program, spec, runs=None)[source]¶
Bases:
_StrictA calculation to run on one species with one program.
- Parameters:
id (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)])
species (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)])
program (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[a-z0-9][a-z0-9_.:+-]{0,63}$, ascii_only=None)])
spec (JobSpec)
- id: _Identifier¶
- species: _Identifier¶
- program: _Token¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.JobSpec(*, task, method=None, basis=None, aux_basis=None, approximation=None, dispersion=None, solvent=None, states=None, constraints=None, resources=None)[source]¶
Bases:
_StrictA program-neutral description of a calculation.
Writers translate it into one program’s input and refuse, with a reason, whatever they cannot express (AGENTS.md, ground rule 5). The model only checks that the specification is consistent in itself.
- Parameters:
task (Literal['geometry', 'sp', 'opt', 'freq', 'opt+freq', 'tddft', 'nmr'])
method (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z0-9][A-Za-z0-9()+*/,_.-]{0,63}$, ascii_only=None)] | None)
basis (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z0-9][A-Za-z0-9()+*/_.-]{0,63}$, ascii_only=None)] | None)
aux_basis (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z0-9][A-Za-z0-9()+*/_.-]{0,63}$, ascii_only=None)] | None)
approximation (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z0-9][A-Za-z0-9()_-]{0,31}$, ascii_only=None)] | None)
dispersion (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z0-9][A-Za-z0-9()_-]{0,31}$, ascii_only=None)] | None)
solvent (Solvent | None)
constraints (list[Constraint] | None)
resources (Resources | None)
- constraints: list[Constraint] | None¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Name(*, value, source, confidence)[source]¶
Bases:
_StrictA name for a species, with where it came from and how sure it is.
- Parameters:
value (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=500, pattern=None, ascii_only=None)])
source (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[a-z0-9][a-z0-9_.:+-]{0,63}$, ascii_only=None)])
confidence (Literal['high', 'medium', 'low'])
- value: _Text¶
- source: _Token¶
- confidence: Literal['high', 'medium', 'low']¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Provenance(*, app, created=<factory>, edits=<factory>)[source]¶
Bases:
_StrictWhere the document came from.
- Parameters:
- app: _Text¶
- created: AwareDatetime¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.RGroup(*, number, substituents, occurrence=None, rest_h=False, if_then=None)[source]¶
Bases:
_StrictAn R-group’s definition: its substituents and conditions (#90).
- Parameters:
substituents (Annotated[list[Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=50000, pattern=^\S+( \|[^\n]*\|)?$, ascii_only=None)]], MinLen(min_length=1)])
occurrence (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=500, pattern=None, ascii_only=None)] | None)
rest_h (bool)
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Reaction(*, id, reactants, reagents=<factory>, products, arrow='forward', conditions=<factory>, yield_=None, amounts=<factory>, coefficients=<factory>, electrons=None, states=<factory>, quantities=<factory>)[source]¶
Bases:
_StrictOne step of a scheme: who reacts, under which conditions, to give what.
- Parameters:
id (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)])
reactants (Annotated[list[Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)]], MinLen(min_length=1)])
reagents (list[Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)]])
products (Annotated[list[Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)]], MinLen(min_length=1)])
arrow (Literal['forward', 'equilibrium', 'retrosynthetic', 'resonance'])
conditions (list[Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=500, pattern=None, ascii_only=None)]])
yield_ (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=500, pattern=None, ascii_only=None)] | None)
amounts (list[Amount])
coefficients (list[Coefficient])
electrons (Electrons | None)
states (list[StateLabel])
- id: _Identifier¶
- coefficients: list[Coefficient]¶
- states: list[StateLabel]¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Resources(*, nprocs=1, maxcore_mb=None)[source]¶
Bases:
_StrictWhat a job may use on the machine that runs it.
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Run(*, queue='vibe-queue', host='localhost', id, submitted, directory=None, container=None, group=None, result=None)[source]¶
Bases:
_StrictOne submission of a job to a queue.
- Parameters:
queue (Literal['vibe-queue'])
host (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z0-9][A-Za-z0-9_.-]{0,63}$, ascii_only=None)])
id (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z0-9_-]{1,64}$, ascii_only=None)])
submitted (AwareDatetime)
directory (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=4096, pattern=None, ascii_only=None)] | None)
container (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=4096, pattern=None, ascii_only=None)] | None)
group (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)] | None)
result (RunResult | None)
- queue: Literal['vibe-queue']¶
- submitted: AwareDatetime¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Sequence(*, helm, inchikey)[source]¶
Bases:
_StrictThe monomer form of a peptide or nucleic acid the species was built from (#98).
It is trusted only for the structure it was built as, which
inchikeynames: a species whose drawing has changed loses it.- Parameters:
helm (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=50000, pattern=None, ascii_only=None)])
inchikey (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Z]{14}-[A-Z]{10}-[A-Z]$, ascii_only=None)])
- inchikey: _InChIKey¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Solvent(*, model, name)[source]¶
Bases:
_StrictAn implicit solvation model and the solvent it describes.
- Parameters:
- model: Literal['CPCM', 'SMD']¶
- name: _SolventName¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Species(*, id, label=None, smiles=None, inchikey=None, charge=0, multiplicity=1, name=None, conformers=<factory>, sequence=None, nanostructure=None, capped=None, solid=None)[source]¶
Bases:
_StrictA molecule or ion that appears in the drawing.
- Parameters:
id (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)])
label (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=1, max_length=500, pattern=None, ascii_only=None)] | None)
smiles (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^\S+$, ascii_only=None)] | None)
inchikey (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Z]{14}-[A-Z]{10}-[A-Z]$, ascii_only=None)] | None)
charge (int)
name (Name | None)
sequence (Sequence | None)
nanostructure (Nanostructure | None)
capped (Capping | None)
solid (SolidFormula | None)
- id: _Identifier¶
- nanostructure: Nanostructure | None¶
- solid: SolidFormula | None¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Style(*, preset='acs-1996')[source]¶
Bases:
_StrictHow exported figures look.
- Parameters:
preset (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[a-z0-9][a-z0-9_.:+-]{0,63}$, ascii_only=None)])
- preset: _Token¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.Surface(*, id, kind='surface', material, facet=None, layers=<factory>, diameter_nm=None, ligand_shell=None, nanotube=None, count=5, anchors=<factory>)[source]¶
Bases:
_StrictA schematic surface, not a physical atomistic or periodic model (#140).
- Parameters:
id (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)])
kind (Literal['surface', 'electrode', 'stack', 'nanoparticle', 'nanotube-array'])
material (Annotated[str, MinLen(min_length=1), MaxLen(max_length=80), _PydanticGeneralMetadata(pattern='^[A-Za-z0-9 ()/.,+-]+$')])
facet (Annotated[str | None, MaxLen(max_length=40), _PydanticGeneralMetadata(pattern='^[0-9 ()-]+$')])
diameter_nm (Annotated[float | None, Gt(gt=0), Le(le=100000), AllowInfNan(allow_inf_nan=False)])
ligand_shell (Annotated[str | None, MaxLen(max_length=80), _PydanticGeneralMetadata(pattern='^[A-Za-z0-9 ()/.,+-]+$')])
nanotube (Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)] | None)
anchors (Annotated[dict[Annotated[str, StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=None, min_length=None, max_length=None, pattern=^[A-Za-z][A-Za-z0-9_-]{0,63}$, ascii_only=None)], SurfaceAnchor], MaxLen(max_length=32)])
- id: _Identifier¶
- kind: Literal['surface', 'electrode', 'stack', 'nanoparticle', 'nanotube-array']¶
- anchors: dict[_Identifier, SurfaceAnchor]¶
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class vibesketch.document.model.SurfaceAnchor(*, u=0.5, v=0, dx=0, dy=1, site=None, repeat=1, generics=<factory>)[source]¶
Bases:
_StrictA schematic attachment point, fractions of the image box; y runs down.
- Parameters:
- model_config = {'extra': 'forbid', 'populate_by_name': True, 'validate_assignment': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].