pub fn cgemm(alpha: C64, a: &ComplexMatrix, b: &ComplexMatrix, beta: C64, c: &mut ComplexMatrix) {
    let m = a.row;
    let k = a.col;
    let n = b.col;
    let (rsa, csa) = match a.shape {
        Shape::Row => (a.col as isize, 1isize),
        Shape::Col => (1isize, a.row as isize),
    };
    let (rsb, csb) = match b.shape {
        Shape::Row => (b.col as isize, 1isize),
        Shape::Col => (1isize, b.row as isize),
    };
    let (rsc, csc) = match c.shape {
        Shape::Row => (c.col as isize, 1isize),
        Shape::Col => (1isize, c.row as isize),
    };

    unsafe {
        matrixmultiply::zgemm(
            // Requires crate feature "cgemm"
            CGemmOption::Standard,
            CGemmOption::Standard,
            m,
            k,
            n,
            [alpha.re, alpha.im],
            a.ptr() as *const _,
            rsa,
            csa,
            b.ptr() as *const _,
            rsb,
            csb,
            [beta.re, beta.im],
            c.mut_ptr() as *mut _,
            rsc,
            csc,
        )
    }
}
GEMM wrapper for Matrixmultiply

# Examples
```rust
#[macro_use]
extern crate peroxide;
use peroxide::fuga::*;

use peroxide::complex::matrix::*;

fn main() {
let a = ml_cmatrix("1.0+1.0i 2.0+2.0i;
0.0+0.0i 1.0+1.0i");
let b = ml_cmatrix("1.0+1.0i 0.0+0.0i;
2.0+2.0i 1.0+1.0i");
let mut c1 = ml_cmatrix("1.0+1.0i 1.0+1.0i;
1.0+1.0i 1.0+1.0i");
let mul_val = ml_cmatrix("-10.0+10.0i -4.0+4.0i;
-4.0+4.0i -2.0+2.0i");

cgemm(C64::new(1.0, 1.0), &a, &b, C64::new(0.0, 0.0), &mut c1);
assert_eq!(c1, mul_val);
}
src/complex/matrix.rs