Coverage for src / sdynpy / fileio / sdynpy_uff_datasets / sdynpy_uff_dataset_151.py: 15%
81 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-11 16:22 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-11 16:22 +0000
1# -*- coding: utf-8 -*-
2"""
3Header
5This dataset defines the header for a universal file
6"""
7"""
8Copyright 2022 National Technology & Engineering Solutions of Sandia,
9LLC (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the U.S.
10Government retains certain rights in this software.
12This program is free software: you can redistribute it and/or modify
13it under the terms of the GNU General Public License as published by
14the Free Software Foundation, either version 3 of the License, or
15(at your option) any later version.
17This program is distributed in the hope that it will be useful,
18but WITHOUT ANY WARRANTY; without even the implied warranty of
19MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20GNU General Public License for more details.
22You should have received a copy of the GNU General Public License
23along with this program. If not, see <https://www.gnu.org/licenses/>.
24"""
26import datetime
27from ..sdynpy_uff import UFFReadError, parse_uff_line, write_uff_line
30class Sdynpy_UFF_Dataset_151:
31 def __init__(self, model_file_name='', model_file_description='',
32 db_program='sdynpy', db_date_created=None, db_version=0,
33 db_subversion=0, file_type=0, date_db_last_saved=None,
34 writing_program='sdynpy.fileio.sdynpy_uff.py',
35 date_written=None, release=0, version_number=0,
36 host_id=0, test_id=0, release_counter_per_host=0):
37 now = datetime.datetime.now()
38 self.model_file_name = model_file_name
39 self.model_file_description = model_file_description
40 self.db_program = db_program
41 if db_date_created is None:
42 self.db_date_created = now
43 else:
44 if not isinstance(db_date_created, datetime.datetime):
45 raise ValueError('db_date_created should be a datetime.datetime object or None')
46 self.db_date_created = db_date_created
47 self.db_version = db_version
48 self.db_subversion = db_subversion
49 self.file_type = file_type
50 if date_db_last_saved is None:
51 self.date_db_last_saved = now
52 else:
53 if not isinstance(date_db_last_saved, datetime.datetime):
54 raise ValueError('date_db_last_saved should be a datetime.datetime object or None')
55 self.date_db_last_saved = date_db_last_saved
56 self.writing_program = writing_program
57 if date_written is None:
58 self.date_written = now
59 else:
60 if not isinstance(date_written, datetime.datetime):
61 raise ValueError('date_written should be a datetime.datetime object or None')
62 self.date_written = date_written
63 self.release = release
64 self.version_number = version_number
65 self.host_id = host_id
66 self.test_id = test_id
67 self.release_counter_per_host = release_counter_per_host
69 @property
70 def dataset_number(self):
71 return 151
73 @classmethod
74 def from_uff_data_array(cls, data):
75 # Transform from binary to ascii
76 data = [line.decode() for line in data]
77 ds_151 = cls()
78 # Record 1: FORMAT(80A1)
79 # Field 1 -- model file name
80 ds_151.model_file_name, = parse_uff_line(data[0], ['A80'])
81 # Record 2: FORMAT(80A1)
82 # Field 1 -- model file description
83 ds_151.model_file_description, = parse_uff_line(data[1], ['A80'])
84 # Record 3: FORMAT(80A1)
85 # Field 1 -- program which created DB
86 ds_151.db_program, = parse_uff_line(data[2], ['A80'])
87 # Record 4: FORMAT(10A1,10A1,3I10)
88 # Field 1 -- date database created (DD-MMM-YY)
89 # Field 2 -- time database created (HH:MM:SS)
90 # Field 3 -- Version from database
91 # Field 4 -- Subversion from database
92 # Field 5 -- File type
93 # =0 Universal
94 # =1 Archive
95 # =2 Other
96 # Note that this script reads the date and time together as one field
97 (date_time, ds_151.db_version, ds_151.db_subversion, ds_151.file_type) = (
98 parse_uff_line(data[3], ['A20'] + 3 * ['I10']))
99 try:
100 ds_151.db_date_created = datetime.datetime.strptime(
101 ''.join(date_time.split()), '%d-%b-%y%H:%M:%S')
102 except ValueError:
103 ds_151.db_date_created = date_time
104 # Record 5: FORMAT(10A1,10A1)
105 # Field 1 -- date database last saved (DD-MMM-YY)
106 # Field 2 -- time database last saved (HH:MM:SS)
107 # Note that this script reads the date and time together as one field
108 date_time, = parse_uff_line(data[4], ['A20'])
109 try:
110 ds_151.date_db_last_saved = datetime.datetime.strptime(
111 ''.join(date_time.split()), '%d-%b-%y%H:%M:%S')
112 except ValueError:
113 ds_151.date_db_last_saved = date_time
114 # Record 6: FORMAT(80A1)
115 # Field 1 -- program which created universal file
116 ds_151.writing_program, = parse_uff_line(data[5], ['A80'])
117 # Record 7: FORMAT(10A1,10A1,4I5) <-- Is the 4I5 wrong? There are 5 fields of integers?
118 # Field 1 -- date universal file written (DD-MMM-YY)
119 # Field 2 -- time universal file written (HH:MM:SS)
120 # Field 3 -- Release which wrote universal file
121 # Field 4 -- Version number
122 # Field 5 -- Host ID
123 # MS1. 1-Vax/VMS 2-SGI 3-HP7xx,HP-UX
124 # 4-RS/6000 5-Alp/VMS 6-Sun 7-Sony
125 # 8-NEC 9-Alp/OSF
126 # Field 6 -- Test ID
127 # Field 7 -- Release counter per host
128 (date_time, ds_151.release, ds_151.version_number,
129 ds_151.host_id, ds_151.test_id, ds_151.release_counter_per_host) = (
130 parse_uff_line(data[6], ['A20'] + 5 * ['I5']))
131 try:
132 ds_151.date_written = datetime.datetime.strptime(
133 ''.join(date_time.split()), '%d-%b-%y%H:%M:%S')
134 except ValueError:
135 ds_151.date_written = date_time
136 return ds_151
138 def __repr__(self):
139 return 'Sdynpy_UFF_Dataset_151<{}>'.format(self.model_file_name)
141 def write_string(self):
142 try:
143 date_db_created = ('{:<10}'.format(self.db_date_created.strftime('%d-%b-%y')) +
144 '{:>10}'.format(self.db_date_created.strftime('%H:%M:%S')))
145 except AttributeError:
146 date_db_created = self.db_date_created
147 try:
148 date_db_last_saved = ('{:<10}'.format(self.date_db_last_saved.strftime('%d-%b-%y')) +
149 '{:<10}'.format(self.date_db_last_saved.strftime('%H:%M:%S')))
150 except AttributeError:
151 date_db_last_saved = self.date_db_last_saved
152 try:
153 date_written = ('{:<10}'.format(self.date_written.strftime('%d-%b-%y')) +
154 '{:<10}'.format(self.date_written.strftime('%H:%M:%S')))
155 except AttributeError:
156 date_written = self.date_written
158 return (write_uff_line([self.model_file_name], ['A80']) +
159 write_uff_line([self.model_file_description], ['A80']) +
160 write_uff_line([self.db_program], ['A80']) +
161 write_uff_line([date_db_created,
162 self.db_version,
163 self.db_subversion,
164 self.file_type], ['A20'] + 3 * ['I10']) +
165 write_uff_line([date_db_last_saved], ['A20']) +
166 write_uff_line([self.writing_program], ['A80']) +
167 write_uff_line([date_written,
168 self.release,
169 self.version_number,
170 self.host_id,
171 self.test_id,
172 self.release_counter_per_host], ['A20'] + 5 * ['I5']))
174 def __str__(self):
175 lines = self.write_string().split('\n')
176 if len(lines) > 8:
177 return 'Dataset 151: Header\n ' + '\n '.join(lines[0:5] + ['.', '.', '.'])
178 else:
179 return 'Dataset 151: Header\n ' + '\n '.join(lines)
182def read(data):
183 return Sdynpy_UFF_Dataset_151.from_uff_data_array(data)