File: sitedoc.py

package info (click to toggle)
python-bumps 1.0.0b2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,144 kB
  • sloc: python: 23,941; xml: 493; ansic: 373; makefile: 209; sh: 91; javascript: 90
file content (70 lines) | stat: -rw-r--r-- 2,319 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import os

import numpy as np

import bumps.fitters as fit
from bumps.cli import load_model

SEED = 1


def example_dir():
    """
    Return the directory containing the rst file source for the current plot.
    """
    # Search through the call stack for the rstdir variable.
    #
    # This is an ugly hack which relies on internal structures of the python
    # interpreter and particular variables used in internal functions from
    # the matplotlib plot directive, and so is likely to break.
    #
    # If this code breaks, you could probably get away with searching up
    # the stack for the variable 'state_machine', which is a sphinx defined
    # variable, and use:
    #
    #  rstdir, _ = os.path.split(state_machine.document.attributes['source'])
    #
    # Even better would be to modify the plot directive to make rstdir
    # available to the inline plot directive, e.g., by adding it to the
    # locals context.  It is already implicitly available to the plot
    # file context because there is an explicit chdir to the directory
    # containing the plot.
    import inspect

    frame = inspect.currentframe()
    RSTDIR = "rst_dir"
    while frame and RSTDIR not in frame.f_locals:
        frame = frame.f_back
        # print "checking",frame.f_code.co_name
    if not frame:
        raise RuntimeError("plot directive changed: %r no longer defined" % RSTDIR)
    return frame.f_locals[RSTDIR] if frame else ""


def plot_model(filename):
    from matplotlib import pyplot as plt

    # import sys; print >>sys.stderr, "in plot with",filename, example_dir()
    np.random.seed(SEED)
    p = load_model(os.path.join(example_dir(), filename))
    p.plot()
    plt.show()


def fit_model(filename):
    from matplotlib import pyplot as plt

    # import sys; print >>sys.stderr, "in plot with",filename, example_dir()
    np.random.seed(SEED)
    p = load_model(os.path.join(example_dir(), filename))
    # x.fx = fit.RLFit(p).solve(steps=1000, burn=99)
    # x,fx = fit.DEFit(p).solve(steps=200, pop=10)
    # x,fx = fit.PTFit(p).solve(steps=100,burn=400)
    # x.fx = fit.BFGSFit(p).solve(steps=200)
    x, fx = fit.SimplexFit(p).solve(steps=1000)
    chisq = p(x)
    print("chisq=%g" % chisq)
    if chisq > 2:
        raise RuntimeError("Fit did not converge")
    p.plot()
    plt.show()