From a0da49fb83b5f005a3c3da50a45345b132311ea7 Mon Sep 17 00:00:00 2001 From: Jennifer Chukwu Date: Mon, 22 Apr 2024 12:36:35 +0000 Subject: [PATCH] early return --- src/linalg/inverse.rs | 100 ++++++++++++++++-------------------------- 1 file changed, 39 insertions(+), 61 deletions(-) diff --git a/src/linalg/inverse.rs b/src/linalg/inverse.rs index aa629e9f..a1f7b186 100644 --- a/src/linalg/inverse.rs +++ b/src/linalg/inverse.rs @@ -145,50 +145,43 @@ where { let m = m.as_slice(); - let det = m[0].clone() - * (m[5].clone() * m[10].clone() * m[15].clone() - + m[6].clone() * m[11].clone() * m[13].clone() - + m[7].clone() * m[9].clone() * m[14].clone() - - m[7].clone() * m[10].clone() * m[13].clone() - - m[6].clone() * m[9].clone() * m[15].clone() - - m[5].clone() * m[11].clone() * m[14].clone()) - - m[1].clone() - * (m[4].clone() * m[10].clone() * m[15].clone() - + m[6].clone() * m[11].clone() * m[12].clone() - + m[7].clone() * m[8].clone() * m[14].clone() - - m[7].clone() * m[10].clone() * m[12].clone() - - m[6].clone() * m[8].clone() * m[15].clone() - - m[4].clone() * m[11].clone() * m[14].clone()) - + m[2].clone() - * (m[4].clone() * m[9].clone() * m[15].clone() - + m[5].clone() * m[11].clone() * m[12].clone() - + m[7].clone() * m[8].clone() * m[13].clone() - - m[7].clone() * m[9].clone() * m[12].clone() - - m[5].clone() * m[8].clone() * m[15].clone() - - m[4].clone() * m[11].clone() * m[13].clone()) - - m[3].clone() - * (m[4].clone() * m[9].clone() * m[14].clone() - + m[5].clone() * m[10].clone() * m[12].clone() - + m[6].clone() * m[8].clone() * m[13].clone() - - m[6].clone() * m[9].clone() * m[12].clone() - - m[5].clone() * m[8].clone() * m[14].clone() - - m[4].clone() * m[10].clone() * m[13].clone()); - if det.is_zero() { - false - } else { - out[(0, 0)] = m[5].clone() * m[10].clone() * m[15].clone() - - m[5].clone() * m[11].clone() * m[14].clone() - - m[9].clone() * m[6].clone() * m[15].clone() - + m[9].clone() * m[7].clone() * m[14].clone() - + m[13].clone() * m[6].clone() * m[11].clone() - - m[13].clone() * m[7].clone() * m[10].clone(); + let cofactor00 = m[5].clone() * m[10].clone() * m[15].clone() + - m[5].clone() * m[11].clone() * m[14].clone() + - m[9].clone() * m[6].clone() * m[15].clone() + + m[9].clone() * m[7].clone() * m[14].clone() + + m[13].clone() * m[6].clone() * m[11].clone() + - m[13].clone() * m[7].clone() * m[10].clone(); - out[(1, 0)] = -m[1].clone() * m[10].clone() * m[15].clone() - + m[1].clone() * m[11].clone() * m[14].clone() - + m[9].clone() * m[2].clone() * m[15].clone() - - m[9].clone() * m[3].clone() * m[14].clone() - - m[13].clone() * m[2].clone() * m[11].clone() - + m[13].clone() * m[3].clone() * m[10].clone(); + let cofactor01 = -m[4].clone() * m[10].clone() * m[15].clone() + + m[4].clone() * m[11].clone() * m[14].clone() + + m[8].clone() * m[6].clone() * m[15].clone() + - m[8].clone() * m[7].clone() * m[14].clone() + - m[12].clone() * m[6].clone() * m[11].clone() + + m[12].clone() * m[7].clone() * m[10].clone(); + + let cofactor02 = m[4].clone() * m[9].clone() * m[15].clone() + - m[4].clone() * m[11].clone() * m[13].clone() + - m[8].clone() * m[5].clone() * m[15].clone() + + m[8].clone() * m[7].clone() * m[13].clone() + + m[12].clone() * m[5].clone() * m[11].clone() + - m[12].clone() * m[7].clone() * m[9].clone(); + + let cofactor03 = -m[4].clone() * m[9].clone() * m[14].clone() + + m[4].clone() * m[10].clone() * m[13].clone() + + m[8].clone() * m[5].clone() * m[14].clone() + - m[8].clone() * m[6].clone() * m[13].clone() + - m[12].clone() * m[5].clone() * m[10].clone() + + m[12].clone() * m[6].clone() * m[9].clone(); + + let det = m[0].clone() * cofactor00.clone() + + m[1].clone() * cofactor01.clone() + + m[2].clone() * cofactor02.clone() + + m[3].clone() * cofactor03.clone(); + + if det.is_zero() { + return false; + } else { + out[(0, 0)] = cofactor00; out[(2, 0)] = m[1].clone() * m[6].clone() * m[15].clone() - m[1].clone() * m[7].clone() * m[14].clone() @@ -204,12 +197,7 @@ where - m[9].clone() * m[2].clone() * m[7].clone() + m[9].clone() * m[3].clone() * m[6].clone(); - out[(0, 1)] = -m[4].clone() * m[10].clone() * m[15].clone() - + m[4].clone() * m[11].clone() * m[14].clone() - + m[8].clone() * m[6].clone() * m[15].clone() - - m[8].clone() * m[7].clone() * m[14].clone() - - m[12].clone() * m[6].clone() * m[11].clone() - + m[12].clone() * m[7].clone() * m[10].clone(); + out[(0, 1)] = cofactor01; out[(1, 1)] = m[0].clone() * m[10].clone() * m[15].clone() - m[0].clone() * m[11].clone() * m[14].clone() @@ -232,12 +220,7 @@ where + m[8].clone() * m[2].clone() * m[7].clone() - m[8].clone() * m[3].clone() * m[6].clone(); - out[(0, 2)] = m[4].clone() * m[9].clone() * m[15].clone() - - m[4].clone() * m[11].clone() * m[13].clone() - - m[8].clone() * m[5].clone() * m[15].clone() - + m[8].clone() * m[7].clone() * m[13].clone() - + m[12].clone() * m[5].clone() * m[11].clone() - - m[12].clone() * m[7].clone() * m[9].clone(); + out[(0, 2)] = cofactor02; out[(1, 2)] = -m[0].clone() * m[9].clone() * m[15].clone() + m[0].clone() * m[11].clone() * m[13].clone() @@ -253,12 +236,7 @@ where + m[12].clone() * m[1].clone() * m[7].clone() - m[12].clone() * m[3].clone() * m[5].clone(); - out[(0, 3)] = -m[4].clone() * m[9].clone() * m[14].clone() - + m[4].clone() * m[10].clone() * m[13].clone() - + m[8].clone() * m[5].clone() * m[14].clone() - - m[8].clone() * m[6].clone() * m[13].clone() - - m[12].clone() * m[5].clone() * m[10].clone() - + m[12].clone() * m[6].clone() * m[9].clone(); + out[(0, 3)] = cofactor03; out[(3, 2)] = -m[0].clone() * m[5].clone() * m[11].clone() + m[0].clone() * m[7].clone() * m[9].clone()