Basic version of `Curl` using Rules¶

Armed with information from the previous sections:

• where the function belongs: “Mathematical Operations”, and

• information from WMA and SymPy on what should be implemented and how it hooks into an existing library function, and

• an implementation of Curl written in Mathics to guide us

we are now ready to being with a skeletal version from which we can fill out later.

“Mathematical Operations” is located in file `mathics/builtin/vectors/math_ops.py`.

```# TODO: Curl, Div
```

so we have noted the need for that here already. Good. Let’s remove Curl from that list.

Basic `Curl` version¶

At the time of writing, `Curl` comes after `Cross`, and before `Norm`.

```class Curl(SympyFunction):
"""
<url>:Curl: https://en.wikipedia.org/wiki/Curl_(mathematics)</url> (<url>:SymPy: https://docs.sympy.org/latest/modules/vector/api/vectorfunctions.html#sympy.vector.curl</url>, <url>:WMA: https://reference.wolfram.com/language/ref/Curl.html</url>)

<dl>
<dt>'Curl[{\$f1\$, \$f2\$}, {\$x1\$, \$x2\$}]'
<dd>returns the curl \$df2\$/\$dx1\$ - \$df1\$/\$dx2\$

<dt>'Curl[{\$f1\$, \$f2\$, \$f3} {\$x1\$, \$x2\$, \$x3}]'
<dd>returns the curl (\$df3\$/\$dx2\$ - \$df2\$/\$dx3\$, \$dx3\$/\$df\$3 - \$df3\$/\$dx1\$, \$df2\$/\$df1\$ - \$df1\$/\$dx2\$)
</dl>

Two-dimensional 'Curl':

>> Curl[{y, -x}, {x, y}]
= -2

>> v[x_, y_] := {Cos[x] Sin[y], Cos[y] Sin[x]}
>> Curl[v[x, y], {x, y}]
= 0

Three-dimensional 'Curl':
>> Curl[{y, -x, 2 z}, {x, y, z}]
= {0, 0, -2}

#> Clear[v];
"""

attributes = A_PROTECTED
rules = {
"Curl[{f1_, f2_}, {x1_, x2_}]": " D[f2, x1] - D[f1, x2]",
"Curl[{f1_, f2_, f3_}, {x1_, x2_, x3_}]": "{
D[f3, x2] - D[f2, x3],
D[f1, x3] - D[f3, x1],
D[f2, x1] - D[f1, x2]
}",
}
summary_text = "curl vector operator"
sympy_name = "curl"
```

We implement this function entirely via rules, so we aren’t making use of the fact that this is a `SympyFunction` and also don’t need to set class variable `sympy_name`.

However we expect that in a more complete implementation, we would need this to handle the form of curl that makes use of coordinates.

Next: