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 +4 -4
- data/README.md +11 -7
- data/eulim.gemspec +3 -3
- data/lib/eulim.rb +2 -1
- data/lib/eulim/chemical/reactors/continuous_stirred_tank_reactor.rb +12 -0
- data/lib/eulim/chemical/reactors/reactor.rb +47 -13
- data/lib/eulim/chemistry/compound.rb +5 -5
- data/lib/eulim/chemistry/reaction.rb +77 -5
- data/lib/eulim/version.rb +1 -1
- data/lib/matrix.rb +20 -0
- metadata +23 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2c5e5faafacb78e59d9e9572cef6714bb5c9c83
|
4
|
+
data.tar.gz: 5739125159e28e055d75f082ec478db3d60a7626
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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"
|
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
|
-
$
|
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
|
43
|
-
spec.add_dependency
|
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
|
-
|
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
|
-
|
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
|
-
|
10
|
-
|
11
|
-
|
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
|
27
|
-
raise ArgumentError, 'Invalid
|
50
|
+
def feed_if_valid(f)
|
51
|
+
raise ArgumentError, 'Invalid substance' if f[:substance].class != Sub
|
28
52
|
begin
|
29
|
-
|
53
|
+
f[:quantity] = Unitwise f[:quantity]
|
30
54
|
rescue
|
31
|
-
raise ArgumentError, 'Invalid
|
55
|
+
raise ArgumentError, 'Invalid quantity'
|
32
56
|
end
|
33
|
-
dim =
|
34
|
-
return
|
35
|
-
raise ArgumentError, 'Invalid
|
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
|
39
|
-
|
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
|
-
|
16
|
+
calculate_mass
|
17
17
|
end
|
18
18
|
|
19
19
|
private
|
20
20
|
|
21
|
-
def
|
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, :
|
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
|
-
'' => '
|
13
|
+
'' => ''
|
12
14
|
}.freeze
|
13
15
|
|
14
|
-
def initialize(
|
15
|
-
|
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
|
-
|
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
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.
|
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-
|
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:
|
71
|
+
name: unitwise
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: 1.
|
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.
|
83
|
+
version: 2.1.0
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
85
|
+
name: rubypython
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
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:
|
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:
|