<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Mar 16, 2019 at 11:10 AM <<a href="mailto:kmckenna@baselinesw.com">kmckenna@baselinesw.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-US"><div class="gmail-m_-7080397223277331785WordSection1"><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><b>From:</b> NumPy-Discussion <numpy-discussion-bounces+kmckenna=<a href="mailto:baselinesw.com@python.org" target="_blank">baselinesw.com@python.org</a>> <b>On Behalf Of </b>Charles R Harris<br><b>Sent:</b> Saturday, March 16, 2019 12:06 PM<br><b>To:</b> Discussion of Numerical Python <<a href="mailto:numpy-discussion@python.org" target="_blank">numpy-discussion@python.org</a>><br><b>Subject:</b> [SPAM]Re: [Numpy-discussion] introducing Numpy.net, a pure C# implementation of Numpy<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal"><u></u> <u></u></p></div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">On Sat, Mar 16, 2019 at 10:02 AM Charles R Harris <<a href="mailto:charlesr.harris@gmail.com" target="_blank">charlesr.harris@gmail.com</a>> wrote:<u></u><u></u></p></div><blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal"><u></u> <u></u></p></div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">On Sat, Mar 16, 2019 at 4:41 AM <<a href="mailto:kmckenna@baselinesw.com" target="_blank">kmckenna@baselinesw.com</a>> wrote:<u></u><u></u></p></div><blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal">This is a quick note to announce open source <a href="http://numpy.net" target="_blank">numpy.net</a> available at this repository<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal"><a href="https://github.com/Quansight-Labs/numpy.net" target="_blank">https://github.com/Quansight-Labs/numpy.net</a><u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">This is a pure C# based implementation of Numpy, ported from the underlying C library and the python application layer.<u></u><u></u></p><p class="MsoNormal">Written and tested on .NET standard 2.1 so it will run anywhere.<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">I have the vast majority of the most commonly used functions implemented and unit tested. It supports fully functional slicing and views.<u></u><u></u></p><p class="MsoNormal">Verified to generate binary compatible output with python numpy.<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">I built it because I was tasked with porting a large Python Numpy application to C# and as you may know, there are not a lot of good solutions (until now).  My employer graciously agreed to open source it.<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">If you have some time to review it, I'd love to get some feedback from some Numpy experts (I don't consider myself one).<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">I believe it is ready to start building tools like SciPy on top of it.<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">Longer term, I would like to see this ported to Java.  I expect pure C# to port easily to Java.<u></u><u></u></p></div></div></blockquote><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">That's interesting. What parts are in C#? Any benchmarks comparing the two implementations?<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div></div></div></blockquote><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">What about BLAS libraries?<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><u></u> <u></u></p><ol style="margin-top:0in" start="1" type="1"><li class="gmail-m_-7080397223277331785MsoListParagraph" style="margin-left:0in">All of it is in C#.   The underlying C code was ported and so was the python layer.<u></u><u></u></li><li class="gmail-m_-7080397223277331785MsoListParagraph" style="margin-left:0in">Benchmarks?   If you mean performance benchmarks, I have nothing official but I will say that the C# implementation is not as fast as the optimized C code and it never will be.  The only place you would really notice it is if you were doing a UFUNC operation on a large array.<u></u><u></u></li><li class="gmail-m_-7080397223277331785MsoListParagraph" style="margin-left:0in">I am not a numpy programmer so I don’t know what BLAS libraries are.  I just did a quick google and my guess is that this is not relevant in my implementation.<u></u><u></u></li></ol><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">I envision my tool to be used if someone wants to port a numpy application to .NET or wants to do Numpy things in a .NET application,<u></u><u></u></p><p class="MsoNormal"><u></u> </p></div></div></div></div></div></blockquote><div><br></div><div>Just reply to the discussion, I may have made a boo boo in replying to your first post.</div><div><br></div><div>I'm curious. Implementing NumPy in another language seems like quite a bit of work. Did you have any tools to make it easier? I assume the C api is gone, so that the translation is NumPy program specific. I've never used C#, was there a reason to avoid C? What about IronPython? IIRC there was some work to make NumPy run on IronPython before that project was ended. I'm also curious what the application was that made it impossible to stay with python, I suppose the customer wanted C#, but I'd like to know why plain old Python was not an option. </div><div><br></div><div>Chuck</div></div></div>