|  |  |  | @ -67,13 +67,40 @@ def vector_str(M, fmt="%22.15g", V=False, prefix="", suffix=""): | 
			
		
	
		
			
				
					|  |  |  |  |   else: | 
			
		
	
		
			
				
					|  |  |  |  |     return prefix + " ".join([ fmt % m for m in M ]) + suffix | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def matrix_str(M, fmt="%22.15g", prefix="", suffix=""): | 
			
		
	
		
			
				
					|  |  |  |  | def matrix_str(M, fmt=None, prefix="", suffix=""): | 
			
		
	
		
			
				
					|  |  |  |  |   """Prints a matrix in a textual format. | 
			
		
	
		
			
				
					|  |  |  |  |   Applicable for integer, float, and complex 2-D arrays. | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   COMPLEX NUMBER SUPPORT | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   By default, we print in full precision and in python-friendly format, like: | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       (+3.200000000000000e+00+4.700000000000000e+00j) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   To print in C++ and Fortran friendly format, use: | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       >>> A_str = text_tools.matrix_str(A, '(%+#22.15e,%+#22.15e)') | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   The resulting output will be: | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       (+3.200000000000000e+00,+4.700000000000000e+00) | 
			
		
	
		
			
				
					|  |  |  |  |   """ | 
			
		
	
		
			
				
					|  |  |  |  |   linesep = suffix + "\n" + prefix | 
			
		
	
		
			
				
					|  |  |  |  |   if isinstance(M, numpy.matrix): | 
			
		
	
		
			
				
					|  |  |  |  |     M = numpy.asarray(M) | 
			
		
	
		
			
				
					|  |  |  |  |   elif not isinstance(M, numpy.ndarray): | 
			
		
	
		
			
				
					|  |  |  |  |     M = numpy.asarray(M) | 
			
		
	
		
			
				
					|  |  |  |  |   if len(M.shape) != 2: | 
			
		
	
		
			
				
					|  |  |  |  |     raise ValueError, "Wrong shape: expecting a two-dimensional array." | 
			
		
	
		
			
				
					|  |  |  |  |   return prefix + linesep.join([ " ".join([ fmt % c for c in R ]) for R in M ]) + suffix | 
			
		
	
		
			
				
					|  |  |  |  |   if numpy.iscomplex(M[0,0]): | 
			
		
	
		
			
				
					|  |  |  |  |     if fmt is None: | 
			
		
	
		
			
				
					|  |  |  |  |       fmt = "(%+22.15e%+22.15ej)" | 
			
		
	
		
			
				
					|  |  |  |  |     mkfmt = lambda z: fmt % (z.real, z.imag) | 
			
		
	
		
			
				
					|  |  |  |  |     return prefix + linesep.join([ " ".join([ mkfmt(c) for c in R ]) for R in M ]) + suffix | 
			
		
	
		
			
				
					|  |  |  |  |   else: | 
			
		
	
		
			
				
					|  |  |  |  |     if fmt is None: | 
			
		
	
		
			
				
					|  |  |  |  |       fmt = "%22.15g" | 
			
		
	
		
			
				
					|  |  |  |  |     return prefix + linesep.join([ " ".join([ fmt % c for c in R ]) for R in M ]) + suffix | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def str_indent(text, indent=" "*4): | 
			
		
	
	
		
			
				
					|  |  |  | 
 |