code: @Override
      public void trsm(char Order, char Side, char Uplo, char TransA, char Diag, double alpha, INDArray A, INDArray B) {
          if (Nd4j.getExecutioner().getProfilingMode() == OpExecutioner.ProfilingMode.ALL)
              OpProfiler.getInstance().processBlasCall(false, A, B);
  
          // FIXME: int cast
  
          if (A.data().dataType() == DataType.DOUBLE) {
              DefaultOpExecutioner.validateDataType(DataType.DOUBLE, A, B);
              dtrsm(Order, Side, Uplo, TransA, Diag, (int) A.rows(), (int) A.columns(), alpha, A, (int) A.size(0), B, (int) B.size(0));
          } else {
              DefaultOpExecutioner.validateDataType(DataType.FLOAT, A, B);
              strsm(Order, Side, Uplo, TransA, Diag, (int) A.rows(), (int) A.columns(), (float) alpha, A, (int) A.size(0), B, (int) B.size(0));
          }
  
          OpExecutionerUtil.checkForAny(B);
      }
docs: ?trsm solves one of the following matrix equations:
  op(a)*x = alpha*b  or  x*op(a) = alpha*b,
  where x and b are m-by-n general matrices, and a is triangular;
  op(a) must be an m-by-m matrix, if side = 'L'or'l'
  op(a) must be an n-by-n matrix, if side = 'R'or'r'.
  For the definition of op(a), see Matrix Arguments.
  The routine overwrites x on b.
  @param Order
  @param Side
  @param Uplo
  @param TransA
  @param Diag
  @param alpha
  @param A
  @param B