Installation & Setup
System Requirements
Before installing PyMAD-NG, ensure that your system meets the following requirements:
Python: Version 3.7 or later
Operating System: Linux, macOS, or Windows
Dependencies:
numpypandas(optional, for data handling)matplotlib(optional, for visualisation)
Installing PyMAD-NG
PyMAD-NG is available on PyPI and can be installed using pip:
pip install pymadng
If you need to install optional dependencies for advanced features:
pip install pymadng[tfs]
This installs tfs-pandas for handling MAD-NG TFS tables.
Verifying Installation
To check if PyMAD-NG is installed correctly, open Python and run:
import pymadng
print(pymadng.__version__)
If this prints a version number, the installation was successful.
Updating PyMAD-NG
To update PyMAD-NG to the latest version:
pip install --upgrade pymadng
You can check your current version using:
pip show pymadng
Uninstalling PyMAD-NG
If you need to remove PyMAD-NG from your system:
pip uninstall pymadng
Using a Custom MAD-NG Executable
If you have a specific MAD-NG binary, you can specify its path:
from pymadng import MAD
mad = MAD(mad_path="/path/to/mad")
Understanding pymadng.MAD Object Initialization
When you create a pymadng.MAD object, an instance of MAD-NG is launched. The __init__ method in mad_object.py handles the following:
Process Creation: Starts MAD-NG and establishes a communication channel.
Module Imports: By default, imports essential MAD-NG modules, see Useful Modules for the complete list.
Environment Configuration: Sets up the Python-MAD environment, including handling
py_nameand error handling.Temporary Variable Management: Uses
last_counterto track temporary variables (_last[]) for improved performance.
This ensures that users can quickly interface with MAD-NG without extensive manual setup.
Debugging Tips
Debugging PyMAD-NG can involve both Python-side and MAD-NG-side issues. Below are some strategies and tools built into PyMAD-NG to help troubleshoot effectively:
1. Enable Debug Mode
You can enable verbose output during initialisation by setting debug=True. This enables MAD-NG’s debug mode and prints useful messages:
mad = MAD(debug=True)
2. Redirect Standard Output and Standard Error
You can log all MAD-NG output to a file:
mad = MAD(stdout="mad_debug.log")
This is useful for reviewing MAD-NG output, especially when running large scripts.
If you want to redirect the standard error to a different file (as by default it is redirected to the standard output file), you can use the stderr parameter:
mad = MAD(stdout="mad_debug.log", stderr="mad_error.log")
3. Catch Errors from MAD-NG
Internally, MAD-NG returns an err_ token to signal an error. PyMAD-NG raises a RuntimeError with a message when this happens. If you encounter unexpected crashes, wrap your calls in try/except:
try:
mad.send("a = 1/'0'").recv()
except RuntimeError as e:
print("MAD-NG Error:", e)
Or it is possible to ignore the error and continue execution of the python script:
mad = MAD(raise_on_error=False)
mad.send("a = 1/'0'")
assert mad.send("py:send(1)").recv() == 1
4. View Communication History
You can inspect the full history of MAD-NG commands sent from Python, only if debug mode is enabled:
print(mad.history())
5. Interactive Execution
Use mad.recv_and_exec() to execute MAD-NG commands returned as Python strings. This is helpful when MAD sends back executable code:
mad.send("py:send('print(\'debug line\')')")
mad.recv_and_exec()
6. Ensure Communication Order
MAD-NG uses FIFO communication. Always follow the rule:
Before calling
recv(), ensure MAD was told tosend()something.Before calling
send(data), ensure MAD expects torecv()something.
Failing to follow this can cause deadlocks or hangs.
Next Steps
Now that PyMAD-NG is installed, you can move on to:
Quick Start Guide → (Learn the basics and run your first PyMAD-NG script)
API Reference → (Explore the functions and classes available in PyMAD-NG)