Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
Changes - from version >= 1.x
=============================

2025-0
------

**version 1.0.4**

* [enhancement] new parameter - `buffer` - has been added to `interpolate_raster` when `dimension` is set, it is float, by default equal to 0, must be equal or greater than 1. It creates buffer of size (buffer * step_size) around the interpolated grid.

2025-07-17
----------

Expand All @@ -21,7 +28,7 @@ Changes - from version >= 1.x
**version 1.0.1**

* [feature] `ordinary_kriging()` and `simple_kriging()` functions allow user to pass array-like object of coordinates as the `unknown_locations` parameter.
* [enhacement] added `__repr__()` method to `TheoreticalVariogram` class.
* [enhancement] added `__repr__()` method to `TheoreticalVariogram` class.


Changes in transition between 0.x to 1.x
Expand Down
Binary file modified docs/build/doctrees/api/viz/raster.doctree
Binary file not shown.
Binary file modified docs/build/doctrees/environment.pickle
Binary file not shown.
46 changes: 34 additions & 12 deletions docs/build/html/_modules/pyinterpolate/viz/raster.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>pyinterpolate.viz.raster &#8212; pyinterpolate 1.0.0 documentation</title>
<title>pyinterpolate.viz.raster &#8212; pyinterpolate 1.0.3 documentation</title>



Expand Down Expand Up @@ -38,7 +38,7 @@
<link rel="preload" as="script" href="../../../_static/scripts/bootstrap.js?digest=8878045cc6db502f8baf" />
<link rel="preload" as="script" href="../../../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" />

<script src="../../../_static/documentation_options.js?v=8d563738"></script>
<script src="../../../_static/documentation_options.js?v=baaebd52"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/clipboard.min.js?v=a7894cd8"></script>
Expand Down Expand Up @@ -111,7 +111,7 @@



<p class="title logo__title">pyinterpolate 1.0.0 documentation</p>
<p class="title logo__title">pyinterpolate 1.0.3 documentation</p>

</a></div>

Expand Down Expand Up @@ -439,20 +439,24 @@ <h1>Source code for pyinterpolate.viz.raster</h1><div class="highlight"><pre>
<span class="kn">from</span> <span class="nn">pyinterpolate.semivariogram.theoretical.theoretical</span> <span class="kn">import</span> <span class="n">TheoreticalVariogram</span>


