v1
cst_calculation record, v1 — canonical aliases.
Consumers and the record registry import from here and never touch the inner
module names, mirroring steps/*/v1/__init__.py.
Module
Submodules
- bitfount.cache.types.cst_calculation.v1.migrations - No inbound migration — this is the base version.
- bitfount.cache.types.cst_calculation.v1.model - Pydantic record for the
cst_calculationcache table (v1). - bitfount.cache.types.cst_calculation.v1.schema - SQLAlchemy ORM for the
cst_calculationcache table (v1). - bitfount.cache.types.cst_calculation.v1.store - Store for the
cst_calculationtable (v1).
Classes
ORM
class ORM(**kwargs):SQLAlchemy model for the cst_calculation cache table.
One row per (task_hash, file_id): the Central Subfield / Central Retinal
Thickness metrics computed for a scan from retinal-layer segmentation and
fovea landmark predictions. Thickness is a deterministic function of the
scan and the model output (and the config, which folds into task_hash) —
NOT of the project — so project_id is provenance only and excluded from
the key, letting two projects on the same datasource share rows (mirrors
model_inferences and fluid_calculation).
The metrics live in the schemaless metrics_json blob (the CSTMetrics
scalar fields plus the fovea_coordinates tuple). An uncomputable file is
recorded with a null metrics_json and a non-null error carrying the
reason: missing_data:<fields> when the datasource had no metadata row for
it, calculation_error:<detail> when the maths raised. The shared thickness
runner produces those strings (see
bitfount.steps.data_utils.thickness_calculation); exactly one of
metrics_json and error is set per row, matching the sibling
fluid_calculation and gcc_calculation tables.
A simple constructor that allows initialization from kwargs.
Sets attributes on the constructed instance using the names and
values in kwargs.
Only keys that are present as attributes of the instance's class are allowed. These could be, for example, any mapped columns or relationships.
Ancestors
Variables
-
error : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
-
file_id : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
-
last_accessed_at : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
-
metrics_json : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
-
processed_at : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
-
project_id : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
-
run_id : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
-
tags : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
-
task_hash : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
Record
class Record(**data: Any):Record of a single row from the cst_calculation table.
metrics_json holds the CST/CRT metrics for a successful calculation and is
None when the metric could not be computed for the file. error carries
the reason in that case (missing_data:<fields> when the datasource had no
metadata row for the file, calculation_error:<detail> when the maths
raised); exactly one of metrics_json and error is populated for a row.
Create a new model by parsing and validating input data from keyword arguments.
Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be
validated to form a valid model.
self is explicitly positional-only to allow self as a field name.
Variables
- static
error : str | None
- static
file_id : str
- static
last_accessed_at : datetime.datetime | None
- static
metrics_json : dict[str, typing.Any] | None
- static
model_config
- static
processed_at : datetime.datetime
- static
project_id : str | None
- static
run_id : str | None
- static
tags : dict[str, typing.Any] | None
- static
task_hash : str