func checkGbtrs(ind *linalg.IndexOpts, A, B matrix.Matrix, ipiv []int32) error { arows := ind.LDa brows := ind.LDb if ind.Kl < 0 { return onError("Gbtrs: invalid kl") } if ind.N < 0 { ind.N = A.Rows() } if ind.Nrhs < 0 { ind.Nrhs = A.Cols() } if ind.N == 0 || ind.Nrhs == 0 { return nil } if ind.Ku < 0 { ind.Ku = A.Rows() - 2*ind.Kl - 1 } if ind.Ku < 0 { return onError("Gbtrs: invalid ku") } if ind.LDa == 0 { ind.LDa = max(1, A.LeadingIndex()) arows = max(1, A.Rows()) } if ind.LDa < 2*ind.Kl+ind.Ku+1 { return onError("Gbtrs: lda") } if ind.OffsetA < 0 { return onError("Gbtrs: offsetA") } sizeA := A.NumElements() if sizeA < ind.OffsetA+(ind.N-1)*arows+2*ind.Kl+ind.Ku+1 { return onError("Gbtrs: sizeA") } if ind.LDb == 0 { ind.LDb = max(1, B.LeadingIndex()) brows = max(1, B.Rows()) } if ind.OffsetB < 0 { return onError("Gbtrs: offsetB") } sizeB := B.NumElements() if sizeB < ind.OffsetB+(ind.Nrhs-1)*brows+ind.N { return onError("Gbtrs: sizeB") } if ipiv != nil && len(ipiv) < ind.N { return onError("Gbtrs: size ipiv") } return nil }
func checkPosv(ind *linalg.IndexOpts, A, B matrix.Matrix) error { arows := ind.LDa brows := ind.LDb if ind.N < 0 { ind.N = A.Rows() } if ind.Nrhs < 0 { ind.Nrhs = B.Cols() } if ind.N == 0 || ind.Nrhs == 0 { return nil } if ind.LDa == 0 { ind.LDa = max(1, A.LeadingIndex()) arows = max(1, A.Rows()) } if ind.LDa < max(1, ind.N) { return onError("Posv: lda") } if ind.LDb == 0 { ind.LDb = max(1, B.LeadingIndex()) brows = max(1, B.Rows()) } if ind.LDb < max(1, ind.N) { return onError("Posv: ldb") } if ind.OffsetA < 0 { return onError("Posv: offsetA") } sizeA := A.NumElements() if sizeA < ind.OffsetA+(ind.N-1)*arows+ind.N { return onError("Posv: sizeA") } if ind.OffsetB < 0 { return onError("Posv: offsetB") } sizeB := B.NumElements() if sizeB < ind.OffsetB+(ind.Nrhs-1)*brows+ind.N { return onError("Posv: sizeB") } return nil }