aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/matplotlib/py2/src/_image.cpp
diff options
context:
space:
mode:
authorshumkovnd <shumkovnd@yandex-team.com>2023-11-10 14:39:34 +0300
committershumkovnd <shumkovnd@yandex-team.com>2023-11-10 16:42:24 +0300
commit77eb2d3fdcec5c978c64e025ced2764c57c00285 (patch)
treec51edb0748ca8d4a08d7c7323312c27ba1a8b79a /contrib/python/matplotlib/py2/src/_image.cpp
parentdd6d20cadb65582270ac23f4b3b14ae189704b9d (diff)
downloadydb-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.cpp175
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;
+ }
+ }
+}