eulim 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7a4ff2d9a51f17fe9a667eb929f4b4d40b17089a
4
- data.tar.gz: b99d998f6b941096cc7f5dbd0fe5cc66ac3e6140
3
+ metadata.gz: f2c5e5faafacb78e59d9e9572cef6714bb5c9c83
4
+ data.tar.gz: 5739125159e28e055d75f082ec478db3d60a7626
5
5
  SHA512:
6
- metadata.gz: 3e6d1107d1d3f100b2a5202e36b8121417d01294e6c58e64cfa7473acbb04218e880bb4728dede64569a25ff6dd4fa252f40fef46cfbb5b92f6d265c40207780
7
- data.tar.gz: a89714402c6448c539fd954a9b34f1931beb92aa9060cef227b4c4203ea5a1a9a69924ec8ef7b7898ea316adb3a95b16469660434ae161171455dbec6b8ab6da
6
+ metadata.gz: 204895443dd48eb6d9ae00133c75fdf87a636af36419fba41bc67ca01fd5460483208e586536ab47b5de11381fca8de68ccf348a9b1efcc788d099e21a666038
7
+ data.tar.gz: 579e0330b4f4caf82f28abde993aca8fd311fd70627c6062bbd3d1fa9bbe64a333ade55d5125482d513374965e2e6c876c4068ac2a295baa89032b8380f1a074
data/README.md CHANGED
@@ -43,8 +43,9 @@ Or install it yourself as:
43
43
 
44
44
  ### Reaction
45
45
 
46
- * attributes: equation, is_valid, is_balanced, species
47
- * methods: new("Put your reaction string here") #For eg: ('2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)')
46
+ * attributes: equation, is_valid, is_balanced, species, balanced_eqn
47
+ * methods: new(equation: "Put your reaction string here", rate_equation: "r_{CaCo3} = k[CaO]")
48
+ * For eg: (equation: '2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)', rate_equation: "rNa = k[HCl]")
48
49
 
49
50
  ## Usage
