tensorflow_ops/time_ops.py (47 lines of code) (raw):
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Python wrapper for BQML time custom ops."""
from bigquery_ml_utils.tensorflow_ops.load_module import load_module
gen_time_ops = load_module("_time_ops.so")
def time_from_components(hour, minute, second, name=None):
"""Returns a time using INT64 values representing the hour, minute, and second.
Equivalent SQL: TIME(hour, minute, second)
Args:
hour: tf.Tensor of type int64 representing the hour.
minute: tf.Tensor of type int64 representing the minute.
second: tf.Tensor of type int64 representing the second.
name: An optional name for the op.
"""
return gen_time_ops.time_from_components(
hour=hour, minute=minute, second=second, name=name
)
def time_from_timestamp(timestamp, time_zone="UTC", name=None):
"""Returns a time from a timestamp.
Equivalent SQL: TIME(timestamp, [time_zone])
Args:
timestamp: tf.Tensor of type string. Timestamp in "%F %H:%M:%E1S %z" format.
time_zone: A string represents the timezone. Case sensitive.
name: An optional name for the op.
"""
return gen_time_ops.time_from_timestamp(
timestamp=timestamp, time_zone=time_zone, name=name
)
def time_from_datetime(datetime, name=None):
"""Returns a time from a datetime.
Equivalent SQL: TIME(datetime)
Args:
datetime: tf.Tensor of type string. Datetime in "%F %H:%M:%E6S" format.
name: An optional name for the op.
"""
return gen_time_ops.time_from_datetime(datetime=datetime, name=name)
def cast_to_time_from_string(time_string, format_string=None, name=None):
"""Returns a time by casting a string.
Equivalent SQL: CAST(string AS TIME [FORMAT format_string])
Args:
time_string: tf.Tensor of type string. The string must conform to the
supported time literal format, and is independent of time zone. If the
string expression is invalid or represents a time that is outside of the
supported min/max range, then an error is produced.
format_string: tf.Tensor of type string. A string which contains format
elements.
name: An optional name for the op.
"""
return gen_time_ops.cast_to_time_from_string(
time_string=time_string,
format_string="" if format_string is None else format_string,
with_format=format_string is not None,
name=name,
)
def time_add(time, interval, part, name=None):
"""Returns a time by adding interval to the time..
Equivalent SQL: TIME(datetime)
Args:
time: tf.Tensor of type string. Time in "%H:%M:%E6S" format.
interval: tf.Tensor of type int64. Integer represents the unit of part.
part: A string represents the datetime part. Can be MICROSECOND,
MILLISECOND, SECOND, MINUTE, HOUR. Case insensitive.
name: An optional name for the op.
"""
return gen_time_ops.time_add(
time=time, interval=interval, part=part, name=name
)
def time_sub(time, interval, part, name=None):
"""Returns a time by subtracting interval to the time.
Equivalent SQL: TIME(datetime)
Args:
time: tf.Tensor of type string. Time in "%H:%M:%E6S" format.
interval: tf.Tensor of type int64. Integer represents the unit of part.
part: A string represents the datetime part. Can be MICROSECOND,
MILLISECOND, SECOND, MINUTE, HOUR. Case insensitive.
name: An optional name for the op.
"""
return gen_time_ops.time_sub(
time=time, interval=interval, part=part, name=name
)
def time_diff(time_a, time_b, part, name=None):
"""Returns the whole number of specified part intervals between two times.
Equivalent SQL: TIME_DIFF(time_expression_a, time_expression_b, part)
Args:
time_a: tf.Tensor of type string. Time in "%H:%M:%E6S" format.
time_b: tf.Tensor of type string. Time in "%H:%M:%E6S" format.
part: A string represents the datetime part. Can be MICROSECOND,
MILLISECOND, SECOND, MINUTE, HOUR. Case insensitive.
name: An optional name for the op.
"""
return gen_time_ops.time_diff(
time_a=time_a, time_b=time_b, part=part, name=name
)
def time_trunc(time, part, name=None):
"""Returns a time by truncating a time to the granularity of part.
Equivalent SQL: TIME_TRUNC(time_expression, time_part)
Args:
time: tf.Tensor of type string. Time in "%H:%M:%E6S" format.
part: A string represents the datetime part. Can be MICROSECOND,
MILLISECOND, SECOND, MINUTE, HOUR. Case insensitive.
name: An optional name for the op.
"""
return gen_time_ops.time_trunc(time=time, part=part, name=name)
def extract_from_time(time, part, name=None):
"""Returns a value that corresponds to the specified part from a supplied time.
Equivalent SQL: EXTRACT(part FROM time_expression)
Args:
time: tf.Tensor of type string. Time in "%H:%M:%E6S" format.
part: A string represents the datetime part. Can be MICROSECOND,
MILLISECOND, SECOND, MINUTE, HOUR. Case insensitive.
name: An optional name for the op.
"""
return gen_time_ops.extract_from_time(time=time, part=part, name=name)
def parse_time(format_string, time_string, name=None):
"""Returns a time by parsing a string representation of time.
Equivalent SQL: PARSE_TIME(format_string, time_string)
Args:
format_string: tf.Tensor of type string. Format of the string time.
time_string: tf.Tensor of type string. Time in any supported format.
name: An optional name for the op.
"""
return gen_time_ops.parse_time(
format_string=format_string, time_string=time_string, name=name
)
def safe_parse_time(format_string, time_string, name=None):
"""Returns a time by safely parsing a string representation of time.
Equivalent SQL: SAFE.PARSE_TIME(format_string, time_string).
Returns "12:34:56.123456" for unsuccessful parsing.
Args:
format_string: tf.Tensor of type string. Format of the string time.
time_string: tf.Tensor of type string. Time in any supported format.
name: An optional name for the op.
"""
return gen_time_ops.safe_parse_time(
format_string=format_string, time_string=time_string, name=name
)
def format_time(format_string, time, name=None):
"""Returns a time by parsing a string representation of time.
Equivalent SQL: TIME_TRUNC(time_expression, time_part)
Args:
format_string: tf.Tensor of type string. Format of the string time.
time: tf.Tensor of type string. Time in "%H:%M:%E6S" format.
name: An optional name for the op.
"""
return gen_time_ops.format_time(
format_string=format_string, time=time, name=name
)