urbanopt-scenario 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/docs/package.json CHANGED
@@ -13,21 +13,22 @@
13
13
  "highlight.js": "^10.4.1",
14
14
  "json-schema-ref-parser": "^9.0.6",
15
15
  "json-schema-view-js": "git+https://git@github.com/bgschiller/json-schema-view-js.git",
16
- "vuepress": "^1.6.0",
17
16
  "webpack-dev-middleware": "^3.6.0"
18
17
  },
19
18
  "devDependencies": {
20
19
  "braces": "^3.0.2",
21
20
  "dot-prop": "^5.3.0",
22
21
  "gh-pages": "^3.1.0",
22
+ "ini": "^2.0.0",
23
23
  "is-svg": ">=4.3.1",
24
24
  "js-yaml": "^3.14.0",
25
25
  "minimist": ">=1.2.3",
26
26
  "node-forge": ">=0.10.0",
27
+ "postcss": "^8.2.15",
27
28
  "serialize-javascript": "^5.0.1",
28
- "set-value": "^3.0.2",
29
+ "set-value": "^4.0.1",
29
30
  "ssri": ">=8.0.1",
30
- "yargs-parser": "^20.2.1",
31
- "ini": "^2.0.0"
31
+ "vuepress": "^1.8.2",
32
+ "yargs-parser": "^20.2.1"
32
33
  }
33
34
  }
@@ -42,7 +42,7 @@ require 'logger'
42
42
 
43
43
  module URBANopt
44
44
  module Scenario
45
- @@logger = Logger.new(STDOUT)
45
+ @@logger = Logger.new($stdout)
46
46
 
47
47
  # Definining class variable "@@logger" to log errors, info and warning messages.
48
48
  def self.logger
@@ -82,7 +82,6 @@ module URBANopt
82
82
 
83
83
  # Require all simulation mappers in mapper_files_dir
84
84
  def load_mapper_files
85
-
86
85
  # loads default values from extension gem
87
86
  options = OpenStudio::Extension::RunnerConfig.default_config
88
87
  # check if runner.conf file exists
@@ -94,9 +93,9 @@ module URBANopt
94
93
 
95
94
  # bundle path is assigned from the runner.conf if it exists or is assigned in the root_dir
96
95
  bundle_path = !options.key?(:bundle_install_path) || options[:bundle_install_path] === '' ? File.join(@root_dir, '.bundle/install/') : options[:bundle_install_path]
97
-
96
+
98
97
  # checks if bundle path doesn't exist or is empty
99
- if !Dir.exists?(bundle_path) or Dir.empty?(bundle_path)
98
+ if !Dir.exist?(bundle_path) || Dir.empty?(bundle_path)
100
99
  # install bundle
101
100
  OpenStudio::Extension::Runner.new(@root_dir)
102
101
  end
@@ -105,8 +104,10 @@ module URBANopt
105
104
  lib_dirs = Dir.glob(File.join(bundle_path, '/**/lib'))
106
105
  lib_dirs.each do |ld|
107
106
  # for now only add openstudio and urbanopt gems to the load path
108
- if ld.include? 'urbanopt' or ld.include? 'openstudio'
109
- puts "adding DIR to load path: #{ld}"
107
+ # and only those with 'urbanopt' or 'openstudio' in the before-last path position
108
+ tmp_path_arr = Pathname(ld).each_filename.to_a
109
+ if tmp_path_arr[-2].include?('urbanopt') || tmp_path_arr[-2].include?('openstudio')
110
+ # puts "adding DIR to load path: #{ld}"
110
111
  $LOAD_PATH.unshift(ld)
111
112
  end
112
113
  end
@@ -119,7 +120,6 @@ module URBANopt
119
120
  @@logger.error(e.message)
120
121
  raise
121
122
  end
122
-
123
123
  end
124
124
 
125
125
  # Gets all the simulation directories
@@ -41,7 +41,7 @@
41
41
  module URBANopt
42
42
  module Scenario
43
43
  class ScenarioDatapoint
44
- attr_reader :scenario, :feature_id, :feature_name, :mapper_class #:nodoc:#
44
+ attr_reader :scenario, :feature_id, :feature_name, :mapper_class, :feature #:nodoc:#
45
45
 
46
46
  ##
47
47
  # ScenarioDatapoint is an agnostic description of the simulation of a Feature in a Scenario
@@ -58,9 +58,7 @@ module URBANopt
58
58
  @feature_name = feature_name
59
59
  @feature = scenario.feature_file.get_feature_by_id(feature_id)
60
60
  @mapper_class = mapper_class
61
- end
62
-
63
- attr_reader :feature #:nodoc:
61
+ end #:nodoc:
64
62
 
65
63
  ##
66
64
  # Gets the type of a feature
