Skip to content

Releases: vibyverse/qvf

qvf v0.6.0 - 2026-10-22

Choose a tag to compare

@mpei mpei released this 23 Oct 11:59

This additive toolkit release keeps QVF v1, the normative schema, registry,
validator findings and C ABI unchanged. Existing Python imports remain available.
XSF/PDB converters support only the documented subsets; Conan packaging is local,
with no package-index publication.

Changed

  • Reconcile roadmap and work-package status with toolkit 0.5.0 and current
    main: retain the schema identifier with hosting still open, distinguish
    unreleased converters, packaging and pending-job workflows, and separate
    historical design proposals from current implementation.

Added

  • WP-48: geometry-only PDB import/export through qvf.convert and the CLI.
    Imports require explicit element columns and refuse alternate locations
    and multi-model ensembles. Reports identify discarded biomolecular/crystal
    metadata and export precision; synthetic export records make no identity
    or connectivity claim. No schema, registry or format change.

  • Executable one-species Sketch drawing example for the Unreleased
    prepare-job workflow. The family guide distinguishes preserved drawing
    data, the canonical job request, read-only checks and Queue submission.

  • qvf.jobs.prepare_job and qvf prepare-job turn one geometry/document
    archive into an explicit pending single-job request while preserving its
    structure, bonds, preview and vendor bytes. Source and output receive full
    validation; ambiguous, calculated or incompatible inputs are refused, and
    publication uses a new path atomically. Optional basis/functional retain
    absent versus null semantics. No NumPy dependency or format/schema change.

  • WP-49: local Conan 2 C/C++ recipe with static/shared options, exact committed
    source export, installed CMake/pkg-config metadata and Apache notices.
    Small installed C99/C++17 consumers exercise package use. A portable
    release/adoption checklist distinguishes source checks, candidate acceptance
    and publication; no package-registry upload is added.

  • WP-48: static XSF primitive geometry and scalar-grid import/export through
    qvf.convert and qvf convert. Coordinates convert explicitly, sample
    ordering and endpoint planes are preserved, and field periodicity is
    supplied separately from structural periodicity. Unsupported records and
    missing periodic endpoints fail without publishing output. No format or
    schema changes.


Download Source code (zip) or Source code (tar.gz) under Assets. These are source archives, not prebuilt installers; follow the included installation instructions. Managed Git-based installers need a clone checked out at this tag.

Documentation: https://vibe-qc.com/ · Desktop downloads: https://vibe-qc.com/download/

qvf v0.5.0 - 2026-10-16

Choose a tag to compare

@mpei mpei released this 22 Oct 17:31

The toolkit APIs below are additive. Archives remain QVF v1, the normative
schema is unchanged, and legacy Python imports and C/C++ entry points remain
available. The Python array APIs now require the optional numpy extra;
install qvf-writer[numpy,validate] for those APIs and full schema validation.

Fixed

  • Typed vector, array and map decoders use explicit loop bodies, avoiding
    GCC misleading-indentation warnings when building with warnings as errors.
    The generated single header carries the same correction.

  • Source archives suppress Python bytecode during staged generated-file checks,
    keeping the tar/ZIP inventory byte-identical to committed source even when
    checking generators that import other local modules.

