Files
Kristian Bendiksen 160cb71168 Python: Update well log import API to accept measured depth and multiple channels
- Updated Python API to accept measured_depth list and channel_data dictionary
- Modified C++ GRPC implementation to handle CSV-formatted channel mappings
- Replaced single values parameter with dictionary of channels
- Added comprehensive validation for all input parameters
- Updated parameter name from channel_keys_json to channel_keys_csv
- Enhanced tests to cover 16 different scenarios including edge cases
- Updated example to demonstrate new dictionary-based API functionality
2025-09-04 09:04:56 +02:00

74 lines
2.0 KiB
Python

import pytest
import tempfile
import os
@pytest.fixture
def project(rips_instance):
"""Create a test project with a well path"""
# Create well path from coordinates
coordinates = [
[1000, 2000, 0],
[1000, 2000, 1000],
[1100, 2100, 2000],
[1200, 2200, 3000],
]
well_path = (
rips_instance.project.well_path_collection().import_well_path_from_points(
name="TestWell", coordinates=coordinates
)
)
return rips_instance.project, well_path
def test_well_log_project_file_persistence(project):
"""Test that well log data is persisted in project files"""
proj, well_path = project
# Test data with TVD values
name = "PersistenceTestLog"
measured_depth = [1000, 1500, 2000, 2500, 3000]
channel_data = {
"porosity": [0.10, 0.15, 0.20, 0.18, 0.12],
"permeability": [10.5, 25.3, 45.8, 35.2, 18.7],
}
tvd_msl = [980, 1480, 1980, 2480, 2980]
tvd_rkb = [1020, 1520, 2020, 2520, 3020]
# Import well log
well_log = well_path.add_well_log(
name=name,
measured_depth=measured_depth,
channel_data=channel_data,
tvd_msl=tvd_msl,
tvd_rkb=tvd_rkb,
)
# Verify well log was created
assert well_log is not None
assert well_log.name == name
# Save project to temporary file
with tempfile.NamedTemporaryFile(suffix=".rsp", delete=False) as temp_file:
temp_path = temp_file.name
try:
# Save the project
proj.save(temp_path)
# The project should save without errors, indicating PDM persistence is working
# This test primarily verifies that the PDM objects can be serialized
assert os.path.exists(temp_path)
assert os.path.getsize(temp_path) > 0
print(
f"Project saved successfully to {temp_path} ({os.path.getsize(temp_path)} bytes)"
)
finally:
# Clean up temp file
if os.path.exists(temp_path):
os.remove(temp_path)