@@ -83,7 +81,8 @@ module URBANopt
83
81
  def run_dir
84
82
  raise 'Feature ID not set' if @feature_id.nil?
85
83
  raise 'Scenario run dir not set' if @scenario.run_dir.nil?
86
- return File.join(@scenario.run_dir, @feature_id + '/')
84
+
85
+ return File.join(@scenario.run_dir, "#{@feature_id}/")
87
86
  end
88
87
 
89
88
  ##
@@ -138,6 +137,7 @@ module URBANopt
138
137
  if !File.exist?(out_osw)
139
138
  return true
140
139
  end
140
+
141
141
  out_osw_time = File.mtime(out_osw)
142
142
 
143
143
  # array of files that this datapoint depends on
@@ -117,7 +117,7 @@ module URBANopt
117
117
  feature_list = Pathname.new(@initialization_hash[:directory_name]).children.select(&:directory?) # Folders in the run/scenario directory
118
118
 
119
119
  # get scenario CSV
120
- scenario_csv = File.join(@initialization_hash[:root_dir], @initialization_hash[:name] + '.csv')
120
+ scenario_csv = File.join(@initialization_hash[:root_dir], "#{@initialization_hash[:name]}.csv")
121
121
  if File.exist?(scenario_csv)
122
122
  # csv found
123
123
  feature_ids = CSV.read(scenario_csv, headers: true)
@@ -159,7 +159,7 @@ module URBANopt
159
159
  # running sum
160
160
  arr_match[:elec_val] += Float(row[7])
161
161
  end
162
- end # End elec_query
162
+ end
163
163
  elec_query.close
164
164
 
165
165
  gas_query = feature_db.query "SELECT ReportData.TimeIndex, Time.Year, Time.Month, Time.Day, Time.Hour,
@@ -182,10 +182,10 @@ module URBANopt
182
182
  # running sum
183
183
  arr_match[:gas_val] += Float(row[7])
184
184
  end
185
- end # End gas_query
185
+ end
186
186
  gas_query.close
187
187
  feature_db.close
188
- end # End feature_list loop
188
+ end
189
189
 
190
190
  elec_sql = []
191
191
  gas_sql = []
@@ -80,7 +80,7 @@ module URBANopt
80
80
  # load building features data
81
81
  @scenario_report.feature_reports.each do |feature_report|
82
82
  # read results from opendss
83
- opendss_csv = CSV.read(File.join(@opendss_results_dir, 'results', 'Features', feature_report.id + '.csv'))
83
+ opendss_csv = CSV.read(File.join(@opendss_results_dir, 'results', 'Features', "#{feature_report.id}.csv"))
84
84
  # add results to data
85
85
  @opendss_data[feature_report.id] = opendss_csv
86
86
  end
@@ -102,7 +102,7 @@ module URBANopt
102
102
  # add transformer results to @opendss_data
103
103
  transformer_ids.each do |id|
104
104
  # read results from transformers
105
- transformer_csv = CSV.read(File.join(tf_results_path, id + '.csv'))
105
+ transformer_csv = CSV.read(File.join(tf_results_path, "#{id}.csv"))
106
106
  # add results to data
107
107
  @opendss_data[id] = transformer_csv
108
108
  end
@@ -133,7 +133,7 @@ module URBANopt
133
133
  if row.include? 'Datetime'
134
134
  row.map { |header| header.prepend('opendss_') }
135
135
  end
136
- csv << (feature_report_data[i] + row[1..-1])
136
+ csv << (feature_report_data[i] + row[1..])
137
137
  end
138
138
  end
139
139
 
@@ -142,7 +142,7 @@ module URBANopt
142
142
 
143
143
  # add feature reports for transformers
144
144
  def save_transformers_reports
145
- @opendss_data.keys.each do |k|
145
+ @opendss_data.each_key do |k|
146
146
  if k.include? 'Transformer'
147
147
 
148
148
  # create transformer directory
@@ -171,7 +171,7 @@ module URBANopt
171
171
  end
172
172
 
173
173
  # save transformer CSV report
174
- File.write(File.join(transformer_dir, 'feature_reports', 'default_feature_report_opendss' + '.csv'), transformer_csv)
174
+ File.write(File.join(transformer_dir, 'feature_reports', 'default_feature_report_opendss.csv'), transformer_csv)
175
175
 
176
176
  # create transformer report
177
177
  transformer_report = URBANopt::Reporting::DefaultReports::FeatureReport.new(id: k, name: k, directory_name: transformer_dir, feature_type: 'Transformer',
@@ -187,7 +187,7 @@ module URBANopt
187
187
  transformer_hash = transformer_report.to_hash
188
188
  # transformer_hash.delete_if { |k, v| v.nil? }
189
189
 
190
- json_name_path = File.join(transformer_dir, 'feature_reports', 'default_feature_report_opendss' + '.json')
190
+ json_name_path = File.join(transformer_dir, 'feature_reports', 'default_feature_report_opendss.json')
191
191
 
192
192
  # save the json file
193
193
  File.open(json_name_path, 'w') do |f|
@@ -133,11 +133,12 @@ module URBANopt
133
133
  # add each osw file to its corresponding group id +simulation_dir+ is out_of_date
134
134
  if simulation_dir.out_of_date?
135
135
 
136
- if feature_type == 'Building'
136
+ case feature_type
137
+ when 'Building'
137
138
  building_osws << simulation_dir.in_osw_path
138
- elsif feature_type == 'District System'
139
+ when 'District System'
139
140
  district_system_osws << simulation_dir.in_osw_path
140
- elsif feature_type == 'Transformer'
141
+ when 'Transformer'
141
142
  transformer_osws << simulation_dir.in_osw_path
142
143
  else
143
144
  raise "ScenarioRunnerOSW does not know how to run a #{feature_type} feature"
@@ -47,17 +47,19 @@ module URBANopt
47
47
  class ResultVisualization
48
48
  def self.create_visualization(run_dir, feature = true, feature_names = false)
49
49
  @all_results = []
50
-
50
+ name = nil
51
51
  run_dir.each do |folder|
52
52
  # create visualization for scenarios
53
- if feature == false
54
- name = folder.split('/')[-1]
55
- csv_dir = File.join(folder, 'default_scenario_report.csv')
53
+ case feature
54
+ when false
55
+ name = folder.split('/')[-2]
56
+ csv_dir = folder
57
+
56
58
  # create visualization for features
57
- elsif feature == true
59
+ when true
58
60
  index = run_dir.index(folder)
59
- name = folder.split('/')[-1] + '-' + feature_names[index]
60
- csv_dir = File.join(folder, 'feature_reports/default_feature_report.csv')
61
+ name = "#{folder.split('/')[-3]}-#{feature_names[index]}"
62
+ csv_dir = folder
61
63
  end
62
64
 
63
65
  if File.exist?(csv_dir)
@@ -192,7 +194,6 @@ module URBANopt
192
194
  monthly_sum_dec += v.to_f
193
195
  i += 1
194
196
  end
195
-
196
197
  end
197
198
  end
198
199
 
@@ -205,42 +206,49 @@ module URBANopt
205
206
  annual_values[headers_unitless[j]] = annual_sum
206
207
  end
207
208
 
208
- @results = {}
209
- @results['name'] = name
210
- @results['monthly_values'] = {}
211
- @results['annual_values'] = {}
209
+ results = {}
210
+ results['name'] = name
211
+ results['monthly_values'] = {}
212
+ results['annual_values'] = {}
212
213
 
213
214
  if @jan_next_year_index.nil? || @feb_index.nil? || @mar_index.nil? || @apr_index.nil? || @may_index.nil? || @jun_index.nil? || @jul_index.nil? || @aug_index.nil? || @sep_index.nil? || @oct_index.nil? || @nov_index.nil? || @dec_index.nil?
214
- @results['complete_simulation'] = false
215
+ results['complete_simulation'] = false
215
216
  puts "#{name} did not contain an annual simulation…visualizations will not render for it."
216
217
  else
217
- @results['complete_simulation'] = true
218
+ results['complete_simulation'] = true
218
219
  end
219
220
 
220
221
  monthly_totals&.each do |key, value|
221
222
  unless key == 'Datetime'
222
- @results['monthly_values'][key] = value
223
+ results['monthly_values'][key] = value
223
224
  end
224
225
  end
225
226
 
226
227
  annual_values&.each do |key, value|
227
228
  unless key == 'Datetime'
228
- @results['annual_values'][key] = value
229
+ results['annual_values'][key] = value
229
230
  end
230
231
  end
231
232
 
232
233
  end
233
234
 
234
- unless @results.nil?
235
- @all_results << @results
235
+ unless results.nil?
236
+ @all_results << results
236
237
  end
237
238
  end
239
+
238
240
  # create json with required data stored in a variable
239
- results_path = File.join(run_dir[0], '../scenarioData.js')
241
+ if feature == false
242
+ # In case of scenario visualization store result at top of the run folder
243
+ results_path = File.expand_path('../../scenarioData.js', run_dir[0])
244
+ else
245
+ # In case of feature visualization store result at top of scenario folder folder
246
+ results_path = File.expand_path('../../../scenarioData.js', run_dir[0])
247
+ end
240
248
  File.open(results_path, 'w') do |file|
241
249
  file << "var scenarioData = #{JSON.pretty_generate(@all_results)};"
242
250
  end
243
251
  end
244
- end # ResultVisualization
245
- end # Scenario
246
- end # URBANopt
252
+ end
253
+ end
254
+ end
@@ -54,11 +54,7 @@ module URBANopt
54
54
  @feature_names = feature_names
55
55
  end
56
56
 
57
- attr_reader :scenario #:nodoc:
58
-
59
- attr_reader :features #:nodoc:
60
-
61
- attr_reader :feature_names #:nodoc:
57
+ attr_reader :scenario, :features, :feature_names #:nodoc: #:nodoc: #:nodoc:
62
58
 
63
59
  ##
64
60
  # Return the directory that this simulation will run in
@@ -71,13 +71,15 @@ module URBANopt
71
71
  end
72
72
 
73
73
  attr_reader :mapper_class, :feature_id
74
+
74
75
  ##
75
76
  # Return the directory that this simulation will run in.
76
77
  ##
77
78
  def run_dir
78
79
  raise 'Feature ID not set' if @feature_id.nil?
79
80
  raise 'Scenario run dir not set' if scenario.run_dir.nil?
80
- return File.join(scenario.run_dir, @feature_id + '/')
81
+
82
+ return File.join(scenario.run_dir, "#{@feature_id}/")
81
83
  end
82
84
 
83
85
  ##
@@ -40,6 +40,6 @@
40
40
 
41
41
  module URBANopt
42
42
  module Scenario
43
- VERSION = '0.6.0'.freeze
43
+ VERSION = '0.7.0'.freeze
44
44
  end
45
45
  end
@@ -25,14 +25,14 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_development_dependency 'bundler', '~> 2.1'
27
27
  spec.add_development_dependency 'rake', '~> 13.0'
28
- spec.add_development_dependency 'rspec', '~> 3.7'
28
+ spec.add_development_dependency 'rspec', '~> 3.9'
29
29
 
30
- spec.add_runtime_dependency 'json-schema', '~> 2.8'
31
30
  spec.add_runtime_dependency 'json_pure', '~> 2.3'
31
+ spec.add_runtime_dependency 'json-schema', '~> 2.8'
32
32
 
33
33
  spec.add_runtime_dependency 'sqlite3', '1.4.2'
34
- spec.add_runtime_dependency 'urbanopt-core', '~> 0.6.0'
35
- spec.add_runtime_dependency 'urbanopt-reporting', '~> 0.4.0'
34
+ spec.add_runtime_dependency 'urbanopt-core', '~> 0.7.0'
35
+ spec.add_runtime_dependency 'urbanopt-reporting', '~> 0.5.0'
36
36
 
37
37
  # no longer need the below
38
38
  # need to include all measure gems listed in mappers in project gemfiles
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: urbanopt-scenario
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rawad El Kontar
8
8
  - Dan Macumber
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2021-04-29 00:00:00.000000000 Z
12
+ date: 2021-12-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -45,42 +45,42 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '3.7'
48
+ version: '3.9'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '3.7'
55
+ version: '3.9'
56
56
  - !ruby/object:Gem::Dependency
57
- name: json-schema
57
+ name: json_pure
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '2.8'
62
+ version: '2.3'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '2.8'
69
+ version: '2.3'
70
70
  - !ruby/object:Gem::Dependency
71
- name: json_pure
71
+ name: json-schema
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '2.3'
76
+ version: '2.8'
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: '2.3'
83
+ version: '2.8'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: sqlite3
86
86
  requirement: !ruby/object:Gem::Requirement
@@ -101,28 +101,28 @@ dependencies:
101
101
  requirements:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: 0.6.0
104
+ version: 0.7.0
105
105
  type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: 0.6.0
111
+ version: 0.7.0
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: urbanopt-reporting
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - "~>"
117
117
  - !ruby/object:Gem::Version
118
- version: 0.4.0
118
+ version: 0.5.0
119
119
  type: :runtime
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
- version: 0.4.0
125
+ version: 0.5.0
126
126
  description: Library to export data point OSW files from URBANopt Scenario CSV
127
127
  email:
128
128
  - rawad.elkontar@nrel.gov
@@ -182,7 +182,7 @@ homepage: https://github.com/urbanopt
182
182
  licenses:
183
183
  - Nonstandard
184
184
  metadata: {}
185
- post_install_message:
185
+ post_install_message:
186
186
  rdoc_options: []
187
187
  require_paths:
188
188
  - lib
@@ -198,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
198
  version: '0'
199
199
  requirements: []
200
200
  rubygems_version: 3.1.4
201
- signing_key:
201
+ signing_key:
202
202
  specification_version: 4
203
203
  summary: Library to export data point OSW files from URBANopt Scenario CSV
204
204
  test_files: []