diff options
author | zverevgeny <zverevgeny@yandex-team.com> | 2025-05-13 19:00:02 +0300 |
---|---|---|
committer | zverevgeny <zverevgeny@yandex-team.com> | 2025-05-13 19:13:54 +0300 |
commit | 92e06374736aa28637dc0e706455b65c8268a5e6 (patch) | |
tree | 3df370c199ae25d308e542f02af20f43eab78f8a /contrib/python/matplotlib/py2/src/_image.cpp | |
parent | dc63d5794da99c2ebe3f32914d0351d9707660b0 (diff) | |
download | ydb-92e06374736aa28637dc0e706455b65c8268a5e6.tar.gz |
Import matplotlib
commit_hash:d59c2338025ef8fd1e1f961ed9d8d5fd52d0bd96
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 00000000000..8fc386fccb8 --- /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; + } + } +} |