I don't know much about Julia's math libraries, so I'll leave that for someone else.
In Julia, types are just data and functions use multiple dispatch to select which values they work with.
For example, a Python class A with methods foo(self, x, y) and bar(self, z) would become:
~~~
type A
#properties of A go here
end
function foo(self::A, x, y)
# whatever foo does
end
function bar(self::A, z)
# whatever bar does
end
~~~
The function operate on A rather than being a part of it. The type declaration on self (the "::A") makes the function operate on the type A, similar to how the member functions of the Python class A operate on A. This also provides flexibility, in that you can later define functions on type A in a different file/module/library, without needing the edit type A or the file/module/library that it's in at all.
Hope this is helpful,
Leah