# tree_d_3d.kernels.tests.test_metal_fmm_kernels

*module*

The Metal versions of the FMM and tree-build kernels, against the CPU versions.

Each test calls a ``<name>_metal.py`` function and the Pyccel (or NumPy) version with
the same arrays. The GPU computes in float32; skipped without MLX and a Metal GPU.

[View source](https://github.com/max-models/tree-d-3d/blob/devel/src/tree_d_3d/kernels/tests/test_metal_fmm_kernels.py#L1-L1)

## tree_d_3d.kernels.tests.test_metal_fmm_kernels.ORDER

*attribute* · *module attribute*

```python
ORDER = 8
```

[View source](https://github.com/max-models/tree-d-3d/blob/devel/src/tree_d_3d/kernels/tests/test_metal_fmm_kernels.py#L40-L40)

## tree_d_3d.kernels.tests.test_metal_fmm_kernels.SOFTENING

*attribute* · *module attribute*

```python
SOFTENING = 0.01
```

[View source](https://github.com/max-models/tree-d-3d/blob/devel/src/tree_d_3d/kernels/tests/test_metal_fmm_kernels.py#L41-L41)

## tree_d_3d.kernels.tests.test_metal_fmm_kernels.pytestmark

*attribute* · *module attribute*

```python
pytestmark = pytest.mark.skipif(not metal_available(), reason='MLX with a Metal GPU is not available')
```

[View source](https://github.com/max-models/tree-d-3d/blob/devel/src/tree_d_3d/kernels/tests/test_metal_fmm_kernels.py#L15-L17)

## tree_d_3d.kernels.tests.test_metal_fmm_kernels.system

*function*

```python
def system()
```

[View source](https://github.com/max-models/tree-d-3d/blob/devel/src/tree_d_3d/kernels/tests/test_metal_fmm_kernels.py#L49-L63)

## tree_d_3d.kernels.tests.test_metal_fmm_kernels.test_fmm_chain_m2l_downward_evaluate

*function*

```python
def test_fmm_chain_m2l_downward_evaluate(system, tree)
```

[View source](https://github.com/max-models/tree-d-3d/blob/devel/src/tree_d_3d/kernels/tests/test_metal_fmm_kernels.py#L133-L208)

## tree_d_3d.kernels.tests.test_metal_fmm_kernels.test_fmm_traverse_lists_equal_the_cpu_lists

*function*

```python
def test_fmm_traverse_lists_equal_the_cpu_lists(tree)
```

[View source](https://github.com/max-models/tree-d-3d/blob/devel/src/tree_d_3d/kernels/tests/test_metal_fmm_kernels.py#L103-L107)

## tree_d_3d.kernels.tests.test_metal_fmm_kernels.test_fmm_traverse_reports_a_small_buffer

*function*

```python
def test_fmm_traverse_reports_a_small_buffer(tree)
```

[View source](https://github.com/max-models/tree-d-3d/blob/devel/src/tree_d_3d/kernels/tests/test_metal_fmm_kernels.py#L110-L130)

## tree_d_3d.kernels.tests.test_metal_fmm_kernels.test_soften_pairs

*function*

```python
def test_soften_pairs(system)
```

[View source](https://github.com/max-models/tree-d-3d/blob/devel/src/tree_d_3d/kernels/tests/test_metal_fmm_kernels.py#L211-L225)

## tree_d_3d.kernels.tests.test_metal_fmm_kernels.test_soften_pairs_reports_coincident_charges

*function*

```python
def test_soften_pairs_reports_coincident_charges()
```

[View source](https://github.com/max-models/tree-d-3d/blob/devel/src/tree_d_3d/kernels/tests/test_metal_fmm_kernels.py#L228-L234)

## tree_d_3d.kernels.tests.test_metal_fmm_kernels.test_tree_build_kernels_and_moments

*function*

```python
def test_tree_build_kernels_and_moments(system, tree)
```

[View source](https://github.com/max-models/tree-d-3d/blob/devel/src/tree_d_3d/kernels/tests/test_metal_fmm_kernels.py#L237-L310)

## tree_d_3d.kernels.tests.test_metal_fmm_kernels.tree

*function*

```python
def tree(system)
```

[View source](https://github.com/max-models/tree-d-3d/blob/devel/src/tree_d_3d/kernels/tests/test_metal_fmm_kernels.py#L66-L71)
