Actual source code: pythonmat.c

  1: #include <petsc/private/matimpl.h>

  3: /*@C
  4:    MatPythonSetType - Initialize a `Mat` object implemented in Python.

  6:    Collective

  8:    Input Parameters:
  9: +  mat - the matrix object.
 10: -  pyname - full dotted Python name [package].module[.{class|function}]

 12:    Options Database Key:
 13: .  -mat_python_type <pyname> - python class

 15:    Level: intermediate

 17: .seealso: [](ch_matrices), `Mat`, `MatType`, `MatCreate()`, `MatSetType()`, `MATPYTHON`, `PetscPythonInitialize()`
 18: @*/
 19: PetscErrorCode MatPythonSetType(Mat mat, const char pyname[])
 20: {
 21:   PetscFunctionBegin;
 23:   PetscAssertPointer(pyname, 2);
 24:   PetscTryMethod(mat, "MatPythonSetType_C", (Mat, const char[]), (mat, pyname));
 25:   PetscFunctionReturn(PETSC_SUCCESS);
 26: }

 28: /*@C
 29:    MatPythonGetType - Get the Python name of a `Mat` object implemented in Python.

 31:    Not Collective

 33:    Input Parameter:
 34: .  mat - the matrix

 36:    Output Parameter:
 37: .  pyname - full dotted Python name [package].module[.{class|function}]

 39:    Level: intermediate

 41: .seealso: [](ch_matrices), `Mat`, `MatType`, `MatCreate()`, `MatSetType()`, `MATPYTHON`, `PetscPythonInitialize()`, `MatPythonSetType()`
 42: @*/
 43: PetscErrorCode MatPythonGetType(Mat mat, const char *pyname[])
 44: {
 45:   PetscFunctionBegin;
 47:   PetscAssertPointer(pyname, 2);
 48:   PetscUseMethod(mat, "MatPythonGetType_C", (Mat, const char *[]), (mat, pyname));
 49:   PetscFunctionReturn(PETSC_SUCCESS);
 50: }

 52: /*@C
 53:    MatPythonCreate - Create a `Mat` object implemented in Python.

 55:    Collective

 57:    Input Parameters:
 58: +  comm - MPI communicator
 59: .  m - number of local rows (or `PETSC_DECIDE` to have calculated if `M` is given)
 60: .  n - number of local columns (or `PETSC_DECIDE` to have calculated if `N` is given)
 61: .  M - number of global rows (or `PETSC_DECIDE` to have calculated if `m` is given)
 62: .  N - number of global columns (or `PETSC_DECIDE` to have calculated if `n` is given)
 63: -  pyname - full dotted Python name [package].module[.{class|function}]

 65:    Output Parameter:
 66: .  A - the matrix

 68:    Level: intermediate

 70: .seealso: [](ch_matrices), `Mat`, `MatType`, `MATPYTHON`, `MatPythonSetType()`, `PetscPythonInitialize()`
 71: @*/
 72: PetscErrorCode MatPythonCreate(MPI_Comm comm, PetscInt m, PetscInt n, PetscInt M, PetscInt N, const char pyname[], Mat *A)
 73: {
 74:   PetscFunctionBegin;
 75:   PetscAssertPointer(pyname, 6);
 76:   PetscAssertPointer(A, 6);
 77:   PetscCall(MatCreate(comm, A));
 78:   PetscCall(MatSetSizes(*A, m, n, M, N));
 79:   PetscCall(MatSetType(*A, MATPYTHON));
 80:   PetscCall(MatPythonSetType(*A, pyname));
 81:   PetscCall(MatBindToCPU(*A, PETSC_FALSE));
 82:   PetscFunctionReturn(PETSC_SUCCESS);
 83: }