Note
Go to the end to download the full example code.
Filters: minimum before='all' size.#
Arbitrary filters can be applied for all applications using the time_split.settings.misc.filter option. Must be
a predicate (start, mid, end) -> bool. Consider using functools.cache() if your predicate is expensive.
from rics import configure_stuff
from time_split import log_split_progress, plot, settings, split
configure_stuff(datefmt="")
data = ("2022-02", "2022-03")
config = dict(schedule="7d", before="all", after="5d", available=data)
plot(**config, bar_labels="days")
for fold in log_split_progress(split(**config), logger="my-logger"):
print("Doing work..")

👻 Configured some stuff just the way I like it!
[my-logger:INFO] Begin fold 1/4: '2022-02-01' <= [schedule: '2022-02-03' (Thursday)] < '2022-02-08'.
Doing work..
[my-logger:INFO] Finished fold 1/4: [schedule: '2022-02-03' (Thursday)] after 18μs.
[my-logger:INFO] Begin fold 2/4: '2022-02-01' <= [schedule: '2022-02-10' (Thursday)] < '2022-02-15'.
Doing work..
[my-logger:INFO] Finished fold 2/4: [schedule: '2022-02-10' (Thursday)] after 13μs.
[my-logger:INFO] Begin fold 3/4: '2022-02-01' <= [schedule: '2022-02-17' (Thursday)] < '2022-02-22'.
Doing work..
[my-logger:INFO] Finished fold 3/4: [schedule: '2022-02-17' (Thursday)] after 12μs.
[my-logger:INFO] Begin fold 4/4: '2022-02-01' <= [schedule: '2022-02-24' (Thursday)] < '2022-03-01'.
Doing work..
[my-logger:INFO] Finished fold 4/4: [schedule: '2022-02-24' (Thursday)] after 12μs.
By setting settings.misc.filter, arbitrary conditions may be
forced on the generated folds.
def at_least_10_days(start, mid, end):
return (mid - start).days >= 10
Enforcing 10 days of training data.

[my-logger:INFO] Begin fold 1/2: '2022-02-01' <= [schedule: '2022-02-17' (Thursday)] < '2022-02-22'.
Doing work..
[my-logger:INFO] Finished fold 1/2: [schedule: '2022-02-17' (Thursday)] after 19μs.
[my-logger:INFO] Begin fold 2/2: '2022-02-01' <= [schedule: '2022-02-24' (Thursday)] < '2022-03-01'.
Doing work..
[my-logger:INFO] Finished fold 2/2: [schedule: '2022-02-24' (Thursday)] after 13μs.
The configuration in time_split.settings are global, so changes made will remain in effect for all
callers until the original value is reset.
settings.misc.filter = None
Total running time of the script: (0 minutes 0.255 seconds)