w-cluster 1.0.12 → 1.0.13

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.
package/g-cluster.mjs CHANGED
@@ -18,27 +18,105 @@ async function testCluster() {
18
18
  // => {
19
19
  // "keys": null,
20
20
  // "ginds": [
21
- // [ 2 ],
22
- // [ 0, 1, 3 ]
21
+ // [ 0, 1, 3 ],
22
+ // [ 2 ]
23
23
  // ],
24
24
  // "gmat": [
25
25
  // [
26
- // [ 31.31672176507748, 0.2183960452169238 ]
26
+ // [ -1.704002697669786, 0.43087564048799354 ],
27
+ // [ -0.2509699164590232, -1.1519035967558147 ],
28
+ // [ -0.03633718671228592, 0.48858292291798827 ]
27
29
  // ],
28
30
  // [
29
- // [ -22.27637140016484, -4.7649452046492735 ],
30
- // [ -9.12778006150881, 12.303870466192656 ],
31
- // [ 0.08742969659617117, -7.757321306760306 ]
31
+ // [ 1.9913098008410954, 0.23244503334983269 ]
32
32
  // ]
33
33
  // ],
34
34
  // "gltdt": [
35
35
  // [
36
- // [ 80, 70, 90 ]
37
- // ],
38
- // [
39
36
  // [ 40, 50, 60 ],
40
37
  // [ 50, 70, 60 ],
41
38
  // [ 50, 60, 80 ]
39
+ // ],
40
+ // [
41
+ // [ 80, 70, 90 ]
42
+ // ]
43
+ // ]
44
+ // }
45
+
46
+ let mat2 = [
47
+ [1040, 50, 60],
48
+ [1050, 70, 60],
49
+ [1080, 70, 90],
50
+ [1050, 60, 80]
51
+ ]
52
+ console.log('mat2', mat2)
53
+ // => mat [ [ 1040, 50, 60 ], [ 1050, 70, 60 ], [ 1080, 70, 90 ], [ 1050, 60, 80 ] ]
54
+
55
+ let resMat2 = await WCluster.cluster(mat2, { mode, kNumber: 2, nCompNIPALS: 2 })
56
+ console.log(JSON.stringify(resMat2, null, 2))
57
+ // => {
58
+ // "keys": null,
59
+ // "ginds": [
60
+ // [ 0, 1, 3 ],
61
+ // [ 2 ]
62
+ // ],
63
+ // "gmat": [
64
+ // [
65
+ // [ -1.704002697669786, 0.43087564048799354 ],
66
+ // [ -0.2509699164590232, -1.1519035967558147 ],
67
+ // [ -0.03633718671228592, 0.48858292291798827 ]
68
+ // ],
69
+ // [
70
+ // [ 1.9913098008410954, 0.23244503334983269 ]
71
+ // ]
72
+ // ],
73
+ // "gltdt": [
74
+ // [
75
+ // [ 1040, 50, 60 ],
76
+ // [ 1050, 70, 60 ],
77
+ // [ 1050, 60, 80 ]
78
+ // ],
79
+ // [
80
+ // [ 1080, 70, 90 ]
81
+ // ]
82
+ // ]
83
+ // }
84
+
85
+ let mat3 = [
86
+ [11040, 50, 60],
87
+ [13050, 70, 60],
88
+ [15080, 70, 90],
89
+ [17050, 60, 80]
90
+ ]
91
+ console.log('mat3', mat3)
92
+ // => mat [ [ 11040, 50, 60 ], [ 13050, 70, 60 ], [ 15080, 70, 90 ], [ 17050, 60, 80 ] ]
93
+
94
+ let resMat3 = await WCluster.cluster(mat3, { mode, kNumber: 2, nCompNIPALS: 2 })
95
+ console.log(JSON.stringify(resMat3, null, 2))
96
+ // => {
97
+ // "keys": null,
98
+ // "ginds": [
99
+ // [ 1, 2, 3 ],
100
+ // [ 0 ]
101
+ // ],
102
+ // "gmat": [
103
+ // [
104
+ // [ -0.3950941652793108, -1.0977355294143445 ],
105
+ // [ 1.3430199944041517, -0.17213692267477554 ],
106
+ // [ 0.912039727864449, 0.778996024938299 ]
107
+ // ],
108
+ // [
109
+ // [ -1.8599655569892897, 0.4908764271508211 ]
110
+ // ]
111
+ // ],
112
+ // "gltdt": [
113
+ // [
114
+ // [ 13050, 70, 60 ],
115
+ // [ 15080, 70, 90 ],
116
+ // [ 17050, 60, 80 ]
117
+ // ],
118
+ // [
119
+ // [ 11040, 50, 60 ]
42
120
  // ]
43
121
  // ]
44
122
  // }
@@ -62,27 +140,27 @@ async function testCluster() {
62
140
  // => {
63
141
  // "keys": [ "a", "b", "c" ],
64
142
  // "ginds": [
65
- // [ 2 ],
66
- // [ 0, 1, 3 ]
143
+ // [ 0, 1, 3 ],
144
+ // [ 2 ]
67
145
  // ],
68
146
  // "gmat": [
69
147
  // [
70
- // [ 31.31672176507748, 0.2183960452169238 ]
148
+ // [ -1.704002697669786, 0.43087564048799354 ],
149
+ // [ -0.2509699164590232, -1.1519035967558147 ],
150
+ // [ -0.03633718671228592, 0.48858292291798827 ]
71
151
  // ],
72
152
  // [
73
- // [ -22.27637140016484, -4.7649452046492735 ],
74
- // [ -9.12778006150881, 12.303870466192656 ],
75
- // [ 0.08742969659617117, -7.757321306760306 ]
153
+ // [ 1.9913098008410954, 0.23244503334983269 ]
76
154
  // ]
77
155
  // ],
78
156
  // "gltdt": [
79
157
  // [
80
- // { "name": "Paul", "a": 80, "b": 70, "c": 90 }
81
- // ],
82
- // [
83
158
  // { "name": "Cameron", "a": 40, "b": 50, "c": 60 },
84
159
  // { "name": "Buckley", "a": 50, "b": 70, "c": 60 },
85
160
  // { "name": "Fawcett", "a": 50, "b": 60, "c": 80 }
161
+ // ],
162
+ // [
163
+ // { "name": "Paul", "a": 80, "b": 70, "c": 90 }
86
164
  // ]
87
165
  // ]
88
166
  // }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "w-cluster",
3
- "version": "1.0.12",
3
+ "version": "1.0.13",
4
4
  "main": "dist/w-cluster.umd.js",
5
5
  "dependencies": {
6
6
  "lodash": "^4.17.21",
package/src/WCluster.mjs CHANGED
@@ -58,10 +58,10 @@ async function cluster(data, opt = {}) {
58
58
  * let resMat = await WCluster.PCA(mat, { nCompNIPALS: 2 })
59
59
  * console.log(resMat)
60
60
  * // => [
61
- * // [ -22.27637140016484, -4.7649452046492735 ],
62
- * // [ -9.12778006150881, 12.303870466192656 ],
63
- * // [ 31.31672176507748, 0.2183960452169238 ],
64
- * // [ 0.08742969659617117, -7.757321306760306 ]
61
+ * // [ -1.704002697669786, 0.43087564048799354 ],
62
+ * // [ -0.2509699164590232, -1.1519035967558147 ],
63
+ * // [ 1.9913098008410954, 0.23244503334983269 ],
64
+ * // [ -0.03633718671228592, 0.48858292291798827 ]
65
65
  * // ]
66
66
  *
67
67
  * let mat2 = [
@@ -76,10 +76,28 @@ async function cluster(data, opt = {}) {
76
76
  * let resMat2 = await WCluster.PCA(mat2, { nCompNIPALS: 2 })
77
77
  * console.log(resMat2)
78
78
  * // => [
79
- * // [ -22.27637140016484, -4.7649452046492735 ],
80
- * // [ -9.12778006150881, 12.303870466192656 ],
81
- * // [ 31.31672176507748, 0.2183960452169238 ],
82
- * // [ 0.08742969659617117, -7.757321306760306 ]
79
+ * // [ -1.704002697669786, 0.43087564048799354 ],
80
+ * // [ -0.2509699164590232, -1.1519035967558147 ],
81
+ * // [ 1.9913098008410954, 0.23244503334983269 ],
82
+ * // [ -0.03633718671228592, 0.48858292291798827 ]
83
+ * // ]
84
+ *
85
+ * let mat3 = [
86
+ * [11040, 50, 60],
87
+ * [13050, 70, 60],
88
+ * [15080, 70, 90],
89
+ * [17050, 60, 80]
90
+ * ]
91
+ * console.log('mat3', mat3)
92
+ * // => mat [ [ 11040, 50, 60 ], [ 13050, 70, 60 ], [ 15080, 70, 90 ], [ 17050, 60, 80 ] ]
93
+ *
94
+ * let resMat3 = await WCluster.PCA(mat3, { nCompNIPALS: 2 })
95
+ * console.log(resMat3)
96
+ * // => [
97
+ * // [ -1.8599655569892897, 0.4908764271508211 ],
98
+ * // [ -0.3950941652793108, -1.0977355294143445 ],
99
+ * // [ 1.3430199944041517, -0.17213692267477554 ],
100
+ * // [ 0.912039727864449, 0.778996024938299 ]
83
101
  * // ]
84
102
  *
85
103
  * }
@@ -105,27 +123,105 @@ async function cluster(data, opt = {}) {
105
123
  * // => {
106
124
  * // "keys": null,
107
125
  * // "ginds": [
108
- * // [ 2 ],
109
- * // [ 0, 1, 3 ]
126
+ * // [ 0, 1, 3 ],
127
+ * // [ 2 ]
110
128
  * // ],
111
129
  * // "gmat": [
112
130
  * // [
113
- * // [ 31.31672176507748, 0.2183960452169238 ]
131
+ * // [ -1.704002697669786, 0.43087564048799354 ],
132
+ * // [ -0.2509699164590232, -1.1519035967558147 ],
133
+ * // [ -0.03633718671228592, 0.48858292291798827 ]
114
134
  * // ],
115
135
  * // [
116
- * // [ -22.27637140016484, -4.7649452046492735 ],
117
- * // [ -9.12778006150881, 12.303870466192656 ],
118
- * // [ 0.08742969659617117, -7.757321306760306 ]
136
+ * // [ 1.9913098008410954, 0.23244503334983269 ]
119
137
  * // ]
120
138
  * // ],
121
139
  * // "gltdt": [
122
140
  * // [
123
- * // [ 80, 70, 90 ]
124
- * // ],
125
- * // [
126
141
  * // [ 40, 50, 60 ],
127
142
  * // [ 50, 70, 60 ],
128
143
  * // [ 50, 60, 80 ]
144
+ * // ],
145
+ * // [
146
+ * // [ 80, 70, 90 ]
147
+ * // ]
148
+ * // ]
149
+ * // }
150
+ *
151
+ * let mat2 = [
152
+ * [1040, 50, 60],
153
+ * [1050, 70, 60],
154
+ * [1080, 70, 90],
155
+ * [1050, 60, 80]
156
+ * ]
157
+ * console.log('mat2', mat2)
158
+ * // => mat [ [ 1040, 50, 60 ], [ 1050, 70, 60 ], [ 1080, 70, 90 ], [ 1050, 60, 80 ] ]
159
+ *
160
+ * let resMat2 = await WCluster.cluster(mat2, { mode, kNumber: 2, nCompNIPALS: 2 })
161
+ * console.log(JSON.stringify(resMat2, null, 2))
162
+ * // => {
163
+ * // "keys": null,
164
+ * // "ginds": [
165
+ * // [ 0, 1, 3 ],
166
+ * // [ 2 ]
167
+ * // ],
168
+ * // "gmat": [
169
+ * // [
170
+ * // [ -1.704002697669786, 0.43087564048799354 ],
171
+ * // [ -0.2509699164590232, -1.1519035967558147 ],
172
+ * // [ -0.03633718671228592, 0.48858292291798827 ]
173
+ * // ],
174
+ * // [
175
+ * // [ 1.9913098008410954, 0.23244503334983269 ]
176
+ * // ]
177
+ * // ],
178
+ * // "gltdt": [
179
+ * // [
180
+ * // [ 1040, 50, 60 ],
181
+ * // [ 1050, 70, 60 ],
182
+ * // [ 1050, 60, 80 ]
183
+ * // ],
184
+ * // [
185
+ * // [ 1080, 70, 90 ]
186
+ * // ]
187
+ * // ]
188
+ * // }
189
+ *
190
+ * let mat3 = [
191
+ * [11040, 50, 60],
192
+ * [13050, 70, 60],
193
+ * [15080, 70, 90],
194
+ * [17050, 60, 80]
195
+ * ]
196
+ * console.log('mat3', mat3)
197
+ * // => mat [ [ 11040, 50, 60 ], [ 13050, 70, 60 ], [ 15080, 70, 90 ], [ 17050, 60, 80 ] ]
198
+ *
199
+ * let resMat3 = await WCluster.cluster(mat3, { mode, kNumber: 2, nCompNIPALS: 2 })
200
+ * console.log(JSON.stringify(resMat3, null, 2))
201
+ * // => {
202
+ * // "keys": null,
203
+ * // "ginds": [
204
+ * // [ 1, 2, 3 ],
205
+ * // [ 0 ]
206
+ * // ],
207
+ * // "gmat": [
208
+ * // [
209
+ * // [ -0.3950941652793108, -1.0977355294143445 ],
210
+ * // [ 1.3430199944041517, -0.17213692267477554 ],
211
+ * // [ 0.912039727864449, 0.778996024938299 ]
212
+ * // ],
213
+ * // [
214
+ * // [ -1.8599655569892897, 0.4908764271508211 ]
215
+ * // ]
216
+ * // ],
217
+ * // "gltdt": [
218
+ * // [
219
+ * // [ 13050, 70, 60 ],
220
+ * // [ 15080, 70, 90 ],
221
+ * // [ 17050, 60, 80 ]
222
+ * // ],
223
+ * // [
224
+ * // [ 11040, 50, 60 ]
129
225
  * // ]
130
226
  * // ]
131
227
  * // }
@@ -149,27 +245,27 @@ async function cluster(data, opt = {}) {
149
245
  * // => {
150
246
  * // "keys": [ "a", "b", "c" ],
151
247
  * // "ginds": [
152
- * // [ 2 ],
153
- * // [ 0, 1, 3 ]
248
+ * // [ 0, 1, 3 ],
249
+ * // [ 2 ]
154
250
  * // ],
155
251
  * // "gmat": [
156
252
  * // [
157
- * // [ 31.31672176507748, 0.2183960452169238 ]
253
+ * // [ -1.704002697669786, 0.43087564048799354 ],
254
+ * // [ -0.2509699164590232, -1.1519035967558147 ],
255
+ * // [ -0.03633718671228592, 0.48858292291798827 ]
158
256
  * // ],
159
257
  * // [
160
- * // [ -22.27637140016484, -4.7649452046492735 ],
161
- * // [ -9.12778006150881, 12.303870466192656 ],
162
- * // [ 0.08742969659617117, -7.757321306760306 ]
258
+ * // [ 1.9913098008410954, 0.23244503334983269 ]
163
259
  * // ]
164
260
  * // ],
165
261
  * // "gltdt": [
166
262
  * // [
167
- * // { "name": "Paul", "a": 80, "b": 70, "c": 90 }
168
- * // ],
169
- * // [
170
263
  * // { "name": "Cameron", "a": 40, "b": 50, "c": 60 },
171
264
  * // { "name": "Buckley", "a": 50, "b": 70, "c": 60 },
172
265
  * // { "name": "Fawcett", "a": 50, "b": 60, "c": 80 }
266
+ * // ],
267
+ * // [
268
+ * // { "name": "Paul", "a": 80, "b": 70, "c": 90 }
173
269
  * // ]
174
270
  * // ]
175
271
  * // }
package/src/WPCAMat.mjs CHANGED
@@ -18,7 +18,7 @@ function WPCAMat(data, opt = {}) {
18
18
  //scale
19
19
  let scale = get(opt, 'scale')
20
20
  if (!isbol(scale)) {
21
- scale = false //true: divide by the standard deviation
21
+ scale = true //true: divide by the standard deviation
22
22
  }
23
23
 
24
24
  //nCompNIPALS
package/test/PCA.test.mjs CHANGED
@@ -11,10 +11,10 @@ describe(`PCA`, function() {
11
11
  [50, 60, 80]
12
12
  ]
13
13
  let clmat = [
14
- [-22.27637140016484, -4.7649452046492735],
15
- [-9.12778006150881, 12.303870466192656],
16
- [31.31672176507748, 0.2183960452169238],
17
- [0.08742969659617117, -7.757321306760306]
14
+ [-1.704002697669786, 0.43087564048799354],
15
+ [-0.2509699164590232, -1.1519035967558147],
16
+ [1.9913098008410954, 0.23244503334983269],
17
+ [-0.03633718671228592, 0.48858292291798827]
18
18
  ]
19
19
 
20
20
  it(`should return '${JSON.stringify(clmat)}' when input ${JSON.stringify(mat)}, { nCompNIPALS: 2 }`, async function() {
@@ -22,6 +22,42 @@ describe(`PCA`, function() {
22
22
  assert.strict.deepStrictEqual(r, clmat)
23
23
  })
24
24
 
25
+ let mat2 = [
26
+ [40, 50, 60],
27
+ [50, 70, 60],
28
+ [80, 70, 90],
29
+ [50, 60, 80]
30
+ ]
31
+ let clmat2 = [
32
+ [-1.704002697669786, 0.43087564048799354],
33
+ [-0.2509699164590232, -1.1519035967558147],
34
+ [1.9913098008410954, 0.23244503334983269],
35
+ [-0.03633718671228592, 0.48858292291798827]
36
+ ]
37
+
38
+ it(`should return '${JSON.stringify(clmat2)}' when input ${JSON.stringify(mat2)}, { nCompNIPALS: 2 }`, async function() {
39
+ let r = await WCluster.PCA(mat2, { nCompNIPALS: 2 })
40
+ assert.strict.deepStrictEqual(r, clmat2)
41
+ })
42
+
43
+ let mat3 = [
44
+ [40, 50, 60],
45
+ [50, 70, 60],
46
+ [80, 70, 90],
47
+ [50, 60, 80]
48
+ ]
49
+ let clmat3 = [
50
+ [-1.704002697669786, 0.43087564048799354],
51
+ [-0.2509699164590232, -1.1519035967558147],
52
+ [1.9913098008410954, 0.23244503334983269],
53
+ [-0.03633718671228592, 0.48858292291798827]
54
+ ]
55
+
56
+ it(`should return '${JSON.stringify(clmat3)}' when input ${JSON.stringify(mat3)}, { nCompNIPALS: 2 }`, async function() {
57
+ let r = await WCluster.PCA(mat3, { nCompNIPALS: 2 })
58
+ assert.strict.deepStrictEqual(r, clmat3)
59
+ })
60
+
25
61
  it(`should return 'Error: data is not eff. array' when input 123`, async function() {
26
62
  let r = ''
27
63
  await WCluster.PCA(123)
@@ -15,27 +15,27 @@ describe(`cluster`, function() {
15
15
  let clmat = {
16
16
  'keys': null,
17
17
  'ginds': [
18
- [2],
19
- [0, 1, 3]
18
+ [0, 1, 3],
19
+ [2]
20
20
  ],
21
21
  'gmat': [
22
22
  [
23
- [31.31672176507748, 0.2183960452169238]
23
+ [-1.704002697669786, 0.43087564048799354],
24
+ [-0.2509699164590232, -1.1519035967558147],
25
+ [-0.03633718671228592, 0.48858292291798827]
24
26
  ],
25
27
  [
26
- [-22.27637140016484, -4.7649452046492735],
27
- [-9.12778006150881, 12.303870466192656],
28
- [0.08742969659617117, -7.757321306760306]
28
+ [1.9913098008410954, 0.23244503334983269]
29
29
  ]
30
30
  ],
31
31
  'gltdt': [
32
- [
33
- [80, 70, 90]
34
- ],
35
32
  [
36
33
  [40, 50, 60],
37
34
  [50, 70, 60],
38
35
  [50, 60, 80]
36
+ ],
37
+ [
38
+ [80, 70, 90]
39
39
  ]
40
40
  ]
41
41
  }
@@ -45,6 +45,84 @@ describe(`cluster`, function() {
45
45
  assert.strict.deepStrictEqual(r, clmat)
46
46
  })
47
47
 
48
+ let mat2 = [
49
+ [1040, 50, 60],
50
+ [1050, 70, 60],
51
+ [1080, 70, 90],
52
+ [1050, 60, 80]
53
+ ]
54
+ let clmat2 = {
55
+ 'keys': null,
56
+ 'ginds': [
57
+ [0, 1, 3],
58
+ [2]
59
+ ],
60
+ 'gmat': [
61
+ [
62
+ [-1.704002697669786, 0.43087564048799354],
63
+ [-0.2509699164590232, -1.1519035967558147],
64
+ [-0.03633718671228592, 0.48858292291798827]
65
+ ],
66
+ [
67
+ [1.9913098008410954, 0.23244503334983269]
68
+ ]
69
+ ],
70
+ 'gltdt': [
71
+ [
72
+ [1040, 50, 60],
73
+ [1050, 70, 60],
74
+ [1050, 60, 80]
75
+ ],
76
+ [
77
+ [1080, 70, 90]
78
+ ]
79
+ ]
80
+ }
81
+
82
+ it(`should return '${JSON.stringify(clmat2)}' when input ${JSON.stringify(mat2)}, { mode, kNumber: 2, nCompNIPALS: 2 }`, async function() {
83
+ let r = await WCluster.cluster(mat2, { mode, kNumber: 2, nCompNIPALS: 2 })
84
+ assert.strict.deepStrictEqual(r, clmat2)
85
+ })
86
+
87
+ let mat3 = [
88
+ [11040, 50, 60],
89
+ [13050, 70, 60],
90
+ [15080, 70, 90],
91
+ [17050, 60, 80]
92
+ ]
93
+ let clmat3 = {
94
+ 'keys': null,
95
+ 'ginds': [
96
+ [1, 2, 3],
97
+ [0]
98
+ ],
99
+ 'gmat': [
100
+ [
101
+ [-0.3950941652793108, -1.0977355294143445],
102
+ [1.3430199944041517, -0.17213692267477554],
103
+ [0.912039727864449, 0.778996024938299]
104
+ ],
105
+ [
106
+ [-1.8599655569892897, 0.4908764271508211]
107
+ ]
108
+ ],
109
+ 'gltdt': [
110
+ [
111
+ [13050, 70, 60],
112
+ [15080, 70, 90],
113
+ [17050, 60, 80]
114
+ ],
115
+ [
116
+ [11040, 50, 60]
117
+ ]
118
+ ]
119
+ }
120
+
121
+ it(`should return '${JSON.stringify(clmat3)}' when input ${JSON.stringify(mat3)}, { mode, kNumber: 2, nCompNIPALS: 2 }`, async function() {
122
+ let r = await WCluster.cluster(mat3, { mode, kNumber: 2, nCompNIPALS: 2 })
123
+ assert.strict.deepStrictEqual(r, clmat3)
124
+ })
125
+
48
126
  let ltdt = [
49
127
  { name: 'Cameron', a: 40, b: 50, c: 60 },
50
128
  { name: 'Buckley', a: 50, b: 70, c: 60 },
@@ -54,27 +132,27 @@ describe(`cluster`, function() {
54
132
  let clltdt = {
55
133
  'keys': ['a', 'b', 'c'],
56
134
  'ginds': [
57
- [2],
58
- [0, 1, 3]
135
+ [0, 1, 3],
136
+ [2]
59
137
  ],
60
138
  'gmat': [
61
139
  [
62
- [31.31672176507748, 0.2183960452169238]
140
+ [-1.704002697669786, 0.43087564048799354],
141
+ [-0.2509699164590232, -1.1519035967558147],
142
+ [-0.03633718671228592, 0.48858292291798827]
63
143
  ],
64
144
  [
65
- [-22.27637140016484, -4.7649452046492735],
66
- [-9.12778006150881, 12.303870466192656],
67
- [0.08742969659617117, -7.757321306760306]
145
+ [1.9913098008410954, 0.23244503334983269]
68
146
  ]
69
147
  ],
70
148
  'gltdt': [
71
- [
72
- { 'name': 'Paul', 'a': 80, 'b': 70, 'c': 90 }
73
- ],
74
149
  [
75
150
  { 'name': 'Cameron', 'a': 40, 'b': 50, 'c': 60 },
76
151
  { 'name': 'Buckley', 'a': 50, 'b': 70, 'c': 60 },
77
152
  { 'name': 'Fawcett', 'a': 50, 'b': 60, 'c': 80 }
153
+ ],
154
+ [
155
+ { 'name': 'Paul', 'a': 80, 'b': 70, 'c': 90 }
78
156
  ]
79
157
  ]
80
158
  }