File: create_stats_funcs.sh

package info (click to toggle)
pyferret 7.6.5-10
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 138,136 kB
  • sloc: fortran: 240,609; ansic: 25,235; python: 24,026; sh: 1,618; makefile: 1,123; pascal: 569; csh: 307; awk: 18
file content (68 lines) | stat: -rwxr-xr-x 2,908 bytes parent folder | download | duplicates (5)
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
#! /bin/env python
#

from __future__ import print_function

import os.path
import scipy.stats
import pyferret.stats

def create_script(scriptname, distribname, distriblongname, funcname, funcreturn):
    """
    Creates scriptname from 'stats_template' using remaining arguments
    for replacement strings in the template file.
    """
    templatefile = file("stats_template", "r")
    scriptfile = file(scriptname, "w")
    for line in templatefile:
        line = line.replace("<distribname>", distribname)
        line = line.replace("<distriblongname>", distriblongname)
        line = line.replace("<funcname>", funcname)
        line = line.replace("<funcreturn>", funcreturn)
        print(line, end=" ", file=scriptfile)
    templatefile.close()
    scriptfile.close()

def create_all_scripts():
    """
    Creates the valid stats_<distribname>_<funcname>.py scripts, if they do
    not already exist, for all the supported distributions and functions.
    """
    # List of supported distributions
    distnamelist = pyferret.stats.getdistname(None)
    # List of supported functions
    funcnamelist  = [ ( "cdf", "cumulative density function values", ),
                      ( "isf", "inverse survival function values", ),
                      ( "pdf", "probability distribution function values", ),
                      ( "pmf", "probability mass function values", ),
                      ( "ppf", "percent point function values", ),
                      ( "sf",  "survival function values", ),
                      ( "rvs", "random variates", ), ]
    # Loop of the list of distributions and functions, creating the script
    # if it does not exist and if the function exists for that distribution.
    for nametuple in distnamelist:
        distname = nametuple[0]
        distlongname = nametuple[1]
        for (funcname, funcreturn) in funcnamelist:
            try:
                # Verify the function exists for the distribution.
                # This raises an AttributeError is it does not.
                statsfunc = eval("scipy.stats.%s.%s" % (distname,funcname))
                if distname == "weibull_min":
                    scriptname = "stats_weibull_%s.py" % funcname
                else:
                    scriptname = "stats_%s_%s.py" % (distname, funcname)
                # Verify the script does not already exist.
                if not os.path.exists(scriptname):
                    create_script(scriptname, distname, distlongname,
                                              funcname, funcreturn)
            except AttributeError:
                # function does not exist for the distribution - skip
                pass

if __name__ == "__main__":
    # create all scripts from the 'stats_template' file
    if not os.path.exists("stats_template"):
        raise ValueError("The file 'stats_template' does not exist")
    create_all_scripts()