Gyoto
Public Member Functions | Protected Attributes | List of all members
Gyoto::Python::Base Class Reference

Base class for classes in the Python plug-in. More...

#include <GyotoPython.h>

Inheritance diagram for Gyoto::Python::Base:
Gyoto::Python::Object< O > Gyoto::Python::Object< Gyoto::Astrobj::Standard > Gyoto::Python::Object< Gyoto::Astrobj::ThinDisk > Gyoto::Python::Object< Gyoto::Metric::Generic > Gyoto::Python::Object< Gyoto::Spectrum::Generic > Gyoto::Astrobj::Python::Standard Gyoto::Astrobj::Python::ThinDisk Gyoto::Metric::Python Gyoto::Spectrum::Python

Public Member Functions

 Base (const Base &)
 
virtual std::string module () const
 Return module_.
 
virtual std::string inlineModule () const
 Return inline_module_.
 
virtual void module (const std::string &)
 Set module_ and import the Python module. More...
 
virtual void inlineModule (const std::string &)
 Set inline_module_ and import the Python module. More...
 
virtual void instance (PyObject *pinstance)
 Set pInstance_. More...
 
virtual std::string klass () const
 Retrieve class_.
 
virtual void klass (const std::string &c)
 Set class_ and instantiate the Python class. More...
 
virtual std::vector< double > parameters () const
 Retrieve parameters_.
 
virtual void parameters (const std::vector< double > &)
 Set parameters_ and send them to pInstance_. More...
 
virtual bool hasPythonProperty (std::string const &key) const
 
virtual void setPythonProperty (std::string const &key, Value val)
 
virtual void setPythonProperty (std::string const &key, Value val, std::string const &unit)
 
virtual Value getPythonProperty (std::string const &key) const
 
virtual Value getPythonProperty (std::string const &key, std::string const &unit) const
 
virtual Gyoto::Property::type_e pythonPropertyType (std::string const &key) const
 
void checkModuleForSingleClass ()
 Look for single class in pModule_. More...
 
virtual void detachInstance ()
 Detach pInstance_ and cached method pointers. More...
 
virtual void attachInstance (PyObject *instance)
 Attach pInstance_ and cached method pointers. More...
 
PyObject * instantiateClass (std::string &klass) const
 Creates an instance of class klass in module module_. More...
 

Protected Attributes

std::string module_
 Name of the Python module that holds the class. More...
 
std::string inline_module_
 Python source code for module that holds the class.
 
std::string class_
 Name of the Python class that we want to expose. More...
 
std::vector< double > parameters_
 Parameters that this class needs. More...
 
PyObject * pModule_
 Reference to the python module once it has been loaded.
 
PyObject * pInstance_
 Reference to the python instance once it has been instantiated.
 
PyObject * pProperties_
 Reference to the properties member.
 
PyObject * pSet_
 Reference to the (optional) Set method.
 
PyObject * pGet_
 Reference to the (optional) Get method.
 

Detailed Description

Base class for classes in the Python plug-in.