<span class="k">def</span> <span class="nf">set_dimensions</span><span class="p">(</span><span class="n">xs</span><span class="p">,</span> <span class="n">ys</span><span class="p">,</span> <span class="n">dmax</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">set_dimensions</span><span class="p">(</span><span class="n">xs</span><span class="p">,</span> <span class="n">ys</span><span class="p">,</span> <span class="n">dmax</span><span class="p">,</span> <span class="n">buffer</span><span class="o">=</span><span class="mf">0.0</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Function sets dimensions of the output array.</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> xs : numpy array</span>
<span class="sd"> X coordinates.</span>
<span class="sd"> X coordinates.</span>

<span class="sd"> ys : numpy array</span>
<span class="sd"> Y coordinates.</span>
<span class="sd"> Y coordinates.</span>

<span class="sd"> dmax : int</span>
<span class="sd"> How many points between max dimensions.</span>
<span class="sd"> How many points between max dimensions.</span>

<span class="sd"> buffer : float, default = 0</span>
<span class="sd"> Buffer around interpolated area. Must be equal or greater than one,</span>
<span class="sd"> otherwise it is not created.</span>

<span class="sd"> Returns</span>
<span class="sd"> -------</span>
Expand All @@ -471,12 +475,21 @@ <h1>Source code for pyinterpolate.viz.raster</h1><div class="highlight"><pre>

<span class="k">if</span> <span class="n">x_abs</span> <span class="o">&gt;</span> <span class="n">y_abs</span><span class="p">:</span>
<span class="n">step</span> <span class="o">=</span> <span class="n">x_abs</span> <span class="o">/</span> <span class="n">dmax</span>
<span class="n">x_dim_coords</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">xmin</span> <span class="o">+</span> <span class="n">step</span><span class="p">,</span> <span class="n">xmax</span> <span class="o">+</span> <span class="n">step</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
<span class="n">y_dim_coords</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">ymin</span> <span class="o">+</span> <span class="n">step</span><span class="p">,</span> <span class="n">ymax</span> <span class="o">+</span> <span class="n">step</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">step</span> <span class="o">=</span> <span class="n">y_abs</span> <span class="o">/</span> <span class="n">dmax</span>
<span class="n">y_dim_coords</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">ymin</span> <span class="o">+</span> <span class="n">step</span><span class="p">,</span> <span class="n">ymax</span> <span class="o">+</span> <span class="n">step</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
<span class="n">x_dim_coords</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">xmin</span> <span class="o">+</span> <span class="n">step</span><span class="p">,</span> <span class="n">xmax</span> <span class="o">+</span> <span class="n">step</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>

<span class="k">if</span> <span class="n">buffer</span> <span class="o">&gt;=</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">bb</span> <span class="o">=</span> <span class="n">buffer</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">bb</span> <span class="o">=</span> <span class="mf">0.01</span>

<span class="n">initial_x_position</span> <span class="o">=</span> <span class="n">xmin</span> <span class="o">-</span> <span class="p">(</span><span class="n">bb</span> <span class="o">*</span> <span class="n">step</span><span class="p">)</span>
<span class="n">initial_y_position</span> <span class="o">=</span> <span class="n">ymin</span> <span class="o">-</span> <span class="p">(</span><span class="n">bb</span> <span class="o">*</span> <span class="n">step</span><span class="p">)</span>
<span class="n">end_x_position</span> <span class="o">=</span> <span class="n">xmax</span> <span class="o">+</span> <span class="p">(</span><span class="n">bb</span> <span class="o">*</span> <span class="n">step</span><span class="p">)</span>
<span class="n">end_y_position</span> <span class="o">=</span> <span class="n">ymax</span> <span class="o">+</span> <span class="p">(</span><span class="n">bb</span> <span class="o">*</span> <span class="n">step</span><span class="p">)</span>

<span class="n">y_dim_coords</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">initial_y_position</span><span class="p">,</span> <span class="n">end_y_position</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
<span class="n">x_dim_coords</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">initial_x_position</span><span class="p">,</span> <span class="n">end_x_position</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>

<span class="c1"># y_dim_coords must be flipped</span>
<span class="n">y_dim_coords</span> <span class="o">=</span> <span class="n">y_dim_coords</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
Expand All @@ -487,6 +500,7 @@ <h1>Source code for pyinterpolate.viz.raster</h1><div class="highlight"><pre>
<a class="viewcode-back" href="../../../api/viz/raster.html#pyinterpolate.interpolate_raster">[docs]</a>
<span class="k">def</span> <span class="nf">interpolate_raster</span><span class="p">(</span><span class="n">data</span><span class="p">,</span>
<span class="n">dim</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
<span class="n">buffer</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span>
<span class="n">number_of_neighbors</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span>
<span class="n">semivariogram_model</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">direction</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
Expand All @@ -504,6 +518,11 @@ <h1>Source code for pyinterpolate.viz.raster</h1><div class="highlight"><pre>
<span class="sd"> Number of pixels (points) of a larger dimension (it could be width</span>
<span class="sd"> or height). Ratio is preserved.</span>

<span class="sd"> buffer : float, default = 0</span>
<span class="sd"> Buffer around interpolated area. Must be equal or greater than one,</span>
<span class="sd"> otherwise it is not created.</span>


<span class="sd"> number_of_neighbors : int, default=16</span>
<span class="sd"> Number of points used to interpolate data.</span>

Expand Down Expand Up @@ -560,7 +579,10 @@ <h1>Source code for pyinterpolate.viz.raster</h1><div class="highlight"><pre>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>

<span class="n">x_coords</span><span class="p">,</span> <span class="n">y_coords</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="n">set_dimensions</span><span class="p">(</span><span class="n">data</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">data</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">dim</span><span class="p">)</span>
<span class="n">x_coords</span><span class="p">,</span> <span class="n">y_coords</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="n">set_dimensions</span><span class="p">(</span><span class="n">data</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">],</span>
<span class="n">data</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">],</span>
<span class="n">dim</span><span class="p">,</span>
<span class="n">buffer</span><span class="p">)</span>

<span class="c1"># Calculate semivariance if not provided</span>

Expand Down
5 changes: 4 additions & 1 deletion docs/build/html/api/viz/raster.html
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@ <h1>Visualization<a class="headerlink" href="#visualization" title="Link to this
<h2>Raster<a class="headerlink" href="#raster" title="Link to this heading">#</a></h2>
<dl class="py function">
<dt class="sig sig-object py">
<span class="sig-prename descclassname"><span class="pre">pyinterpolate.</span></span><span class="sig-name descname"><span class="pre">interpolate_raster</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1000</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">number_of_neighbors</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">semivariogram_model</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">direction</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tolerance</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allow_approx_solutions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span></span></span><a class="reference internal" href="../../_modules/pyinterpolate/viz/raster.html#interpolate_raster"><span class="viewcode-link"><span class="pre">[source]</span></span></a></dt>
<span class="sig-prename descclassname"><span class="pre">pyinterpolate.</span></span><span class="sig-name descname"><span class="pre">interpolate_raster</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1000</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">buffer</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">number_of_neighbors</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">semivariogram_model</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">direction</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tolerance</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allow_approx_solutions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span></span></span><a class="reference internal" href="../../_modules/pyinterpolate/viz/raster.html#interpolate_raster"><span class="viewcode-link"><span class="pre">[source]</span></span></a></dt>
<dd><p>Function interpolates raster from data points using ordinary kriging.</p>
<dl class="field-list">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
Expand All @@ -465,6 +465,9 @@ <h2>Raster<a class="headerlink" href="#raster" title="Link to this heading">#</a
<dt><strong>dim</strong><span class="classifier">int</span></dt><dd><p>Number of pixels (points) of a larger dimension (it could be width
or height). Ratio is preserved.</p>
</dd>
<dt><strong>buffer</strong><span class="classifier">float, default = 0</span></dt><dd><p>Buffer around interpolated area. Must be equal or greater than one,
otherwise it is not created.</p>
</dd>
<dt><strong>number_of_neighbors</strong><span class="classifier">int, default=16</span></dt><dd><p>Number of points used to interpolate data.</p>
</dd>
<dt><strong>semivariogram_model</strong><span class="classifier">TheoreticalVariogram, default=None</span></dt><dd><p>Variogram model, if not provided then it is estimated from a given
Expand Down
2 changes: 1 addition & 1 deletion docs/build/html/searchindex.js

Large diffs are not rendered by default.

40 changes: 31 additions & 9 deletions src/pyinterpolate/viz/raster.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,24 @@
from pyinterpolate.semivariogram.theoretical.theoretical import TheoreticalVariogram


def set_dimensions(xs, ys, dmax):
def set_dimensions(xs, ys, dmax, buffer=0.0):
"""
Function sets dimensions of the output array.

Parameters
----------
xs : numpy array
X coordinates.
X coordinates.

ys : numpy array
Y coordinates.
Y coordinates.

dmax : int
How many points between max dimensions.
How many points between max dimensions.

buffer : float, default = 0
Buffer around interpolated area. Must be equal or greater than one,
otherwise it is not created.

Returns
-------
Expand All @@ -47,12 +51,21 @@ def set_dimensions(xs, ys, dmax):

if x_abs > y_abs:
step = x_abs / dmax
x_dim_coords = np.arange(xmin + step, xmax + step, step)
y_dim_coords = np.arange(ymin + step, ymax + step, step)
else:
step = y_abs / dmax
y_dim_coords = np.arange(ymin + step, ymax + step, step)
x_dim_coords = np.arange(xmin + step, xmax + step, step)

if buffer >= 1:
bb = buffer
else:
bb = 0.01

initial_x_position = xmin - (bb * step)
initial_y_position = ymin - (bb * step)
end_x_position = xmax + (bb * step)
end_y_position = ymax + (bb * step)

y_dim_coords = np.arange(initial_y_position, end_y_position, step)
x_dim_coords = np.arange(initial_x_position, end_x_position, step)

# y_dim_coords must be flipped
y_dim_coords = y_dim_coords[::-1]
Expand All @@ -61,6 +74,7 @@ def set_dimensions(xs, ys, dmax):

def interpolate_raster(data,
dim=1000,
buffer=0.0,
number_of_neighbors=4,
semivariogram_model=None,
direction=None,
Expand All @@ -78,6 +92,11 @@ def interpolate_raster(data,
Number of pixels (points) of a larger dimension (it could be width
or height). Ratio is preserved.

buffer : float, default = 0
Buffer around interpolated area. Must be equal or greater than one,
otherwise it is not created.


number_of_neighbors : int, default=16
Number of points used to interpolate data.

Expand Down Expand Up @@ -134,7 +153,10 @@ def interpolate_raster(data,
if isinstance(data, list):
data = np.array(data)

x_coords, y_coords, props = set_dimensions(data[:, 0], data[:, 1], dim)
x_coords, y_coords, props = set_dimensions(data[:, 0],
data[:, 1],
dim,
buffer)

# Calculate semivariance if not provided

Expand Down
2 changes: 1 addition & 1 deletion tests/test_viz/test_raster.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,4 @@ def test_interpolate_raster():
assert isinstance(interpolated['result'], np.ndarray)
assert isinstance(interpolated['error'], np.ndarray)
assert isinstance(interpolated['params'], dict)
assert interpolated['result'].shape == (50, 50)
assert interpolated['result'].shape == (51, 51)
Loading