code: function(matrix, op) {
              	if (!matrix.elements) {
              	    return this.map(function(x) { return op(x, matrix); });
              	}
  
              	var returnVector = matrix.modulus ? true : false;
              	var M = matrix.elements || matrix;
              	if (typeof(M[0][0]) == 'undefined') 
              	    M = Matrix$b.create(M).elements;
              	if (!this.canMultiplyFromLeft(M)) 
              	    return null; 
              	var e = this.elements, rowThis, rowElem, elements = [],
                      sum, m = e.length, n = M[0].length, o = e[0].length, i = m, j, k;
  
              	while (i--) {
                          rowElem = [];
                          rowThis = e[i];
                          j = n;
  
                          while (j--) {
              		sum = 0;
              		k = o;
  
              		while (k--) {
                                  sum += op(rowThis[k], M[k][j]);
              		}
  
              		rowElem[j] = sum;
                          }
  
                          elements[i] = rowElem;
              	}
  
              	var M = Matrix$b.create(elements);
              	return returnVector ? M.col(1) : M;
                  }
docs: Returns the result of a multiplication-style operation the matrix from the right by the argument. If the argument is a scalar then just operate on all the elements. If the argument is a vector, a vector is returned, which saves you having to remember calling col(1) on the result.