All derived C++ classes (Gyoto::Metric::Python, Gyoto::Spectrum::Python, Gyoto::Astrobj::Python::Standard and Gyoto::Astrobj::Python::Thindisk have those three Properties:

Those C++ classes wrap around Python classes that implement certain methods. Those Python classes may accepts parameters through the Parameters property described above by implementing setitem, or by providing:

All the Gyoto instances of the classes descending from Gyoto::Python::Base expose themselves to the Python instance they wrap immediately after instantiation by setting the 'this' attribute. If the 'gyoto' Python extension can be loaded, then 'this' will be an instance of one of the classes gyoto.Metric, gyoto.Spectrum, gyoto.StandardAstrobj or gyoto.ThinDisk pointing to the underlying C++ instance. If the 'gyoto' extension is not available, 'this' will be None.

Member Function Documentation

◆ attachInstance()

virtual void Gyoto::Python::Base::attachInstance ( PyObject *  instance)
virtual

Attach pInstance_ and cached method pointers.

Attaches pInstance_, #pProperties, pSet_ and pGet_. Increments their reference counters.

Derived classes should call Base::attachInstance and attach the other pointers.

Reimplemented in Gyoto::Astrobj::Python::ThinDisk, Gyoto::Astrobj::Python::Standard, Gyoto::Metric::Python, and Gyoto::Spectrum::Python.

◆ checkModuleForSingleClass()

void Gyoto::Python::Base::checkModuleForSingleClass ( )

Look for single class in pModule_.

If class_ is empty and pModule_ is not null, check whether there is a single class in pModule_. In this case set class_ to its name and return. If pModule_ contains no class, error out.

◆ detachInstance()

virtual void Gyoto::Python::Base::detachInstance ( )
virtual

Detach pInstance_ and cached method pointers.

Detaches (=calls Py_XDECREF and sets to NULL) #pProperties, pSet_ and pGet_.

Derived classes should detach the other pointers and call Base::detachInstance().

Reimplemented in Gyoto::Astrobj::Python::ThinDisk, Gyoto::Astrobj::Python::Standard, Gyoto::Metric::Python, and Gyoto::Spectrum::Python.

◆ inlineModule()

virtual void Gyoto::Python::Base::inlineModule ( const std::string &  )
virtual

Set inline_module_ and import the Python module.

Side effects:

Reimplemented in Gyoto::Astrobj::Python::ThinDisk, Gyoto::Astrobj::Python::Standard, Gyoto::Metric::Python, and Gyoto::Spectrum::Python.

◆ instance()

virtual void Gyoto::Python::Base::instance ( PyObject *  pinstance)
virtual

Set pInstance_.

Detach the previously set instance, sets pModule_ to nullptr and class_ to "", then calls attachInstance() if instance is not null.

◆ instantiateClass()

PyObject* Gyoto::Python::Base::instantiateClass ( std::string &  klass) const

Creates an instance of class klass in module module_.

Returns a new reference.

◆ klass()

virtual void Gyoto::Python::Base::klass ( const std::string &  c)
virtual

Set class_ and instantiate the Python class.

Sets pInstance_.

This generic implementation takes care of the common ground, but does not set 'this' or call parameters(parameters_). Therefore, all the derived classes should reimplement this method and at least call Python::Base::klass(c) and parameters(parameters_). Between the two is the right moment to check that the Python class implements the required API and to cache PyObject* pointers to class methods.

Reimplemented in Gyoto::Astrobj::Python::ThinDisk, Gyoto::Astrobj::Python::Standard, Gyoto::Metric::Python, and Gyoto::Spectrum::Python.

◆ module()

virtual void Gyoto::Python::Base::module ( const std::string &  )
virtual

Set module_ and import the Python module.

Side effects:

Reimplemented in Gyoto::Astrobj::Python::ThinDisk, Gyoto::Astrobj::Python::Standard, Gyoto::Metric::Python, and Gyoto::Spectrum::Python.

◆ parameters()

virtual void Gyoto::Python::Base::parameters ( const std::vector< double > &  )
virtual

Set parameters_ and send them to pInstance_.

The parameters are sent to the class instance using the setitem method with numerical keys.

Reimplemented in Gyoto::Astrobj::Python::ThinDisk, Gyoto::Astrobj::Python::Standard, Gyoto::Metric::Python, and Gyoto::Spectrum::Python.

Member Data Documentation

◆ class_

std::string Gyoto::Python::Base::class_
protected

Name of the Python class that we want to expose.

Property name: Class.

◆ module_

std::string Gyoto::Python::Base::module_
protected

Name of the Python module that holds the class.

For instance, if the class is implemented in toto.py, the module name is "toto". Property name: Module.

◆ parameters_

std::vector<double> Gyoto::Python::Base::parameters_
protected

Parameters that this class needs.

A list of parameters (doubles) can be passed in the Property Parameters. They will be sent to the Python instance using setitem.


The documentation for this class was generated from the following file: