Development¶
Development Environment Setup¶
To set up an environment for developing the py-pal module, the requirements mentioned in the section Installation must be met. Then
Clone this repository locally with git
Navigate to the cloned repository
Create a virtual environment
python -m venv .venv
Activate the virtual environment
On Microsoft Windows run: .venv\Scripts\activate.bat On Linux run: source venv/bin/activate
Install the dependencies for the development environment
pip install -r dev-requirements.txt
or
python -m pip install -r dev-requirements
Building the py-pal module¶
python setup.py develop
With this command, the C extensions are compiled using Cython. Also, it packages all necessary files together and installs them in the current virtual environment.
Note, any change to a cython file (.pyx) requires recompilation, i.e. the above command must be executed again.
Attention, if it is not possible to install Cython by this command, the cython files (.pyx) are not taken into account. This results in the circumstance that the corresponding C/C++ files are not generated and thus, the old C/C++ files get used to build the C extensions. Directly speaking, changes to the cython files will have no effect because they are not processed!
Testing¶
The test execution is managed with pytest, read more about selecting specific tests and general usage here.
Run all regular and Cython tests together from the command line
pytest
Run all regular tests from the command line
pytest tests
Run all Cython tests from the command line
pytest tests_cython
Run a single test from tests/test_complexity_classification.py with plotting enabled. This will generate plots similar to running py-pal from the command line with the -p/–plot flag. The files are placed in the specified folder.
set PYPAL_SAVE_PLOTS=plots
set PYPAL_SAVE_STATISTICS=data
pytest tests\test_complexity_classification.py::TestComplexityClassification::test_bubble_sort
Logging¶
Logging can be helpful for understanding and debugging the py-pal module. py-pal supports logging and the different
verbosity levels. The default log level is logging.WARNING
.
To run py-pal with increased verbosity execute
py-pal <target> –log-level=info
py-pal <target> –log-level=debug
During testing you can configure the general logging level using the set_log_level function from py_pal.util
import logging
from py_pal.util import set_log_level
set_log_level(logging.INFO)
It is also possible to configure different logging levels per module with
import logging
from py_pal.data_collection import proxy
logging.getLogger('py_pal.data_collection.proxy').setLevel(logging.DEBUG)
logging.getLogger(proxy.__name__).setLevel(logging.DEBUG)