sy 2.0.17 → 2.0.18

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f0cdb5e7240e7affdf2b08f083324fa67ad9e8a7
4
- data.tar.gz: bfe8fdb86bfe504b2b49e0104e5f8ee60d37d549
3
+ metadata.gz: d8f9f7390d20ebd9be2e00dea57e39a1c36de4df
4
+ data.tar.gz: 91e9d5e9b85fc8789742ec150c2e7760f79f1f8d
5
5
  SHA512:
6
- metadata.gz: 4d6c7473e4bc14e0567ab14026e292356fc2e7b83d729c8580aaa53208f6881f7eaf666eee790e4f92406748eaaee8bbdd00a652da68940aa0a726695df14ce5
7
- data.tar.gz: 7039bc22bf98e02d491073becf7ffee9be34e91307c832c46f2c88a1e757aa127eba07210a05d3766fa1bbc40fa70ea1f7fe6b463990f8b63b2453b8153f4805
6
+ metadata.gz: 92a5a1360619fe9473357eb3a350baa2839b6c8084c4011ccda4152f975249e60c7f7d7f02d71a3dfcbb53e9e799ba24cef8a92be9273a877fc4f6472c361f53
7
+ data.tar.gz: bf86c5bbeac6c81f5f6c32552e17532c1761cb8dbeee256dcd532d1dbbe57472ad079f7bd324feb098217bfa9c7a26625107cd2dd7e9fe4c5f338834930050b4
@@ -1,4 +1,5 @@
1
- # -*- coding: utf-8 -*-
1
+ # encoding: utf-8
2
+
2
3
  # Composition of quantities.
3
4
  #
4
5
  class SY::Composition < Hash
@@ -7,11 +8,13 @@ class SY::Composition < Hash
7
8
  SR = SIMPLIFICATION_RULES = []
8
9
 
9
10
  # SY::Amount and SY::Amount.relative are disposable:
11
+ #
10
12
  SR << -> ꜧ {
11
13
  ꜧ.reject! { |qnt, _| qnt == SY::Amount || qnt == SY::Amount.relative }
12
14
  }
13
15
 
14
16
  # Relative quantities of the composition are absolutized:
