# fiftyone.core.aggregations¶

Aggregations.

Classes:

 Aggregation(field_or_expr[, expr, safe]) Abstract base class for all aggregations. Bounds(field_or_expr[, expr, safe, …]) Computes the bounds of a numeric field of a collection. Count([field_or_expr, expr, safe, _unwind]) Counts the number of field values in a collection. CountValues(field_or_expr[, expr, safe, …]) Counts the occurrences of field values in a collection. Distinct(field_or_expr[, expr, safe]) Computes the distinct values of a field in a collection. HistogramValues(field_or_expr[, expr, bins, …]) Computes a histogram of the field values in a collection. Mean(field_or_expr[, expr, safe]) Computes the arithmetic mean of the field values of a collection. Std(field_or_expr[, expr, safe, sample]) Computes the standard deviation of the field values of a collection. Sum(field_or_expr[, expr, safe]) Computes the sum of the field values of a collection. Values(field_or_expr[, expr, missing_value, …]) Extracts the values of the field from all samples in a collection.

Exceptions:

 AggregationError An error raised during the execution of an Aggregation.
class fiftyone.core.aggregations.Aggregation(field_or_expr, expr=None, safe=False)

Bases: object

Abstract base class for all aggregations.

Aggregation instances represent an aggregation or reduction of a fiftyone.core.collections.SampleCollection instance.

Parameters

Methods:

 Returns the default result for this aggregation. Parses the output of to_mongo(). to_mongo(sample_collection) Returns the MongoDB aggregation pipeline for this aggregation.

Attributes:

 expr The expression being computed, if any. field_name The name of the field being computed on, if any. safe Whether nan/inf values will be ignored when dealing with floating point values.
property field_name

The name of the field being computed on, if any.

property expr

The expression being computed, if any.

property safe

Whether nan/inf values will be ignored when dealing with floating point values.

to_mongo(sample_collection)

Returns the MongoDB aggregation pipeline for this aggregation.

Parameters

sample_collection – the fiftyone.core.collections.SampleCollection to which the aggregation is being applied

Returns

a MongoDB aggregation pipeline (list of dicts)

parse_result(d)

Parses the output of to_mongo().

Parameters

d – the result dict, or, when _is_big_batchable() is True, the iterable of result dicts

Returns

the aggregation result

default_result()

Returns the default result for this aggregation.

Default results are used when aggregations are applied to empty collections.

Returns

the aggregation result

exception fiftyone.core.aggregations.AggregationError

Bases: Exception

An error raised during the execution of an Aggregation.

args
with_traceback()

Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.

class fiftyone.core.aggregations.Bounds(field_or_expr, expr=None, safe=False, _count_nonfinites=False)

Computes the bounds of a numeric field of a collection.

None-valued fields are ignored.

This aggregation is typically applied to numeric or date field types (or lists of such types):

Examples:

import fiftyone as fo
from fiftyone import ViewField as F

dataset = fo.Dataset()
[
fo.Sample(
filepath="/path/to/image1.png",
numeric_field=1.0,
numeric_list_field=[1, 2, 3],
),
fo.Sample(
filepath="/path/to/image2.png",
numeric_field=4.0,
numeric_list_field=[1, 2],
),
fo.Sample(
filepath="/path/to/image3.png",
numeric_field=None,
numeric_list_field=None,
),
]
)

#
# Compute the bounds of a numeric field
#

aggregation = fo.Bounds("numeric_field")
bounds = dataset.aggregate(aggregation)
print(bounds)  # (min, max)

#
# Compute the a bounds of a numeric list field
#

aggregation = fo.Bounds("numeric_list_field")
bounds = dataset.aggregate(aggregation)
print(bounds)  # (min, max)

#
# Compute the bounds of a transformation of a numeric field
#

aggregation = fo.Bounds(2 * (F("numeric_field") + 1))
bounds = dataset.aggregate(aggregation)
print(bounds)  # (min, max)

Parameters

Methods:

 Returns the default result for this aggregation. Parses the output of to_mongo(). to_mongo(sample_collection) Returns the MongoDB aggregation pipeline for this aggregation.

Attributes:

 expr The expression being computed, if any. field_name The name of the field being computed on, if any. safe Whether nan/inf values will be ignored when dealing with floating point values.
default_result()

Returns the default result for this aggregation.

Returns

(None, None)

parse_result(d)

Parses the output of to_mongo().

Parameters

d – the result dict

Returns

the (min, max) bounds

to_mongo(sample_collection)

Returns the MongoDB aggregation pipeline for this aggregation.

Parameters

sample_collection – the fiftyone.core.collections.SampleCollection to which the aggregation is being applied

Returns

a MongoDB aggregation pipeline (list of dicts)

property expr

The expression being computed, if any.

property field_name

The name of the field being computed on, if any.

property safe

Whether nan/inf values will be ignored when dealing with floating point values.

class fiftyone.core.aggregations.Count(field_or_expr=None, expr=None, safe=False, _unwind=True)

Counts the number of field values in a collection.

None-valued fields are ignored.

If no field or expression is provided, the samples themselves are counted.

Examples:

import fiftyone as fo
from fiftyone import ViewField as F

dataset = fo.Dataset()
[
fo.Sample(
filepath="/path/to/image1.png",
predictions=fo.Detections(
detections=[
fo.Detection(label="cat"),
fo.Detection(label="dog"),
]
),
),
fo.Sample(
filepath="/path/to/image2.png",
predictions=fo.Detections(
detections=[
fo.Detection(label="cat"),
fo.Detection(label="rabbit"),
fo.Detection(label="squirrel"),
]
),
),
fo.Sample(
filepath="/path/to/image3.png",
predictions=None,
),
]
)

#
# Count the number of samples in the dataset
#

aggregation = fo.Count()
count = dataset.aggregate(aggregation)
print(count)  # the count

#
# Count the number of samples with predictions
#

aggregation = fo.Count("predictions")
count = dataset.aggregate(aggregation)
print(count)  # the count

#
# Count the number of objects in the predictions field
#

aggregation = fo.Count("predictions.detections")
count = dataset.aggregate(aggregation)
print(count)  # the count

#
# Count the number of objects in samples with > 2 predictions
#

aggregation = fo.Count(
(F("predictions.detections").length() > 2).if_else(
F("predictions.detections"), None
)
)
count = dataset.aggregate(aggregation)
print(count)  # the count

Parameters

Methods:

 Returns the default result for this aggregation. Parses the output of to_mongo(). to_mongo(sample_collection) Returns the MongoDB aggregation pipeline for this aggregation.

Attributes:

 expr The expression being computed, if any. field_name The name of the field being computed on, if any. safe Whether nan/inf values will be ignored when dealing with floating point values.
default_result()

Returns the default result for this aggregation.

Returns

0

parse_result(d)

Parses the output of to_mongo().

Parameters

d – the result dict

Returns

the count

to_mongo(sample_collection)

Returns the MongoDB aggregation pipeline for this aggregation.

Parameters

sample_collection – the fiftyone.core.collections.SampleCollection to which the aggregation is being applied

Returns

a MongoDB aggregation pipeline (list of dicts)

property expr

The expression being computed, if any.

property field_name

The name of the field being computed on, if any.

property safe

Whether nan/inf values will be ignored when dealing with floating point values.

class fiftyone.core.aggregations.CountValues(field_or_expr, expr=None, safe=False, _first=None, _sort_by='count', _asc=True, _include=None, _search='', _selected=[])

Counts the occurrences of field values in a collection.

This aggregation is typically applied to countable field types (or lists of such types):

Examples:

import fiftyone as fo
from fiftyone import ViewField as F

dataset = fo.Dataset()
[
fo.Sample(
filepath="/path/to/image1.png",
tags=["sunny"],
predictions=fo.Detections(
detections=[
fo.Detection(label="cat"),
fo.Detection(label="dog"),
]
),
),
fo.Sample(
filepath="/path/to/image2.png",
tags=["cloudy"],
predictions=fo.Detections(
detections=[
fo.Detection(label="cat"),
fo.Detection(label="rabbit"),
]
),
),
fo.Sample(
filepath="/path/to/image3.png",
predictions=None,
),
]
)

#
# Compute the tag counts in the dataset
#

aggregation = fo.CountValues("tags")
counts = dataset.aggregate(aggregation)
print(counts)  # dict mapping values to counts

#
# Compute the predicted label counts in the dataset
#

aggregation = fo.CountValues("predictions.detections.label")
counts = dataset.aggregate(aggregation)
print(counts)  # dict mapping values to counts

