Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

From the documentation of memory_profiler:

Note however that function my_func must be defined in a file (cannot have been defined interactively in the Python interpreter)

That is to say, you can only use the @memory_profiler.profile decorator on a routine that you have put in a .py file and then have imported, so take the following steps:

  1. Make a file, say test.py, with contents, say,

    from memory_profiler import profile
    @profile
    def my_func():
         a = [1] * (10 ** 6)
         b = [2] * (2 * 10 ** 7)
         del b
         return a
    
  2. Now you can do (make sure that your current directory contains test.py):

sage: import test 
sage: _ = test.my_func()
Filename: test.py

Line #    Mem usage    Increment   Line Contents
================================================
     2                             @profile
     3   112.277 MB     0.000 MB   def my_func():
     4   119.914 MB     7.637 MB        a = [1] * (10 ** 6)
     5   272.504 MB   152.590 MB        b = [2] * (2 * 10 ** 7)
     6   119.914 MB  -152.590 MB        del b
     7   119.914 MB     0.000 MB        return a

note that import does not allow you to make use of the sage preprocessor, so you'd have to write python, and you might want to insert from sage.all import * in order to make everything available in your test.py module that would normally be available at the sage prompt.

You could write test.sage, and do load "test.sage". Now there's a file test.py (possibly with a mangled name) that contains the result of running the preprocessor on test.sage. You could use that as a starting point to produce a file that can be used via import.