There is a proposed solution to all of this here:

https://github.com/matplotlib/matplotlib/pull/746

Please test -- I don't have any nxutils-using code myself, and matplotlib itself has none. We should probably convert some of the nxutils code in the wild into some unit tests.

Mike

On 03/08/2012 12:37 PM, Benjamin Root wrote:


On Thu, Mar 8, 2012 at 11:16 AM, Benjamin Root <ben.r...@ou.edu <mailto:ben.r...@ou.edu>> wrote:



    On Thu, Mar 8, 2012 at 10:47 AM, John Hunter <jdh2...@gmail.com
    <mailto:jdh2...@gmail.com>> wrote:



        On Thu, Mar 8, 2012 at 10:32 AM, Benjamin Root
        <ben.r...@ou.edu <mailto:ben.r...@ou.edu>> wrote:


            +1 as well.  I just took another look at the Path object
            and I see no such function.  The lack of this function is
            a problem for me as well in my existing apps.  In order to
            deprecate nxutils, this functionality needs to be added to
            Path.  Otherwise, nxutils *must* be reinstated before the
            next release.


        Michael has already agreed to make a nxutils compatibility
        layer that would have the same interface as the old nxutils.
         So we are talking about performance, not core functionality.

        We should remember that Michael did the lion's share of the
        work on  porting mpl to python 3
        (https://github.com/matplotlib/matplotlib/pull/565/commits).
         He elected not to port all of the C++ if he could replace
        some of the functionality with the core.  So those who rely on
        bare metal speed the you are getting in nxutils should step up
        to either :

        1) help with the port of nxutils to python 3

        2) help with exposing methods in _path.cpp that are almost as
        fast or faster

        3) live with slower speeds in the compatibility layer he has
        agreed to write

        4) ask (nicely) for someone to help you

        I prefer option 2 because this is fairly easy and avoids code
        redundancy.  It would take just a few lines of extra code to
        do this with the python sequence protocol as inputs and python
        lists as return values.  It would take a bit more to support
        numpy arrays as input and output, and we should get input from
        Michael about the desirability of making _path.cpp depend on
        numpy.  I don't see the harm, but I'd like to verify.

        In my opinion, a slower implementation in a
        nxutils.py compatibility module is not a release stopper, even
        if it is undesirable.

        JDH


    Don't get me wrong.  If help is needed, I can certainly provide it
    since it is my itch.  I am just a little exasperated with how this
    issue has been handled up to now.  The shim is a very good idea
    and it should have been done back when the py3k merge happened.  I
    didn't press the issue then because I was traveling and didn't
    have time to examine the issue closely, and having _nxutils.so
    still in my build hide the problem from me (my own fault).

    As for shim implementation, I would be willing to accept a
    slightly slower function now (with the promise of improvements
    later), but if the implementation is too much slower, then effort
    will need to be made to get it up to acceptable levels.  I know of
    several users **cough**my future employer**cough** who uses
    functionality such as this, and they would not be happy if their
    products are dragged down by such a bottleneck.

    Probably about time I dug more into CXX wrapped stuff...

    Ben Root



Looking over the code, it looks like we could generalize point_in_path_impl() into points_in_path_impl(). The current code iterates through the path vertices to test a single point. Putting this action inside a loop (for each point that we want to test) would mean that this iterator has to be processed each time, which I suspect would kill performance when the number of vertices is far greater than the number of test points.

Tinkering....

Ben Root



------------------------------------------------------------------------------
Virtualization&  Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/


_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to