1-DAV-202 Data Management 2023/24
Previously 2-INF-185 Data Source Integration

Materials · Introduction · Rules · Contact
· Grades from marked homeworks are on the server in file /grades/userid.txt
· Dates of project submission and oral exams:
Early: submit project May 24 9:00am, oral exams May 27 1:00pm (limit 5 students).
Otherwise submit project June 11, 9:00am, oral exams June 18 and 21 (estimated 9:00am-1:00pm, schedule will be published before exam).
Sign up for one the exam days in AIS before June 11.
Remedial exams will take place in the last week of the exam period. Beware, there will not be much time to prepare a better project. Projects should be submitted as homeworks to /submit/project.
· Cloud homework is due on May 20 9:00am.


Difference between revisions of "Lcpp"

From MAD
Jump to navigation Jump to search
 
(2 intermediate revisions by 2 users not shown)
Line 3: Line 3:
 
<!-- /NOTEX -->
 
<!-- /NOTEX -->
  
In this lecture we will write simple C++ extensions for Python.
+
Python is a very flexible language with many libraries, but programs in Python can be slow and take a lot of memory compared with programs written for example in C++. In this lecture we will see how to combine C++ and Python so that you write core algorithmic parts in C++ but use Python to do other less time-sensitive computations, such as parsing inputs. We will be using [https://pybind11.readthedocs.io/en/stable/basics.html#creating-bindings-for-a-simple-function pybind11 library] to do that.
We will be using [https://pybind11.readthedocs.io/en/stable/basics.html#creating-bindings-for-a-simple-function pybind11] to do that.
 
  
Here is an example C++ code, which can be converted as an extension:
+
Here is an example C++ code, which can be converted as an extension and used in Python:
  
 
<syntaxhighlight lang="C++">
 
<syntaxhighlight lang="C++">
Line 39: Line 38:
 
         .def("f", &MyClass::f);
 
         .def("f", &MyClass::f);
 
}
 
}
 +
</syntaxhighlight>
 +
 +
We can then compile this code to be used as Python module:
 +
<syntaxhighlight lang="bash">
 +
c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3 -m pybind11 --includes) example.cc -o example$(python3-config --extension-suffix)
 +
</syntaxhighlight>
 +
 +
And then we can import it in Python (we need to be in same directory as compiled output):
 +
 +
<syntaxhighlight lang="Python">
 +
import example
 +
 +
c = example.MyClass()
 +
print(c.f(["aaa", "bb"]))
 +
print(c.f([]))
 
</syntaxhighlight>
 
</syntaxhighlight>

Latest revision as of 13:17, 30 April 2024

HWcpp

Python is a very flexible language with many libraries, but programs in Python can be slow and take a lot of memory compared with programs written for example in C++. In this lecture we will see how to combine C++ and Python so that you write core algorithmic parts in C++ but use Python to do other less time-sensitive computations, such as parsing inputs. We will be using pybind11 library to do that.

Here is an example C++ code, which can be converted as an extension and used in Python:

#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include <vector>
#include <string>

using std::vector;
using std::string;


// Here is your class code
struct MyClass {
    MyClass() {}
    int f(vector<string> arr) {
        int ss = 0;
        for (auto &s: arr) {
            ss += s.size();
        }
        return ss;
    }
};


// This is the binding code, every function you want to export, must be declared here
PYBIND11_MODULE(example, m) {
    m.doc() = "pybind11 example plugin"; // optional module docstring

    pybind11::class_<MyClass>(m, "MyClass")
        .def(pybind11::init())
        .def("f", &MyClass::f);
}

We can then compile this code to be used as Python module:

c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3 -m pybind11 --includes) example.cc -o example$(python3-config --extension-suffix)

And then we can import it in Python (we need to be in same directory as compiled output):

import example

c = example.MyClass()
print(c.f(["aaa", "bb"]))
print(c.f([]))