from __future__ import print_function
from six import iteritems
import os
import sys
import time
from traceback import print_exc
import pyNastran
from pyNastran.f06.f06 import F06, FatalError
#from pyNastran.op2.test.test_op2 import parseTableNamesFromF06, getFailedFiles
[docs]def run_lots_of_files(files, debug=True, saveCases=True, skipFiles=[],
stopOnFailure=False, nStart=0, nStop=1000000000):
n = ''
iSubcases = []
failedCases = []
nFailed = 0
nTotal = 0
nPassed = 0
t0 = time.time()
for i, f06file in enumerate(files[nStart:nStop], nStart): # 149
base_name = os.path.basename(f06file)
#if baseName not in skipFiles and not base_name.startswith('acms') and i not in nSkip:
if base_name not in skipFiles:
print("%" * 80)
print('file=%s\n' % f06file)
n = '%s ' % i
sys.stderr.write('%sfile=%s\n' % (n, f06file))
nTotal += 1
is_passed = run_f06(f06file, iSubcases=iSubcases, debug=debug,
stopOnFailure=stopOnFailure) # True/False
if not is_passed:
sys.stderr.write('**file=%s\n' % f06file)
failedCases.append(f06file)
nFailed += 1
else:
nPassed += 1
#sys.exit('end of test...test_f06.py')
if saveCases:
f = open('failedCases.in', 'wb')
for f06file in failedCases:
f.write('%s\n' % (f06file))
f.close()
print("dt = %s seconds" % (time.time() - t0))
#f06 = F06('test_tet10_subcase_1.f06')
#f06.readF06()
sys.exit('-----done with all models %s/%s=%.2f%% nFailed=%s-----' % (nPassed, nTotal, 100. * nPassed / float(nTotal), nTotal - nPassed))
[docs]def run_f06(f06_filename, iSubcases=[], write_f06=True, is_vector=False,
debug=False, stopOnFailure=True):
isPassed = False
#stopOnFailure = False
#debug = True
try:
f06 = F06(debug=debug)
#f06.set_subcases(iSubcases) # TODO not supported
#f06.read_bdf(f06.bdf_filename, includeDir=None, xref=False)
f06.read_f06(f06_filename, vectorized=is_vector)
#tableNamesF06 = parseTableNamesFromF06(f06.f06FileName)
#tableNamesF06 = f06.getTableNamesFromF06()
#assert write_f06 == True, write_f06
if write_f06:
model = os.path.splitext(f06_filename)[0]
#print(f06.get_f06_stats())
f06.write_f06(model + '.test_f06.f06')
#print "subcases = ",f06.subcases
#assert tableNamesF06==tableNamesF06,'tableNamesF06=%s tableNamesF06=%s' %(tableNamesF06,tableNamesF06)
#f06.caseControlDeck.sol = f06.sol
#print f06.caseControlDeck.getF06Data()
#print f06.print_results()
#print f06.caseControlDeck.getF06Data()
isPassed = True
except KeyboardInterrupt:
sys.stdout.flush()
print_exc(file=sys.stdout)
sys.stderr.write('**file=%r\n' % f06_filename)
sys.exit('keyboard stop...')
#except AddNewElementError:
# raise
#except IOError: # missing file
#pass
#except AssertionError:
# isPassed = True
except FatalError: # remove this later...
isPassed = True
#except InvalidFormatCodeError:
# isPassed = True
#except RuntimeError: #InvalidAnalysisCode
# isPassed = True
#except SyntaxError: #Invalid Markers
# isPassed = True
except SystemExit:
#print_exc(file=sys.stdout)
#sys.exit('stopping on sys.exit')
raise
#except NameError: # variable isnt defined
# if stopOnFailure:
# raise
# else:
# isPassed = True
#except AttributeError: # missing function
# if stopOnFailure:
# raise
# else:
# isPassed = True
#except KeyError:
# raise
#except TypeError: # numpy error
# isPassed = True
#except IndexError: # bad bdf
# isPassed = True
#except IOError: # missing bdf file
#isPassed = False
#raise
#except SyntaxError: #Invalid Subcase
# isPassed = True
#except SyntaxError: # Param Parse:
# isPassed = True
#except NotImplementedError:
#isPassed = True
#except InvalidFieldError: # bad bdf field
# isPassed = True
except:
#print e
print_exc(file=sys.stdout)
if stopOnFailure:
raise
else:
isPassed = False
#print("isPassed = %s" % isPassed)
return isPassed
[docs]def main():
from docopt import docopt
msg = 'Tests to see if an F06 will work with pyNastran.\n'
msg += 'Usage:\n'
msg += ' f06.py [-f] [-p] [-q] [-t] F06_FILENAME'
msg += ' f06.py -h | --help\n'
msg += ' f06.py -v | --version\n'
msg += '\n'
msg += 'Positional Arguments:\n'
msg += ' F06_FILENAME path to F06 file\n'
msg += '\n'
msg += 'Options:\n'
msg += ' -q, --quiet prints debug messages (default=False)\n'
msg += ' -f, --write_f06 writes the f06 to fem.f06.out (default=True)\n'
msg += " -t, --vector vectorizes the results (default=False)\n"
msg += ' -h, --help show this help message and exit\n'
msg += " -v, --version show program's version number and exit\n"
# disabled b/c the F06 doesn't support complex well
#msg += ' -z, --is_mag_phase F06 Writer writes Magnitude/Phase instead of\n'
#msg += ' Real/Imaginary (still stores Real/Imag)\n'
if len(sys.argv) == 1:
sys.exit(msg)
ver = str(pyNastran.__version__)
data = docopt(msg, version=ver)
for key, value in sorted(iteritems(data)):
print("%-12s = %r" % (key.strip('--'), value))
if os.path.exists('skippedCards.out'):
os.remove('skippedCards.out')
run_f06(data['F06_FILENAME'],
write_f06 = data['--write_f06'],
debug = not(data['--quiet']),
is_vector = data['--vector'],
stopOnFailure = True
)
if __name__ == '__main__': # pragma: no cover
main()