+ """Return a datetime that is N units before/after a base datetime.
+ e.g. 3 Wednesdays from base datetime, 2 weeks from base date, 10
+ years before base datetime, 13 minutes after base datetime, etc...
+ Note: to indicate before/after the base date, use a positive or
+ negative count.
+
+ >>> base = string_to_datetime("2021/09/10 11:24:51AM-0700")[0]
+
+ The next (1) Monday from the base datetime:
+ >>> n_timeunits_from_base(+1, TimeUnit.MONDAYS, base)
+ datetime.datetime(2021, 9, 13, 11, 24, 51, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)))
+
+ Ten (10) years after the base datetime:
+ >>> n_timeunits_from_base(10, TimeUnit.YEARS, base)
+ datetime.datetime(2031, 9, 10, 11, 24, 51, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)))
+
+ Fifty (50) working days (M..F, not counting holidays) after base datetime:
+ >>> n_timeunits_from_base(50, TimeUnit.WORKDAYS, base)
+ datetime.datetime(2021, 11, 23, 11, 24, 51, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)))
+
+ Fifty (50) days (including weekends and holidays) after base datetime:
+ >>> n_timeunits_from_base(50, TimeUnit.DAYS, base)
+ datetime.datetime(2021, 10, 30, 11, 24, 51, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)))
+
+ Fifty (50) months before (note negative count) base datetime:
+ >>> n_timeunits_from_base(-50, TimeUnit.MONTHS, base)
+ datetime.datetime(2017, 7, 10, 11, 24, 51, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)))
+
+ Fifty (50) hours after base datetime:
+ >>> n_timeunits_from_base(50, TimeUnit.HOURS, base)
+ datetime.datetime(2021, 9, 12, 13, 24, 51, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)))
+
+ Fifty (50) minutes before base datetime:
+ >>> n_timeunits_from_base(-50, TimeUnit.MINUTES, base)
+ datetime.datetime(2021, 9, 10, 10, 34, 51, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)))
+
+ Fifty (50) seconds from base datetime:
+ >>> n_timeunits_from_base(50, TimeUnit.SECONDS, base)
+ datetime.datetime(2021, 9, 10, 11, 25, 41, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)))
+
+ """