50
51
  ```bash
@@ -60,19 +61,22 @@ $ Eulim::Chemistry::Element.get_by_name "helium" # or "Helium"
60
61
  $ Eulim::Chemistry::Compound.new("CaCO3")
61
62
  => #<Eulim::Chemistry::Compound:0x00000002a65340 @formula="CaCO3", @constituents={"Ca"=>{:element=>#<Eulim::Chemistry::Element:0x00000002c805a8 @name="Calcium", @symbol="Ca", @atomic_number=20, @atomic_mass=#<Unitwise::Measurement value=40.078 unit=u>>, :atom_count=>1}, "C"=>{:element=>#<Eulim::Chemistry::Element:0x00000002c8f6e8 @name="Carbon", @symbol="C", @atomic_number=6, @atomic_mass=#<Unitwise::Measurement value=12.0107 unit=u>>, :atom_count=>1}, "O"=>{:element=>#<Eulim::Chemistry::Element:0x00000002c8dc30 @name="Oxygen", @symbol="O", @atomic_number=8, @atomic_mass=#<Unitwise::Measurement value=15.9996 unit=u>>, :atom_count=>3}}, @molecular_mass=#<Unitwise::Measurement value=100.0875 unit=u>>
62
63
 
63
- $ Eulim::Chemistry::Reaction.new('2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)').equation
64
+ $Eulim::Chemistry::Reaction.new(equation: 'KMnO4 + HCl >> KCl + MnCl2 + H2O + Cl2').balanced_eqn
65
+ => "2KMnO4 + 16HCl >> 2KCl + 2MnCl2 + 8H2O + 5Cl2"
66
+
67
+ $ Eulim::Chemistry::Reaction.new(equation: '2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)').equation
64
68
  => "2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)"
65
69
 
66
- $ Eulim::Chemistry::Reaction.new('2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)').is_valid
70
+ $ Eulim::Chemistry::Reaction.new(equation: '2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)').is_valid
67
71
  => true
68
72
 
69
- $ Eulim::Chemistry::Reaction.new('2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)').is_balanced
73
+ $ Eulim::Chemistry::Reaction.new(equation: '2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)').is_balanced
70
74
  => true
71
75
 
72
- $ Eulim::Chemistry::Reaction.new('2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)').species
76
+ $ Eulim::Chemistry::Reaction.new(equation: '2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)').species
73
77
  => {:reactants=>{"Na"=>{:compound=>#<Eulim::Chemistry::Compound:0x00000002ca6910 @formula="Na", @constituents={"Na"=>{:element=>#<Eulim::Chemistry::Element:0x00000002c88e10 @name="Sodium", @symbol="Na", @atomic_number=11, @atomic_mass=#<Unitwise::Measurement value=22.9897 unit=u>>, :atom_count=>1}}, @molecular_mass=#<Unitwise::Measurement value=22.9897 unit=u>>, :stoichiometry=>2, :state=>"solid"}, "HCl"=>{:compound=>#<Eulim::Chemistry::Compound:0x00000002c90ed0 @formula="HCl", @constituents={"H"=>{:element=>#<Eulim::Chemistry::Element:0x000000025e5ab8 @name="Hydrogen", @symbol="H", @atomic_number=1, @atomic_mass=#<Unitwise::Measurement value=1.0079 unit=u>>, :atom_count=>1}, "Cl"=>{:element=>#<Eulim::Chemistry::Element:0x00000002c82c90 @name="Chlorine", @symbol="Cl", @atomic_number=17, @atomic_mass=#<Unitwise::Measurement value=35.453 unit=u>>, :atom_count=>1}}, @molecular_mass=#<Unitwise::Measurement value=36.4609 unit=u>>, :stoichiometry=>2, :state=>"aqueous"}}, :products=>{"NaCl"=>{:compound=>#<Eulim::Chemistry::Compound:0x00000002c73bf0 @formula="NaCl", @constituents={"Na"=>{:element=>#<Eulim::Chemistry::Element:0x00000002c88e10 @name="Sodium", @symbol="Na", @atomic_number=11, @atomic_mass=#<Unitwise::Measurement value=22.9897 unit=u>>, :atom_count=>1}, "Cl"=>{:element=>#<Eulim::Chemistry::Element:0x00000002c82c90 @name="Chlorine", @symbol="Cl", @atomic_number=17, @atomic_mass=#<Unitwise::Measurement value=35.453 unit=u>>, :atom_count=>1}}, @molecular_mass=#<Unitwise::Measurement value=58.4427 unit=u>>, :stoichiometry=>2, :state=>"aqueous"}, "H2"=>{:compound=>#<Eulim::Chemistry::Compound:0x00000002c34180 @formula="H2", @constituents={"H"=>{:element=>#<Eulim::Chemistry::Element:0x000000025e5ab8 @name="Hydrogen", @symbol="H", @atomic_number=1, @atomic_mass=#<Unitwise::Measurement value=1.0079 unit=u>>, :atom_count=>2}}, @molecular_mass=#<Unitwise::Measurement value=2.0158 unit=u>>, :stoichiometry=>1, :state=>"gaseous"}}}
74
78
 
75
- $ Eulim::Chemistry::Reaction.new('2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)')
79
+ $ Eulim::Chemistry::Reaction.new(equation: '2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)')
76
80
  => #<Eulim::Chemistry::Reaction:0x00000002ce22f8 @equation="2Na(s) + 2HCl(aq) >> 2NaCl(aq) + H2(g)", @species={:reactants=>{"Na"=>{:compound=>#<Eulim::Chemistry::Compound:0x00000002ce1d80 @formula="Na", @constituents={"Na"=>{:element=>#<Eulim::Chemistry::Element:0x00000002c88e10 @name="Sodium", @symbol="Na", @atomic_number=11, @atomic_mass=#<Unitwise::Measurement value=22.9897 unit=u>>, :atom_count=>1}}, @molecular_mass=#<Unitwise::Measurement value=22.9897 unit=u>>, :stoichiometry=>2, :state=>"solid"}, "HCl"=>{:compound=>#<Eulim::Chemistry::Compound:0x00000002cabdc0 @formula="HCl", @constituents={"H"=>{:element=>#<Eulim::Chemistry::Element:0x000000025e5ab8 @name="Hydrogen", @symbol="H", @atomic_number=1, @atomic_mass=#<Unitwise::Measurement value=1.0079 unit=u>>, :atom_count=>1}, "Cl"=>{:element=>#<Eulim::Chemistry::Element:0x00000002c82c90 @name="Chlorine", @symbol="Cl", @atomic_number=17, @atomic_mass=#<Unitwise::Measurement value=35.453 unit=u>>, :atom_count=>1}}, @molecular_mass=#<Unitwise::Measurement value=36.4609 unit=u>>, :stoichiometry=>2, :state=>"aqueous"}}, :products=>{"NaCl"=>{:compound=>#<Eulim::Chemistry::Compound:0x00000002c8cda8 @formula="NaCl", @constituents={"Na"=>{:element=>#<Eulim::Chemistry::Element:0x00000002c88e10 @name="Sodium", @symbol="Na", @atomic_number=11, @atomic_mass=#<Unitwise::Measurement value=22.9897 unit=u>>, :atom_count=>1}, "Cl"=>{:element=>#<Eulim::Chemistry::Element:0x00000002c82c90 @name="Chlorine", @symbol="Cl", @atomic_number=17, @atomic_mass=#<Unitwise::Measurement value=35.453 unit=u>>, :atom_count=>1}}, @molecular_mass=#<Unitwise::Measurement value=58.4427 unit=u>>, :stoichiometry=>2, :state=>"aqueous"},"H2"=>{:compound=>#<Eulim::Chemistry::Compound:0x00000002c6f938 @formula="H2", @constituents={"H"=>{:element=>#<Eulim::Chemistry::Element:0x000000025e5ab8 @name="Hydrogen", @symbol="H", @atomic_number=1, @atomic_mass=#<Unitwise::Measurement value=1.0079 unit=u>>, :atom_count=>2}}, @molecular_mass=#<Unitwise::Measurement value=2.0158 unit=u>>, :stoichiometry=>1, :state=>"gaseous"}}}, @is_valid=true, @is_balanced=true>
77
81
  ```
