Re: Type feedback tool?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Martin Vilcans

    Re: Type feedback tool?

    Thanks everyone for the suggestions. I've implemented a simple
    solution using sys.settrace. It's quite nice because it doesn't
    require any instrumentation of the code (it works like a debugger that
    traps all function calls).

    Here's the output I get right now when "profiling" Skip's example code
    (but without using decorators):

    fib2 (testee.py:8)
    1 arguments
    n: <type 'float'(1) <type 'int'(23)

    main (testee.py:17)
    0 arguments

    fib (testee.py:1)
    1 arguments
    n: <type 'float'(9) <type 'int'(15)

    This means that fib2 has been called once with a float in the n
    parameter, and 23 times with an int, etc.

    There's more work to be done to make this a robust tool (which is why
    I was hoping there already existed a tool for this). It should handle
    varargs and keyword arguments properly, and probably needs to handle
    exceptions better. I'll see if I can run it on real code tomorrow and
    see if the results are useful.

    Martin

    On Mon, Oct 27, 2008 at 11:50 AM, M.-A. Lemburg <mal@egenix.com wrote:
    On 2008-10-26 13:54, Martin Vilcans wrote:
    >Hi list,
    >>
    >I'm wondering if there's a tool that can analyze a Python program
    >while it runs, and generate a database with the types of arguments and
    >return values for each function. In a way it is like a profiler, that
    >instead of measuring how often functions are called and how long time
    >it takes, it records the type information. So afterwards, when I'm
    >reading the code, I can go to the database to see what data type
    >parameter "foo" of function "bar" typically has. It would help a lot
    >with deciphering old code.
    >>
    >When I googled this, I learned that this is called "type feedback",
    >and is used (?) to give type information to a compiler to help it
    >generate fast code. My needs are much more humble. I just want a
    >faster way to understand undocumented code with bad naming.
    >
    You could try the trace module:
    >

    >
    but I'm not sure whether that includes parameter listings.
    >
    Or write your own tracing function and then plug it into your
    application using sys.settrace():
    >

    >
    The frame object will have the information you need:
    >

    >
    in f_locals.
    >
    --
    Marc-Andre Lemburg
    eGenix.com
    >
    Professional Python Services directly from the Source (#1, Oct 27 2008)
    >>>Python/Zope Consulting and Support ... http://www.egenix.com/
    >>>mxODBC.Zope. Database.Adapte r ... http://zope.egenix.com/
    >>>mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
    _______________ _______________ _______________ _______________ ____________
    >
    :::: Try mxODBC.Zope.DA for Windows,Linux,S olaris,MacOSX for free ! ::::
    >
    >
    eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
    Registered at Amtsgericht Duesseldorf: HRB 46611
    >


    --
    martin@librador .com

Working...