 let v8 = 0.5*v1
 let v9 = v1**2
 
-let v10 = RowVec([2, 2, 2, 2])
+let v10:Tensor<F> = rowvector([2, 2, 2, 2])
 
 
 // Hadamard product
 let v11 = v10*v2
+String(v11)
 
 // dot product
-let v12 = v10⊙(v2+v2)
+let v12:Float = v10⊙(v2+v2)
+String(v12)
 
 // outer product
 let v13 = v10⊗(v2+v2)
-print("\(v13)")
+String(v13)
 
 
 //: Matrix creation
 //: ---------------
-let m1 = Mat([[1, 2, 3], [4, 5, 6]])
-let m2 = Mat(rows: 3, cols: 3)
+let m1:Tensor<F> = tensor([[1, 2, 3], [4, 5, 6]])
+let m2:Tensor<F> = tensor(Extent(3, 3))
 
 //: Matrix indexing
 //: ---------------


//: Convenience aliases
//: -------------------
/*typealias Vec = Vector<NativeStorage<Float>>
typealias RowVec = RowVector<NativeStorage<Float>>
typealias ColVec = ColumnVector<NativeStorage<Float>>
typealias Mat = Matrix<NativeStorage<Float>>

//: Creating vectors
//: ----------------
let v1 = Vec([1, 2, 3, 4])
print("\(v1)")

let v2 = ColVec([1, 2, 3, 4])
print("\(v2)")

let v3 = RowVec([1, 2, 3, 4])
print("\(v3)")

let v4 = Vec([1, 2, 3, 4], axis: 0)
print("\(v4)")

let v5 = Vec([1, 2, 3, 4], axis: 1)
print("\(v5)")

let v6 = Vec([1, 2, 3, 4], axis: 2)
print("\(v6)")

// integer vectors
let iv1 = RowVector<NativeStorage<Int>>([1, 2, 3, 4, 5])
print("\(iv1)")

//: Vector indexing
//: ---------------

let vr2 = m1[0..<2, 1..<3]
print("\(vr2)")

m2[0..<2, 1..<3] = tensor([[1, 1], [1, 1]])
String((m2))

String(m2[all, 0])
