Skip to content

cvlabmiet/pycxx-example

Repository files navigation

pycxx-example

Пример использования функций/C++ C/C++ в языке python в среде jupyter.

Подготовка

Для начала необходимо написать и протестировать свой код. Из файла dft.cpp будет сформирована библиотека. Проверка функций должна осуществляться в файле main.cpp. Когда код будет написан и протестирован, его следует закоммитить и загрузить на сервер.

Работа с jupyter

Работа осуществляется с файлом pycxx.ipynb. Его можно открыть либо локально, если установлен сервис ipynb, либо в github-е через сервис codespace (познакомиться с codespace можно здесь). После загрузки среды нужно выбрать нужную версию python и запустить python-код.

Замечание: для компилирования C++-кода используется компилятор g++. Если его нет в системе, следует использовать доступный на данной системе компилятор (например, на Windows это cl.exe).

Как это работает?

В языке python можно запускать функции из динамических библиотек, собранных для языка C/C++. Эту возможность предоставляет модуль ctypes. Есть некоторые ограничения использования языка C/C++.

  1. Все функции должны иметь манглинг языка C, а не C++. Это ограничение можно обойти, явно задав манглинг extern "C" перед сигнатурой функции.
  2. Можно использовать только примитивные типы: целочисленные типы, типы с плавающей запятой, указатели.
  3. Нельзя использовать STL в сигнатуре вызываемых в python-е функций. Поэтому, например, вместо std::vector следует использовать указатель на данные и параметр размера вектора с типом size_t.
  4. Нельзя возвращать объекты. Язык python не знает как конструировать объекты, поэтому невозможно их получить. Необходимо явно создать область памяти под объект и передать эту память в функцию в виде параметра.
  5. Выделение памяти под входные и выходные данные должно быть на стороне python. Об этом можно не беспокоиться, если используется python-библиотека numpy. Все numpy-массивы в python имеют доступ к "сырому" указателю через метод ctype.data_as().

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published