# Problem passing a list from Mathematica to external python function

Mathematica Asked on January 2, 2022

comp1a = Flatten[Join[{{0 + 0 i}}, {comp1}]];
Flatten[comp1a[[1 ;; 6]]]


This creates a list of complex values -> comp1a

The first 6 terms in the list are:

{0, -2.04375 + 1.33694 I, -1.0492 + 3.3731 I, -4.95694 +
1.01694 I, 4.61625 – 4.52896 I, 6.66754 – 4.1488 I}

Then I try to pass the list to;

ExternalEvaluate["Python", "import numpy as np; timhist = np.fft.ifft(comp1a); timehist.tolist()"]


and the result is;

Failure
Message:"name ‘comp1a’ is not defined
Tag:PythonError

My question is how do I feed a list developed in Mathematica to a python function called externally

This will not work. Python does not know what mylist is:

mylist = {1, 2, 3, 4};
ExternalEvaluate["Python", "sum(mylist)"]


You must get the value of mylist into Python somehow. This could be done with string replacement:

ExternalEvaluate["Python", "sum(" <>
StringReplace[ToString[mylist], {"{" -> "[", "}" -> "]"}]
<> ")"]


... though as Jason .B noted in the comments, it's much simpler to write this as a TemplateExpression:

ExternalEvaluate["Python", "sum(<* mylist *>)"]


For complex numbers, you'll need to rewrite them as a complex type first before you can feed them to Python:

createcomplex[z_?NumericQ] :=
"complex(" <> ToString[Re[z]] <> "," <> ToString[Im[z]] <> ")"

createcomplex[-2.7 + 3.5 I]
(* result: "complex(-2.7,3.5)" *)


Or more simply, using templates:

toPyComplexStr[z_?NumericQ] :=
TemplateApply["complex(<* Re[z] *>, <* Im[z] *>)", z]


There is however, a better way in the documentation which doesn't depend on text substitution and it uses an external session:

session = StartExternalSession["Python"];
ExternalEvaluate[session, <|
"Command" -> "sum",
"Arguments" -> {NumericArray[{1 + I, 2.3 - I, 5.7 - 2.3 I, 7},
"ComplexReal32"]}
|>]
(* result: 16. - 2.3 I *)


Let's use it for your problem:

session = StartExternalSession["Python"];
result = Last@
ExternalEvaluate[
session, {"import numpy as np", <|"Command" -> "np.fft.ifft",
"Arguments" -> {NumericArray[{0, -2.04375 + 1.33694 I, -1.0492 +
3.3731 I, -4.95694 + 1.01694 I, 4.61625 - 4.52896 I,
6.66754 - 4.1488 I}, "ComplexReal32"]}|>}]
Normal[result]
(* result: {0.538983 - 0.491797 I, -1.01814 - 2.38259 I, -1.15996 + 0.0605042 I,
0.650033 + 0.10651 I, -1.85749 + 0.939762 I, 2.84658 + 1.76761 I} *)


... and notice that this result matches up with InverseFourier if you use FourierParameters -> {1, -1}:

InverseFourier[{0, -2.04375 + 1.33694 I, -1.0492 + 3.3731 I, -4.95694 + 1.01694 I, 4.61625 - 4.52896 I, 6.66754 - 4.1488 I},
FourierParameters -> {1, -1}]

(* result: {0.538983 - 0.491797 I, -1.01814 - 2.38259 I, -1.15996 + 0.0605042 I,
0.650033 + 0.10651 I, -1.85749 + 0.939762 I, 2.84658 + 1.76761 I} *)


Answered by flinty on January 2, 2022

## Related Questions

### How can I separate the coefficients of $x^k$ and $x^k log x$ in a function?

1  Asked on September 29, 2021

### Is there a better syntax to obtain the derivative of a function as a function/operator? (e.g. for simple plotting of derivtives of functions, etc.)

1  Asked on September 29, 2021

### How can I avoid performance losses from ResourceFunction?

1  Asked on September 28, 2021

### When is a symbol a Symbol? Is there an easy Mathematica way to test if an object is a symbol sort of like a SymbolQ?

4  Asked on September 28, 2021

### Part specification is longer than depth of object

0  Asked on September 28, 2021

### Initialize Global variables with manipulate

0  Asked on September 28, 2021 by quang-trn-minh

### DSolve is not able to find a solution in some points

1  Asked on September 28, 2021 by alex-stark

### Strange behaviour with EllipticTheta functions

0  Asked on September 27, 2021

### NDSolve for system of PDEs -Error: fewer dependent variables!

1  Asked on September 27, 2021

### How to remove global constants in front of polynomial expressions?

1  Asked on September 27, 2021

### Simplify Gamma function given integer variables

1  Asked on September 26, 2021 by cp250

### Improve NIntegrate + fit

0  Asked on September 26, 2021

### Can you create a list of pairs? Not a list of list

0  Asked on September 26, 2021 by germany1915

### Write and solve n dimensional ODEs

0  Asked on September 26, 2021

### How to use wolfram engine with mBlock

1  Asked on September 26, 2021 by boobami

### obtain the analytics region from mesh or vtk file

0  Asked on September 26, 2021 by f-mark

### DensityPlot3D projected into a plane in the 3D space

1  Asked on September 26, 2021

### How to plot dual cone of a given conical domain?

2  Asked on September 26, 2021

### Can this boundary value problem leading to a partio-integral DE be solved using finite Fourier or any integral transform?

0  Asked on September 25, 2021