# Spatial Lambdas

VoxelSpace's **spatial lambdas** are serverless functions that execute custom computations on your volumetricdata.

# Introduction

VoxelSpace's **spatial lambdas** are serverless functions that execute custom computations on your volumetricdata. They run near your data on highly parallel infrastructure, allowing you to process trillions of voxels inminutes. This guide explains what spatial lambdas are, when to use them, how to write and execute them, and bestpractices for efficient processing.

# What are Spatial Lambdas?

Spatial lambdas are stateless cloud functions written in languages such as **Python** or **.NET**. They take voxel gridsas input, perform a computation, and return a result or a modified dataset. Examples include:

- **Volume calculations** and statistical summaries
- **Filtering voxels** by property values
- **Creating derived datasets** from existing data
- **Classifying voxels** with machine learning models

Because the lambdas execute server-side, they scale to trillions of voxels through massive parallelization.

# When to Use a Lambda

Use a spatial lambda when you need to:

- Compute metrics such as t**otal volume tonnage average density**, or other summarystatistics
- **Filter** voxels based on property thresholds (e.g., density &gt; 2.5) or remove empty voxels
- **Resample** data to a coarser or finer resolution
- **Classify** voxels with a machine learning model (e.g., ore vs. waste, rock type, or vegetationclass)
- Generate **reports** of computed metrics for compliance or engineering studies

# Authoring a Lambda

Spatial lambdas are typically composed of three main components:

**1. Input Definition**

Specify the dataset(s) and region of interest (bounding box or selection) to process.

**2. Compute Function**

Write code that iterates through voxels and applies your logic. For example, summing the ore\_grade property forvoxels above a grade threshold.

**3. Output**

Return a summary value (e.g., total\_volume) or create a new dataset (e.g., filtered voxels). Lambdas can alsoattach files or emit logs during execution.

**Sample Python Lambda**

Here's a basic example that sums the volume of high-grade voxels:

```python
def lambda_handler (context, voxel_reader, voxel_writer): 
  total_volume = 0.0
  for voxel in voxel_reader:
    if voxel.properties.get('grade',0.0) &gt;= 0.5: 
      total_volume += voxel.size
  return {'total_volume': total_volume}

```

**<span style="font-size: 11.5pt;">Code Explanation</span>**

<span style="font-size: 9.0pt; font-family: 'IBM Plex Mono'; mso-bidi-font-family: 'IBM Plex Mono';">voxel\_reader</span>**<span style="font-size: 10.5pt;">: </span>**<span style="font-size: 10.5pt;">Provides voxel objects with property dictionaries and geometry</span>

<span style="font-size: 9.0pt; font-family: 'IBM Plex Mono'; mso-bidi-font-family: 'IBM Plex Mono';">voxel.properties.get('grade', 0.0)</span>**<span style="font-size: 10.5pt;">: </span>**<span style="font-size: 10.5pt;">Safely retrieves the grade property with a default valueof 0.0</span>

<span style="font-size: 9.0pt; font-family: 'IBM Plex Mono'; mso-bidi-font-family: 'IBM Plex Mono';">voxel.size</span>**<span style="font-size: 10.5pt;">: </span>**<span style="font-size: 10.5pt;">Represents the volume of a voxel (e.g., 1 m³)</span>

**<span style="font-size: 10.5pt;">Return value: </span>**<span style="font-size: 10.5pt;">Dictionary with the computed total volume that will appear in reports</span>

# Running a Lambda

<span style="font-size: 10.5pt;">Follow these steps to execute a spatial lambda:</span>

**<span style="font-size: 11.5pt;">Step 1</span>**<span style="font-size: 11.5pt;">:**Prepare Your Dataset**</span>

<span style="font-size: 10.5pt;">Ensure your data is processed into an **indexed dataset** or **voxel grid**. Lambdas operate on indexed datasets ratherthan raw uploads.</span>

**<span style="font-size: 11.5pt;">Step 2</span>**<span style="font-size: 11.5pt;">:**Select or Upload a Lambda**</span>

<span style="font-size: 10.5pt;">Navigate to your dataset's actions menu</span>

<span style="font-size: 10.5pt;">Choose **Run Lambda**</span>

<span style="font-size: 10.5pt;">Select a pre-built lambda (e.g., volume calculation, surface extraction) OR upload your owncode file</span>

<span style="font-size: 10.5pt;">\_ \_ \_ </span>

<span style="font-size: 10.5pt;"> </span>**<span style="font-size: 11.5pt;">Step 3</span>**<span style="font-size: 11.5pt;">:**Configure Parameters**</span>

<span style="font-size: 10.5pt;">Define the execution parameters:</span>

**<span style="font-size: 10.5pt;">Region of interest: </span>**<span style="font-size: 10.5pt;">Full dataset or specific bounding box</span>

