Skip to content

Commit 4d28c17

Browse files
committed
almost ready
1 parent 3a0e418 commit 4d28c17

5 files changed

Lines changed: 23 additions & 43 deletions

File tree

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -10,48 +10,28 @@
1010
def tridiagonal_solve(a: np.ndarray, b: np.ndarray, c: np.ndarray, d: np.ndarray) -> np.ndarray:
1111
n = len(b)
1212

13-
c_prime = np.empty(n - 1, dtype=np.float64)
14-
d_prime = np.empty(n, dtype=np.float64)
15-
x = np.empty(n, dtype=np.float64)
16-
17-
# Alias arrays to local variables to avoid repeated attribute lookups
18-
a_arr = a
19-
b_arr = b
20-
c_arr = c
21-
d_arr = d
22-
cp = c_prime
23-
dp = d_prime
24-
x_arr = x
25-
26-
# First element
27-
prev_cprime = c_arr[0] / b_arr[0]
28-
cp[0] = prev_cprime
29-
prev_dprime = d_arr[0] / b_arr[0]
30-
dp[0] = prev_dprime
31-
32-
# Forward sweep (compute c_prime and d_prime)
13+
# Create working copies to avoid modifying input
14+
c_prime = np.zeros(n - 1, dtype=np.float64)
15+
d_prime = np.zeros(n, dtype=np.float64)
16+
x = np.zeros(n, dtype=np.float64)
17+
18+
# Forward sweep - sequential dependency: c_prime[i] depends on c_prime[i-1]
19+
c_prime[0] = c[0] / b[0]
20+
d_prime[0] = d[0] / b[0]
3321

3422
for i in range(1, n - 1):
35-
ai_1 = a_arr[i - 1]
36-
denom = b_arr[i] - ai_1 * prev_cprime
37-
curr_cprime = c_arr[i] / denom
38-
curr_dprime = (d_arr[i] - ai_1 * prev_dprime) / denom
39-
cp[i] = curr_cprime
40-
dp[i] = curr_dprime
41-
prev_cprime = curr_cprime
42-
prev_dprime = curr_dprime
43-
44-
# Last d_prime entry
45-
denom = b_arr[n - 1] - a_arr[n - 2] * prev_cprime
46-
dp[n - 1] = (d_arr[n - 1] - a_arr[n - 2] * prev_dprime) / denom
47-
48-
# Back substitution using a scalar for the "next x" value
49-
prev_x = dp[n - 1]
50-
x_arr[n - 1] = prev_x
23+
denom = b[i] - a[i - 1] * c_prime[i - 1]
24+
c_prime[i] = c[i] / denom
25+
d_prime[i] = (d[i] - a[i - 1] * d_prime[i - 1]) / denom
26+
27+
# Last row of forward sweep
28+
denom = b[n - 1] - a[n - 2] * c_prime[n - 2]
29+
d_prime[n - 1] = (d[n - 1] - a[n - 2] * d_prime[n - 2]) / denom
30+
31+
# Back substitution - sequential dependency: x[i] depends on x[i+1]
32+
x[n - 1] = d_prime[n - 1]
5133
for i in range(n - 2, -1, -1):
52-
xi = dp[i] - cp[i] * prev_x
53-
x_arr[i] = xi
54-
prev_x = xi
34+
x[i] = d_prime[i] - c_prime[i] * x[i + 1]
5535

5636
return x
5737

code_to_optimize/tests/pytest/test_jax_jit_code.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
jax = pytest.importorskip("jax")
1111
import jax.numpy as jnp
1212

13-
from code_to_optimize.sample_jit_code import (
13+
from code_to_optimize.sample_code import (
1414
leapfrog_integration_jax,
1515
longest_increasing_subsequence_length_jax,
1616
tridiagonal_solve_jax,

code_to_optimize/tests/pytest/test_numba_jit_code.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import numpy as np
22
import pytest
33

4-
from code_to_optimize.sample_jit_code import (
4+
from code_to_optimize.sample_code import (
55
leapfrog_integration,
66
longest_increasing_subsequence_length,
77
tridiagonal_solve,

code_to_optimize/tests/pytest/test_tensorflow_jit_code.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
tf = pytest.importorskip("tensorflow")
1111

12-
from code_to_optimize.sample_jit_code import (
12+
from code_to_optimize.sample_code import (
1313
leapfrog_integration_tf,
1414
longest_increasing_subsequence_length_tf,
1515
tridiagonal_solve_tf,

code_to_optimize/tests/pytest/test_torch_jit_code.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
torch = pytest.importorskip("torch")
1111

12-
from code_to_optimize.sample_jit_code import (
12+
from code_to_optimize.sample_code import (
1313
leapfrog_integration_torch,
1414
longest_increasing_subsequence_length_torch,
1515
tridiagonal_solve_torch,

0 commit comments

Comments
 (0)