Skip to content

Commit

Permalink
Merge pull request #112 from maniek2332/ft/stats
Browse files Browse the repository at this point in the history
Stats-related functions, stats_graph utility
  • Loading branch information
labuzm committed Feb 20, 2021
2 parents a8f0263 + ef2b7cc commit d03b641
Show file tree
Hide file tree
Showing 9 changed files with 379 additions and 1 deletion.
5 changes: 5 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@
entry_points={
'console_scripts': ['shaderc=kaa.cli:shaderc']
},
extras_require={
'stats_graph': [
'matplotlib>=3.1.1',
]
},
license="MIT",
classifiers=[
"Development Status :: 4 - Beta",
Expand Down
2 changes: 2 additions & 0 deletions src/kaa/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ set(CYTHON_FILES
log.pxi
easings.pxi
spatial_index.pxi
statistics.pxi

kaacore/__init__.pxd
kaacore/engine.pxd
Expand All @@ -53,6 +54,7 @@ set(CYTHON_FILES
kaacore/easings.pxd
kaacore/spatial_index.pxd
kaacore/clock.pxd
kaacore/statistics.pxd

extra/include/pythonic_callback.h
extra/include/python_exceptions_wrapper.h
Expand Down
1 change: 1 addition & 0 deletions src/kaa/_kaa.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,5 @@ include "display.pxi"
include "window.pxi"
include "audio.pxi"
include "timers.pxi"
include "statistics.pxi"
include "engine.pxi"
25 changes: 25 additions & 0 deletions src/kaa/kaacore/statistics.pxd
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from libc.stdint cimport uint32_t
from libcpp.vector cimport vector
from libcpp.pair cimport pair
from libcpp.string cimport string

from .exceptions cimport raise_py_error

ctypedef pair[string, double] CPairStatisticLastValue
ctypedef pair[string, CStatisticAnalysis] CPairStatisticAnalysis

cdef extern from "kaacore/statistics.h" nogil:
cdef cppclass CStatisticAnalysis "kaacore::StatisticAnalysis":
uint32_t samples_count
double last_value
double mean_value
double max_value
double min_value
double standard_deviation

cdef cppclass CStatisticsManager "kaacore::StatisticsManager":
vector[CPairStatisticLastValue] get_last_all() except +raise_py_error
vector[CPairStatisticAnalysis] get_analysis_all() except +raise_py_error
void push_value(const string& name, const double value) except +raise_py_error

cdef CStatisticsManager& c_get_global_statistics_manager "kaacore::get_global_statistics_manager"()
96 changes: 96 additions & 0 deletions src/kaa/statistics.pxi
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
from .kaacore.statistics cimport (
CStatisticsManager, c_get_global_statistics_manager, CPairStatisticLastValue,
CStatisticAnalysis, CPairStatisticAnalysis,
)


cdef class StatisticAnalysis:
cdef CStatisticAnalysis c_statistic_analysis

def __init__(self):
raise RuntimeError(f'{self.__class__} must not be instantiated manually!')

@staticmethod
cdef create(CStatisticAnalysis c_statistic_analysis):
cdef StatisticAnalysis statistic_analysis = \
StatisticAnalysis.__new__(StatisticAnalysis)
statistic_analysis.c_statistic_analysis = c_statistic_analysis
return statistic_analysis

def __repr__(self):
return (
"<StatisticAnalysis: samples_count:{}, last_value:{},"
" mean_value:{}, max_value:{}, min_value:{},"
" standard_deviation:{}"
).format(
self.samples_count, self.last_value, self.mean_value,
self.max_value, self.min_value, self.standard_deviation
)

@property
def samples_count(self):
return self.c_statistic_analysis.samples_count

@property
def last_value(self):
return self.c_statistic_analysis.last_value

@property
def mean_value(self):
return self.c_statistic_analysis.mean_value

@property
def max_value(self):
return self.c_statistic_analysis.max_value

@property
def min_value(self):
return self.c_statistic_analysis.min_value

@property
def standard_deviation(self):
return self.c_statistic_analysis.standard_deviation


cdef class StatisticsManager:
cdef CStatisticsManager* c_statistics_manager

def __init__(self):
raise RuntimeError(f'{self.__class__} must not be instantiated manually!')

@staticmethod
cdef create(CStatisticsManager* c_statistics_manager):
assert c_statistics_manager
cdef StatisticsManager statistics_manager = \
StatisticsManager.__new__(StatisticsManager)
statistics_manager.c_statistics_manager = c_statistics_manager
return statistics_manager

def get_last_all(self):
cdef list results = []
cdef CPairStatisticLastValue pair

for pair in self.c_statistics_manager.get_last_all():
results.append((pair.first.decode(), pair.second))
return results

def get_analysis_all(self):
cdef list results = []
cdef CPairStatisticAnalysis pair

for pair in self.c_statistics_manager.get_analysis_all():
results.append((pair.first.decode(),
StatisticAnalysis.create(pair.second)))
return results

def push_value(self, str stat_name, double value):
self.c_statistics_manager.push_value(stat_name.encode(), value)


cdef StatisticsManager _global_statistics_manager = StatisticsManager.create(
&c_get_global_statistics_manager()
)


def get_global_statistics_manager():
return _global_statistics_manager
1 change: 1 addition & 0 deletions src/kaa/statistics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from ._kaa import get_global_statistics_manager, StatisticsManager, StatisticAnalysis
Empty file added src/kaa/tools/__init__.py
Empty file.

0 comments on commit d03b641

Please sign in to comment.