#!/usr/bin/python -Wall

# ================================================================
# John Kerl
# kerl.john.r@gmail.com
# 2007-01-12
# ================================================================
# This software is released under the terms of the GNU GPL.
# Please see LICENSE.txt in the same directory as this file.
# ================================================================

from __future__ import division # 1/2 = 0.5, not 0.
import sys
import randmat_m

# ----------------------------------------------------------------
# Other options to implement:
# * printf format
# * random-number properties, e.g. distribution; min/max; mean/stddev.

def usage():
	print >> sys.stderr, "Usage: %s {num rows} {num cols}"                  % (sys.argv[0])
	print >> sys.stderr, "       %s -gen {num rows} {num cols}"             % (sys.argv[0])
	print >> sys.stderr, "       %s -sq     {n}: square matrix"             % (sys.argv[0])
	print >> sys.stderr, "       %s -gl     {n}: invertible nxn matrix"     % (sys.argv[0])
	print >> sys.stderr, "       %s -sl     {n}: determinant-one matrix"    % (sys.argv[0])
	print >> sys.stderr, "       %s -o      {n}: orthogonal matrix"         % (sys.argv[0])
	print >> sys.stderr, "       %s -so     {n}: special orthogonal matrix" % (sys.argv[0])
	print >> sys.stderr, "       %s -symm   {n}: symmetric matrix"          % (sys.argv[0])
	print >> sys.stderr, "       %s -sksymm {n}: skew-symmetric matrix"     % (sys.argv[0])
	sys.exit(1)

# ----------------------------------------------------------------
type = "-gen"
argb = 1
if (len(sys.argv) >= 2):
	if (sys.argv[1][0] == '-'):
		type = sys.argv[1]
		argb += 1

argc = len(sys.argv)
num_args = argc - argb

if (type == "-gen"):
	if (num_args != 2):
		usage()
	nr = int(sys.argv[argb])
	nc = int(sys.argv[argb+1])
	if ((nr < 1) or (nc < 1)):
		print "Dimensions must be positive."
		usage()
	A = randmat_m.randmat(nr, nc)
	A.printf()
else:
	if (num_args != 1):
		usage()
	n = int(sys.argv[argb])
	if (n < 1):
		print "Dimensions must be positive."
		usage()
	if (type == "-sq"):
		A = randmat_m.randmat(n, n)
	elif (type == "-gl"):
		A = randmat_m.randgl(n)
	elif (type == "-sl"):
		A = randmat_m.randsl(n)
	elif (type == "-o"):
		A = randmat_m.rando(n)
	elif (type == "-so"):
		A = randmat_m.randso(n)
	elif (type == "-symm"):
		A = randmat_m.randsymm(n)
	elif (type == "-sksymm"):
		A = randmat_m.randsksymm(n)
	else:
		print >> sys.stderr, "%s:  Unrecognized type \"%s\"." % \
			(sys.argv[0], type)
		sys.exit(1)
	A.printf()
