Metadata-Version: 2.4
Name: geopmpy
Version: 3.2.1
Summary: GEOPM - Global Extensible Open Power Manager Runtime Tools
Author-email: Christopher Cantalupo <christopher.m.cantalupo@intel.com>, Brad Geltz <brad.geltz@intel.com>
Maintainer-email: Christopher Cantalupo <christopher.m.cantalupo@intel.com>, Brad Geltz <brad.geltz@intel.com>
License: Copyright (c) 2015 - 2025 Intel Corporation
        
        Redistribution and use in source and binary forms, with or without
        modification, are permitted provided that the following conditions are
        met:
        
            1. Redistributions of source code must retain the above copyright
               notice, this list of conditions and the following disclaimer.
        
            2. Redistributions in binary form must reproduce the above
               copyright notice, this list of conditions and the following
               disclaimer in the documentation and/or other materials provided
               with the distribution.
        
            3. Neither the name of the copyright holder nor the names of its
               contributors may be used to endorse or promote products derived
               from this software without specific prior written permission.
        
        THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
        "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
        LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
        A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
        HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
        SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
        LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
        DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
        THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
        OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        
Project-URL: Homepage, https://geopm.github.io
Project-URL: Source, https://github.com/geopm/geopm/
Project-URL: Documentation, https://geopm.github.io/geopmpy.7.html
Keywords: runtime,hardware,telemetry,configuration
Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: POSIX :: Linux
Classifier: Natural Language :: English
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: System :: Hardware :: Symmetric Multi-processing
Classifier: Topic :: System :: Power (UPS)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3 :: Only
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE-BSD-3-Clause
License-File: AUTHORS
Requires-Dist: cffi>=1.13.2
Requires-Dist: cycler>=0.11.0
Requires-Dist: natsort>=8.1.0
Requires-Dist: numpy>=1.19.5
Requires-Dist: pandas>=1.1.5
Requires-Dist: psutil>=5.4.8
Requires-Dist: pyyaml>=6.0.0
Requires-Dist: tables>=3.7.0
Requires-Dist: geopmdpy
Dynamic: license-file

geopmpy
========
This directory contains source code for the `geopmpy` Python package, which
provides python bindings for `libgeopm`, as well as the `geopmlaunch` tool.

Subdirectories include:

* [debian](debian): Configuration files for debian packaging scripts
* [geopmpy](geopmpy): Source code for modules in this package
* [test](test): Test code for this package

Set Up a Development Environment
--------------------------------
Run `pip install -e .` to install this directory in editable mode (so you don't need to reinstall between updating python source code and re-running tests). That will also install the python execution-time dependencies of this package. Also run `pip install -f requirements.txt` to install additional development dependencies. If you follow these steps, then you do not need to modify your `PYTHONPATH` variable when executing tests.

The `geopmpy` package depends on `geopmdpy`, so also be sure to install that package (e.g., in editable mode as done for this package).

The `geopmpy` package wraps `libgeopm`, which also depends on `libgeopmd`. Be sure to follow the build instructions in the directories for those libraries as part of setting up a geopmpy development environment. Either install those builds somewhere on your path, or manually add them to your `LD_LIBRARY_PATH` (examples in the next section).

Building Against Non-System-Installed Libraries
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you want to build geopmpy against non-system-installed headers and ``libgeopm``
binaries, you need to set your compiler's environment variables to tell it
where to search for GEOPM. For example, if you built and installed ``libgeopm``
with ``--prefix=$HOME/build/geopm`` and your python extensions are compiled
with gcc, then run:

    CC=gcc LIBRARY_PATH=$HOME/build/geopm/lib C_INCLUDE_PATH=$HOME/build/geopm/include pip install ./

to build and install this package.

Executing Tests
---------------
Run `LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD/../libgeopm/.libs" python3 test` from this directory to launch the entire test suite. Some of the tests depend on `libgeopm`, so it should be built before running tests.
Alternatively, run `LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD/../libgeopm/.libs" python3 -m unittest discover -p 'Test*.py'`

Execute a single test case with `LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD/../libgeopm/.libs" python3 -m unittest <one.or.more.test.modules.or.classes.or.functions>`. For example:
`LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD/../libgeopm/.libs" python3 -m unittest test.TestAgent.TestAgent.test_policy_names`