17
+ #
15
18
  SR << -> ꜧ {
16
19
  ꜧ.select { |qnt, _| qnt.relative? }.each { |qnt, exp|
17
20
  ꜧ.delete qnt
@@ -20,12 +23,13 @@ class SY::Composition < Hash
20
23
  }
21
24
 
22
25
  # Any quantities with exponent zero can be deleted:
26
+ #
23
27
  SR << -> ꜧ {
24
28
  ꜧ.reject! { |_, exp| exp == 0 }
25
29
  }
26
30
 
27
- # TODO: This undocumented simplification rule simplifies MoleAmount and
28
- # LitreVolume into Molarity.
31
+ # FIXME: This quick fix simplification rule simplifies MoleAmount and
32
+ # LitreVolume into Molarity. This solution is insufficiently systematic.
29
33
  #
30
34
  SR << -> ꜧ {
31
35
  begin
@@ -57,6 +61,25 @@ class SY::Composition < Hash
57
61
  return ꜧ
58
62
  }
59
63
 
64
+ # FIXME: This quick fix simplification rule simplifies LitreVolume times
65
+ # Molarity into MoleAmount. This solution is insufficiently systematic.
66
+ #
67
+ SR << -> ꜧ {
68
+ begin
69
+ q1, q2, q3 = SY::MoleAmount, SY::LitreVolume, SY::Molarity
70
+ rescue NameError; return ꜧ end
71
+ e2 = ꜧ.delete q2
72
+ e3 = ꜧ.delete q3
73
+ if e2 && e3 && e2 > 0 && e3 > 0 then
74
+ e2 -= 1
75
+ e3 -= 1
76
+ e1 = ꜧ.delete q1
77
+ ꜧ.update q1 => ( e1 ? e1 + 1 : 1 )
78
+ end
79
+ ꜧ.update q2 => e2 if e2 && e2 != 0
80
+ ꜧ.update q3 => e3 if e3 && e3 != 0
81
+ }
82
+
60
83
  class << self
61
84
  def singular quantity
62
85
  self[ SY.Quantity( quantity ) => 1 ]
data/lib/sy/quantity.rb CHANGED
@@ -87,6 +87,8 @@ class SY::Quantity
87
87
  coerces( *Array( coerces ) )
88
88
  Array( coerces_to ).each { |qnt| qnt.coerces self }
89
89
  puts "Composition of the initialized instance is #{composition}." if SY::DEBUG
90
+ puts "Initialized instance is #{relative? ? :relative : :absolute}" if SY::DEBUG
91
+ puts "Initialized instance object_id is #{object_id}" if SY::DEBUG
90
92
  end
91
93
 
92
94
  # Simple quantity is one with simple composition. If nontrivial composition
@@ -264,6 +266,8 @@ class SY::Quantity
264
266
  # Constructs a absolute magnitude of this quantity.
265
267
  #
266
268
  def magnitude amount
269
+ puts "self.object_id is #{object_id}" if SY::DEBUG
270
+ puts "composition is #{composition}" if SY::DEBUG
267
271
  puts "Constructing #{self}#magnitude with amount #{amount}." if SY::DEBUG
268
272
  Magnitude().new( of: self, amount: amount )
269
273
  .tap { puts "#{self}#magnitude constructed!" if SY::DEBUG }
data/lib/sy/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module SY
2
- VERSION = "2.0.17"
2
+ VERSION = "2.0.18"
3
3
  DEBUG = false # debug mode switch - sometimes there are lines like
4
4
  # puts "something" if SY::DEBUG
5
5
  end
data/lib/sy.rb CHANGED
@@ -1,4 +1,4 @@
1
- #encoding: utf-8
1
+ # encoding: utf-8
2
2
 
3
3
  require 'y_support/null_object'
4
4
  require 'y_support/name_magic'
@@ -69,7 +69,8 @@ module SY
69
69
  # such as 42.unit to create magnitudes of SY::Amount.
70
70
  puts "About to construct UNIT." if SY::DEBUG
71
71
  UNIT = Unit.standard of: Amount
72
- puts "UNIT constructed. SY::Unit instances are #{SY::Unit.instance_names}" if SY::DEBUG
72
+ puts "UNIT constructed. SY::Unit instances are " +
73
+ "#{SY::Unit.instance_names}" if SY::DEBUG
73
74
 
74
75
  # AVOGADRO_CONSTANT (Nᴀ) is a certain well-known amount of things:
75
76
  Nᴀ = AVOGADRO_CONSTANT = 6.02214e23
@@ -81,7 +82,8 @@ module SY
81
82
  puts "About to construct MOLE." if SY::DEBUG
82
83
  MOLE = Unit.standard of: MoleAmount, short: "mol", amount: Nᴀ.unit
83
84
  puts SY::Unit.__instances__ if SY::DEBUG
84
- puts "MOLE constructed. SY::Unit instances are #{SY::Unit.instance_names}" if SY::DEBUG
85
+ puts "MOLE constructed. SY::Unit instances are" +
86
+ "#{SY::Unit.instance_names}" if SY::DEBUG
85
87
 
86
88
  # === Basic dimension L (length)
87
89
 
@@ -152,7 +154,7 @@ module SY
152
154
  puts "CelsiusMagnitude#+ method with #{m2}" # FIXME: This message doesn't show.
153
155
  return magnitude amount + m2.amount if
154
156
  m2.quantity == SY::Temperature ||
155
- m2.quantity.colleague == SY::Temperature
157
+ m2.quantity.colleague == SY::Temperature
156
158
  raise QuantityError, "Addition of Celsius temepratures is ambiguous!" if
157
159
  m2.quantity == SY::CelsiusTemperature
158
160
  super
@@ -162,7 +164,7 @@ module SY
162
164
  puts "CelsiusMagnitude#- method with #{m2}" # FIXME: This message doesn't show.
163
165
  return magnitude amount - m2.amount if
164
166
  m2.quantity == SY::Temperature ||
165
- m2.quantity.colleague == SY::Temperature
167
+ m2.quantity.colleague == SY::Temperature
166
168
  return super.( SY::Temperature ) if m2.quantity == SY::CelsiusTemperature
167
169
  super
168
170
  end
@@ -177,6 +179,7 @@ module SY
177
179
  SY::CelsiusTemperature.absolute.magnitude self
178
180
  end
179
181
  end
182
+
180
183
  # FIXME: Make this more systematic.
181
184
  # FIXME: Make sure that SI prefixes may not be used with Celsius
182
185
  # FIXME: Make sure that highly unusual SI prefixes may not be used
@@ -189,7 +192,6 @@ module SY
189
192
  include SY::CelsiusMagnitude
190
193
  end
191
194
 
192
-
193
195
  # alias :°C :celsius # with U+00B0 DEGREE SIGN
194
196
  # alias :˚C :celsius # with U+02DA RING ABOVE
195
197
  # alias :℃ :celsius # U+2103 DEGREE CELSIUS
data/test/sy_test.rb CHANGED
@@ -48,7 +48,7 @@ describe SY::Dimension do
48
48
  assert_equal [0, 1], [:L, :M].map { |ß| SY.Dimension( :M ).send ß }
49
49
  assert_equal [1, 0], [:L, :M].map { |ß| SY.Dimension( :L )[ß] }
50
50
 
51
- # #to_a, #to_hash, #zero?,
51
+ # #to_a, #to_hash, #zero?
52
52
  ll = SY::BASE_DIMENSIONS.letters
53
53
  SY.Dimension( :M ).to_a.must_equal ll.map { |l| l == :M ? 1 : 0 }
54
54
  SY.Dimension( :M ).to_hash.must_equal Hash[ ll.zip SY.Dimension( :M ).to_a ]
@@ -346,18 +346,15 @@ describe SY::Quantity, SY::Magnitude do
346
346
  # joule
347
347
  ( 1.N * 1.m ).( SY::Energy ).must_equal 1.J
348
348
  1e-23.J.K⁻¹.must_equal 1.0e-20.mJ.K⁻¹
349
-
350
-
351
349
 
352
350
  # pascal
353
351
  ( 1.N / 1.m ** 2 ).( SY::Pressure ).must_be_within_epsilon 1.Pa, 1e-9
354
352
 
355
353
  # watt
356
354
  ( 1.V * 1.A ).( SY::Power ).must_be_within_epsilon 1.W, 1e-9
357
-
358
355
 
359
356
  # pretty representation
360
- ( 1.m / 3.s ).to_s.must_equal( "0.333.m.s⁻¹" ) # FIXME: Discovered a problem here, uncomment the line below
357
+ ( 1.m / 3.s ).to_s.must_equal( "0.333.m.s⁻¹" )
361
358
  ( 1.m / 7.01e7.s ).to_s.must_equal( "1.43e-08.m.s⁻¹" )
362
359
 
363
360
  assert_equal 1.m, 1.s * 1.m.s⁻¹
@@ -372,6 +369,7 @@ describe SY::Quantity, SY::Magnitude do
372
369
  assert_in_epsilon 1.µM, 1.µmol / 1.dm( 3 ).( SY::LitreVolume )
373
370
 
374
371
  assert_equal SY::Molarity.relative, 1.mol.l⁻¹.quantity
372
+ assert_equal SY::MoleAmount.relative, 1.M.l.quantity
375
373
 
376
374
  assert_equal 1 / SY::Time, 1 / SY::Time
377
375
  assert_equal 1 / SY::Time.relative, 1 / SY::Time
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sy
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.17
4
+ version: 2.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - boris
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-09 00:00:00.000000000 Z
11
+ date: 2013-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport