⊗ in using

I am trying to make

using TensorCast: ⊗

work. For the above I get an LoadError: "invalid \"using\" statement: expected identifier". I tried various combinations of : and ()s, what’s the right way? Eg import Base: + just works.

Is defined in TensorCast? I try importing some other function that I have seen defined in the package and I do not get any problem. However, it does not seem to find .

julia> import TensorCast: @cast

julia> import TensorCast: ⊗
WARNING: could not import TensorCast.⊗ into Main

I get

julia> using TensorCast: ⊗
ERROR: UndefVarError: ⊗ not defined

(jl_oVB8Xl) pkg> st
Status `/tmp/jl_oVB8Xl/Project.toml`
  [02d47bb6] TensorCast v0.4.6

julia> versioninfo()
Julia Version 1.8.2
Commit 36034abf260 (2022-09-29 15:21 UTC)
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 8 × Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-13.0.1 (ORCJIT, haswell)
  Threads: 1 on 8 virtual cores

I figured it out: is just a placeholder that is parsed by the macro, so it does not need to be imported.

The minimal import is

using TensorCast: @cast, TensorCast

since @cast expands to calls in TensorCast so it needs the module name available (I am not sure if it is possible to implement macros that expand to functions in a module without the module name being imported).

3 Likes

That sounds like a bug then, the package can (should) interpolate it’s own functions and not rely on whatever names the user have in their namespace.

2 Likes

That’s exactly right. Like the indices the macro acts on, there is never an object of this name defined.

This is right too.

3 Likes