From 8b78a107dc3450e2cb6c45000fc30698076dfb70 Mon Sep 17 00:00:00 2001 From: Hugh Perkins Date: Wed, 24 Dec 2025 12:27:07 -0500 Subject: [PATCH 1/6] remove * calling syntax for calling func_epa_insert_vertex_to_polytope --- genesis/engine/solvers/rigid/gjk_decomp.py | 54 ++++++++++++++-------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/genesis/engine/solvers/rigid/gjk_decomp.py b/genesis/engine/solvers/rigid/gjk_decomp.py index 970d8fe41..5930b2797 100644 --- a/genesis/engine/solvers/rigid/gjk_decomp.py +++ b/genesis/engine/solvers/rigid/gjk_decomp.py @@ -1450,13 +1450,13 @@ def func_delete_face_from_polytope( @ti.func def func_epa_insert_vertex_to_polytope( gjk_state: array_class.GJKState, - i_b, + i_b: int, obj1_point, obj2_point, obj1_localpos, obj2_localpos, - obj1_id, - obj2_id, + obj1_id: int, + obj2_id: int, minkowski_point, ): """ @@ -1866,26 +1866,42 @@ def func_epa_support( if dir_norm > gjk_info.FLOAT_MIN[None]: d = dir / dir_norm + ( + support_point_obj1, + support_point_obj2, + support_point_localpos1, + support_point_localpos2, + support_point_id_obj1, + support_point_id_obj2, + support_point_minkowski, + ) = func_support( + geoms_state, + geoms_info, + verts_info, + static_rigid_sim_config, + collider_state, + collider_static_config, + gjk_state, + gjk_info, + support_field_info, + i_ga, + i_gb, + i_b, + d, + False, + ) + # Insert the support points into the polytope v_index = func_epa_insert_vertex_to_polytope( gjk_state, i_b, - *func_support( - geoms_state, - geoms_info, - verts_info, - static_rigid_sim_config, - collider_state, - collider_static_config, - gjk_state, - gjk_info, - support_field_info, - i_ga, - i_gb, - i_b, - d, - False, - ), + support_point_obj1, + support_point_obj2, + support_point_localpos1, + support_point_localpos2, + support_point_id_obj1, + support_point_id_obj2, + support_point_minkowski, ) return v_index From 7177720337b0e724f2d858460afafdf7a17494a1 Mon Sep 17 00:00:00 2001 From: Hugh Perkins Date: Wed, 24 Dec 2025 17:50:02 -0500 Subject: [PATCH 2/6] try renaming params --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6aba87d03..dd8d98e45 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ readme = "README.md" requires-python = ">=3.10,<3.14" dependencies = [ "psutil", - "gstaichi==4.5.0", + "gstaichi==4.6.0b1", "pydantic>=2.11.0", "numpy>=1.26.4", "trimesh", From a16988fabc5da623e13a2e9e09e9e153c2aa8ef3 Mon Sep 17 00:00:00 2001 From: Hugh Perkins Date: Fri, 26 Dec 2025 22:31:15 -0500 Subject: [PATCH 3/6] b3 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index dd8d98e45..463a48e85 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ readme = "README.md" requires-python = ">=3.10,<3.14" dependencies = [ "psutil", - "gstaichi==4.6.0b1", + "gstaichi==4.6.0b3", "pydantic>=2.11.0", "numpy>=1.26.4", "trimesh", From 5b46551dfb42632a483d04c73928b66701be4b0a Mon Sep 17 00:00:00 2001 From: Hugh Perkins Date: Sat, 27 Dec 2025 11:31:50 -0500 Subject: [PATCH 4/6] remove *-calling on sf_solver --- genesis/engine/solvers/sf_solver.py | 55 +++++++++++++++-------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/genesis/engine/solvers/sf_solver.py b/genesis/engine/solvers/sf_solver.py index 3219a6519..26f4f779b 100644 --- a/genesis/engine/solvers/sf_solver.py +++ b/genesis/engine/solvers/sf_solver.py @@ -97,12 +97,13 @@ def reset_swap(self): @ti.kernel def pressure_jacobi(self, pf: ti.template(), new_pf: ti.template()): for I in ti.grouped(ti.ndrange(*self.res)): - pl = pf[self.compute_location(*I, -1, 0, 0)] - pr = pf[self.compute_location(*I, 1, 0, 0)] - pb = pf[self.compute_location(*I, 0, -1, 0)] - pt = pf[self.compute_location(*I, 0, 1, 0)] - pp = pf[self.compute_location(*I, 0, 0, -1)] - pq = pf[self.compute_location(*I, 0, 0, 1)] + u, v, w = I + pl = pf[self.compute_location(u, v, w, -1, 0, 0)] + pr = pf[self.compute_location(u, v, w, 1, 0, 0)] + pb = pf[self.compute_location(u, v, w, 0, -1, 0)] + pt = pf[self.compute_location(u, v, w, 0, 1, 0)] + pp = pf[self.compute_location(u, v, w, 0, 0, -1)] + pq = pf[self.compute_location(u, v, w, 0, 0, 1)] new_pf[I] = (pl + pr + pb + pt + pp + pq - self.grid[I].div) / 6.0 @@ -132,25 +133,26 @@ def advect_and_impulse(self, f: ti.i32, t: ti.f32): @ti.kernel def divergence(self): for I in ti.grouped(ti.ndrange(*self.res)): - vl = self.grid.v_tmp[self.compute_location(*I, -1, 0, 0)] - vr = self.grid.v_tmp[self.compute_location(*I, 1, 0, 0)] - vb = self.grid.v_tmp[self.compute_location(*I, 0, -1, 0)] - vt = self.grid.v_tmp[self.compute_location(*I, 0, 1, 0)] - vp = self.grid.v_tmp[self.compute_location(*I, 0, 0, -1)] - vq = self.grid.v_tmp[self.compute_location(*I, 0, 0, 1)] - vc = self.grid.v_tmp[self.compute_location(*I, 0, 0, 0)] - - if not self.is_free(*I, -1, 0, 0): + u, v, w = I + vl = self.grid.v_tmp[self.compute_location(u, v, w, -1, 0, 0)] + vr = self.grid.v_tmp[self.compute_location(u, v, w, 1, 0, 0)] + vb = self.grid.v_tmp[self.compute_location(u, v, w, 0, -1, 0)] + vt = self.grid.v_tmp[self.compute_location(u, v, w, 0, 1, 0)] + vp = self.grid.v_tmp[self.compute_location(u, v, w, 0, 0, -1)] + vq = self.grid.v_tmp[self.compute_location(u, v, w, 0, 0, 1)] + vc = self.grid.v_tmp[self.compute_location(u, v, w, 0, 0, 0)] + + if not self.is_free(u, v, w, -1, 0, 0): vl.x = -vc.x - if not self.is_free(*I, 1, 0, 0): + if not self.is_free(u, v, w, 1, 0, 0): vr.x = -vc.x - if not self.is_free(*I, 0, -1, 0): + if not self.is_free(u, v, w, 0, -1, 0): vb.y = -vc.y - if not self.is_free(*I, 0, 1, 0): + if not self.is_free(u, v, w, 0, 1, 0): vt.y = -vc.y - if not self.is_free(*I, 0, 0, -1): + if not self.is_free(u, v, w, 0, 0, -1): vp.z = -vc.z - if not self.is_free(*I, 0, 0, 1): + if not self.is_free(u, v, w, 0, 0, 1): vq.z = -vc.z self.grid.div[I] = 0.5 * (vr.x - vl.x + vt.y - vb.y + vq.z - vp.z) @@ -168,12 +170,13 @@ def pressure_from_swap(self): @ti.kernel def subtract_gradient(self): for I in ti.grouped(ti.ndrange(*self.res)): - pl = self.grid.p[self.compute_location(*I, -1, 0, 0)] - pr = self.grid.p[self.compute_location(*I, 1, 0, 0)] - pb = self.grid.p[self.compute_location(*I, 0, -1, 0)] - pt = self.grid.p[self.compute_location(*I, 0, 1, 0)] - pp = self.grid.p[self.compute_location(*I, 0, 0, -1)] - pq = self.grid.p[self.compute_location(*I, 0, 0, 1)] + u, v, w = I + pl = self.grid.p[self.compute_location(u, v, w, -1, 0, 0)] + pr = self.grid.p[self.compute_location(u, v, w, 1, 0, 0)] + pb = self.grid.p[self.compute_location(u, v, w, 0, -1, 0)] + pt = self.grid.p[self.compute_location(u, v, w, 0, 1, 0)] + pp = self.grid.p[self.compute_location(u, v, w, 0, 0, -1)] + pq = self.grid.p[self.compute_location(u, v, w, 0, 0, 1)] self.grid.v[I] = self.grid.v_tmp[I] - 0.5 * ti.Vector([pr - pl, pt - pb, pq - pp], dt=gs.ti_float) From 8cb633ecac46ea29dc6b98f0a9851cd9f857d7bc Mon Sep 17 00:00:00 2001 From: Hugh Perkins Date: Sat, 27 Dec 2025 12:29:12 -0500 Subject: [PATCH 5/6] b4 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 463a48e85..2947c8fcb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ readme = "README.md" requires-python = ">=3.10,<3.14" dependencies = [ "psutil", - "gstaichi==4.6.0b3", + "gstaichi==4.6.0b4", "pydantic>=2.11.0", "numpy>=1.26.4", "trimesh", From a3437a192c578a55f6abb76f23e67af655742aaa Mon Sep 17 00:00:00 2001 From: Hugh Perkins Date: Mon, 29 Dec 2025 08:42:56 -0500 Subject: [PATCH 6/6] precommit --- genesis/engine/solvers/sf_solver.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/genesis/engine/solvers/sf_solver.py b/genesis/engine/solvers/sf_solver.py index 26f4f779b..fd8c169ac 100644 --- a/genesis/engine/solvers/sf_solver.py +++ b/genesis/engine/solvers/sf_solver.py @@ -173,10 +173,10 @@ def subtract_gradient(self): u, v, w = I pl = self.grid.p[self.compute_location(u, v, w, -1, 0, 0)] pr = self.grid.p[self.compute_location(u, v, w, 1, 0, 0)] - pb = self.grid.p[self.compute_location(u, v, w, 0, -1, 0)] - pt = self.grid.p[self.compute_location(u, v, w, 0, 1, 0)] - pp = self.grid.p[self.compute_location(u, v, w, 0, 0, -1)] - pq = self.grid.p[self.compute_location(u, v, w, 0, 0, 1)] + pb = self.grid.p[self.compute_location(u, v, w, 0, -1, 0)] + pt = self.grid.p[self.compute_location(u, v, w, 0, 1, 0)] + pp = self.grid.p[self.compute_location(u, v, w, 0, 0, -1)] + pq = self.grid.p[self.compute_location(u, v, w, 0, 0, 1)] self.grid.v[I] = self.grid.v_tmp[I] - 0.5 * ti.Vector([pr - pl, pt - pb, pq - pp], dt=gs.ti_float)