in pyiceberg/transforms.py [0:0]
def strict_project(self, name: str, pred: BoundPredicate[Any]) -> Optional[UnboundPredicate[Any]]:
field_type = pred.term.ref().field.field_type
if isinstance(pred.term, BoundTransform):
return _project_transform_predicate(self, name, pred)
if isinstance(pred, BoundUnaryPredicate):
return pred.as_unbound(Reference(name))
if isinstance(field_type, (IntegerType, LongType, DecimalType)):
if isinstance(pred, BoundLiteralPredicate):
return _truncate_number_strict(name, pred, self.transform(field_type))
elif isinstance(pred, BoundNotIn):
return _set_apply_transform(name, pred, self.transform(field_type))
else:
return None
if isinstance(pred, BoundLiteralPredicate):
if isinstance(pred, BoundStartsWith):
literal_width = len(pred.literal.value)
if literal_width < self.width:
return pred.as_unbound(name, pred.literal.value)
elif literal_width == self.width:
return EqualTo(name, pred.literal.value)
else:
return None
elif isinstance(pred, BoundNotStartsWith):
literal_width = len(pred.literal.value)
if literal_width < self.width:
return pred.as_unbound(name, pred.literal.value)
elif literal_width == self.width:
return NotEqualTo(name, pred.literal.value)
else:
return pred.as_unbound(name, self.transform(field_type)(pred.literal.value))
else:
# ProjectionUtil.truncateArrayStrict(name, pred, this);
return _truncate_array_strict(name, pred, self.transform(field_type))
elif isinstance(pred, BoundNotIn):
return _set_apply_transform(name, pred, self.transform(field_type))
else:
return None