# Sage Interactions

Post code that demonstrates the use of the interact command in Sage here. It should be easy to just scroll through and paste examples out of here into their own sage notebooks.If you have suggestions on how to improve interact, add them [:interactSuggestions: here] or email [email protected].

• [:interact/graph_theory:Graph Theory]
• [:interact/calculus:Calculus]
• [:interact/diffeq:Differential Equations]
• [:interact/linear_algebra:Linear Algebra]
• [:interact/algebra:Algebra]
• [:interact/number_theory:Number Theory]
• [:interact/web:Web Applications]
• [:interact/bio:Bioinformatics]
• [:interact/graphics:Drawing Graphics]

## Profile a snippet of code

```html('<h2>Profile the given input</h2>')
import cProfile; import profile
@interact
def _(cmd = ("Statement", '2 + 2'),
do_preparse=("Preparse?", True), cprof =("cProfile?", False)):
if do_preparse: cmd = preparse(cmd)
print "<html>"  # trick to avoid word wrap
if cprof:
cProfile.run(cmd)
else:
profile.run(cmd)
print "</html>"```

attachment:profile.png

### Evaluate a bit of code in a given system

by William Stein (there is no way yet to make the text box big):

```@interact
def _(system=selector([('sage0', 'Sage'), ('gp', 'PARI'), ('magma', 'Magma')]), code='2+2'):
print globals()[system].eval(code)```

attachment:evalsys.png

### A Random Walk

by William Stein

```html('<h1>A Random Walk</h1>')
vv = []; nn = 0
@interact
def foo(pts = checkbox(True, "Show points"),
refresh = checkbox(False, "New random walk every time"),
steps = (50,(10..500))):
# We cache the walk in the global variable vv, so that
# checking or unchecking the points checkbox doesn't change
# the random walk.
html("<h2>%s steps</h2>"%steps)
global vv
if refresh or len(vv) == 0:
s = 0; v = [(0,0)]
for i in range(steps):
s += random() - 0.5
v.append((i, s))
vv = v
elif len(vv) != steps:
# Add or subtract some points
s = vv[-1][1]; j = len(vv)
for i in range(steps - len(vv)):
s += random() - 0.5
vv.append((i+j,s))
v = vv[:steps]
else:
v = vv
L = line(v, rgbcolor='#4a8de2')
if pts: L += points(v, pointsize=10, rgbcolor='red')
show(L, xmin=0, figsize=[8,3])```

attachment:randomwalk.png

### 3D Random Walk

```@interact
def rwalk3d(n=(50,1000), frame=True):
pnt = [0,0,0]
v = [copy(pnt)]
for i in range(n):
pnt[0] += random()-0.5
pnt[1] += random()-0.5
pnt[2] += random()-0.5
v.append(copy(pnt))
show(line3d(v,color='black'),aspect_ratio=[1,1,1],frame=frame)```

attachment:randomwalk3d.png