From ff2d8f661dbef0c24cbea9f05363df1dd3986323 Mon Sep 17 00:00:00 2001 From: abhishek-0802 <32932358+abhishek-0802@users.noreply.github.com> Date: Thu, 25 Apr 2019 16:21:10 +0200 Subject: [PATCH] maths and processing files --- .coverage | Bin 139264 -> 14208 bytes .idea/workspace.xml | 303 ++++++++++++++++------------ navipy/comparing/test.py | 5 + navipy/database/test.py | 37 +++- navipy/errorprop/test.py | 13 +- navipy/maths/test_coordinates.py | 14 +- navipy/processing/test_mcode.py | 15 ++ navipy/processing/test_opticflow.py | 15 ++ 8 files changed, 261 insertions(+), 141 deletions(-) diff --git a/.coverage b/.coverage index 16dd820174b832da58b7fb91761d86381b6321b0..d9c83edf97dda8c5368173435ccf70ac71180371 100644 GIT binary patch literal 14208 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 literal 139264 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 Ij&nXg0eS#64FCWD diff --git a/.idea/workspace.xml b/.idea/workspace.xml index bb27e39..4bcd1a7 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,56 +4,12 @@ <list default="true" id="ce009ef4-7b11-4f12-b786-bce3842c65e3" name="Default Changelist" comment=""> <change beforePath="$PROJECT_DIR$/.coverage" beforeDir="false" afterPath="$PROJECT_DIR$/.coverage" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/index.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_arenatools___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_arenatools___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_arenatools_cam_calib_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_arenatools_cam_calib_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_arenatools_cam_dlt_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_arenatools_cam_dlt_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_arenatools_patterns_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_arenatools_patterns_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_arenatools_triangulate_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_arenatools_triangulate_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_comparing___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_comparing___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_comparing_test_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_comparing_test_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_database___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_database___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_database_test_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_database_test_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_database_tools_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_database_tools_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_errorprop___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_errorprop___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_errorprop_test_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_errorprop_test_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_io___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_io___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_io_ivfile_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_io_ivfile_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_io_opencv_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_io_opencv_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_maths___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_maths___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_maths_constants_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_maths_constants_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_maths_coordinates_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_maths_coordinates_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_maths_euler_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_maths_euler_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_maths_homogeneous_transformations_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_maths_homogeneous_transformations_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_maths_quaternion_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_maths_quaternion_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_maths_random_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_maths_random_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_maths_tools_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_maths_tools_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_models___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_models___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_models_dewar_2014_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_models_dewar_2014_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_models_hafner_2000_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_models_hafner_2000_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_models_irdf_2003_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_models_irdf_2003_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_processing___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_processing___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_processing_mcode_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_processing_mcode_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_processing_pcode_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_processing_pcode_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_processing_test_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_processing_test_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_scene_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_scene_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_scripts___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_scripts___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_scripts_check_blender_versions_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_scripts_check_blender_versions_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_scripts_config_matplotlib_server_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_scripts_config_matplotlib_server_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_scripts_dlt_calibrator_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_scripts_dlt_calibrator_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_sensors___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_sensors___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_sensors_renderer_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_sensors_renderer_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_tools___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_tools___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_tools_plots_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_tools_plots_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_trajectories___init___py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_trajectories___init___py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_trajectories_random_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_trajectories_random_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_trajectories_tools_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_trajectories_tools_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_trajectories_transformations_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_trajectories_transformations_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/navipy_trajectories_triangle_py.html" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/navipy_trajectories_triangle_py.html" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/coverage_html_report/status.json" beforeDir="false" afterPath="$PROJECT_DIR$/coverage_html_report/status.json" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/navipy/comparing/test.py" beforeDir="false" afterPath="$PROJECT_DIR$/navipy/comparing/test.py" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/navipy/database/test.py" beforeDir="false" afterPath="$PROJECT_DIR$/navipy/database/test.py" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/navipy/errorprop/test.py" beforeDir="false" afterPath="$PROJECT_DIR$/navipy/errorprop/test.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/navipy/maths/test_coordinates.py" beforeDir="false" afterPath="$PROJECT_DIR$/navipy/maths/test_coordinates.py" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/navipy/processing/test.py" beforeDir="false" afterPath="$PROJECT_DIR$/navipy/processing/test.py" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/navipy/processing/test_mcode.py" beforeDir="false" afterPath="$PROJECT_DIR$/navipy/processing/test_mcode.py" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/navipy/processing/test_opticflow.py" beforeDir="false" afterPath="$PROJECT_DIR$/navipy/processing/test_opticflow.py" afterDir="false" /> </list> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="SHOW_DIALOG" value="false" /> @@ -68,19 +24,34 @@ <component name="FileEditorManager"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/navipy/maths/tools.py"> + <entry file="file://$PROJECT_DIR$/navipy/maths/test_euler.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="285"> - <caret line="19" column="29" selection-start-line="19" selection-start-column="28" selection-end-line="19" selection-end-column="29" /> + <state relative-caret-position="1380"> + <caret line="98" column="44" selection-start-line="98" selection-start-column="44" selection-end-line="98" selection-end-column="44" /> + <folding> + <element signature="e#0#18#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + </file> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/navipy/maths/test_coordinates.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="375"> + <caret line="29" column="14" selection-start-line="29" selection-start-column="14" selection-end-line="29" selection-end-column="14" /> + <folding> + <element signature="e#0#18#0" expanded="true" /> + </folding> </state> </provider> </entry> </file> <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/navipy/comparing/test.py"> + <entry file="file://$PROJECT_DIR$/navipy/processing/test.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-116"> - <caret line="164" column="16" selection-start-line="164" selection-start-column="13" selection-end-line="164" selection-end-column="16" /> + <state relative-caret-position="5715"> + <caret line="387" column="42" selection-start-line="387" selection-start-column="42" selection-end-line="387" selection-end-column="42" /> <folding> <element signature="e#0#15#0" expanded="true" /> </folding> @@ -88,11 +59,28 @@ </provider> </entry> </file> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/navipy/processing/mcode.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="2955"> + <caret line="206" column="33" selection-start-line="206" selection-start-column="23" selection-end-line="206" selection-end-column="33" /> + <folding> + <element signature="e#20#66#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + </file> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/navipy/processing/__init__.py"> + <provider selected="true" editor-type-id="text-editor" /> + </entry> + </file> <file pinned="false" current-in-tab="true"> - <entry file="file://$PROJECT_DIR$/navipy/processing/test.py"> + <entry file="file://$PROJECT_DIR$/navipy/processing/test_mcode.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="279"> - <caret line="431" column="8" lean-forward="true" selection-start-line="431" selection-start-column="8" selection-end-line="431" selection-end-column="8" /> + <state relative-caret-position="558"> + <caret line="546" lean-forward="true" selection-start-line="546" selection-end-line="546" /> <folding> <element signature="e#0#15#0" expanded="true" /> </folding> @@ -115,7 +103,6 @@ <find>velo</find> <find>veloc</find> <find>angle_ra</find> - <find>optic</find> <find>optic_</find> <find>multip</find> <find>eular.mat</find> @@ -125,6 +112,17 @@ <find>from_matr</find> <find>sim</find> <find>skyline</find> + <find>angle</find> + <find>angle_rate_matrix</find> + <find>assert</find> + <find>from_quaternion</find> + <find>viewing</find> + <find>angular</find> + <find>__viewing</find> + <find>posid</find> + <find>optic</find> + <find>pcode</find> + <find>optic_flow</find> </findStrings> </component> <component name="Git.Settings"> @@ -137,26 +135,29 @@ <option value="$PROJECT_DIR$/navipy/maths/tools.py" /> <option value="$PROJECT_DIR$/navipy/maths/test_tools.py" /> <option value="$PROJECT_DIR$/navipy/maths/test_homogeneous_transformations.py" /> - <option value="$PROJECT_DIR$/navipy/maths/test_euler.py" /> <option value="$PROJECT_DIR$/navipy/maths/test_random.py" /> - <option value="$PROJECT_DIR$/navipy/maths/test_coordinates.py" /> <option value="$PROJECT_DIR$/navipy/maths/test_quaternion.py" /> - <option value="$PROJECT_DIR$/navipy/comparing/test.py" /> <option value="$PROJECT_DIR$/navipy/processing/test.py" /> + <option value="$PROJECT_DIR$/navipy/processing/test_opticflow.py" /> + <option value="$PROJECT_DIR$/navipy/database/test.py" /> + <option value="$PROJECT_DIR$/navipy/errorprop/test.py" /> + <option value="$PROJECT_DIR$/navipy/comparing/test.py" /> + <option value="$PROJECT_DIR$/navipy/maths/test_coordinates.py" /> + <option value="$PROJECT_DIR$/navipy/maths/test_euler.py" /> + <option value="$PROJECT_DIR$/navipy/processing/test_mcode.py" /> </list> </option> </component> - <component name="ProjectFrameBounds"> + <component name="ProjectFrameBounds" extendedState="6"> <option name="y" value="23" /> <option name="width" value="1440" /> - <option name="height" value="857" /> + <option name="height" value="877" /> </component> <component name="ProjectView"> <navigator proportions="" version="1"> <foldersAlwaysOnTop value="true" /> </navigator> <panes> - <pane id="Scope" /> <pane id="ProjectPane"> <subPane> <expand> @@ -175,23 +176,35 @@ <item name="navipy" type="462c0819:PsiDirectoryNode" /> <item name="comparing" type="462c0819:PsiDirectoryNode" /> </path> + <path> + <item name="navipy" type="b2602c69:ProjectViewProjectNode" /> + <item name="navipy" type="462c0819:PsiDirectoryNode" /> + <item name="navipy" type="462c0819:PsiDirectoryNode" /> + <item name="maths" type="462c0819:PsiDirectoryNode" /> + </path> <path> <item name="navipy" type="b2602c69:ProjectViewProjectNode" /> <item name="navipy" type="462c0819:PsiDirectoryNode" /> <item name="navipy" type="462c0819:PsiDirectoryNode" /> <item name="processing" type="462c0819:PsiDirectoryNode" /> </path> + <path> + <item name="navipy" type="b2602c69:ProjectViewProjectNode" /> + <item name="navipy" type="462c0819:PsiDirectoryNode" /> + <item name="orientation" type="462c0819:PsiDirectoryNode" /> + </path> </expand> <select /> </subPane> </pane> <pane id="PackagesPane" /> + <pane id="Scope" /> </panes> </component> <component name="PropertiesComponent"> <property name="WebServerToolWindowFactoryState" value="false" /> <property name="aspect.path.notification.shown" value="true" /> - <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1550728065505" /> + <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1556041758388" /> <property name="last_opened_file_path" value="$PROJECT_DIR$" /> <property name="project.structure.last.edited" value="Project" /> <property name="project.structure.proportion" value="0.0" /> @@ -313,6 +326,8 @@ <workItem from="1548409948254" duration="34068000" /> <workItem from="1549035108413" duration="3076000" /> <workItem from="1549955192949" duration="12109000" /> + <workItem from="1555782958578" duration="23286000" /> + <workItem from="1556200784972" duration="562000" /> </task> <servers /> </component> @@ -349,13 +364,13 @@ </history-entry> </component> <component name="TimeTrackingManager"> - <option name="totallyTimeSpent" value="69220000" /> + <option name="totallyTimeSpent" value="128244000" /> </component> <component name="ToolWindowManager"> - <frame x="0" y="23" width="1440" height="857" extended-state="0" /> + <frame x="0" y="23" width="1440" height="877" extended-state="6" /> <editor active="true" /> <layout> - <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.25679544" /> + <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.26466382" /> <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> <window_info id="Image Layers" order="2" /> <window_info id="Designer" order="3" /> @@ -364,7 +379,7 @@ <window_info id="Favorites" order="6" side_tool="true" /> <window_info anchor="bottom" id="Message" order="0" /> <window_info anchor="bottom" id="Find" order="1" /> - <window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.32941177" /> + <window_info anchor="bottom" id="Run" order="2" weight="0.32941177" /> <window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> @@ -397,9 +412,6 @@ <entry file="file://$PROJECT_DIR$/navipy/trajectories/__init__.py"> <provider selected="true" editor-type-id="text-editor" /> </entry> - <entry file="file://$PROJECT_DIR$/navipy/processing/mcode.py"> - <provider selected="true" editor-type-id="text-editor" /> - </entry> <entry file="file://$PROJECT_DIR$/navipy/trajectories/test_markers.py"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="75"> @@ -417,156 +429,183 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/processing/pcode.py"> - <provider selected="true" editor-type-id="text-editor" /> - </entry> - <entry file="file://$PROJECT_DIR$/navipy/processing/__init__.py"> - <provider selected="true" editor-type-id="text-editor" /> - </entry> <entry file="file://$PROJECT_DIR$/navipy/maths/constants.py"> <provider selected="true" editor-type-id="text-editor" /> </entry> - <entry file="file://$PROJECT_DIR$/navipy/errorprop/test.py"> + <entry file="file://$PROJECT_DIR$/navipy/trajectories/triangle.py"> <provider selected="true" editor-type-id="text-editor"> - <state> + <state relative-caret-position="75"> + <caret line="8" column="6" selection-start-line="8" selection-start-column="6" selection-end-line="8" selection-end-column="6" /> <folding> - <element signature="e#0#15#0" expanded="true" /> + <element signature="e#8#26#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/maths/euler.py"> + <entry file="file://$PROJECT_DIR$/navipy/maths/coordinates.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="3360"> - <caret line="228" column="20" selection-start-line="228" selection-start-column="20" selection-end-line="228" selection-end-column="20" /> + <state relative-caret-position="-104"> + <caret line="46" selection-start-line="46" selection-end-line="46" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/navipy/maths/quaternion.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="272"> + <caret line="163" selection-start-line="163" selection-end-line="168" selection-end-column="12" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/navipy/maths/test_homogeneous_transformations.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="1302"> + <caret line="139" column="18" selection-start-line="139" selection-start-column="13" selection-end-line="139" selection-end-column="18" /> <folding> - <element signature="e#0#18#0" expanded="true" /> + <element signature="e#0#15#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/trajectories/triangle.py"> + <entry file="file://$PROJECT_DIR$/navipy/maths/test_quaternion.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="75"> - <caret line="8" column="6" selection-start-line="8" selection-start-column="6" selection-end-line="8" selection-end-column="6" /> + <state relative-caret-position="294"> + <caret line="31" column="42" lean-forward="true" selection-start-line="31" selection-start-column="42" selection-end-line="31" selection-end-column="42" /> <folding> - <element signature="e#8#26#0" expanded="true" /> + <element signature="e#0#15#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/maths/coordinates.py"> + <entry file="file://$PROJECT_DIR$/navipy/maths/test_tools.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-104"> - <caret line="46" selection-start-line="46" selection-end-line="46" /> + <state relative-caret-position="285"> + <caret line="19" column="57" selection-start-line="19" selection-start-column="57" selection-end-line="19" selection-end-column="57" /> + <folding> + <element signature="e#0#18#0" expanded="true" /> + </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/processing/test_mcode.py"> + <entry file="file://$PROJECT_DIR$/navipy/maths/tools.py"> <provider selected="true" editor-type-id="text-editor"> - <state> - <caret column="4" selection-start-column="4" selection-end-column="4" /> + <state relative-caret-position="285"> + <caret line="19" column="29" selection-start-line="19" selection-start-column="28" selection-end-line="19" selection-end-column="29" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/processing/test_opticflow.py"> + <entry file="file://$PROJECT_DIR$/navipy/database/__init__.py"> + <provider selected="true" editor-type-id="text-editor" /> + </entry> + <entry file="file://$PROJECT_DIR$/navipy/processing/pcode.py"> + <provider selected="true" editor-type-id="text-editor" /> + </entry> + <entry file="file://$PROJECT_DIR$/navipy/maths/euler.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-314"> - <caret line="67" column="24" selection-start-line="67" selection-start-column="18" selection-end-line="67" selection-end-column="24" /> + <state relative-caret-position="3360"> + <caret line="228" column="20" selection-start-line="228" selection-start-column="20" selection-end-line="228" selection-end-column="20" /> <folding> - <element signature="e#0#15#0" expanded="true" /> + <element signature="e#0#18#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/maths/quaternion.py"> + <entry file="file://$PROJECT_DIR$/navipy/maths/test_random.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="272"> - <caret line="163" selection-start-line="163" selection-end-line="168" selection-end-column="12" /> + <state relative-caret-position="285"> + <caret line="19" selection-start-line="19" selection-end-line="19" /> + <folding> + <element signature="e#0#15#0" expanded="true" /> + </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/maths/test_random.py"> + <entry file="file://$PROJECT_DIR$/navipy/database/test.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="285"> - <caret line="19" lean-forward="true" selection-start-line="19" selection-end-line="19" /> + <state relative-caret-position="-2985"> + <caret line="211" column="35" selection-start-line="211" selection-start-column="35" selection-end-line="211" selection-end-column="35" /> <folding> <element signature="e#0#15#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/maths/test_homogeneous_transformations.py"> + <entry file="file://$PROJECT_DIR$/navipy/errorprop/test.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="1302"> - <caret line="139" column="18" selection-start-line="139" selection-start-column="13" selection-end-line="139" selection-end-column="18" /> + <state relative-caret-position="598"> + <caret line="54" selection-start-line="54" selection-end-line="54" /> <folding> <element signature="e#0#15#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/maths/test_quaternion.py"> + <entry file="file://$PROJECT_DIR$/navipy/processing/test_opticflow.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="294"> - <caret line="31" column="42" lean-forward="true" selection-start-line="31" selection-start-column="42" selection-end-line="31" selection-end-column="42" /> + <state relative-caret-position="645"> + <caret line="143" selection-start-line="143" selection-end-line="143" /> <folding> <element signature="e#0#15#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/maths/test_coordinates.py"> + <entry file="file://$PROJECT_DIR$/navipy/comparing/test.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="331"> - <caret line="33" selection-start-line="33" selection-end-line="33" /> + <state relative-caret-position="598"> + <caret line="315" column="105" selection-start-line="315" selection-start-column="105" selection-end-line="315" selection-end-column="105" /> <folding> - <element signature="e#0#18#0" expanded="true" /> + <element signature="e#0#15#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/maths/test_tools.py"> + <entry file="file://$PROJECT_DIR$/navipy/maths/test_euler.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="285"> - <caret line="19" column="57" selection-start-line="19" selection-start-column="57" selection-end-line="19" selection-end-column="57" /> + <state relative-caret-position="1380"> + <caret line="98" column="44" selection-start-line="98" selection-start-column="44" selection-end-line="98" selection-end-column="44" /> <folding> <element signature="e#0#18#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/maths/test_euler.py"> + <entry file="file://$PROJECT_DIR$/navipy/maths/test_coordinates.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="436"> - <caret line="133" column="43" selection-start-line="133" selection-start-column="43" selection-end-line="133" selection-end-column="43" /> + <state relative-caret-position="375"> + <caret line="29" column="14" selection-start-line="29" selection-start-column="14" selection-end-line="29" selection-end-column="14" /> <folding> <element signature="e#0#18#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/maths/tools.py"> + <entry file="file://$PROJECT_DIR$/navipy/processing/test.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="285"> - <caret line="19" column="29" selection-start-line="19" selection-start-column="28" selection-end-line="19" selection-end-column="29" /> + <state relative-caret-position="5715"> + <caret line="387" column="42" selection-start-line="387" selection-start-column="42" selection-end-line="387" selection-end-column="42" /> + <folding> + <element signature="e#0#15#0" expanded="true" /> + </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/comparing/test.py"> + <entry file="file://$PROJECT_DIR$/navipy/processing/mcode.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-116"> - <caret line="164" column="16" selection-start-line="164" selection-start-column="13" selection-end-line="164" selection-end-column="16" /> + <state relative-caret-position="2955"> + <caret line="206" column="33" selection-start-line="206" selection-start-column="23" selection-end-line="206" selection-end-column="33" /> <folding> - <element signature="e#0#15#0" expanded="true" /> + <element signature="e#20#66#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/navipy/processing/test.py"> + <entry file="file://$PROJECT_DIR$/navipy/processing/__init__.py"> + <provider selected="true" editor-type-id="text-editor" /> + </entry> + <entry file="file://$PROJECT_DIR$/navipy/processing/test_mcode.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="279"> - <caret line="431" column="8" lean-forward="true" selection-start-line="431" selection-start-column="8" selection-end-line="431" selection-end-column="8" /> + <state relative-caret-position="558"> + <caret line="546" lean-forward="true" selection-start-line="546" selection-end-line="546" /> <folding> <element signature="e#0#15#0" expanded="true" /> </folding> diff --git a/navipy/comparing/test.py b/navipy/comparing/test.py index b7e2835..a27b9c9 100644 --- a/navipy/comparing/test.py +++ b/navipy/comparing/test.py @@ -312,6 +312,11 @@ class TestCase(unittest.TestCase): self.assertFalse(np.any(np.isnan(vec))) self.assertTrue(is_numeric_array(vec)) + def test_weighted_irdf(self): + for i, j, k in [([1,2,3],7, [4.0,3, 2.0]), ([3.0,'w',4],'w', ['w', 7.0, 4]), (3, [3.0, 2, 8.0], 7)]: + with self.assertRaises(TypeError): + comparing.weighted_irdf(i,j,k) + if __name__ == '__main__': unittest.main() diff --git a/navipy/database/test.py b/navipy/database/test.py index 416765f..1a5e0e0 100644 --- a/navipy/database/test.py +++ b/navipy/database/test.py @@ -47,11 +47,23 @@ class TestCase(unittest.TestCase): - channel name is None value or nan """ # channels must be strings or char - for n in [3, 8.7, None, np.nan]: + for n in [(3, 8.7, None, np.nan)]: with self.assertRaises(TypeError): DataBase(self.mydb_filename, channels=n) + + + for l in [None, np.nan, 'Wr',[2, 3.0]]: + with self.assertRaises(ValueError): + DataBase(self.mydb_filename, channels= [l]) + + def test_adapt_arr(self): with self.assertRaises(ValueError): - DataBase(self.mydb_filename, channels=[None, 2]) + database.adapt_array(None) + + def test_convert_arr(self): + with self.assertRaises(ValueError): + database.convert_array(None) + def test_table_exist(self): """ @@ -79,14 +91,21 @@ class TestCase(unittest.TestCase): - row is out of range; smaller or equal to 0 - checks if true is returned for an exiting entry (row=1) """ + for n in [7.0, None, np.nan]: with self.assertRaises(TypeError): self.mydb.check_data_validity(n) - for n in [-1, 0]: + + for n in [ -1, 0]: with self.assertRaises(ValueError): self.mydb.check_data_validity(n) + + + assert self.mydb.check_data_validity(1) + + def test_read_posorient(self): """ this test checks the function read_posorient works @@ -150,6 +169,8 @@ class TestCase(unittest.TestCase): for rowid in [0, -2]: with self.assertRaises(ValueError): self.mydb.read_posorient(rowid=rowid) + + with self.assertRaises(TypeError): self.mydb.read_posorient(rowid='T') with self.assertRaises(Exception): @@ -159,6 +180,9 @@ class TestCase(unittest.TestCase): with self.assertRaises(TypeError): self.mydb.read_posorient(rowid=4.5) + + + for rowid in [1]: posoriend2 = self.mydb.read_posorient(rowid=rowid) pd.testing.assert_series_equal(posoriend2, posorient) @@ -180,10 +204,13 @@ class TestCase(unittest.TestCase): with self.assertRaises(ValueError): # print("rowid",rowid) self.mydb.scene(rowid=rowid) + + + with self.assertRaises(Exception): + self.mydb.scene(posorient = None, rowid=None) with self.assertRaises(TypeError): self.mydb.scene(rowid='T') - with self.assertRaises(Exception): - self.mydb.scene(rowid=None) + with self.assertRaises(TypeError): self.mydb.scene(rowid=np.nan) with self.assertRaises(TypeError): diff --git a/navipy/errorprop/test.py b/navipy/errorprop/test.py index caa509d..42dccac 100644 --- a/navipy/errorprop/test.py +++ b/navipy/errorprop/test.py @@ -1,6 +1,6 @@ import unittest import numpy as np -from navipy.errorprop import propagate_error, estimate_jacobian +from navipy.errorprop import propagate_error, estimate_jacobian, estimate_error def sincosine(x): @@ -44,6 +44,17 @@ class TestErrorProp(unittest.TestCase): err_theo[1, 1] = c*(c*d - c*f) - c*(c*e - c*g) np.testing.assert_array_almost_equal(err, err_theo) + def test_estimate_error(self): + for i, j in [(2, 3.0), (3.0, 2), ('w', 'w')]: + with self.assertRaises(TypeError): + estimate_error(i, j) + + for i, j in [(2, [2, 3.0, 4])]: + with self.assertRaises(ValueError): + estimate_error(i, j) + + + if __name__ == '__main__': unittest.main() diff --git a/navipy/maths/test_coordinates.py b/navipy/maths/test_coordinates.py index 3aea4e9..712ebbb 100644 --- a/navipy/maths/test_coordinates.py +++ b/navipy/maths/test_coordinates.py @@ -18,7 +18,6 @@ class TestCoordinates(unittest.TestCase): with self.assertRaises(ValueError): coordinates.cartesian_to_spherical_vectors(a,b) - for c,d in [((3.0,2),([5, 6.0])),(([4.0, 2]),(4, 3))]: with self.assertRaises(TypeError): coordinates.cartesian_to_spherical_vectors(c, d) @@ -27,11 +26,20 @@ class TestCoordinates(unittest.TestCase): with self.assertRaises(TypeError): coordinates.cartesian_to_spherical_vectors(g,h) - with self.assertRaises(Exception): - coordinates.cartesian_to_spherical_vectors(g, h) + i = np.array([[1,2,3,4],[5,6,7,8], [9,10,11,12]]) + k = np.array([['w', 1.0, 2],[3,'w', 2.0], ['w', 4.0, 6]]) + + for i, j in [(i, 2.0), (i, k)]: + with self.assertRaises(TypeError): + coordinates.cartesian_to_spherical_vectors(i, j) + with self.assertRaises(Exception): + i = np.array([[1,2,3,4],[5,6,7,8], [9,10,11,12]]) + j = np.array([[3, 1, 2],[3,4, 6], [1, 4, 6]]) + coordinates.cartesian_to_spherical_vectors(i, j) + with self.assertRaises(Exception): e = np.array([2, 4, 6, 8]) f = np.array([2, 4, 6, 8, 3.0]) diff --git a/navipy/processing/test_mcode.py b/navipy/processing/test_mcode.py index c8afd05..23767a8 100644 --- a/navipy/processing/test_mcode.py +++ b/navipy/processing/test_mcode.py @@ -1,5 +1,6 @@ import unittest import numpy as np +import pandas as pd from navipy.processing import mcode # import matplotlib.pyplot as plt @@ -532,6 +533,20 @@ class TestCase(unittest.TestCase): assert np.all(np.isclose(achigh, res_high)) assert np.all(np.isclose(achigh2, res_high2)) + def test_opticflow(self): + series = pd.Series(np.array([1,2,3,4,5])) + + with self.assertRaises(TypeError): + mcode._check_optic_flow_param([2, 3.0, 4], 5) + + with self.assertRaises(Exception): + mcode._check_optic_flow_param([2, 3.0, 5], series) + + + + + + if __name__ == '__main__': unittest.main() diff --git a/navipy/processing/test_opticflow.py b/navipy/processing/test_opticflow.py index 989253d..f10693b 100644 --- a/navipy/processing/test_opticflow.py +++ b/navipy/processing/test_opticflow.py @@ -1,5 +1,6 @@ import unittest from navipy.processing import mcode +from navipy.processing.mcode import Module import pandas as pd import numpy as np from navipy.trajectories import posorient_columns @@ -126,3 +127,17 @@ yaw-pitch-roll (zyx) convention has vertical gOF equal to zero # Add abs tol because we compare to zero np.testing.assert_allclose(rof, np.zeros_like(rof), atol=1e-7) np.testing.assert_allclose(vof, np.zeros_like(vof), atol=1e-7) + + # def test__check_optic_flow(self): +# + # for c,d in [(4, None), ([3, 7.0], None)]: + + +# with self.assertRaises(ValueError): + # mcode._check_optic_flow_param(c,d) + +# with self.assertRaises(TypeError): + # mcode._check_optic_flow_param(c, d) + + + -- GitLab