78
82
  ## Development
data/eulim.gemspec CHANGED
@@ -38,7 +38,7 @@ Gem::Specification.new do |spec|
38
38
  spec.add_development_dependency 'rake', '~> 10.0'
39
39
  spec.add_development_dependency 'rspec', '~> 3.0'
40
40
  spec.add_development_dependency 'rubocop', '~>0.49.1'
41
-
42
- spec.add_dependency 'require_all', '~> 1.4.0'
43
- spec.add_dependency 'unitwise', '~> 2.1.0'
41
+ spec.add_dependency 'unitwise', '~>2.1.0'
42
+ spec.add_dependency 'rubypython', '~> 0.6.4'
43
+ spec.add_dependency 'require_all', '~> 1.4.0'
44
44
  end
data/lib/eulim.rb CHANGED
@@ -11,10 +11,11 @@ Ch = Eulim::Chemistry
11
11
  Elem = Ch::Element
12
12
  Comp = Ch::Compound
13
13
  Rxn = Ch::Reaction
14
- Subs = Ch::Substance
14
+ Sub = Ch::Substance
15
15
 
16
16
  Cl = Eulim::Chemical
17
17
  Rcts = Cl::Reactors
18
+ Rct = Rcts::Reactor
18
19
  Br = Rcts::Batch
