Is there a reasonably neutral comparison of Mathics vs Mathematica anywhere?

Based on an amazing showcase[1] Mathematica is right at the top of my list of languages to learn if it (and at least some of the surrounding tooling) ever becomes open source. I wonder how many of those examples would give useful results in Mathics, or what their equivalents would be.

[1] https://codegolf.stackexchange.com/a/44683/9570

The thing about Mathematica / the Wolfram language is that it's quite a bit harder to create an open source interpreter than it was for eg R (which is actually a FOSS interpteter for the commercial package S) or for Matlab (not sure what the status of Octave, the FOSS interpeter for Matlab code, is, I read an entry on a mailing list a long time ago that its sole dev was giving up). A lot of the symbolic solvers that are used under the hood are Wolfram's IP, and it would be a monumental effort to recreate something similarly powerful from scratch.

You've heard of SageMath right?

The biggest thing missing from SageMath is a step by step solver. (Edit to add a caveat, I'm sure many professionals depend on minutiae of one or the other)

Feature-wise I'd say Sage has more Mathematica functionality than Octave does for MATLAB. Sage is not trying to be compatible however presumably it wouldn't be that hard if the functionality is there?

Sage is a bit of a Frankenstein though

SageMath (and the cocalc-docker image, and JupyterLite, and mambaforge, ) include SymPy; which can be called with `evaluate=False`

Advanced Expression Manipulation > Prevent expression evaluation: https://docs.sympy.org/latest/tutorials/intro-tutorial/manip...

> There are generally two ways to prevent the evaluation, either pass an evaluate=False parameter while constructing the expression, or create an evaluation stopper by wrapping the expression with UnevaluatedExpr.

From "disabling automatic simplification in sympy" https://stackoverflow.com/a/48847102 :

> A simpler way to disable automatic evaluation is to use context manager evaluate. For example,

  from sympy.core.evaluate import evaluate
  from sympy.abc import x,y,z
  with evaluate(False):
    print(x/x)
sage.symbolic.expression.Expression.unhold() and `hold=True`: https://doc.sagemath.org/html/en/reference/calculus/sage/sym...

IIRC there is a Wolfram Jupyter kernel?

WolframResearch/WolframLanguageForJupyter: https://github.com/WolframResearch/WolframLanguageForJupyter

mathics/IMathics is the Jupyter kernel for mathics: https://github.com/mathics/IMathics@main#egg=imathics

  #pip install jupyter_console imathics
  #conda install -c conda-forge -y jupyter_console jupyterlab
  mamba install -y jupyter_console jupyterlab
  jupyter console
  
  jupyter kernelspec list
  pip install -e git+https://github.com/mathics/imathics@main#egg=mathics
  jupyter console --kernel=
  
  %?
  %logstart?
  %logstart -o demo.log.py
There are Jupyter kernels for Python, Mathics, Wolfram, R, Octave, Matlab, xeus-cling, allthekernels (the polyglot kernel). https://github.com/jupyter/jupyter/wiki/Jupyter-kernels https://github.com/ml-tooling/best-of-jupyter#jupyter-kernel...

The Python Jupyter kernel checks IPython.display.display()'d objects for methods in order to represent an object in a command line shell, graphical shell (qtconsole), notebook (.ipynb), or a latex document: _repr_mimebundle_(), _repr_html_(), _repr_json_(), _repr_latex_(), ..., __repr__(), __str__()

The last expression in an input cell of a notebook is implictly displayed:

  from IPython.display import display
  %display?  # argspec, docstring
  %display?? # ' & source code
  display(last_expresssion)
Symbolic CAS mobile apps with tabling and charting and varying levels of support for complex numbers and quaternions, for example: Wolfram Mathematica, Desmos, Geogebra, JupyterLite, Jupyter on mobile