Class: Matrix
- Inherits:
-
Object
- Object
- Matrix
- Defined in:
- lib/y_petri/simulation/matrix.rb
Overview
Patches the Matrix class with methods that generate code for direct vector access.
Direct Known Subclasses
Class Method Summary collapse
-
.column_vector_access_code(vector: (fail ArgumentError, "No vector!"), indices: (fail ArgumentError, "No indices!")) ⇒ Object
Builds a code string for accessing the vector values at given indices.
-
.column_vector_assignment_code(vector: (fail ArgumentError, "No vector!"), indices: (fail ArgumentError, "No indices!"), source: (fail ArgumentError, "No source!")) ⇒ Object
Builds a code string for assigning to a vector at given indices.
-
.column_vector_increment_by_array_code(vector: (fail ArgumentError, "No vector!"), indices: (fail ArgumentError, "No indices!"), source: (fail ArgumentError, "No source!")) ⇒ Object
Builds a code string for incrementing a vector at given indices.
-
.column_vector_increment_code(vector: (fail ArgumentError, "No vector!"), indices: (fail ArgumentError, "No indices!"), source: (fail ArgumentError, "No source!")) ⇒ Object
Builds a code string for incrementing a vector at given indices.
Instance Method Summary collapse
-
#increment_at_indices_closure(indices: (fail ArgumentError, "No indices!")) ⇒ Object
Builds a closure for incrementing a column at given indices.
Class Method Details
.column_vector_access_code(vector: (fail ArgumentError, "No vector!"), indices: (fail ArgumentError, "No indices!")) ⇒ Object
Builds a code string for accessing the vector values at given indices.
12 13 14 15 |
# File 'lib/y_petri/simulation/matrix.rb', line 12 def column_vector_access_code vector: (fail ArgumentError, "No vector!"), indices: (fail ArgumentError, "No indices!") indices.map { |i| "#{vector}[#{i}, 0]" }.join( ", " ) end |
.column_vector_assignment_code(vector: (fail ArgumentError, "No vector!"), indices: (fail ArgumentError, "No indices!"), source: (fail ArgumentError, "No source!")) ⇒ Object
Builds a code string for assigning to a vector at given indices.
19 20 21 22 23 24 25 26 |
# File 'lib/y_petri/simulation/matrix.rb', line 19 def column_vector_assignment_code vector: (fail ArgumentError, "No vector!"), indices: (fail ArgumentError, "No indices!"), source: (fail ArgumentError, "No source!") code_lines = indices.map.with_index do |i, source_pos| "#{vector}.send( :[]=, #{i}, 0, #{source}.fetch( #{source_pos} ) )" if i end code_lines.compact.join( "\n" ) << "\n" end |
.column_vector_increment_by_array_code(vector: (fail ArgumentError, "No vector!"), indices: (fail ArgumentError, "No indices!"), source: (fail ArgumentError, "No source!")) ⇒ Object
Builds a code string for incrementing a vector at given indices. Source is an array.
44 45 46 47 48 49 50 51 52 |
# File 'lib/y_petri/simulation/matrix.rb', line 44 def column_vector_increment_by_array_code vector: (fail ArgumentError, "No vector!"), indices: (fail ArgumentError, "No indices!"), source: (fail ArgumentError, "No source!") code_lines = indices.map.with_index do |i, source_pos| "#{vector}.send( :[]=, #{i}, 0, %s )" % "#{vector}[#{i}, 0] + #{source}[#{source_pos}]" if i end code_lines.compact.join( "\n" ) << "\n" end |
.column_vector_increment_code(vector: (fail ArgumentError, "No vector!"), indices: (fail ArgumentError, "No indices!"), source: (fail ArgumentError, "No source!")) ⇒ Object
Builds a code string for incrementing a vector at given indices. Source is a vector.
31 32 33 34 35 36 37 38 39 |
# File 'lib/y_petri/simulation/matrix.rb', line 31 def column_vector_increment_code vector: (fail ArgumentError, "No vector!"), indices: (fail ArgumentError, "No indices!"), source: (fail ArgumentError, "No source!") code_lines = indices.map.with_index do |i, source_pos| "#{vector}.send( :[]=, #{i}, 0, %s )" % "#{vector}[#{i}, 0] + #{source}[#{source_pos}, 0]" if i end code_lines.compact.join( "\n" ) << "\n" end |
Instance Method Details
#increment_at_indices_closure(indices: (fail ArgumentError, "No indices!")) ⇒ Object
Builds a closure for incrementing a column at given indices.
57 58 59 60 61 62 63 |
# File 'lib/y_petri/simulation/matrix.rb', line 57 def increment_at_indices_closure indices: (fail ArgumentError, "No indices!") v = self eval "-> delta do\n%s\nend" % self.class.column_vector_increment_code( vector: "v", indices: indices, source: "delta" ) end |