<div>I&#39;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.</div>
<div><br></div><div>Cheers,</div><div>Mark</div><br><div class="gmail_quote">On Tue, Jun 14, 2011 at 6:34 PM, Mark Wiebe <span dir="ltr">&lt;<a href="mailto:mwwiebe@gmail.com">mwwiebe@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
These functions are now fully implemented and documented. As always, code reviews are welcome here:<div><br></div><div><a href="https://github.com/numpy/numpy/pull/87" target="_blank">https://github.com/numpy/numpy/pull/87</a></div>

<div><br></div><div>and for those that don&#39;t want to dig into review C code, the commit for the documentation is here:<div><br></div><div><a href="https://github.com/m-paradox/numpy/commit/6b5a42a777b16812e774193b06da1b68b92bc689" target="_blank">https://github.com/m-paradox/numpy/commit/6b5a42a777b16812e774193b06da1b68b92bc689</a></div>

<div><br></div><div>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.</div><div><br></div><div>Thanks,</div><div>Mark<br>

<br><div class="gmail_quote">On Fri, Jun 10, 2011 at 5:49 PM, Mark Wiebe <span dir="ltr">&lt;<a href="mailto:mwwiebe@gmail.com" target="_blank">mwwiebe@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

I&#39;ve implemented the busday_offset function with support for the weekmask and roll parameters, the commits are tagged &#39;datetime-bday&#39; in the pull request here:<div><br></div><div><a href="https://github.com/numpy/numpy/pull/87" target="_blank">https://github.com/numpy/numpy/pull/87</a></div>


<div><br></div><div><font color="#888888">-Mark</font><div><div></div><div><br><br><div class="gmail_quote">On Thu, Jun 9, 2011 at 5:23 PM, Mark Wiebe <span dir="ltr">&lt;<a href="mailto:mwwiebe@gmail.com" target="_blank">mwwiebe@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Here&#39;s a possible design for a business day API for numpy datetimes:<div><br></div><div><br></div><div>The &#39;B&#39; business day unit will be removed. All business day-related calculations will be done using the &#39;D&#39; day unit.</div>



<div><br></div><div>A class <b>BusinessDayDef</b> 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.</div>



<div><br></div><div>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], &quot;1111100&quot; &quot;MonTueWedThuFri&quot;. The holidays are always specified as a one-dimensional array of dtype &#39;M8[D]&#39;, and are internally used in sorted form.</div>



<div><br></div><div><br></div><div>A function <b>is_busday</b>(datearray, weekmask=, holidays=, busdaydef=) returns a boolean array matching the input datearray, with True for the valid business days.</div><div><br></div>



<div>A function <b>busday_offset</b>(datearray, offsetarray, roll=&#39;raise&#39;,¬†weekmask=, holidays=, busdaydef=) which first applies the &#39;roll&#39; 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 &#39;roll&#39; parameter can be &#39;forward&#39;/&#39;following&#39;, &#39;backward&#39;/&#39;preceding&#39;, &#39;modifiedfollowing&#39;, &#39;modifiedpreceding&#39;, or &#39;raise&#39; (the default).</div>



<div><br></div><div>A function <b>busday_count</b>(datearray1, datearray2, weekmask=,¬†holidays=, busdaydef=) which calculates the number of business days between datearray1 and datearray2, not including the day of datearray2.</div>



<div><br></div><div><br></div><div>For example, to find the first Monday in Feb 2011,¬†</div><div><br></div><div>&gt;&gt;&gt;np.busday_offset(&#39;2011-02&#39;, 0, roll=&#39;forward&#39;, weekmask=&#39;Mon&#39;)</div><div>



<br></div><div>or to find the number of weekdays in Feb 2011,</div><div><br></div><div>&gt;&gt;&gt;np.busday_count(&#39;2011-02&#39;, &#39;2011-03&#39;)</div><div><br></div><div>This set of three functions appears to be powerful enough to express the business-day computations that I&#39;ve been shown thus far.</div>



<div><br></div><div>Cheers,</div><div>Mark</div>
</blockquote></div><br></div></div></div>
</blockquote></div><br></div></div>
</blockquote></div><br>