Skip to content

Commit c611283

Browse files
authored
PY: Fix GIL crashes, unit test false positive results, misc other test issues. (BlueQuartzSoftware#831)
- Switched to PYTHON_EXECUTABLE from Python3_EXECUTABLE in script - Pybind11 uses PYTHON_EXECUTABLE so it should be defined - Fixed test bat script to exit when python isn't found on windows - Changed SIMPLNX_BUILD_PYTHON_TESTS to default to ON - Fixed GIL state error in preflight/execute - Changed simplnx_test_dirs functions to return Path - Fixed directory used in basic_ebsd_ipf.py to use get_data_directory to give the appropriate path when using multiconfiguration generators Signed-off-by: Jared Duffey <[email protected]>
1 parent 6406635 commit c611283

File tree

62 files changed

+206
-210
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+206
-210
lines changed

cmake/Utility.cmake

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -476,27 +476,21 @@ function(AddPythonTest)
476476
# message(STATUS "ARGS_FILE:${ARGS_FILE}")
477477
if(SIMPLNX_BUILD_PYTHON)
478478
if(WIN32)
479-
add_test(NAME ${ARGS_NAME}
480-
COMMAND ${simplnx_SOURCE_DIR}/wrapping/python/testing/anaconda_test.bat
481-
)
482-
483-
set_property(TEST ${ARGS_NAME}
484-
PROPERTY
485-
ENVIRONMENT
486-
"PYTHON_TEST_FILE=${ARGS_FILE}"
487-
"Python3_EXECUTABLE=${Python3_EXECUTABLE}"
488-
)
479+
set(test_driver_file ${simplnx_SOURCE_DIR}/wrapping/python/testing/anaconda_test.bat)
489480
else()
490-
add_test(NAME ${ARGS_NAME}
491-
COMMAND ${simplnx_SOURCE_DIR}/wrapping/python/testing/anaconda_test.sh
492-
)
493-
set_property(TEST ${ARGS_NAME}
494-
PROPERTY
495-
ENVIRONMENT
496-
"PYTHON_TEST_FILE=${ARGS_FILE}"
497-
"Python3_EXECUTABLE=${Python3_EXECUTABLE}"
498-
)
481+
set(test_driver_file ${simplnx_SOURCE_DIR}/wrapping/python/testing/anaconda_test.sh)
499482
endif()
483+
484+
add_test(NAME ${ARGS_NAME}
485+
COMMAND ${test_driver_file}
486+
)
487+
488+
set_property(TEST ${ARGS_NAME}
489+
PROPERTY
490+
ENVIRONMENT
491+
"PYTHON_TEST_FILE=${ARGS_FILE}"
492+
"PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
493+
)
500494
else()
501495
add_test(NAME ${ARGS_NAME}
502496
COMMAND ${Python3_EXECUTABLE} ${ARGS_FILE}

src/Plugins/SimplnxCore/wrapping/python/simplnxpy.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,13 +1110,15 @@ PYBIND11_MODULE(simplnx, mod)
11101110
filter.def("human_name", &IFilter::humanName);
11111111
filter.def("preflight2", [internals](const IFilter& self, DataStructure& dataStructure, const py::kwargs& kwargs) {
11121112
Arguments convertedArgs = ConvertDictToArgs(*internals, self.parameters(), kwargs);
1113+
py::gil_scoped_release releaseGIL{};
11131114
IFilter::PreflightResult result = self.preflight(dataStructure, convertedArgs, CreatePyMessageHandler());
11141115
return result;
11151116
});
11161117
filter.def(
11171118
"execute2",
11181119
[internals](const IFilter& self, DataStructure& dataStructure, const py::kwargs& kwargs) {
11191120
Arguments convertedArgs = ConvertDictToArgs(*internals, self.parameters(), kwargs);
1121+
py::gil_scoped_release releaseGIL{};
11201122
IFilter::ExecuteResult result = self.execute(dataStructure, convertedArgs, nullptr, CreatePyMessageHandler());
11211123
return result;
11221124
},

wrapping/python/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,8 @@ endif()
282282
#------------------------------------------------------------------------------
283283
# Create the Python Unit tests
284284
#------------------------------------------------------------------------------
285-
option(SIMPLNX_BUILD_PYTHON_TESTS "Enables python based unit tests" OFF)
285+
option(SIMPLNX_BUILD_PYTHON_TESTS "Enables python based unit tests" ON)
286286
if(SIMPLNX_BUILD_PYTHON_TESTS)
287-
288287
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
289288
if(is_multi_config)
290289
set(CX_CONFIG_DIR "$<CONFIG>")

wrapping/python/CxPybind/CxPybind/CxPybind.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ std::string MakePythonSignature(std::string_view funcName, const Internals& inte
375375

376376
inline void PyPrintMessage(const IFilter::Message& message)
377377
{
378+
py::gil_scoped_acquire acquireGIL{};
378379
py::print(fmt::format("{}", message.message));
379380
}
380381

@@ -426,6 +427,7 @@ auto BindFilter(py::handle scope, const Internals& internals)
426427
}
427428

428429
Arguments convertedArgs = ConvertDictToArgs(internals, filter.parameters(), kwargs);
430+
py::gil_scoped_release releaseGIL{};
429431
IFilter::ExecuteResult result = filter.execute(dataStructure, convertedArgs, nullptr, CreatePyMessageHandler());
430432
return result;
431433
},

wrapping/python/examples/pipelines/ITKImageProcessing/02_Image_Segmentation.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# Filter 1
1313

1414
generated_file_list_value = nx.GeneratedFileListParameter.ValueType()
15-
generated_file_list_value.input_path = nxtest.GetDataDirectory() + "/Porosity_Image/"
15+
generated_file_list_value.input_path = str(nxtest.get_data_directory() / "Porosity_Image/")
1616
generated_file_list_value.ordering = nx.GeneratedFileListParameter.Ordering.LowToHigh
1717

1818
generated_file_list_value.file_prefix = "slice_"
@@ -183,7 +183,7 @@
183183
# Instantiate Filter
184184
nx_filter = nx.WriteDREAM3DFilter()
185185
# Execute Filter with Parameters
186-
output_file_path = nxtest.GetDataDirectory() + "/Output/ImagesStack/Images.dream3d"
186+
output_file_path = nxtest.get_data_directory() / "Output/ImagesStack/Images.dream3d"
187187
result = nx_filter.execute(data_structure=data_structure,
188188
export_file_path=output_file_path,
189189
write_xdmf_file=True)

wrapping/python/examples/pipelines/ITKImageProcessing/03_Porosity_Mesh_Export.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
nx_filter = cxitk.ITKImportImageStack()
1515

1616
generated_file_list_value = nx.GeneratedFileListParameter.ValueType()
17-
generated_file_list_value.input_path = nxtest.GetDataDirectory() + "/Porosity_Image/"
17+
generated_file_list_value.input_path = str(nxtest.get_data_directory() / "Porosity_Image/")
1818
generated_file_list_value.ordering = nx.GeneratedFileListParameter.Ordering.LowToHigh
1919

2020
generated_file_list_value.file_prefix = "slice_"
@@ -243,7 +243,7 @@
243243
# Instantiate Filter
244244
nx_filter = nx.WriteDREAM3DFilter()
245245
# Execute Filter with Parameters
246-
output_file_path = nxtest.GetDataDirectory() + "/Output/Porosity_Analysis.dream3d"
246+
output_file_path = nxtest.get_data_directory() / "Output/Porosity_Analysis.dream3d"
247247
result = nx_filter.execute(
248248
data_structure=data_structure,
249249
export_file_path=output_file_path,

wrapping/python/examples/pipelines/Incomplete/ImportBrukerNanoEspritData.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
# Filter 2
2929
# Define output file path
30-
output_file_path = nxtest.GetDataDirectory() + "/Output/H5EspritData/H5EspritData.dream3d"
30+
output_file_path = nxtest.get_data_directory() / "Output/H5EspritData/H5EspritData.dream3d"
3131
# Instantiate Filter
3232
nx_filter = cx.WriteDREAM3DFilter()
3333
# Execute WriteDREAM3DFilter with Parameters

wrapping/python/examples/pipelines/Incomplete/ImportEdaxOIMData.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151

5252
# Filter 4
5353
# Define output file path
54-
output_file_path = nxtest.GetDataDirectory() + "/Output/EdaxOIMData/EdaxOIMData.dream3d"
54+
output_file_path = nxtest.get_data_directory() / "Output/EdaxOIMData/EdaxOIMData.dream3d"
5555
# Instantiate Filter
5656
nx_filter = cx.WriteDREAM3DFilter()
5757
# Execute WriteDREAM3DFilter with Parameters

wrapping/python/examples/pipelines/OrientationAnalysis/01_Small_IN100_Archive.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# Instantiate Filter
1414

1515
generated_file_list_value = nx.GeneratedFileListParameter.ValueType()
16-
generated_file_list_value.input_path = nxtest.GetDataDirectory() + "/Small_IN100"
16+
generated_file_list_value.input_path = str(nxtest.get_data_directory() / "Small_IN100")
1717
generated_file_list_value.ordering = nx.GeneratedFileListParameter.Ordering.HighToLow
1818

1919
generated_file_list_value.file_prefix = "Slice_"
@@ -29,7 +29,7 @@
2929
result = nx_filter.execute(
3030
data_structure=data_structure,
3131
input_file_list_info=generated_file_list_value,
32-
output_file_path=nxtest.GetDataDirectory() + "/Output/Reconstruction/Small_IN100.h5ebsd",
32+
output_file_path=nxtest.get_data_directory() / "Output/Reconstruction/Small_IN100.h5ebsd",
3333
reference_frame=0,
3434
stacking_order=1,
3535
z_spacing=0.25

wrapping/python/examples/pipelines/OrientationAnalysis/01_Small_IN100_Morphological_Statistics.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# Filter 1
1313
# Instantiate Import Data Parameter
1414
import_data = nx.Dream3dImportParameter.ImportData()
15-
import_data.file_path = nxtest.GetDataDirectory() + "/Output/Reconstruction/SmallIN100_Final.dream3d"
15+
import_data.file_path = str(nxtest.get_data_directory() / "Output/Reconstruction/SmallIN100_Final.dream3d")
1616
import_data.data_paths = None
1717

1818
# Instantiate Filter
@@ -165,7 +165,7 @@
165165

166166
# Filter 10
167167
# Set Output File Path
168-
output_file_path = nxtest.GetDataDirectory() + "/Output/Statistics/SmallIN100_Morph.dream3d"
168+
output_file_path = nxtest.get_data_directory() / "Output/Statistics/SmallIN100_Morph.dream3d"
169169
# Instantiate Filter
170170
nx_filter = nx.WriteDREAM3DFilter()
171171
# Execute Filter with Parameters

0 commit comments

Comments
 (0)