Added

  • Candidate CI explicitly installs the optional NumPy extra for array tests,
    checks generated Fortran bindings, and exercises the Fortran writer/layout
    checks in the existing Linux GCC job with runtime bounds checking.

  • WP-45 source slice: optional qvf::fortran modules, generated bindings for
    every C ABI entry point, and checked structure, scalar-volume, trajectory
    and restricted-GTO writers. Wrappers convert Fortran array layout explicitly;
    focused gfortran/Python checks cover layout, ownership and refusal behavior.
    Installed modules and sources support CMake consumers.

  • WP-49 packaging slice: relocatable qvf.pc metadata and independent CMake
    test/example switches. Embedded consumers build only the library by default;
    standalone builds retain tests and examples. Installed CMake targets
    propagate C++17 and shared builds expose the C API import definition.

  • WP-48 first slice: standard-library-only qvf.convert and qvf convert
    for scalar cube and geometry-only XYZ/extXYZ, including trajectories and
    variable cells. Converters validate new QVF files, preserve grid ordering
    and explicit periodic endpoint semantics, report losses, refuse unsupported
    fields and publish only completed outputs at a new path.

  • Register the advisory x_ascent namespace for non-critical ASCENT dataset
    exchange beside canonical structures (#13). No format or validator change.

  • WP-44: complete additive C ABI 1 for streaming writers, every canonical
    kind, periodic structures, lazy readers, staged validation and optional
    atomic editing. The original C signatures remain available. Shared builds
    export the API and install with ABI-versioned library names. C examples
    round-trip every canonical kind and are checked by the Python validator.
    Legacy wavefunction overlap/ECP setters can reread streamed metadata.

  • A portable pending-job example and family workflow guide covering queue
    submission, viewer inspection and sketch geometry conversion. The guide
    distinguishes consumer capabilities from format conformance and preserves
    the original archive during conversions. File-identification prose now
    states that the QVF media type is proposed and its registration awaits
    submission approval; identifiers are unchanged.

  • WP-47: qvf / python -m qvf commands for staged validation, archive info,
    JSON display, verified member extraction, numeric diff, repack, reported
    scrubbing to a new archive, conformance and schema output. Existing
    qvf-validate behavior is retained. Python validation stages match the C++
    facade boundaries and preserve the full validator's finding codes. The
    shared installed/script corpus runner no longer requires NumPy.

  • WP-46: the Python qvf package, retaining the qvf-writer distribution
    name. Streaming Writer member sinks support raw buffers, endian
    conversion and ZIP64; lazy typed Reader supports NumPy-free memoryviews;
    Editor appends, commits atomically on request and repacks. The package
    includes the model, units, generated tables and schema. The original
    qvf_writer / qvf_reader modules remain compatible, with deprecation
    warnings, and the existing validator finding codes are unchanged.

  • C++ streaming Writer, optional atomic Editor, and borrowed TensorView
    conversion in bounded chunks, preserving the existing QvfWriter API.
    File, memory and callback sinks share the same backend; updates, run status
    and streaming repack use the established archive lifecycle (WP-42).

  • Schema-generated concrete records and named roles for all 56 canonical
    kinds, with Writer::add / Reader::get<K> and lossless extension fields.
    Owning decoded tensors and borrowed producer views share TensorData.
    Typed writes check schema and sizes before writing; late conversion
    failures remove the new section and its directory entries.

  • C++ qvf::Reader with a lossless typed manifest, lazy JSON/tensor/opaque
    member access, bounded tensor streaming, and the get<K> decoding
    protocol. The existing
    QvfReader API remains available.

  • Cumulative qvf::validate reports for container, manifest, payload,
    semantic and reference stages, using existing finding codes and limits.
    Early stages avoid reading later payloads; complete validation remains
    the default. qvf-inspect and the C++ conformance runner use the facade;
    the read_qvf executable is retained (WP-43).


Download Source code (zip) or Source code (tar.gz) under Assets. These are source archives, not prebuilt installers; follow the included installation instructions. Managed Git-based installers need a clone checked out at this tag.

Documentation: https://vibe-qc.com/ · Desktop downloads: https://vibe-qc.com/download/

qvf v0.4.0 - 2026-10-15

Choose a tag to compare

@mpei mpei released this 23 Oct 11:59

Fixed

  • Python and C++ section-creation APIs check duplicate, reserved and invalid
    IDs before writing payload members, including generated default IDs.
    A rejected ID leaves the archive unchanged, without orphan ZIP entries.

  • Writer APIs expose the v0.3.0 fields: Python add_job_spec distinguishes
    omitted basis / functional from explicit None (JSON null); the C++
    JSON API accepts null and rejects non-string, non-null values. Both
    wavefunction writers accept localization_reference_basis and reject an
    explicitly empty value.

Clarified

  • Unrestricted NTOs use two wavefunction.gto sections per state, with
    alpha/beta channels paired by row and identical descending squared
    weights per spin (#12). A normalized state's weights sum to one across
    both spins. Full TDDFT/RPA sums remain permitted. Python/C++ writers and
    all three validators enforce channel/pair consistency; generated schema
    tables and positive/negative corpus cases cover the contract.

Download Source code (zip) or Source code (tar.gz) under Assets. These are source archives, not prebuilt installers; follow the included installation instructions. Managed Git-based installers need a clone checked out at this tag.

Documentation: https://vibe-qc.com/ · Desktop downloads: https://vibe-qc.com/download/

qvf v0.3.0 - 2026-10-15

Choose a tag to compare

@mpei mpei released this 23 Oct 11:59

qvf becomes the single source of the format for the vibe-qc family, and the
release merges into the format what the family's programs already write or
read (#11): run against 2,000 archives of vibe-qc 0.15–0.17, the 0.2.0
validator failed 463 of them (23 %) for four kinds of data that are valid
now, and vibe-view read three viewer hints the specification did not record.
All within QVF v1 (qvf_version = 1); none of the changes bumps it
(Decision).

Deprecated

  • The mo_metadata keys iao_charges, excitation_index and
    excitation_energy_ev (spec § 5.3): valid, annotated "deprecated": true,
    and producers SHOULD NOT write them; the canonical carriers are the
    atom_properties member iao_charge, state_index with state_ref, and
    the state's excitation_energy in its excited_states section (#11).
  • The empty string as a job.spec functional or basis (spec § 5.9): a
    valid, deprecated spelling of null (#11).
  • Validators report no finding for a deprecated key or spelling, as for
    provenance.hostname and the legacy unit spellings.

Added

  • localization_reference_basis, an optional non-empty string of
    $defs/MoMetadataPayload (spec § 5.3): the minimal reference basis the
    intrinsic atomic orbitals were built from (Knizia, J. Chem. Theory Comput.
    2013, 9, 4834) (#11).
  • null as a job.spec functional or basis (spec § 5.9,
    $defs/JobSpecPayload): the method takes none, distinct from an absent
    key, the engine's default (#11).
  • The viewer_defaults hints vibe-view reads (spec § 3.4, #6): the
    per-section energy_window of bands and dos.* sections ([min, max]
    in eV relative to the Fermi level), the top-level camera (the shape of
    $defs/Camera) and crossfade ({a, b, blend}). Specified in the spec
    only: the schema lists camera and crossfade without checking their
    values, and a malformed hint never fails an archive. camera and
    crossfade are reserved section ids (E_RESERVED_ID); the Python and C++
    writers refuse them.
  • structure_ref on a standalone bonds section (spec § 5.1, #4): the
    structure whose atoms the indices address; without it, the archive's first
    structure. Validators check every pair against the atom count of the named
    structure (E_MEMBER_MALFORMED). Python add_bonds(..., structure_ref=)
    and C++ add_bonds(pairs, section_id, structure_ref).
  • @qvf/core types ViewerDefaults.camera and crossfade and exports
    CrossfadeHint.
  • Conformance corpus: wavefunction_localized.qvf, job_set_methods.qvf,
    deprecated_spellings.qvf, bonds_structure_ref.qvf and
    viewer_hints.qvf (71 archives); six negative archives for the new rules
    (100).

Changed

  • qvf is the single source of the format (GOVERNANCE.md, "QVF in the
    vibe-qc family"): the specification, schema, registry and reference
    validators change only here; a family program pins one qvf tag, vendors
    byte-identical copies checked in CI against that tag, keeps no derived
    schema (no v2 schema either; spec § 3.1 is the rule), and proposes a field
    here before it writes it (#11).
  • spec/legacy/README.md and the registry.json version_decisions say
    what the frozen v2 schema is: qvf 0.1.0's v1 schema with qvf_version 1
    or 2, kept so that its $id resolves, used by no validator and no superset
    of the current v1 schema. A v2 archive is validated against the current v1
    schema with the warning W_VERSION_WITHDRAWN (spec § 3.1), as before (#11).
  • registry.json: x_vibesketch lists the members vibe-sketch writes
    (document, species, sdf) since its picture moved to the canonical
    preview kind (#11).
  • Section ids carry no meaning, and a consumer finds sections by kind and
    reference; the first structure of an archive is the first structure
    section viewer_defaults.auto_open lists, else the first in sections
    order (spec § 4.1, § 8.2). A clarification, no qvf_version bump
    (Decision).
  • GOVERNANCE.md records that QVF is the standard format of the vibe-qc
    family of programs, on the same terms as for every producer and consumer.
  • conformance/generate_corpus.py runs as a script again: its entry point
    had preceded the sketch-document generators it calls.

Download Source code (zip) or Source code (tar.gz) under Assets. These are source archives, not prebuilt installers; follow the included installation instructions. Managed Git-based installers need a clone checked out at this tag.

Documentation: https://vibe-qc.com/ · Desktop downloads: https://vibe-qc.com/download/

qvf v0.2.0 - 2026-10-14

Choose a tag to compare

@mpei mpei released this 23 Oct 11:59

The format and toolkit changes since 0.1.0, all within QVF v1
(qvf_version = 1). The last group of format decisions makes QVF the document
format of vibe-sketch, the structure and reaction sketcher: chemical identity
on structure sections, the reaction.scheme and preview kinds, the member
field media_type, job sets, one media type and one macOS UTI for .qvf,
and the withdrawn qvf_version 2 read as a warning
(Decisions).
None of the changes bumps qvf_version.

Deprecated

  • provenance.hostname (spec § 3.2): producers SHOULD NOT emit it; consumers
    MUST ignore it except for display. The schema property is annotated
    "deprecated": true; existing archives remain valid. No qvf_version
    bump (D11, WP-07).
  • The unit spellings Eh, eV and Hartree in a {value, units} object
    (provenance.scf_energy, provenance.fermi_energy): still valid there as
    $defs/LegacyUnitName, read as hartree and ev; producers SHOULD write
    the unit name (D12, WP-13).

Added

  • Chemical identity on structure sections (spec § 5.1): optional section
    fields charge, multiplicity, name, smiles, inchi and inchikey;
    the generic label is the species' compound label. Validators report a
    charge and multiplicity impossible for the atoms as the new error
    E_CHARGE_MULTIPLICITY, and, in an archive with one structure, a
    disagreement with provenance.charge / provenance.multiplicity as
    E_ROOT_INCONSISTENT. Python add_structure takes the six fields.
  • reaction.scheme, a canonical kind (spec § 5.14): steps in reading order
    relating structure sections as reactants, reagents and products, each
    with an optional stoichiometric coefficient, under a forward,
    equilibrium, retrosynthetic or resonance arrow, with the conditions
    and the yield (yield_percent, yield_text). Roles are chemical whatever
    the arrow; the step key energies is reserved for reaction energies.
    Validators resolve every participant (E_REF_UNRESOLVED) and reject
    duplicate step ids and repeated participants (E_MEMBER_MALFORMED).
    Python add_reaction_scheme.
  • preview, a canonical kind (spec § 5.15): a raster thumbnail
    (image/png or image/jpeg) and an optional image (also
    image/svg+xml), both opaque members with a required media_type; the
    archive's picture is the thumbnail of the first preview section, and SVG
    is self-contained and inert. Validators check the bytes against the media
    type (E_MEMBER_MALFORMED, E_UTF8). Python add_preview sniffs and
    checks the image type and stores the members uncompressed.
  • media_type, an optional field of every member spec (spec § 4.2): the IANA
    media type of the member's bytes. Vendor sections may carry opaque members
    (binary without dtype and shape); Python add_vendor_section takes
    opaque_members=.
  • Job sets (spec § 5.9): an archive may carry several job.spec sections,
    each naming its structure; run.record gains job_ref (the job it ran,
    resolved by validators) and run_status (its outcome), and
    provenance.run_status summarises the set. Python add_run_record takes
    job_ref= and run_status=, and add_job_spec writes structure_ref on
    the section object as well as in the payload.
  • File identification (spec § 2.4): the extension .qvf, the media type
    application/vnd.vibe-qc.qvf+zip and the macOS Uniform Type Identifier
    com.vibe-qc.qvf (conforming to public.zip-archive and
    public.content), in registry.json (file_type) and as declarations to
    copy in spec/file-type/ (qvf-uti.plist, qvf-mime.xml).
  • registry.json registers the vendor namespace x_vibesketch.
  • Finding codes W_VERSION_WITHDRAWN and E_CHARGE_MULTIPLICITY
    (Appendix B).
  • C++ reference writer: add_reaction_scheme, add_preview,
    set_structure_identity, remove_section, add_opaque_member and an
    add_vendor_section overload with OpaqueMembers, RunRecord::job_ref
    and run_status; qvf::MemberSpec::media_type in the typed model; a member
    of an update whose path the archive already holds gets a fresh path
    (<stem>.<n><suffix>) instead of an exception, begin_binary included;
    open_for_update accepts qvf_version: 2 and writes 1.
    write_all_kinds covers all 56 canonical kinds. The C++ and JavaScript
    validators implement every new rule with the codes and locations of the
    Python one (@qvf/core also types media_type and regenerates its kind
    list).
  • Python reference writer: label= on every add_* method;
    remove_section(id), which with an add_* under the same id replaces a
    section; open_for_update takes an archive's bytes as well as its path;
    to_bytes(repack=True) and write(..., repack=True) drop superseded
    entries; a member of an update whose default path the archive already
    holds gets a fresh path instead of an error.
  • Conformance corpus: reaction_scheme.qvf (eight species with their
    identity, a three-step scheme, a preview, an opaque vendor member) and
    job_set.qvf (a job set halfway through); ten negative archives for the
    new rules.
  • Spec § 5.8 "Sharing and sanitisation": run.record inputs, logs,
    attachments, command, and files filenames may carry paths, user names,
    and host names; producers SHOULD offer suppression or redaction; a toolkit
    scrub operation is the intended mechanism (WP-07).
  • C++ qvf::Json::erase(key) (WP-07).
  • Payload schemas for the spectra and analysis members (spec § 5.4, § 5.7,
    § 6): $defs/SpectrumPayload for the six 1-D spectra, with new optional
    x_units, y_units, x, peaks, broadening, temperature_k, raman
    and uvvis (frequencies keeps the x axis in the kind's § 4.3 unit);
    typed NmrSpectrumPayload and EprSpectrumPayload; strict BondsPayload
    (also the structure section's bonds member), BondOrdersPayload and
    ScfHistoryPayload; QtaimPayload with an optional units object
    (positions in Å unless declared, a provisional default); SymmetryPayload.
    Validators check each with E_PAYLOAD_SCHEMA, including the equal-length
    rule of a 1-D spectrum, so malformed payloads that used to pass now fail.
    Corpus spectra_all.qvf, nmr.qvf, qtaim.qvf, symmetry.qvf; three
    negative payload archives. Python add_spectrum checks array lengths and
    takes x_units, y_units, peaks, broadening; add_topology_qtaim
    takes units. No qvf_version bump (P01, P13, D05, D18, WP-11).
  • Payload definitions for the geometry and wavefunction JSON members: volume
    grid and reaction.path volume_grid ($defs/VolumeGridPayload),
    wavefunction.gto basis and mo_metadata (BasisPayload,
    MoMetadataPayload), and the metadata / waypoints payloads of
    trajectory, reaction.path, reaction.waypoints, scan.surface and
    vibrations. Spec § 5.2, § 5.3 and § 5.5 gain payload tables, and § 6
    checks every JSON member that has a payload definition (E_PAYLOAD_SCHEMA).
    Additive, no qvf_version bump; a previously unconstrained malformed
    payload now fails validation. Corpus gains trajectory.qvf,
    vibrations.qvf, scan_surface.qvf and reaction_path.qvf; the negative
    corpus gains three payload_* archives (P01, D07, WP-10).
  • Schema and spec § 5.6: optional members phonon_bands.eigenvectors
    (float64 [n_q, n_modes, n_atoms, 3], or [n_q, n_modes, n_atoms, 3, 2]
    with the last axis [re, im]) and phonon_dos.projected (float64
    [n_channels, n_points], rows labelled by meta.channels); the dos.total
    / dos.projected section fields n_spin, smearing, smearing_type,
    fermi_energy_ev, n_electrons and channels named as optional typed
    properties. The atom_properties roles (mulliken_charge,
    loewdin_charge, hirshfeld_charge, iao_charge, spin_population) are
    one list in the schema and spec § 5 / § 5.7. Corpus archives phonons.qvf
    and atom_properties_all.qvf. No qvf_version bump (D02, D03, D08, WP-04).
  • Payload definitions for the periodic kinds and the run-record files index
    (spec § 5.6, § 5.8): strict $defs/KpathPayload (with KpathSegment),
    FermiMeshPayload, QpathPayload, EosFitPayload and
    RunRecordFilesPayload; typed-open DosMetaPayload (dos.coop /
    dos.cohp meta), PhononMetaPayload and the shared DosChannel. The
    Python validator checks each member against its definition
    (E_PAYLOAD_SCHEMA) through a (kind, role) table. No qvf_version bump
    (P01, P14, D07, WP-12).
  • Spin axis on projections: bands.projections [n_spin, n_k, n_bands, n_channels] and dos.projected.projections [n_spin, n_channels, n_points]; the lower-rank shapes stay legal and mean n_spin = 1. New
    optional bands.occupations [n_spin, n_k, n_bands]. Both validators report
    shapes that disagree with eigenvalues as E_MEMBER_MALFORMED; Python and
    C++ add_bands take occupations (C++: a new overload), and the writers
    refuse disagreeing shapes (D04, WP-12).
  • Conformance corpus: bands_spin.qvf, dos.qvf, fermi_surface.qvf,
    eos.qvf; negative corpus: bands_spin_mismatch.qvf,
    eos_model_unknown.qvf (WP-12).
  • Unit vocabulary (spec § 4.3, "Unit names" and "Declared units";
    $defs/UnitName, 25 names from angstrom to dimensionless). Every payload
    units object (now also on the volume grid), the 1-D spectrum's x_units,
    y_units and broadening.units, and ValueWithUnits.units are typed as
    unit names, and declarations of units § 4.3 fixes are const in the payload
    definitions. New warning W_UNIT_UNKNOWN in the Python, C++ and JavaScript
    validators. Python module qvf_units (UNITS, LEGACY_UNITS, is_unit,
    canonical, convert, fixed_units) and C++ header qvf/units.hpp
    (qvf::Unit, unit_name, parse_unit, canonical_unit, convert), with
    CODATA 2018 length and energy conversio...
Read more

qvf v0.1.0-docs.1

Choose a tag to compare

@mpei mpei released this 23 Oct 11:59

Public source release of qvf v0.1.0-docs.1. No changelog section was found for this version in the tagged source.


Download Source code (zip) or Source code (tar.gz) under Assets. These are source archives, not prebuilt installers; follow the included installation instructions. Managed Git-based installers need a clone checked out at this tag.

Documentation: https://vibe-qc.com/ · Desktop downloads: https://vibe-qc.com/download/

qvf v0.1.0

Choose a tag to compare

@mpei mpei released this 23 Oct 11:59

Public source release of qvf v0.1.0. No changelog section was found for this version in the tagged source.


Download Source code (zip) or Source code (tar.gz) under Assets. These are source archives, not prebuilt installers; follow the included installation instructions. Managed Git-based installers need a clone checked out at this tag.

Documentation: https://vibe-qc.com/ · Desktop downloads: https://vibe-qc.com/download/