**<span style="font-size: 10.5pt;">Property filters: </span>**<span style="font-size: 10.5pt;">Set thresholds (e.g., grade </span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Liberation Sans',sans-serif; mso-bidi-font-family: 'Liberation Sans';">≥ </span><span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">0.5)</span>

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Output options: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Specify whether to generate new datasets</span>

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">User inputs: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Provide any custom parameters your lambda requires</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';"> </span>

**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">Step 4</span>**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">:**Launch the Job**</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Start the lambda execution:</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">The task appears in **Pending Tasks**</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">On the free tier, only one job (processing or lambda) can run at a time</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Additional jobs queue until the current job finishes</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';"> </span>

**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">Step 5</span>**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">:**Review Results**</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">When complete, results appear in:</span>

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Reports section: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Summary values and statistics</span>

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Outputs section: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">New datasets generated by the lambda</span>

# Best Practices

**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">Performance Optimization</span>**

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Limit the region: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Restrict the lambda to the smallest area necessary to reduce compute costand time</span>

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Efficient algorithms: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Use vectorized operations where possible for better performance</span>

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Memory management: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Be mindful of memory usage when processing large datasets</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';"> </span>

**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">Development Workflow</span>**

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Test on a sample: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Validate your code on a small subset before running it on the full dataset</span>

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Incremental development: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Start with simple logic and gradually add complexity</span>

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Error handling: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Include proper error handling for robust execution</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';"> </span>

**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">Resource Management</span>**

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Reuse templates: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Start with VoxelSpace's built-in lambdas for common tasks; modify themrather than writing from scratch</span>

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Queue awareness: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Plan your processing and lambda jobs to avoid long queues, especially onthe free tier where concurrency is limited</span>

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Monitor usage: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Track your compute usage to stay within plan limits</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';"> </span>

**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">Debugging and Validation</span>**

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Use logs: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Include log statements in your lambda to help diagnose issues and verifyintermediate results</span>

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Validate inputs: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Check that your data has the expected properties before processing</span>

**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Test edge cases: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Consider what happens with empty regions, missing properties, or extremevalues</span>

# Advanced Lambda Example

Here's a more sophisticated lambda that performs statistical analysis:

```python
def statistical_analysis_lambda(context, voxel_reader, voxel_writer): 
  grades = [] 
  volumes = []
  for voxel in voxel_reader: 
    grade = voxel.properties.get('grade',0.0)
    if grade &gt; 0: # Only include non-zero grades
      grades.append(grade) 
      volumes.append(voxel.size)
  if not grades:
    return {'error':'No valid grade values found'}

  # Calculate statistics
  total_volume = sum(volumes) 
  weighted_average_grade = sum(g * v for g, v in zip(grades, volumes)) / total_volume

  return {
    'total_volume': total_volume,
    'voxel_count':len(grades),
    'average_grade':sum(grades) / len(grades),
    'weighted_average_grade': weighted_average_grade,
    'min_grade': min(grades),
    'max_grade': max(grades) 
  }
```

# Troubleshooting Common Issues

**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">Performance Problems</span>**

- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Large memory usage: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Process voxels in batches rather than loading all into memory</span>
- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Slow execution: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Optimize algorithms and reduce unnecessary computations</span>
- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Timeout errors: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Break large jobs into smaller regions</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';"> </span><span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';"> </span>

**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">Data Issues</span>**

- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Missing properties: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Always use the </span><span style="font-size: 9.0pt; font-family: 'IBM Plex Mono'; mso-fareast-font-family: 'Liberation Sans'; mso-bidi-font-family: 'IBM Plex Mono';">.get() </span><span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">method with default values</span>
- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Unexpected data types: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Validate and convert data types as needed</span>
- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Empty regions: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Check for zero voxel counts before performing calculations</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';"> </span>

**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">Runtime Errors</span>**

- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Import errors: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Ensure all required libraries are available in the runtime environment</span>
- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Syntax errors: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Test your code locally before uploading</span>
- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Logic errors: </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Use logging extensively to trace execution flow</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';"> </span>

**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">Conclusion</span>**

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Spatial lambdas bring high-performance analytics directly to your data, enabling custom computations at massivescale. By understanding how to author, configure, and run these serverless functions, you can:</span>

- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Extract deeper insights </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">from voxel models</span>
- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Automate complex spatial analyses</span>**
- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Process trillions of voxels </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">efficiently</span>
- **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Create custom workflows </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">tailored to your specific needs</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';"> </span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">The power of spatial lambdas lies in their ability to execute near your data, eliminating the need to transfermassive datasets and enabling real-time analysis at unprecedented scales.</span>

**<span style="font-size: 11.5pt; mso-fareast-font-family: 'Liberation Sans';">Next Steps</span>**

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">To advance your spatial lambda expertise</span><span style="font-size: 9.0pt; mso-fareast-font-family: 'Liberation Sans';">:</span>

1. **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Explore built-in templates </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">available in the VoxelSpace platform</span>
2. **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Experiment with different processing techniques </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">and algorithms</span>
3. **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Study advanced examples </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">in the developer documentation</span>
4. **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Consider upgrading your plan </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">for increased compute resources and concurrent processing</span>
5. **<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">Join the VoxelSpace community </span>**<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">to share techniques and learn from other users</span>

<span style="font-size: 10.5pt; mso-fareast-font-family: 'Liberation Sans';">For comprehensive developer documentation and advanced tutorials, consult the full manuals within VoxelSpace once you have platform access.</span>