#
# Compute the predicted label counts after some normalization
#

aggregation = fo.CountValues(
F("predictions.detections.label").map_values(
{"cat": "pet", "dog": "pet"}
).upper()
)
counts = dataset.aggregate(aggregation)
print(counts)  # dict mapping values to counts

Parameters

Methods:

 Returns the default result for this aggregation. Parses the output of to_mongo(). to_mongo(sample_collection) Returns the MongoDB aggregation pipeline for this aggregation.

Attributes:

 expr The expression being computed, if any. field_name The name of the field being computed on, if any. safe Whether nan/inf values will be ignored when dealing with floating point values.
default_result()

Returns the default result for this aggregation.

Returns

{}

parse_result(d)

Parses the output of to_mongo().

Parameters

d – the result dict

Returns

a dict mapping values to counts

to_mongo(sample_collection)

Returns the MongoDB aggregation pipeline for this aggregation.

Parameters

sample_collection – the fiftyone.core.collections.SampleCollection to which the aggregation is being applied

Returns

a MongoDB aggregation pipeline (list of dicts)

property expr

The expression being computed, if any.

property field_name

The name of the field being computed on, if any.

property safe

Whether nan/inf values will be ignored when dealing with floating point values.

class fiftyone.core.aggregations.Distinct(field_or_expr, expr=None, safe=False)

Computes the distinct values of a field in a collection.

None-valued fields are ignored.

This aggregation is typically applied to countable field types (or lists of such types):

Examples:

import fiftyone as fo
from fiftyone import ViewField as F

dataset = fo.Dataset()
[
fo.Sample(
filepath="/path/to/image1.png",
tags=["sunny"],
predictions=fo.Detections(
detections=[
fo.Detection(label="cat"),
fo.Detection(label="dog"),
]
),
),
fo.Sample(
filepath="/path/to/image2.png",
tags=["sunny", "cloudy"],
predictions=fo.Detections(
detections=[
fo.Detection(label="cat"),
fo.Detection(label="rabbit"),
]
),
),
fo.Sample(
filepath="/path/to/image3.png",
predictions=None,
),
]
)

#
# Get the distinct tags in a dataset
#

aggregation = fo.Distinct("tags")
values = dataset.aggregate(aggregation)
print(values)  # list of distinct values

#
# Get the distinct predicted labels in a dataset
#

aggregation = fo.Distinct("predictions.detections.label")
values = dataset.aggregate(aggregation)
print(values)  # list of distinct values

#
# Get the distinct predicted labels after some normalization
#

aggregation = fo.Distinct(
F("predictions.detections.label").map_values(
{"cat": "pet", "dog": "pet"}
).upper()
)
values = dataset.aggregate(aggregation)
print(values)  # list of distinct values

Parameters

Methods:

 Returns the default result for this aggregation. Parses the output of to_mongo(). to_mongo(sample_collection) Returns the MongoDB aggregation pipeline for this aggregation.

Attributes:

 expr The expression being computed, if any. field_name The name of the field being computed on, if any. safe Whether nan/inf values will be ignored when dealing with floating point values.
default_result()

Returns the default result for this aggregation.

Returns

[]

parse_result(d)

Parses the output of to_mongo().

Parameters

d – the result dict

Returns

a sorted list of distinct values

to_mongo(sample_collection)

Returns the MongoDB aggregation pipeline for this aggregation.

Parameters

sample_collection – the fiftyone.core.collections.SampleCollection to which the aggregation is being applied

Returns

a MongoDB aggregation pipeline (list of dicts)

property expr

The expression being computed, if any.

property field_name

The name of the field being computed on, if any.

property safe

Whether nan/inf values will be ignored when dealing with floating point values.

class fiftyone.core.aggregations.HistogramValues(field_or_expr, expr=None, bins=None, range=None, auto=False)

Computes a histogram of the field values in a collection.

This aggregation is typically applied to numeric or date field types (or lists of such types):

Examples:

import numpy as np
import matplotlib.pyplot as plt

import fiftyone as fo
from fiftyone import ViewField as F

samples = []
for idx in range(100):
samples.append(
fo.Sample(
filepath="/path/to/image%d.png" % idx,
numeric_field=np.random.randn(),
numeric_list_field=list(np.random.randn(10)),
)
)

dataset = fo.Dataset()

def plot_hist(counts, edges):
counts = np.asarray(counts)
edges = np.asarray(edges)
left_edges = edges[:-1]
widths = edges[1:] - edges[:-1]
plt.bar(left_edges, counts, width=widths, align="edge")

#
# Compute a histogram of a numeric field
#

aggregation = fo.HistogramValues("numeric_field", bins=50)
counts, edges, other = dataset.aggregate(aggregation)

plot_hist(counts, edges)
plt.show(block=False)

#
# Compute the histogram of a numeric list field
#

aggregation = fo.HistogramValues("numeric_list_field", bins=50)
counts, edges, other = dataset.aggregate(aggregation)

plot_hist(counts, edges)
plt.show(block=False)

#
# Compute the histogram of a transformation of a numeric field
#

aggregation = fo.HistogramValues(2 * (F("numeric_field") + 1), bins=50)
counts, edges, other = dataset.aggregate(aggregation)

plot_hist(counts, edges)
plt.show(block=False)

Parameters
• field_or_expr

a field name, embedded.field.name, fiftyone.core.expressions.ViewExpression, or MongoDB expression defining the field or expression to aggregate

• expr (None) –

a fiftyone.core.expressions.ViewExpression or MongoDB expression to apply to field_or_expr (which must be a field) before aggregating

• bins (None) – can be either an integer number of bins to generate or a monotonically increasing sequence specifying the bin edges to use. By default, 10 bins are created. If bins is an integer and no range is specified, bin edges are automatically computed from the bounds of the field

• range (None) – a (lower, upper) tuple specifying a range in which to generate equal-width bins. Only applicable when bins is an integer or None

• auto (False) – whether to automatically choose bin edges in an attempt to evenly distribute the counts in each bin. If this option is chosen, bins will only be used if it is an integer, and the range parameter is ignored

Methods:

 Returns the default result for this aggregation. Parses the output of to_mongo(). to_mongo(sample_collection) Returns the MongoDB aggregation pipeline for this aggregation.

Attributes:

 expr The expression being computed, if any. field_name The name of the field being computed on, if any. safe Whether nan/inf values will be ignored when dealing with floating point values.
default_result()

Returns the default result for this aggregation.

Returns

a tuple of

• counts: []

• edges: []

• other: 0

parse_result(d)

Parses the output of to_mongo().

Parameters

d – the result dict

Returns

a tuple of

• counts: a list of counts in each bin

• edges: an increasing list of bin edges of length len(counts) + 1. Note that each bin is treated as having an inclusive lower boundary and exclusive upper boundary, [lower, upper), including the rightmost bin

• other: the number of items outside the bins

to_mongo(sample_collection)

Returns the MongoDB aggregation pipeline for this aggregation.

Parameters

sample_collection – the fiftyone.core.collections.SampleCollection to which the aggregation is being applied

Returns

a MongoDB aggregation pipeline (list of dicts)

property expr

The expression being computed, if any.

property field_name

The name of the field being computed on, if any.

property safe

Whether nan/inf values will be ignored when dealing with floating point values.

class fiftyone.core.aggregations.Mean(field_or_expr, expr=None, safe=False)

Computes the arithmetic mean of the field values of a collection.

None-valued fields are ignored.

This aggregation is typically applied to numeric field types (or lists of such types):

Examples:

import fiftyone as fo
from fiftyone import ViewField as F

dataset = fo.Dataset()
[
fo.Sample(
filepath="/path/to/image1.png",
numeric_field=1.0,
numeric_list_field=[1, 2, 3],
),
fo.Sample(
filepath="/path/to/image2.png",
numeric_field=4.0,
numeric_list_field=[1, 2],
),
fo.Sample(
filepath="/path/to/image3.png",
numeric_field=None,
numeric_list_field=None,
),
]
)

#
# Compute the mean of a numeric field
#

aggregation = fo.Mean("numeric_field")
mean = dataset.aggregate(aggregation)
print(mean)  # the mean

#
# Compute the mean of a numeric list field
#

aggregation = fo.Mean("numeric_list_field")
mean = dataset.aggregate(aggregation)
print(mean)  # the mean

#
# Compute the mean of a transformation of a numeric field
#

aggregation = fo.Mean(2 * (F("numeric_field") + 1))
mean = dataset.aggregate(aggregation)
print(mean)  # the mean

Parameters

Methods:

 Returns the default result for this aggregation. Parses the output of to_mongo(). to_mongo(sample_collection) Returns the MongoDB aggregation pipeline for this aggregation.

Attributes:

 expr The expression being computed, if any. field_name The name of the field being computed on, if any. safe Whether nan/inf values will be ignored when dealing with floating point values.
default_result()

Returns the default result for this aggregation.

Returns

0

parse_result(d)

Parses the output of to_mongo().

Parameters

d – the result dict

Returns

the mean

to_mongo(sample_collection)

Returns the MongoDB aggregation pipeline for this aggregation.

Parameters

sample_collection – the fiftyone.core.collections.SampleCollection to which the aggregation is being applied

Returns

a MongoDB aggregation pipeline (list of dicts)

property expr

The expression being computed, if any.

property field_name

The name of the field being computed on, if any.

property safe

Whether nan/inf values will be ignored when dealing with floating point values.

class fiftyone.core.aggregations.Std(field_or_expr, expr=None, safe=False, sample=False)

Computes the standard deviation of the field values of a collection.

None-valued fields are ignored.

This aggregation is typically applied to numeric field types (or lists of such types):

Examples:

import fiftyone as fo
from fiftyone import ViewField as F

dataset = fo.Dataset()
[
fo.Sample(
filepath="/path/to/image1.png",
numeric_field=1.0,
numeric_list_field=[1, 2, 3],
),
fo.Sample(
filepath="/path/to/image2.png",
numeric_field=4.0,
numeric_list_field=[1, 2],
),
fo.Sample(
filepath="/path/to/image3.png",
numeric_field=None,
numeric_list_field=None,
),
]
)

#
# Compute the standard deviation of a numeric field
#

aggregation = fo.Std("numeric_field")
std = dataset.aggregate(aggregation)
print(std)  # the standard deviation

#
# Compute the standard deviation of a numeric list field
#

aggregation = fo.Std("numeric_list_field")
std = dataset.aggregate(aggregation)
print(std)  # the standard deviation

#
# Compute the standard deviation of a transformation of a numeric field
#

aggregation = fo.Std(2 * (F("numeric_field") + 1))
std = dataset.aggregate(aggregation)
print(std)  # the standard deviation

Parameters

Methods:

 Returns the default result for this aggregation. Parses the output of to_mongo(). to_mongo(sample_collection) Returns the MongoDB aggregation pipeline for this aggregation.

Attributes:

 expr The expression being computed, if any. field_name The name of the field being computed on, if any. safe Whether nan/inf values will be ignored when dealing with floating point values.
default_result()

Returns the default result for this aggregation.

Returns

0

parse_result(d)

Parses the output of to_mongo().

Parameters

d – the result dict

Returns

the standard deviation

to_mongo(sample_collection)

Returns the MongoDB aggregation pipeline for this aggregation.

Parameters

sample_collection – the fiftyone.core.collections.SampleCollection to which the aggregation is being applied

Returns

a MongoDB aggregation pipeline (list of dicts)

property expr

The expression being computed, if any.

property field_name

The name of the field being computed on, if any.

property safe

Whether nan/inf values will be ignored when dealing with floating point values.

class fiftyone.core.aggregations.Sum(field_or_expr, expr=None, safe=False)

Computes the sum of the field values of a collection.

None-valued fields are ignored.

This aggregation is typically applied to numeric field types (or lists of such types):

Examples:

import fiftyone as fo
from fiftyone import ViewField as F

dataset = fo.Dataset()
[
fo.Sample(
filepath="/path/to/image1.png",
numeric_field=1.0,
numeric_list_field=[1, 2, 3],
),
fo.Sample(
filepath="/path/to/image2.png",
numeric_field=4.0,
numeric_list_field=[1, 2],
),
fo.Sample(
filepath="/path/to/image3.png",
numeric_field=None,
numeric_list_field=None,
),
]
)

#
# Compute the sum of a numeric field
#

aggregation = fo.Sum("numeric_field")
total = dataset.aggregate(aggregation)
print(total)  # the sum

#
# Compute the sum of a numeric list field
#

aggregation = fo.Sum("numeric_list_field")
total = dataset.aggregate(aggregation)
print(total)  # the sum

#
# Compute the sum of a transformation of a numeric field
#

aggregation = fo.Sum(2 * (F("numeric_field") + 1))
total = dataset.aggregate(aggregation)
print(total)  # the sum

Parameters

Methods:

 Returns the default result for this aggregation. Parses the output of to_mongo(). to_mongo(sample_collection) Returns the MongoDB aggregation pipeline for this aggregation.

Attributes:

 expr The expression being computed, if any. field_name The name of the field being computed on, if any. safe Whether nan/inf values will be ignored when dealing with floating point values.
default_result()

Returns the default result for this aggregation.

Returns

0

parse_result(d)

Parses the output of to_mongo().

Parameters

d – the result dict

Returns

the sum

to_mongo(sample_collection)

Returns the MongoDB aggregation pipeline for this aggregation.

Parameters

sample_collection – the fiftyone.core.collections.SampleCollection to which the aggregation is being applied

Returns

a MongoDB aggregation pipeline (list of dicts)

property expr

The expression being computed, if any.

property field_name

The name of the field being computed on, if any.

property safe

Whether nan/inf values will be ignored when dealing with floating point values.

class fiftyone.core.aggregations.Values(field_or_expr, expr=None, missing_value=None, unwind=False, _allow_missing=False, _big_result=True, _raw=False)

Extracts the values of the field from all samples in a collection.

Values aggregations are useful for efficiently extracting a slice of field or embedded field values across all samples in a collection. See the examples below for more details.

The dual function of Values is set_values(), which can be used to efficiently set a field or embedded field of all samples in a collection by providing lists of values of same structure returned by this aggregation.

Note

Unlike other aggregations, Values does not automatically unwind list fields, which ensures that the returned values match the potentially-nested structure of the documents.

You can opt-in to unwinding specific list fields using the [] syntax, or you can pass the optional unwind=True parameter to unwind all supported list fields. See Aggregating list fields for more information.

Examples:

import fiftyone as fo
import fiftyone.zoo as foz
from fiftyone import ViewField as F

dataset = fo.Dataset()
[
fo.Sample(
filepath="/path/to/image1.png",
numeric_field=1.0,
numeric_list_field=[1, 2, 3],
),
fo.Sample(
filepath="/path/to/image2.png",
numeric_field=4.0,
numeric_list_field=[1, 2],
),
fo.Sample(
filepath="/path/to/image3.png",
numeric_field=None,
numeric_list_field=None,
),
]
)

#
# Get all values of a field
#

aggregation = fo.Values("numeric_field")
values = dataset.aggregate(aggregation)
print(values)  # [1.0, 4.0, None]

#
# Get all values of a list field
#

aggregation = fo.Values("numeric_list_field")
values = dataset.aggregate(aggregation)
print(values)  # [[1, 2, 3], [1, 2], None]

#
# Get all values of transformed field
#

aggregation = fo.Values(2 * (F("numeric_field") + 1))
values = dataset.aggregate(aggregation)
print(values)  # [4.0, 10.0, None]

#
# Get values from a label list field
#

# list of Detections
aggregation = fo.Values("ground_truth")
detections = dataset.aggregate(aggregation)

# list of lists of Detection instances
aggregation = fo.Values("ground_truth.detections")
detections = dataset.aggregate(aggregation)

# list of lists of detection labels
aggregation = fo.Values("ground_truth.detections.label")
labels = dataset.aggregate(aggregation)

Parameters

Methods:

 Returns the default result for this aggregation. Parses the output of to_mongo(). to_mongo(sample_collection[, big_field]) Returns the MongoDB aggregation pipeline for this aggregation.

Attributes:

 expr The expression being computed, if any. field_name The name of the field being computed on, if any. safe Whether nan/inf values will be ignored when dealing with floating point values.
default_result()

Returns the default result for this aggregation.

Returns

[]

parse_result(d)

Parses the output of to_mongo().

Parameters

d – the result dict

Returns

the list of field values

to_mongo(sample_collection, big_field='values')

Returns the MongoDB aggregation pipeline for this aggregation.

Parameters

sample_collection – the fiftyone.core.collections.SampleCollection to which the aggregation is being applied

Returns

a MongoDB aggregation pipeline (list of dicts)

property expr

The expression being computed, if any.

property field_name

The name of the field being computed on, if any.

property safe

Whether nan/inf values will be ignored when dealing with floating point values.