1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#[allow(unused_imports)]
use structure::matrix::*;
#[allow(unused_imports)]
use structure::vector::*;
#[allow(unused_imports)]
use structure::polynomial::*;
#[allow(unused_imports)]
use structure::dual::*;
#[allow(unused_imports)]
use structure::multinomial::*;
pub trait Printable {
fn print(&self);
}
impl Printable for f64 {
fn print(&self) {
println!("{}", self);
}
}
impl Printable for f32 {
fn print(&self) {
println!("{}", self);
}
}
impl Printable for u64 {
fn print(&self) {
println!("{}", self);
}
}
impl Printable for u32 {
fn print(&self) {
println!("{}", self);
}
}
impl Printable for usize {
fn print(&self) {
println!("{}", self);
}
}
impl Printable for i64 {
fn print(&self) {
println!("{}", self);
}
}
impl Printable for i32 {
fn print(&self) {
println!("{}", self);
}
}
impl Printable for Vector {
fn print(&self) {
let mut result = String::new();
result.push_str("[");
for i in 0 .. self.len() {
let st1 = format!("{:.4}", self[i]);
let st2 = self[i].to_string();
let mut st = st2.clone();
if st1.len() < st2.len() {
st = st1;
}
result.push_str(&st);
if i == self.len() - 1 {
break;
}
result.push_str(", ");
}
result.push_str("]");
println!("{}", result);
}
}
impl Printable for Matrix {
fn print(&self) {
println!("{}", self);
}
}
impl Printable for Polynomial {
fn print(&self) {
println!("{}", self);
}
}
impl Printable for Dual {
fn print(&self) {
println!("{}", self);
}
}
impl Printable for Multinomial {
fn print(&self) {
println!("{}", self);
}
}
impl Printable for Vec<Dual> {
fn print(&self) {
println!("value:");
self.values().print();
println!("slope:");
self.slopes().print();
}
}