diff options
author | shumkovnd <shumkovnd@yandex-team.com> | 2023-11-10 14:39:34 +0300 |
---|---|---|
committer | shumkovnd <shumkovnd@yandex-team.com> | 2023-11-10 16:42:24 +0300 |
commit | 77eb2d3fdcec5c978c64e025ced2764c57c00285 (patch) | |
tree | c51edb0748ca8d4a08d7c7323312c27ba1a8b79a /contrib/python/matplotlib/py2/src/_image.cpp | |
parent | dd6d20cadb65582270ac23f4b3b14ae189704b9d (diff) | |
download | ydb-77eb2d3fdcec5c978c64e025ced2764c57c00285.tar.gz |
KIKIMR-19287: add task_stats_drawing script
Diffstat (limited to 'contrib/python/matplotlib/py2/src/_image.cpp')
-rw-r--r-- | contrib/python/matplotlib/py2/src/_image.cpp | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/contrib/python/matplotlib/py2/src/_image.cpp b/contrib/python/matplotlib/py2/src/_image.cpp new file mode 100644 index 0000000000..8fc386fccb --- /dev/null +++ b/contrib/python/matplotlib/py2/src/_image.cpp @@ -0,0 +1,175 @@ +/* -*- mode: c++; c-basic-offset: 4 -*- */ + +#define NO_IMPORT_ARRAY + +#include <math.h> + +// utilities for irregular grids +void _bin_indices_middle( + unsigned int *irows, int nrows, const float *ys1, unsigned long ny, float dy, float y_min) +{ + int i, j, j_last; + unsigned int *rowstart = irows; + const float *ys2 = ys1 + 1; + const float *yl = ys1 + ny; + float yo = y_min + dy / 2.0; + float ym = 0.5f * (*ys1 + *ys2); + // y/rows + j = 0; + j_last = j; + for (i = 0; i < nrows; i++, yo += dy, rowstart++) { + while (ys2 != yl && yo > ym) { + ys1 = ys2; + ys2 = ys1 + 1; + ym = 0.5f * (*ys1 + *ys2); + j++; + } + *rowstart = j - j_last; + j_last = j; + } +} + +void _bin_indices_middle_linear(float *arows, + unsigned int *irows, + int nrows, + const float *y, + unsigned long ny, + float dy, + float y_min) +{ + int i; + int ii = 0; + int iilast = (int)ny - 1; + float sc = 1 / dy; + int iy0 = (int)floor(sc * (y[ii] - y_min)); + int iy1 = (int)floor(sc * (y[ii + 1] - y_min)); + float invgap = 1.0f / (iy1 - iy0); + for (i = 0; i < nrows && i <= iy0; i++) { + irows[i] = 0; + arows[i] = 1.0; + } + for (; i < nrows; i++) { + while (i > iy1 && ii < iilast) { + ii++; + iy0 = iy1; + iy1 = (int)floor(sc * (y[ii + 1] - y_min)); + invgap = 1.0f / (iy1 - iy0); + } + if (i >= iy0 && i <= iy1) { + irows[i] = ii; + arows[i] = (iy1 - i) * invgap; + } else + break; + } + for (; i < nrows; i++) { + irows[i] = iilast - 1; + arows[i] = 0.0; + } +} + +void _bin_indices(int *irows, int nrows, const double *y, unsigned long ny, double sc, double offs) +{ + int i; + if (sc * (y[ny - 1] - y[0]) > 0) { + int ii = 0; + int iilast = (int)ny - 1; + int iy0 = (int)floor(sc * (y[ii] - offs)); + int iy1 = (int)floor(sc * (y[ii + 1] - offs)); + for (i = 0; i < nrows && i < iy0; i++) { + irows[i] = -1; + } + for (; i < nrows; i++) { + while (i > iy1 && ii < iilast) { + ii++; + iy0 = iy1; + iy1 = (int)floor(sc * (y[ii + 1] - offs)); + } + if (i >= iy0 && i <= iy1) + irows[i] = ii; + else + break; + } + for (; i < nrows; i++) { + irows[i] = -1; + } + } else { + int iilast = (int)ny - 1; + int ii = iilast; + int iy0 = (int)floor(sc * (y[ii] - offs)); + int iy1 = (int)floor(sc * (y[ii - 1] - offs)); + for (i = 0; i < nrows && i < iy0; i++) { + irows[i] = -1; + } + for (; i < nrows; i++) { + while (i > iy1 && ii > 1) { + ii--; + iy0 = iy1; + iy1 = (int)floor(sc * (y[ii - 1] - offs)); + } + if (i >= iy0 && i <= iy1) + irows[i] = ii - 1; + else + break; + } + for (; i < nrows; i++) { + irows[i] = -1; + } + } +} + +void _bin_indices_linear( + float *arows, int *irows, int nrows, double *y, unsigned long ny, double sc, double offs) +{ + int i; + if (sc * (y[ny - 1] - y[0]) > 0) { + int ii = 0; + int iilast = (int)ny - 1; + int iy0 = (int)floor(sc * (y[ii] - offs)); + int iy1 = (int)floor(sc * (y[ii + 1] - offs)); + float invgap = 1.0 / (iy1 - iy0); + for (i = 0; i < nrows && i < iy0; i++) { + irows[i] = -1; + } + for (; i < nrows; i++) { + while (i > iy1 && ii < iilast) { + ii++; + iy0 = iy1; + iy1 = (int)floor(sc * (y[ii + 1] - offs)); + invgap = 1.0 / (iy1 - iy0); + } + if (i >= iy0 && i <= iy1) { + irows[i] = ii; + arows[i] = (iy1 - i) * invgap; + } else + break; + } + for (; i < nrows; i++) { + irows[i] = -1; + } + } else { + int iilast = (int)ny - 1; + int ii = iilast; + int iy0 = (int)floor(sc * (y[ii] - offs)); + int iy1 = (int)floor(sc * (y[ii - 1] - offs)); + float invgap = 1.0 / (iy1 - iy0); + for (i = 0; i < nrows && i < iy0; i++) { + irows[i] = -1; + } + for (; i < nrows; i++) { + while (i > iy1 && ii > 1) { + ii--; + iy0 = iy1; + iy1 = (int)floor(sc * (y[ii - 1] - offs)); + invgap = 1.0 / (iy1 - iy0); + } + if (i >= iy0 && i <= iy1) { + irows[i] = ii - 1; + arows[i] = (i - iy0) * invgap; + } else + break; + } + for (; i < nrows; i++) { + irows[i] = -1; + } + } +} |