19
20
  Cstr = Rcts::CSTR
20
21
  Pfr = Rcts::PFR
@@ -7,6 +7,18 @@ module Eulim
7
7
  super args
8
8
  end
9
9
 
10
+ def find_volume
11
+ # accumulation is zero
12
+ compound_formula = @reaction.rate_equation.split(' ').first.split('r').last
13
+ ci = @input[:substance].species[compound_formula]
14
+ co = @output[:substance].species[compound_formula]
15
+ input = @input[:quantity] * ci[:weight_percent] /
16
+ (100 * ci[:compound].molar_mass)
17
+ output = @output[:quantity] * co[:weight_percent] /
18
+ (100 * co[:compound].molar_mass)
19
+ x = (input - output) / input
20
+ end
21
+
10
22
  def self.humanized_name
11
23
  'Continuous stirred-tank reactor'
12
24
  end
@@ -3,12 +3,36 @@ module Eulim
3
3
  module Reactors
4
4
  # This is the base class for the diff kinds of reactors
5
5
  class Reactor
6
- attr_accessor :system, :volume, :input, :output, :conversion
6
+ attr_reader :system, :volume, :input, :output, :reaction
7
+
8
+ # ATTRS = [:system, :volume, :input, :output, :rate_equation]
7
9
 
8
10
  def initialize(args = {})
9
- @volume = volume_if_valid(args[:volume]) if args[:volume]
10
- @system = args[:system] || :open
11
- @input = input_if_valid(args[:input]) if args[:input]
11
+ self.system = args[:system]
12
+ self.volume = args[:volume] if args[:volume]
13
+ self.input = args[:input] if args[:input]
14
+ self.output = args[:output] if args[:output]
15
+ self.reaction = args[:reaction] if args[:reaction]
16
+ end
17
+
18
+ def system=(sys)
19
+ @system = sys || :open
20
+ end
21
+
22
+ def volume=(vol)
23
+ @volume = volume_if_valid vol
24
+ end
25
+
26
+ def input=(inp)
27
+ @input = feed_if_valid inp
28
+ end
29
+
30
+ def output=(out)
31
+ @output = feed_if_valid out
32
+ end
33
+
34
+ def reaction=(rxn)
35
+ @reaction = reaction_if_valid rxn
12
36
  end
13
37
 
14
38
  private
@@ -23,20 +47,30 @@ module Eulim
23
47
  raise ArgumentError, 'Invalid volume unit'
24
48
  end
25
49
 
26
- def input_if_valid(inp)
27
- raise ArgumentError, 'Invalid input substance' if inp[:substance].class != Subs
50
+ def feed_if_valid(f)
51
+ raise ArgumentError, 'Invalid substance' if f[:substance].class != Sub
28
52
  begin
29
- inp[:quantity] = Unitwise inp[:quantity]
53
+ f[:quantity] = Unitwise f[:quantity]
30
54
  rescue
31
- raise ArgumentError, 'Invalid input quantity'
55
+ raise ArgumentError, 'Invalid quantity'
32
56
  end
33
- dim = inp[:quantity].composition.to_h
34
- return inp if valid_input_quantity_compositions.include? dim
35
- raise ArgumentError, 'Invalid input quantity unit'
57
+ dim = f[:quantity].composition.to_h
58
+ return f if valid_feed_quantity_dimensions.include? dim
59
+ raise ArgumentError, 'Invalid quantity unit'
60
+ end
61
+
62
+ def valid_feed_quantity_dimensions
63
+ [{ 'M' => 1 }, { 'M' => 1, 'T' => -1 }]
36
64
  end
37
65
 
38
- def valid_input_quantity_compositions
39
- [{ 'M' => 1 }, { 'M' => 1, 'T' => -1 }, {}, { 'T' => -1 }]
66
+ def reaction_if_valid(r)
67
+ # raise ArgumentError, 'Substance not in reaction' if
68
+ # @input && (
69
+ # r.species[:reactants].keys &
70
+ # @input[:substance].species.keys
71
+ # ).empty?
72
+ return r if r.class == Rxn && r.is_valid
73
+ raise ArgumentError, 'Invalid reaction argument'
40
74
  end
