Reaction-Diffusion (Gray-Scott)
cax.cs.reaction_diffusion.cs.ReactionDiffusion
Bases: ComplexSystem[Array, Array]
Gray-Scott reaction-diffusion system.
A continuous cellular automaton modeling two chemical species (U and V) that diffuse and react on a grid. The dynamics follow: dU/dt = D_u * lap(U) - UV^2 + f(1 - U) dV/dt = D_v * lap(V) + UV^2 - (f + k)V
Different parameter regimes (feed rate f and kill rate k) produce diverse pattern types: spots, stripes, waves, mitosis, and more.
Source code in src/cax/cs/reaction_diffusion/cs.py
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | |
__init__(*, num_spatial_dims=2, diffusion_rate_u=0.16, diffusion_rate_v=0.08, feed_rate=0.06, kill_rate=0.062, dt=1.0, rngs)
Initialize Reaction-Diffusion.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
num_spatial_dims
|
int
|
Number of spatial dimensions (default 2). |
2
|
diffusion_rate_u
|
float
|
Diffusion coefficient for species U. |
0.16
|
diffusion_rate_v
|
float
|
Diffusion coefficient for species V. |
0.08
|
feed_rate
|
float
|
Feed rate f — controls how quickly U is replenished. |
0.06
|
kill_rate
|
float
|
Kill rate k — controls how quickly V is removed. |
0.062
|
dt
|
float
|
Time step size for the Euler integration. |
1.0
|
rngs
|
Rngs
|
RNG key. |
required |
Source code in src/cax/cs/reaction_diffusion/cs.py
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | |
render(state)
Render state to RGB image.
Maps the two-species state to an RGB visualization. Species V concentration is used as the primary visual signal: high V appears as colored regions against a background determined by U.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
state
|
Array
|
Array with shape (..., *spatial_dims, 2) where channel 0 is U concentration and channel 1 is V concentration, both in [0, 1]. |
required |
Returns:
| Type | Description |
|---|---|
Array
|
RGB image with dtype uint8 and shape (..., *spatial_dims, 3). |
Source code in src/cax/cs/reaction_diffusion/cs.py
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | |
__call__(state, input=None, *, num_steps=1, input_in_axis=None, sow=False)
Step the system for multiple time steps.
This method wraps _step inside a JAX scan for efficiency and JIT-compiles the loop.
If input is time-varying, set input_in_axis to the axis containing the time
dimension so that each step receives the corresponding slice of input.
When remat is enabled, the scan body is wrapped with nnx.remat to reduce memory
usage during backpropagation at the cost of recomputing intermediates.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
state
|
State
|
Current state. |
required |
input
|
Input | None
|
Optional input. |
None
|
num_steps
|
int
|
Number of steps. |
1
|
input_in_axis
|
int | None
|
Axis for input if provided for each step. |
None
|
sow
|
bool
|
Whether to sow intermediate values. |
False
|
Returns:
| Type | Description |
|---|---|
State
|
Final state after |
Source code in src/cax/core/cs.py
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | |