Class: Symbolic::Printer
- Inherits:
-
Object
- Object
- Symbolic::Printer
- Defined in:
- lib/symbolic/printer.rb
Class Method Summary collapse
- .brackets(var) ⇒ Object
- .coef(c) ⇒ Object
- .coef_with_sign(c) ⇒ Object
- .constant(c) ⇒ Object
- .exponent(base, exponent) ⇒ Object
-
.factors(f) ⇒ Object
Factors.
-
.functionwrapper(f) ⇒ Object
Function.
-
.output(f) ⇒ Object
This has to change ! can be inline in ::factors, but needed also in reversed_output.
- .print(o) ⇒ Object
- .rational(r) ⇒ Object
- .remainder(n) ⇒ Object
-
.reversed_output(f) ⇒ Object
This has to change ! Please make this non dependent of output ;).
-
.sum(s) ⇒ Object
Sums.
-
.summands(s) ⇒ Object
Summands.
-
.variable(v) ⇒ Object
Variable.
Class Method Details
.brackets(var) ⇒ Object
12 13 14 |
# File 'lib/symbolic/printer.rb', line 12 def brackets(var) [Numeric, Variable, Function].any? { |c| var.is_a? c } ? var.to_s : "(#{var})" end |
.coef(c) ⇒ Object
20 21 22 |
# File 'lib/symbolic/printer.rb', line 20 def coef(c) "#{'-' if c < 0}#{"#{rational c.abs}*" if c.abs != 1}" end |
.coef_with_sign(c) ⇒ Object
23 24 25 |
# File 'lib/symbolic/printer.rb', line 23 def coef_with_sign(c) "#{ c < 0 ? '-' : '+'}#{"#{rational c.abs}*" if c.abs != 1}" end |
.constant(c) ⇒ Object
70 71 72 |
# File 'lib/symbolic/printer.rb', line 70 def constant(c) "#{c.name || :unnamed_variable}" end |
.exponent(base, exponent) ⇒ Object
44 45 46 |
# File 'lib/symbolic/printer.rb', line 44 def exponent(base, exponent) "#{brackets base}#{"**#{brackets exponent}" if exponent != 1}" end |
.factors(f) ⇒ Object
Factors
28 29 30 31 32 33 34 35 36 |
# File 'lib/symbolic/printer.rb', line 28 def factors(f) rfactors, factors = f.symbolic.partition { |b,e| e.is_a?(Numeric) && e < 0 } rfactors = rfactors.empty? ? nil : [ 1, Hash[*rfactors.flatten] ] factors = factors.empty? ? nil : [ f.numeric, Hash[*factors.flatten] ] s = (factors ? output(factors) : rational(f.numeric)) s << "/#{reversed_output rfactors}" if rfactors s end |
.functionwrapper(f) ⇒ Object
Function
66 67 68 |
# File 'lib/symbolic/printer.rb', line 66 def functionwrapper(f) "#{f.name}(#{f.argument})" end |
.output(f) ⇒ Object
This has to change ! can be inline in ::factors, but needed also in reversed_output
37 38 39 |
# File 'lib/symbolic/printer.rb', line 37 def output(f) # This has to change ! can be inline in ::factors, but needed also in reversed_output coef(f[0]) << f[1].map {|b,e| exponent b,e }.join('*') end |
.print(o) ⇒ Object
8 9 10 |
# File 'lib/symbolic/printer.rb', line 8 def print(o) send(o.class.simple_name.downcase, o) end |
.rational(r) ⇒ Object
16 17 18 |
# File 'lib/symbolic/printer.rb', line 16 def rational(r) "#{r.round == r ? r.to_i : r.to_f}" end |
.remainder(n) ⇒ Object
56 57 58 |
# File 'lib/symbolic/printer.rb', line 56 def remainder(n) "#{'+' if n > 0}#{n unless n.zero?}" end |
.reversed_output(f) ⇒ Object
This has to change ! Please make this non dependent of output ;)
40 41 42 43 |
# File 'lib/symbolic/printer.rb', line 40 def reversed_output(f) # This has to change ! Please make this non dependent of output ;) result = output [f[0], Hash[*f[1].map {|b,e| [b,-e] }.flatten]] (f[1].length > 1) ? "(#{result})" : result end |
.sum(s) ⇒ Object
Sums
74 75 76 |
# File 'lib/symbolic/printer.rb', line 74 def sum(s) "Sum(#{s.term}, #{s.index} = #{s.lb}..#{s.ub})" end |
.summands(s) ⇒ Object
Summands
49 50 51 52 53 54 |
# File 'lib/symbolic/printer.rb', line 49 def summands(s) out = s.symbolic.map { |base, coef| coef_with_sign(coef) + brackets(base) } out << remainder(s.numeric) out[0].sub!(/^\+/, '') out.join end |
.variable(v) ⇒ Object
Variable
61 62 63 |
# File 'lib/symbolic/printer.rb', line 61 def variable(v) "#{v.name || :unnamed_variable}" end |