clip()#

relationalai.std.math
#clip(value: Number|Producer, lower: Number|Producer, upper: Number|Producer) -> Expression

Restricts value to be within the specified bounds lower and upper. If value, lower, or upper is a Producer, clip() filters out any non-numeric values from the producer. Must be called in a rule or query context.

Parameters#

NameTypeDescription
valueProducer or Python Number objectThe number to restrict within the specified bounds.
lowerProducer or Python Number objectThe lower bound for the value.
upperProducer or Python Number objectThe upper bound for the value.

Returns#

An Expression object.

Example#

Use clip() to restrict values within a specified range:

#import relationalai as rai
from relationalai.std import math


# =====
# SETUP
# =====

model = rai.Model("MyModel")
Account = model.Type("Account")

with model.rule():
    Account.add(id=1).set(balance=100)
    Account.add(id=2).set(balance=-50)
    Account.add(id=3).set(balance=300)
    Account.add(id=4).set(balance="INVALID")  # Non-numeric balance


# =======
# EXAMPLE
# =======

# Set a clipped_balance property for each account, restricting balance between 0 and 200.
with model.rule():
    account = Account()
    account.set(clipped_balance=math.clip(account.balance, 0, 200))

# Since clip() filters out non-numeric values, the clipped_balance property
# is not set for the account with id=4.
with model.query() as select:
    account = Account()
    response = select(account.id, account.balance, account.clipped_balance)

print(response.results)
#    id  balance  clipped_balance
# 0   1      100              100
# 1   2      -50                0
# 2   3      300              200
# 3   4  INVALID              NaN

See Also#