call_report.core.FieldChange#

class call_report.core.FieldChange(*, name: str, before: FieldAttributes, after: FieldAttributes)[source]#

Bases: object

One field’s before/after metadata between two FieldSchema snapshots.

Only appears in FieldSchemaDiff.changed. A field present in only one of the two compared schemas shows up in FieldSchemaDiff.added or FieldSchemaDiff.removed instead, as a plain name.

Attributes:
namestr

The field name.

beforeFieldAttributes

This field’s metadata in the left-hand (self) schema.

afterFieldAttributes

This field’s metadata in the right-hand (other) schema.

Examples

>>> import narwhals as nw
>>> from call_report.core import (
...     FieldAttributes,
...     FieldChange,
...     FieldVersion,
...     PeriodRange,
... )
>>> span = PeriodRange(start="2000-03-31", end="2026-03-31")
>>> old = FieldAttributes(
...     name="UNINUM",
...     versions=(FieldVersion(dtype=nw.Int64(), definition="old", periods=span),),
... )
>>> new = FieldAttributes(
...     name="UNINUM",
...     versions=(FieldVersion(dtype=nw.Int64(), definition="new", periods=span),),
... )
>>> change = FieldChange(name="UNINUM", before=old, after=new)
>>> change.before.versions[0].definition
'old'
property dtype_changed: bool[source]#

Return whether the field’s dtype differs between before and after.

Compares each version’s dtype, in order, ignoring definition and periods. A field whose version count differs between before and after counts as changed too, since the two sequences of dtypes then have different lengths.

Returns:
bool

True if the sequence of dtype values differs between before and after.

Examples

>>> import narwhals as nw
>>> from call_report.core import (
...     FieldAttributes,
...     FieldChange,
...     FieldVersion,
...     PeriodRange,
... )
>>> span = PeriodRange(start="2000-03-31", end="2026-03-31")
>>> old = FieldAttributes(
...     name="PROVLNS",
...     versions=(FieldVersion(dtype=nw.Int64(), definition="", periods=span),),
... )
>>> new = FieldAttributes(
...     name="PROVLNS",
...     versions=(
...         FieldVersion(dtype=nw.Float64(), definition="", periods=span),
...     ),
... )
>>> FieldChange(name="PROVLNS", before=old, after=new).dtype_changed
True
property definition_changed: bool[source]#

Return whether the field’s definition differs between before and after.

Compares each version’s definition, in order, ignoring dtype and periods. A field whose version count differs between before and after counts as changed too, since the two sequences of definitions then have different lengths.

Returns:
bool

True if the sequence of definition values differs between before and after.

Examples

>>> import narwhals as nw
>>> from call_report.core import (
...     FieldAttributes,
...     FieldChange,
...     FieldVersion,
...     PeriodRange,
... )
>>> span = PeriodRange(start="2000-03-31", end="2026-03-31")
>>> old = FieldAttributes(
...     name="PROVLNS",
...     versions=(
...         FieldVersion(dtype=nw.Int64(), definition="old", periods=span),
...     ),
... )
>>> new = FieldAttributes(
...     name="PROVLNS",
...     versions=(
...         FieldVersion(dtype=nw.Int64(), definition="new", periods=span),
...     ),
... )
>>> FieldChange(name="PROVLNS", before=old, after=new).definition_changed
True
property periods_changed: bool[source]#

Return whether the field’s version spans differ between before and after.

Compares each version’s periods, in order, ignoring dtype and definition. This is the difference that shows up on every field common to two schemas taken from different quarters via FieldSchema.as_of, since narrowing to a quarter stamps each surviving field’s one remaining version with that quarter alone.

Returns:
bool

True if the sequence of periods values differs between before and after.

Examples

>>> import narwhals as nw
>>> from call_report.core import (
...     FieldAttributes,
...     FieldChange,
...     FieldVersion,
...     PeriodRange,
... )
>>> q4_2014 = PeriodRange(start="2014-12-31", end="2014-12-31")
>>> q1_2015 = PeriodRange(start="2015-03-31", end="2015-03-31")
>>> before = FieldAttributes(
...     name="UNINUM",
...     versions=(
...         FieldVersion(dtype=nw.Int64(), definition="", periods=q4_2014),
...     ),
... )
>>> after = FieldAttributes(
...     name="UNINUM",
...     versions=(
...         FieldVersion(dtype=nw.Int64(), definition="", periods=q1_2015),
...     ),
... )
>>> FieldChange(name="UNINUM", before=before, after=after).periods_changed
True
property content_changed: bool[source]#

Return whether the field’s dtype or definition differs, ignoring periods.

Shorthand for dtype_changed or definition_changed. Use this to tell a field whose dtype or definition actually moved apart from one whose only difference is periods_changed, the case FieldSchemaDiff.content_changed filters changed down to.

Returns:
bool

True if dtype_changed or definition_changed is True.

Examples

>>> import narwhals as nw
>>> from call_report.core import (
...     FieldAttributes,
...     FieldChange,
...     FieldVersion,
...     PeriodRange,
... )
>>> q4_2014 = PeriodRange(start="2014-12-31", end="2014-12-31")
>>> q1_2015 = PeriodRange(start="2015-03-31", end="2015-03-31")
>>> before = FieldAttributes(
...     name="UNINUM",
...     versions=(
...         FieldVersion(dtype=nw.Int64(), definition="", periods=q4_2014),
...     ),
... )
>>> after = FieldAttributes(
...     name="UNINUM",
...     versions=(
...         FieldVersion(dtype=nw.Int64(), definition="", periods=q1_2015),
...     ),
... )
>>> change = FieldChange(name="UNINUM", before=before, after=after)
>>> change.periods_changed
True
>>> change.content_changed
False