41
75
  end
42
76
  end
@@ -8,22 +8,22 @@ module Eulim
8
8
  COMPOUND_REGEXP =
9
9
  /[A-Z][a-z]{0,2}\d*|\((?:[^()]*(?:\(.*\))?[^()]*)+\)\d*/
10
10
 
11
- attr_accessor :molecular_mass, :constituents, :formula
11
+ attr_accessor :molecular_mass, :constituents, :formula, :molar_mass
12
12
 
13
13
  def initialize(arg)
14
14
  @formula = arg
15
15
  build_constituents
16
- calculate_molecular_mass
16
+ calculate_mass
17
17
  end
18
18
 
19
19
  private
20
20
 
21
- def calculate_molecular_mass
22
- @molecular_mass = Unitwise(0, 'u')
21
+ def calculate_mass
22
+ @molecular_mass = Unitwise(0.0, 'u')
23
23
  @constituents.each do |_symbol, info|
24
24
  @molecular_mass += info[:element].atomic_mass * info[:atom_count]
25
25
  end
26
- @molecular_mass
26
+ @molar_mass = Unitwise(@molecular_mass.value / 1000.0, 'kg/mol')
27
27
  end
28
28
 
29
29
  def build_constituents
@@ -1,25 +1,42 @@
1
+ require 'matrix'
2
+
1
3
  module Eulim
2
4
  module Chemistry
3
5
  # This class has functionality for reaction
4
6
  # Ex: check for balanced rxn, validity of a rxn
5
7
  class Reaction
6
- attr_accessor :equation, :is_valid, :is_balanced, :species
8
+ attr_accessor :equation, :is_valid, :species, :participants, :balanced_eqn, :rate_equation
7
9
 
8
10
  STATES = {
9
11
  '(s)' => 'solid', '(l)' => 'liquid',
10
12
  '(g)' => 'gaseous', '(aq)' => 'aqueous',
11
- '' => 'liquid'
13
+ '' => ''
12
14
  }.freeze
13
15
 
14
- def initialize(arg)
15
- @equation = arg
16
+ def initialize(args)
17
+ # rate_eqn should be of the form: 'r_{CaO} = k[CaO][CO2]'
18
+ @equation = args[:equation]
16
19
  @species = build_species
17
20
  @is_valid = valid_rxn?
18
- @is_balanced = balanced_rxn?
21
+ p participant_elements
22
+ # @balanced_eqn = balance_rxn
23
+ @rate_equation = validify_rate_eqn args[:rate_equation]
19
24
  end
20
25
 
21
26
  private
22
27
 
28
+ def validify_rate_eqn(rate_eqn)
29
+ if rate_eqn
30
+ rate_eqn.gsub('_{', '')
31
+ .gsub('}', '')
32
+ .gsub('[', ' * c')
33
+ .gsub(']', '')
34
+ else
35
+ specie = @species[:reactants].keys.first
36
+ 'r' + specie + ' = k * c' + specie
37
+ end
38
+ end
39
+
23
40
  def build_species
24
41
  r = {}
25
42
  result = {}
@@ -81,6 +98,61 @@ module Eulim
81
98
  def get_state(specie)
82
99
  specie.match(/\((s|l|g|aq)\)$/).to_s
83
100
  end
