-
Notifications
You must be signed in to change notification settings - Fork 460
Expand file tree
/
Copy pathExample_Attribute.py
More file actions
227 lines (168 loc) · 4.81 KB
/
Copy pathExample_Attribute.py
File metadata and controls
227 lines (168 loc) · 4.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
## @ingroup templates
# Example_Attribute.py
#
# Created: Jan 2015, J. Dawson
# Modified:
## style note --
## since this is an Attribute class, it is Camel_Case_With_Underscore()
## it should not have any major analysis methods,
## only data manipulation methods
# ----------------------------------------------------------------------
# Imports
# ----------------------------------------------------------------------
## remove any unnecessary imports
# suave imports
## these should start with SUAVE, unless importing locally
from SUAVE.Core import (
Data, Container
)
# python imports
import os, sys, shutil
from warnings import warn
# package imports
import numpy as np
import scipy as sp
# import pylab as plt
# ----------------------------------------------------------------------
# Attribute
# ----------------------------------------------------------------------
## @ingroup templates
class Example_Attribute(Data):
"""<Description>
Assumptions:
<any assumptions>
Source:
<source>
"""
def __defaults__(self):
"""<Description>
Assumptions:
<any assumptions>
Source:
<source>
Inputs:
<input1> <units>
<input2> <units>
..
Outputs:
<output1> <units>
<output2> <units>
..
Properties Used:
<property1> <units>
<property2> <units>
..
"""
# default attributes,
self.area = None # [units]
self.taper = None # [units]
def __check__(self):
"""<Description>
Assumptions:
<any assumptions>
Source:
<source>
Inputs:
<input1> <units>
<input2> <units>
..
Outputs:
<output1> <units>
<output2> <units>
..
Properties Used:
<property1> <units>
<property2> <units>
..
"""
# called after initialized data
# use to check the data's fields, and modify as needed
# will not recieve any inputs other than self
# for example
if self.taper == 10:
self.area = 20
def do_this(input1,input2=None):
"""<Description>
Assumptions:
<any assumptions>
Source:
<source>
Inputs:
<input1> <units>
<input2> <units>
..
Outputs:
<output1> <units>
<output2> <units>
..
Properties Used:
<property1> <units>
<property2> <units>
..
"""
# unpack inputs
var1 = input1.var1
var2 = inputs.var2
# setup
var3 = var1 * var2
# process
magic = np.log(var3)
# packup outputs
output = Data()
output.magic = magic
output.var3 = var3
return output
# ----------------------------------------------------------------------
# Attribute Container
# ----------------------------------------------------------------------
## @ingroup templates
class Container(Container):
"""<Description>
Assumptions:
<any assumptions>
Source:
<source>
"""
pass
# add to attribute
Example_Attribute.Container = Container
# ----------------------------------------------------------------------
# Helper Functions
# ----------------------------------------------------------------------
# these will not be available in the SUAVE namespace
## @ingroup templates
def helper_function(input1,inputs2=None):
"""<Description>
Assumptions:
<any assumptions>
Source:
<source>
Inputs:
<input1> <units>
<input2> <units>
..
Outputs:
<output1> <units>
<output2> <units>
..
Properties Used:
N/A
"""
# unpack inputs
var1 = input1.var1
var2 = inputs.var2
# setup
var3 = var1 * var2
# process
magic = np.log(var3)
# packup outputs
output = Data()
output.magic = magic
output.var3 = var3
return output
# ----------------------------------------------------------------------
# Unit Tests
# ----------------------------------------------------------------------
# this will run from command line, put simple tests for your code here
if __name__ == '__main__':
raise RuntimeError('test failed, not implemented')