X-Git-Url: https://disinclined.org/git/?a=blobdiff_plain;f=matrix.py;h=f7da2d76517afd1bf09c4f4e62da2ef8ba88937c;hb=HEAD;hp=41713e2a952e1611f4392fdf59e29be8790814fb;hpb=7a41639f1e784c13e5614239bb91d48e8a2d55fe;p=matrixnullspace.com.git diff --git a/matrix.py b/matrix.py index 41713e2..f7da2d7 100755 --- a/matrix.py +++ b/matrix.py @@ -13,13 +13,25 @@ def calculate_eigenvalues(A, eps=1e-15): u, s, vh = svd(A) return s +def fail(start_response, message): + start_response('400 Bad Request', []) + return 'error: ' + message + def application(environ, start_response): - parameters = cgi.parse_qs(environ.get('QUERY_STRING', '')) + parameters = cgi.parse_qs(environ.get('QUERY_STRING')) + if not 'matrix' in parameters or parameters['matrix'] == '': + return fail(start_response, 'missing matrix') query_string = str(parameters['matrix'][0]) matrix = query_string.splitlines() for index, row in enumerate(matrix): matrix[index] = row.split() + if len(matrix[index]) != len(matrix[0]): + return fail(start_response, 'ragged matrix') + for index, n in enumerate(matrix[index]): + try: float(n) + except ValueError: + return fail(start_response, 'invalid matrix element') while len(matrix) < len(matrix[0]): matrix.append([0]*len(matrix[0]))