Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

How reach octave or Macaulay2 from Sage notebook?

Enviroment: With SageMath 9-6-1.4.2 (arm64 architecture) under macOS 12.5.1 on an M1 Mac, I cannot directly access either octave or Macaulay2.

I have octave in /opt/local/bin and the Macaulay2 executable M2 in /Applications/Macaulay2-1.20/bin. I already had dded both those paths to /etc/paths and restarted macOS. Both paths were already in the path exported from my .profile (this is relevant to possible workarounds #1, below).

I can run both M2 and octave successfully from a Terminal command-line. However...

Problem: Octave: In the jupyter notebook (with the SageMath 9.6 kernel running, I evaluated:

octave.eval('2+2')

The long error that ensued included:

RuntimeError: unable to start octave because the command "octave-cli --no-line-editing --silent --eval 'PS2(PS1());more off' --persist" failed: The command was not found or was not executable: octave-cli.

Similarly, when I evaluated

macaulay2('3/5 + 7/11')

I get a long error message that includes:

TypeError: unable to start macaulay2 because the command 'M2 --no-debug --no-readline --silent -e \'sageLoadMode = false;ZZ#{Standard,Core#"private dictionary"#"InputPrompt"} = ZZ#{Standard,Core#"private dictionary"#"InputContinuationPrompt"} = lineno -> if(sageLoadMode) then "_EGAS_LOAD_ : " else "_EGAS_ : ";printWidth = 0;lineNumber = 10^9;sageAssign = (k, v) -> (if not instance(v, Sequence) then use v; k <- v);\'' failed: The command was not found or was not executable: M2.

Possible workarounds:

  1. The method described in https://ask.sagemath.org/question/7949/running-octave-from-the-sage-notebook/?answer=28684#post-id-28684: This does not work for me, as it now causes SageMath-9-6.app not to open at all. (Since the current executable inside the SageMath-9-6.app package is named SageMath rather than Sage,I did changeSagetoSageMathfor the name of the added shell script, in the last line of that shell script, and as the value ofCFBundleExecutableininfo.plist`).
  2. The method described in the first comment at https://ask.sagemath.org/question/57112/cant-run-macaulay2-via-sagemath-in-jupyter-notebook/:

For Macaulay2, this sort of thing does work:

m2=Macaulay2(command='/Applications/Macaulay2-1.20/bin/M2')
m2('3/5+7/11')

For Octave:

oc=octave(command='/opt/local/bin/octave')

This does not work! Error:

TypeError Traceback (most recent call last)
/var/folders/r2/v_ly_rjj6_v1qpzx4kqy_mqr0000gn/T/ipykernel_4852/1477866728.py in <module>
----> 1 oc=octave(command='/opt/local/bin/octave')

TypeError: Interface.__call__() got an unexpected keyword argument 'command'

QUESTIONS:

(a) the workaround 2 for the call to Macaulay2 seems awkward. How can one take care of the path issue transparently?

(b) how make the call to octave work, too?

How reach octave or Macaulay2 from Sage notebook?

Enviroment: With SageMath 9-6-1.4.2 (arm64 architecture) under macOS 12.5.1 on an M1 Mac, I cannot directly access either octave or Macaulay2.

I have octave

  • Octave is in /opt/local/bin and the Macaulay2 executable M2 is in /Applications/Macaulay2-1.20/bin. I already had dded both those paths to /etc/paths and restarted macOS. .
  • Both paths were already in the path exported from my .profile (this is relevant to possible workarounds #1, below).

  • I can run both M2 and octave successfully from a Terminal command-line. However...

    command-line.

Problem:Problems: Octave: In the jupyter notebook (with the SageMath 9.6 kernel running, I evaluated:

octave.eval('2+2')

The long error that ensued included:

RuntimeError: unable to start octave because the command "octave-cli --no-line-editing --silent --eval 'PS2(PS1());more off' --persist" failed: The command was not found or was not executable: octave-cli.

Similarly, when I evaluated

macaulay2('3/5 + 7/11')

I get a long error message that includes:

TypeError: unable to start macaulay2 because the command 'M2 --no-debug --no-readline --silent -e \'sageLoadMode = false;ZZ#{Standard,Core#"private dictionary"#"InputPrompt"} = ZZ#{Standard,Core#"private dictionary"#"InputContinuationPrompt"} = lineno -> if(sageLoadMode) then "_EGAS_LOAD_ : " else "_EGAS_ : ";printWidth = 0;lineNumber = 10^9;sageAssign = (k, v) -> (if not instance(v, Sequence) then use v; k <- v);\'' failed: The command was not found or was not executable: M2.

Possible workarounds:

  1. The method described in https://ask.sagemath.org/question/7949/running-octave-from-the-sage-notebook/?answer=28684#post-id-28684: This does not work for me, as it now causes SageMath-9-6.app not to open at all. (Since the current executable inside the SageMath-9-6.app package is named SageMath rather than Sage,I did changeSagetoSageMathfor the name of the added shell script, in the last line of that shell script, and as the value ofCFBundleExecutableininfo.plist`).
  2. The method described in the first comment at https://ask.sagemath.org/question/57112/cant-run-macaulay2-via-sagemath-in-jupyter-notebook/:

For Macaulay2, this sort of thing does work:

m2=Macaulay2(command='/Applications/Macaulay2-1.20/bin/M2')
m2('3/5+7/11')

For Octave:

oc=octave(command='/opt/local/bin/octave')

This does not work! Error:

TypeError Traceback (most recent call last)
/var/folders/r2/v_ly_rjj6_v1qpzx4kqy_mqr0000gn/T/ipykernel_4852/1477866728.py in <module>
----> 1 oc=octave(command='/opt/local/bin/octave')

TypeError: Interface.__call__() got an unexpected keyword argument 'command'

QUESTIONS:

(a) the workaround 2 for the call to Macaulay2 seems awkward. How can one take care of the path issue transparently?

(b) how make the call to octave work, too?