101
+
102
+ def participant_elements
103
+ participants = []
104
+ @species[:reactants].keys.each do |r|
105
+ participants << @species[:reactants][r][:compound].constituents.keys
106
+ end
107
+ @participants = participants.flatten.uniq
108
+ end
109
+
110
+ def get_participant_row(parti)
111
+ row = []
112
+ @species.keys.each do |key|
113
+ i = key == :reactants ? 1 : -1
114
+ @species[key].keys.each do |specie|
115
+ if specie.include? parti
116
+ row << @species[key][specie][:compound]
117
+ .constituents[parti][:atom_count] * i
118
+ else
119
+ row << 0
120
+ end
121
+ end
122
+ end
123
+ row
124
+ end
125
+
126
+ def write_matrix
127
+ @matrix = Matrix[]
128
+ @participants.each do |parti|
129
+ @matrix = Matrix.rows(@matrix.to_a << get_participant_row(parti))
130
+ end
131
+ @matrix
132
+ end
133
+
134
+ def balanced_coeff_array
135
+ write_matrix
136
+ null_space_array = @matrix.nullspace_array
137
+ lcm = null_space_array.collect(&:denominator).reduce(1, :lcm)
138
+ null_space_array.collect { |x| (x * lcm).to_i }
139
+ end
140
+
141
+ def balance_rxn
142
+ exp = ''
143
+ i = 0
144
+ bal_coeff = balanced_coeff_array
145
+ @species.keys.each do |key|
146
+ @species[key].keys.each do |comp|
147
+ coeff = bal_coeff[i] == 1 ? ' ' : ' ' + bal_coeff[i].abs.to_s
148
+ state = STATES.key(@species[key][comp][:state])
149
+ exp = exp + coeff + comp + state + ' +'
150
+ i += 1
151
+ end
152
+ exp = key == :reactants ? exp.chomp('+') + '>>' : exp.chomp('+')
153
+ end
154
+ exp.strip
155
+ end
84
156
  end
85
157
  end
86
158
  end
data/lib/eulim/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Eulim
2
- VERSION = '0.0.13'.freeze
2
+ VERSION = '0.0.14'.freeze
3
3
  end
data/lib/matrix.rb ADDED
@@ -0,0 +1,20 @@
1
+ require 'rubypython'
2
+ # this class is extension of Matrix class offered by ruby
3
+ class Matrix
4
+ def nullspace_as_string
5
+ a = to_a
6
+ RubyPython.start
7
+ main = RubyPython.import('__main__')
8
+ RubyPython::Python.PyRun_SimpleString <<-PYTHON
9
+ from sympy import Matrix
10
+ import numpy as np
11
+ def null_space(a):
12
+ return np.array_str(np.array(Matrix(a).nullspace()))
13
+ PYTHON
14
+ main.null_space(a).rubify
15
+ end
16
+
17
+ def nullspace_array
18
+ nullspace_as_string[2..-3].split(' ').map(&:to_r)
19
+ end
20
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eulim
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Syed Fazil Basheer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-06-30 00:00:00.000000000 Z
12
+ date: 2017-07-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -68,33 +68,47 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  version: 0.49.1
70
70
  - !ruby/object:Gem::Dependency
71
- name: require_all
71
+ name: unitwise
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: 1.4.0
76
+ version: 2.1.0
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: 1.4.0
83
+ version: 2.1.0
84
84
  - !ruby/object:Gem::Dependency
85
- name: unitwise
85
+ name: rubypython
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: 2.1.0
90
+ version: 0.6.4
91
91
  type: :runtime
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: 2.1.0
97
+ version: 0.6.4
98
+ - !ruby/object:Gem::Dependency
99
+ name: require_all
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: 1.4.0
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: 1.4.0
98
112
  description: A gem for scientific data.
99
113
  email:
100
114
  - fazil.basheer@quester.xyz
@@ -133,6 +147,7 @@ files:
133
147
  - lib/eulim/structures/pipe.rb
134
148
  - lib/eulim/structures/structure.rb
135
149
  - lib/eulim/version.rb
150
+ - lib/matrix.rb
136
151
  - lib/string.rb
137
152
  homepage: https://github.com/syedfazilbasheer-quester/eulim-gem
138
153
  licenses: