[Numpy-discussion] code review/build & test for datetime business day API

Mark Wiebe mwwiebe at gmail.com
Thu Jun 16 16:00:39 EDT 2011


I've received some good feedback from Chuck and Ralf on the code and
documentation, respectively, and build testing with proposed fixes for
issues from the previous merge from Derek. I believe the current set of
changes are in good shape to merge, so would like to proceed with that later
today.

Cheers,
Mark

On Tue, Jun 14, 2011 at 6:34 PM, Mark Wiebe <mwwiebe at gmail.com> wrote:

> These functions are now fully implemented and documented. As always, code
> reviews are welcome here:
>
> https://github.com/numpy/numpy/pull/87
>
> and for those that don't want to dig into review C code, the commit for the
> documentation is here:
>
>
> https://github.com/m-paradox/numpy/commit/6b5a42a777b16812e774193b06da1b68b92bc689
>
> This is probably also another good place to do a merge to master, so if
> people could test it on Mac/Windows/other platforms that would be much
> appreciated.
>
> Thanks,
> Mark
>
> On Fri, Jun 10, 2011 at 5:49 PM, Mark Wiebe <mwwiebe at gmail.com> wrote:
>
>> I've implemented the busday_offset function with support for the weekmask
>> and roll parameters, the commits are tagged 'datetime-bday' in the pull
>> request here:
>>
>> https://github.com/numpy/numpy/pull/87
>>
>> -Mark
>>
>>
>> On Thu, Jun 9, 2011 at 5:23 PM, Mark Wiebe <mwwiebe at gmail.com> wrote:
>>
>>> Here's a possible design for a business day API for numpy datetimes:
>>>
>>>
>>> The 'B' business day unit will be removed. All business day-related
>>> calculations will be done using the 'D' day unit.
>>>
>>> A class *BusinessDayDef* to encapsulate the definition of the business
>>> week and holidays. The business day functions will either take one of these
>>> objects, or separate weekmask and holidays parameters, to specify the
>>> business day definition. This class serves as both a performance
>>> optimization and a way to encapsulate the weekmask and holidays together,
>>> for example if you want to make a dictionary mapping exchange names to their
>>> trading days definition.
>>>
>>> The weekmask can be specified in a number of ways, and internally becomes
>>> a boolean array with 7 elements with True for the days Monday through Sunday
>>> which are valid business days. Some different notations are for the 5-day
>>> week include [1,1,1,1,1,0,0], "1111100" "MonTueWedThuFri". The holidays are
>>> always specified as a one-dimensional array of dtype 'M8[D]', and are
>>> internally used in sorted form.
>>>
>>>
>>> A function *is_busday*(datearray, weekmask=, holidays=, busdaydef=)
>>> returns a boolean array matching the input datearray, with True for the
>>> valid business days.
>>>
>>> A function *busday_offset*(datearray, offsetarray,
>>> roll='raise', weekmask=, holidays=, busdaydef=) which first applies the
>>> 'roll' policy to start at a valid business date, then offsets the date by
>>> the number of business days specified in offsetarray. The arrays datearray
>>> and offsetarray are broadcast together. The 'roll' parameter can be
>>> 'forward'/'following', 'backward'/'preceding', 'modifiedfollowing',
>>> 'modifiedpreceding', or 'raise' (the default).
>>>
>>> A function *busday_count*(datearray1, datearray2, weekmask=, holidays=,
>>> busdaydef=) which calculates the number of business days between datearray1
>>> and datearray2, not including the day of datearray2.
>>>
>>>
>>> For example, to find the first Monday in Feb 2011,
>>>
>>> >>>np.busday_offset('2011-02', 0, roll='forward', weekmask='Mon')
>>>
>>> or to find the number of weekdays in Feb 2011,
>>>
>>> >>>np.busday_count('2011-02', '2011-03')
>>>
>>> This set of three functions appears to be powerful enough to express the
>>> business-day computations that I've been shown thus far.
>>>
>>> Cheers,
>>> Mark
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20110616/2da2eb87/attachment.html>


More information about the NumPy-Discussion mailing list