blas 0.23.0

The package provides wrappers for BLAS (Fortran).
Documentation
import re

argument_re = re.compile("\s*(\w+): ([^,\)]+)([,\)\s]*)")
name_re = re.compile("\s*pub fn (?:cblas_)?(\w+[a-z0-9])(_?)")
return_re = re.compile("(?:\s*->\s*([^;]+))?")

class Function(object):
    def __init__(self, level, name, args, ret):
        self.level = level
        self.name = name
        self.args = args
        self.ret = ret

    @staticmethod
    def parse(level, line):
        name, line = pull_name(line)
        if name is None:
            return None

        assert(line[0] == '(')
        line = line[1:]
        args = []
        while True:
            arg, aty, line = pull_argument(line)
            if arg is None:
                break
            args.append((arg, aty))
            line = line.strip()

        ret, line = pull_return(line)

        return Function(level, name, args, ret)

def pull_argument(s):
    match = argument_re.match(s)
    if match is None:
        return None, None, s
    return match.group(1), match.group(2), s[match.end(3):]

def pull_name(s):
    match = name_re.match(s)
    assert(match is not None)
    return match.group(1), s[match.end(2):]

def pull_return(s):
    match = return_re.match(s)
    if match is None:
        return None, s
    return match.group(1), s[match.end(1):]

def read_functions(path):
    sections = []
    lines = []
    with open(path) as file:
        append = False
        for line in file:
            if line == 'extern "C" {\n':
                append = True
            elif line == '}\n' and append:
                append = False
                sections.append(''.join(lines))
                lines = []
            elif append:
                lines.append(line)
    return sections