Metadata-Version: 2.4
Name: cecpy
Version: 0.1.4
Summary: Python bindings for an implementation of CECs benchmarks in C++23
Keywords: optimization,benchmark,global-optimization,ieee,cec
Author-Email: Eryk Warchulski <eryk.warchulski@mailbox.org>, =?utf-8?q?Maksym_Bie=C5=84kowski?= <him@mbienkowski.pl>
Maintainer-Email: Eryk Warchulski <eryk.warchulski@mailbox.org>
License-Expression: GPL-3.0-only
License-File: LICENSE
Project-URL: homepage, https://codeberg.org/ewarchul/cecxx
Project-URL: documentation, https://codeberg.org/ewarchul/cecxx/doc
Project-URL: tracker, https://codeberg.org/ewarchul/cecxx/issues
Requires-Python: >=3.12
Requires-Dist: nanobind>=2.9.2
Requires-Dist: numpy
Description-Content-Type: text/markdown

# cecxx

Implementation of IEEE Congress of Evolutionary (CEC) Bound-constrained Single
Objective Numerical Optimization benchmarks in C++23 with available interface
bindings to Python and R.

## About

The `{cecxx}` is a novel implementation of IEEE CEC BC-SOP benchmarks in C++23, which compared to the [official implementation
](https://github.com/P-N-Suganthan?tab=repositories) does not:
- leak memory 
- involve multiple IO operations during each objective function call.

Solving the above problems results in reliable and fast implementation that is ready to be used in your numerical experiments.

Check the [example](https://codeberg.org/ewarchul/cecxx/src/branch/main/example) directory
to see how to use this library. 

The `{cecxx}` includes also free-standing implementations of objective
functions utlized by CEC benchmarks, see [include/cecxx/functions](include/cecxx/functions) for details.

> [!NOTE]
> This **is not** official implementation of CEC BC-SOP benchmarks. However, it can be used as a drop-in replacement. The
> `{cecxx}` is extensively tested to be compliant with the official implementations by employing property-based testing. See
> [test/compliance](https://codeberg.org/ewarchul/cecxx/src/branch/main/test/compliance) for details.

## Installation

To install the `{cecxx}` with `cmake`, run below commads:

```sh
git clone https://codeberg.org/ewarchul/cecxx.git
cd cecxx
cmake \
  -B build \
  -S . \
  -D CMAKE_CXX_STANDARD=23 \
  -D CECXX_BENCHMARK_DATA_STORAGE_INSTALL_DIR="${HOME}/.local/state/cecxx"
cmake --build build
cmake --install build
```

If you are using `just` then you can run: 

```sh
just install_cxx
```

to build and install the library. See [Justfile](Justfile) for details or
inspect [CMakeLists.txt](CMakeLists.txt) for all available options.

> [!NOTE]
> `{cecxx}` is a passive project. It means, that you have to specify the project configuration.
> See [CMakePresets.json](CMakePresets.json) for defined workflows.

## Python bindings

See [docs/bindings/python.md](docs/bindings/python.md).

## R bindings

See [docs/bindings/r.md](docs/bindings/r.md).
