diff --git a/.idea/Multiview-Machine-Learning-OMIS.iml b/.idea/Multiview-Machine-Learning-OMIS.iml index 6711606311e2664bd835f92b5c114681d2e284f5..327f097a397cdcb86929a6e87e2f03c96edf3852 100644 --- a/.idea/Multiview-Machine-Learning-OMIS.iml +++ b/.idea/Multiview-Machine-Learning-OMIS.iml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <module type="PYTHON_MODULE" version="4"> - <component name="NewModuleRootManager"> + <component name="NewModuleRootManager" inherit-compiler-output="false"> <content url="file://$MODULE_DIR$" /> - <orderEntry type="inheritedJdk" /> + <orderEntry type="jdk" jdkName="Python 2.7.11 (~/anaconda2/bin/python)" jdkType="Python SDK" /> <orderEntry type="sourceFolder" forTests="false" /> </component> <component name="TestRunnerService"> diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000000000000000000000000000000000000..96cc43efa6a0885098044e976cd780bb42c68a70 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="CompilerConfiguration"> + <resourceExtensions /> + <wildcardResourcePatterns> + <entry name="!?*.java" /> + <entry name="!?*.form" /> + <entry name="!?*.class" /> + <entry name="!?*.groovy" /> + <entry name="!?*.scala" /> + <entry name="!?*.flex" /> + <entry name="!?*.kt" /> + <entry name="!?*.clj" /> + <entry name="!?*.aj" /> + </wildcardResourcePatterns> + <annotationProcessing> + <profile default="true" name="Default" enabled="false"> + <processorPath useClasspath="true" /> + </profile> + </annotationProcessing> + </component> +</project> \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e7bedf3377d40335424fd605124d4761390218bb --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ +<component name="CopyrightManager"> + <settings default="" /> +</component> \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000000000000000000000000000000000000..9a70f565dd4fc3b16ac2318de4fadecb4a87dd87 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0"> + <option name="myName" value="Project Default" /> + <inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true"> + <option name="ignoredIdentifiers"> + <list> + <option value="Code.MultiView.Mumbo.Mumbo.len" /> + <option value="Code.MultiView.Mumbo.Mumbo.range" /> + <option value="Code.MultiView.Mumbo.Mumbo.zip" /> + <option value="Code.MultiView.Mumbo.Mumbo.int" /> + <option value="Code.MultiView.Mumbo.Mumbo.attr" /> + <option value="Code.MultiView.Mumbo.Mumbo.getattr" /> + </list> + </option> + </inspection_tool> + </profile> +</component> \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3b312839bf2e939fea3ebdef15630a4b33e57caf --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ +<component name="InspectionProjectProfileManager"> + <settings> + <option name="PROJECT_PROFILE" value="Project Default" /> + <option name="USE_PROJECT_PROFILE" value="true" /> + <version value="1.0" /> + </settings> +</component> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 5f7ced0530cb25681f34d3f9d0808968d276fb72..31eea6ceaa9cd0369a7b9ba66caef8f489e3c061 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> - <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.4.3 (/usr/bin/python3.4)" project-jdk-type="Python SDK" /> + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_3" assert-keyword="false" jdk-15="false" project-jdk-name="Python 2.7.11 (~/anaconda2/bin/python)" project-jdk-type="Python SDK" /> </project> \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 4996be3b86c569a0dcd209f3c8ec4ecbc92cba85..075917529dc5b2827566cef4f81011c92ef3028c 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,13 +1,24 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> + <component name="AnalysisUIOptions"> + <option name="SCOPE_TYPE" value="3" /> + </component> <component name="ChangeListManager"> <list default="true" id="b2cddca2-4818-4b60-b3ce-fb207e328b36" name="Default" comment=""> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/DecisionTree.py" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/Code/MultiView/ExecMultiview.py" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/ModifiedMulticlass.py" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/__init__.py" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/Code/MultiView/Mumbo/__init__.py" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/Multiview-Machine-Learning-OMIS.iml" afterPath="$PROJECT_DIR$/.idea/Multiview-Machine-Learning-OMIS.iml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="$PROJECT_DIR$/.idea/misc.xml" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/Code/MultiView/GetMutliviewDb.py" afterPath="$PROJECT_DIR$/Code/MultiView/GetMutliviewDb.py" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/DecisionTree.py" afterPath="$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/DecisionTree.py" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/Code/MultiView/Mumbo/Mumbo.py" afterPath="$PROJECT_DIR$/Code/MultiView/Mumbo/Mumbo.py" /> </list> <ignored path="Multiview-Machine-Learning-OMIS.iws" /> <ignored path=".idea/workspace.xml" /> + <ignored path=".idea/dataSources.local.xml" /> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="TRACKING_ENABLED" value="true" /> <option name="SHOW_DIALOG" value="false" /> @@ -16,6 +27,9 @@ <option name="LAST_RESOLUTION" value="IGNORE" /> </component> <component name="ChangesViewManager" flattened_view="true" show_ignored="false" /> + <component name="CoverageDataManager"> + <SUITE FILE_PATH="coverage/multiview-machine-learning-omis$Mumbo.coverage" NAME="Mumbo Coverage Results" MODIFIED="1459845546865" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/Code/MultiView/Mumbo" /> + </component> <component name="CreatePatchCommitExecutor"> <option name="PATCH_PATH" value="" /> </component> @@ -25,11 +39,11 @@ </component> <component name="FileEditorManager"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> - <file leaf-file-name="Mumbo.py" pinned="false" current-in-tab="false"> + <file leaf-file-name="Mumbo.py" pinned="false" current-in-tab="true"> <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Mumbo.py"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.0"> - <caret line="117" column="10" selection-start-line="117" selection-start-column="10" selection-end-line="117" selection-end-column="10" /> + <state vertical-scroll-proportion="0.60912055"> + <caret line="272" column="0" selection-start-line="272" selection-start-column="0" selection-end-line="272" selection-end-column="0" /> <folding> <element signature="e#0#18#0" expanded="true" /> </folding> @@ -37,13 +51,96 @@ </provider> </entry> </file> - <file leaf-file-name="DecisionTree.py" pinned="false" current-in-tab="true"> + <file leaf-file-name="__init__.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/Code/MultiView/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="__init__.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="11" column="10" selection-start-line="11" selection-start-column="10" selection-end-line="11" selection-end-column="10" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="DBCrawl.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/Code/FeatExtraction/DBCrawl.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="24" column="49" selection-start-line="24" selection-start-column="8" selection-end-line="24" selection-end-column="49" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="GetMutliviewDb.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/Code/MultiView/GetMutliviewDb.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="29" column="58" selection-start-line="29" selection-start-column="58" selection-end-line="29" selection-end-column="58" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="ExecMultiview.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/Code/MultiView/ExecMultiview.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="15" column="0" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" /> + <folding> + <element signature="e#0#27#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="__init__.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="34" selection-start-line="0" selection-start-column="34" selection-end-line="0" selection-end-column="34" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="DecisionTree.py" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/DecisionTree.py"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.16488549"> - <caret line="6" column="47" selection-start-line="6" selection-start-column="47" selection-end-line="6" selection-end-column="47" /> + <state vertical-scroll-proportion="0.0"> + <caret line="2" column="0" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="ModifiedMulticlass.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/ModifiedMulticlass.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="70" column="0" selection-start-line="70" selection-start-column="0" selection-end-line="70" selection-end-column="0" /> <folding> - <element signature="e#0#24#0" expanded="true" /> + <element signature="e#1464#1476#0" expanded="true" /> + <element signature="e#2847#3198#0" expanded="false" /> + <element signature="e#3238#3543#0" expanded="false" /> + <element signature="e#3707#4412#0" expanded="false" /> + <element signature="e#4589#5739#0" expanded="false" /> + <element signature="e#5926#6407#0" expanded="false" /> + <element signature="e#6456#6923#0" expanded="false" /> + <element signature="e#7009#8968#1" expanded="false" /> + <element signature="e#9023#9078#0" expanded="false" /> + <element signature="e#16803#20674#0" expanded="false" /> + <element signature="e#20746#22439#0" expanded="false" /> + <element signature="e#22640#23628#0" expanded="false" /> </folding> </state> </provider> @@ -61,18 +158,70 @@ <component name="Git.Settings"> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> </component> + <component name="GradleLocalSettings"> + <option name="externalProjectsViewState"> + <projects_view /> + </option> + </component> <component name="IdeDocumentHistory"> <option name="CHANGED_PATHS"> <list> - <option value="$PROJECT_DIR$/Code/MultiView/Mumbo/Mumbo.py" /> + <option value="$PROJECT_DIR$/Code/MultiView/ExecMultiview" /> + <option value="$PROJECT_DIR$/Code/MultiView/Mumbo/__init__.py" /> + <option value="$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/__init__.py" /> + <option value="$PROJECT_DIR$/Code/MultiView/GetMutliviewDb.py" /> + <option value="$PROJECT_DIR$/Code/MultiView/ModifiedMulticlass.py" /> <option value="$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/DecisionTree.py" /> + <option value="$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/ModifiedMulticlass.py" /> + <option value="$PROJECT_DIR$/Code/MultiView/ExecMultiview.py" /> + <option value="$PROJECT_DIR$/Code/MultiView/Mumbo/Mumbo.py" /> </list> </option> </component> + <component name="JsBuildToolGruntFileManager" detection-done="true" /> + <component name="JsBuildToolPackageJson" detection-done="true" /> + <component name="JsGulpfileManager"> + <detection-done>true</detection-done> + </component> <component name="ProjectFrameBounds"> - <option name="y" value="25" /> - <option name="width" value="1280" /> - <option name="height" value="775" /> + <option name="x" value="1680" /> + <option name="y" value="24" /> + <option name="width" value="1920" /> + <option name="height" value="1056" /> + </component> + <component name="ProjectInspectionProfilesVisibleTreeState"> + <entry key="Project Default"> + <profile-state> + <expanded-state> + <State> + <id /> + </State> + <State> + <id>Android Lint</id> + </State> + <State> + <id>Java</id> + </State> + <State> + <id>Numeric issuesJava</id> + </State> + <State> + <id>Probable bugsJava</id> + </State> + <State> + <id>Python</id> + </State> + <State> + <id>WebSocket issues</id> + </State> + </expanded-state> + <selected-state> + <State> + <id>Android</id> + </State> + </selected-state> + </profile-state> + </entry> </component> <component name="ProjectLevelVcsManager" settingsEditedManually="false"> <OptionsSetting value="true" id="Add" /> @@ -99,33 +248,31 @@ <foldersAlwaysOnTop value="true" /> </navigator> <panes> - <pane id="Scope" /> - <pane id="Scratches" /> <pane id="ProjectPane"> <subPane> <PATH> <PATH_ELEMENT> - <option name="myItemId" value="Multiview-Machine-Learning-OMIS" /> + <option name="myItemId" value="multiview-machine-learning-omis" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> </PATH_ELEMENT> </PATH> <PATH> <PATH_ELEMENT> - <option name="myItemId" value="Multiview-Machine-Learning-OMIS" /> + <option name="myItemId" value="multiview-machine-learning-omis" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> </PATH_ELEMENT> <PATH_ELEMENT> - <option name="myItemId" value="Multiview-Machine-Learning-OMIS" /> + <option name="myItemId" value="multiview-machine-learning-omis" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> </PATH_ELEMENT> </PATH> <PATH> <PATH_ELEMENT> - <option name="myItemId" value="Multiview-Machine-Learning-OMIS" /> + <option name="myItemId" value="multiview-machine-learning-omis" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> </PATH_ELEMENT> <PATH_ELEMENT> - <option name="myItemId" value="Multiview-Machine-Learning-OMIS" /> + <option name="myItemId" value="multiview-machine-learning-omis" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> </PATH_ELEMENT> <PATH_ELEMENT> @@ -135,11 +282,11 @@ </PATH> <PATH> <PATH_ELEMENT> - <option name="myItemId" value="Multiview-Machine-Learning-OMIS" /> + <option name="myItemId" value="multiview-machine-learning-omis" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> </PATH_ELEMENT> <PATH_ELEMENT> - <option name="myItemId" value="Multiview-Machine-Learning-OMIS" /> + <option name="myItemId" value="multiview-machine-learning-omis" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> </PATH_ELEMENT> <PATH_ELEMENT> @@ -153,11 +300,11 @@ </PATH> <PATH> <PATH_ELEMENT> - <option name="myItemId" value="Multiview-Machine-Learning-OMIS" /> + <option name="myItemId" value="multiview-machine-learning-omis" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> </PATH_ELEMENT> <PATH_ELEMENT> - <option name="myItemId" value="Multiview-Machine-Learning-OMIS" /> + <option name="myItemId" value="multiview-machine-learning-omis" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> </PATH_ELEMENT> <PATH_ELEMENT> @@ -175,11 +322,11 @@ </PATH> <PATH> <PATH_ELEMENT> - <option name="myItemId" value="Multiview-Machine-Learning-OMIS" /> + <option name="myItemId" value="multiview-machine-learning-omis" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> </PATH_ELEMENT> <PATH_ELEMENT> - <option name="myItemId" value="Multiview-Machine-Learning-OMIS" /> + <option name="myItemId" value="multiview-machine-learning-omis" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> </PATH_ELEMENT> <PATH_ELEMENT> @@ -201,12 +348,419 @@ </PATH> </subPane> </pane> + <pane id="PackagesPane" /> + <pane id="Scratches" /> + <pane id="Scope" /> </panes> </component> <component name="PropertiesComponent"> <property name="last_opened_file_path" value="$PROJECT_DIR$" /> + <property name="aspect.path.notification.shown" value="true" /> + <property name="WebServerToolWindowFactoryState" value="false" /> + <property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" /> + <property name="settings.editor.splitter.proportion" value="0.2" /> + </component> + <component name="PyConsoleOptionsProvider"> + <option name="myPythonConsoleState"> + <console-settings module-name="Multiview-Machine-Learning-OMIS" is-module-sdk="true"> + <option name="myUseModuleSdk" value="true" /> + <option name="myModuleName" value="Multiview-Machine-Learning-OMIS" /> + </console-settings> + </option> + </component> + <component name="RecentsManager"> + <key name="MoveFile.RECENT_KEYS"> + <recent name="$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers" /> + </key> </component> - <component name="RunManager"> + <component name="RunManager" selected="Python.Mumbo"> + <configuration default="false" name="Mumbo" type="PythonConfigurationType" factoryName="Python" temporary="true"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs> + <env name="PYTHONUNBUFFERED" value="1" /> + </envs> + <option name="SDK_HOME" value="$USER_HOME$/anaconda2/bin/python2.7" /> + <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/Code/MultiView/Mumbo" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="Multiview-Machine-Learning-OMIS" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="SCRIPT_NAME" value="$PROJECT_DIR$/Code/MultiView/Mumbo/Mumbo.py" /> + <option name="PARAMETERS" value="" /> + <option name="SHOW_COMMAND_LINE" value="false" /> + <method /> + </configuration> + <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android Application"> + <module name="" /> + <option name="ACTIVITY_CLASS" value="" /> + <option name="MODE" value="default_activity" /> + <option name="DEPLOY" value="true" /> + <option name="ARTIFACT_NAME" value="" /> + <option name="TARGET_SELECTION_MODE" value="EMULATOR" /> + <option name="USE_LAST_SELECTED_DEVICE" value="false" /> + <option name="PREFERRED_AVD" value="" /> + <option name="USE_COMMAND_LINE" value="true" /> + <option name="COMMAND_LINE" value="" /> + <option name="WIPE_USER_DATA" value="false" /> + <option name="DISABLE_BOOT_ANIMATION" value="false" /> + <option name="NETWORK_SPEED" value="full" /> + <option name="NETWORK_LATENCY" value="none" /> + <option name="CLEAR_LOGCAT" value="false" /> + <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" /> + <option name="FILTER_LOGCAT_AUTOMATICALLY" value="true" /> + <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="0" /> + <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" /> + <option name="SELECTED_CLOUD_DEVICE_CONFIGURATION_ID" value="0" /> + <option name="SELECTED_CLOUD_DEVICE_PROJECT_ID" value="" /> + <option name="IS_VALID_CLOUD_MATRIX_SELECTION" value="false" /> + <option name="INVALID_CLOUD_MATRIX_SELECTION_ERROR" value="" /> + <option name="IS_VALID_CLOUD_DEVICE_SELECTION" value="false" /> + <option name="INVALID_CLOUD_DEVICE_SELECTION_ERROR" value="" /> + <option name="CLOUD_DEVICE_SERIAL_NUMBER" value="" /> + <method /> + </configuration> + <configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests"> + <module name="" /> + <option name="TESTING_TYPE" value="0" /> + <option name="INSTRUMENTATION_RUNNER_CLASS" value="" /> + <option name="METHOD_NAME" value="" /> + <option name="CLASS_NAME" value="" /> + <option name="PACKAGE_NAME" value="" /> + <option name="TARGET_SELECTION_MODE" value="EMULATOR" /> + <option name="USE_LAST_SELECTED_DEVICE" value="false" /> + <option name="PREFERRED_AVD" value="" /> + <option name="USE_COMMAND_LINE" value="true" /> + <option name="COMMAND_LINE" value="" /> + <option name="WIPE_USER_DATA" value="false" /> + <option name="DISABLE_BOOT_ANIMATION" value="false" /> + <option name="NETWORK_SPEED" value="full" /> + <option name="NETWORK_LATENCY" value="none" /> + <option name="CLEAR_LOGCAT" value="false" /> + <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" /> + <option name="FILTER_LOGCAT_AUTOMATICALLY" value="true" /> + <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="0" /> + <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" /> + <option name="SELECTED_CLOUD_DEVICE_CONFIGURATION_ID" value="0" /> + <option name="SELECTED_CLOUD_DEVICE_PROJECT_ID" value="" /> + <option name="IS_VALID_CLOUD_MATRIX_SELECTION" value="false" /> + <option name="INVALID_CLOUD_MATRIX_SELECTION_ERROR" value="" /> + <option name="IS_VALID_CLOUD_DEVICE_SELECTION" value="false" /> + <option name="INVALID_CLOUD_DEVICE_SELECTION_ERROR" value="" /> + <option name="CLOUD_DEVICE_SERIAL_NUMBER" value="" /> + <method /> + </configuration> + <configuration default="true" type="Application" factoryName="Application"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <option name="MAIN_CLASS_NAME" /> + <option name="VM_PARAMETERS" /> + <option name="PROGRAM_PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="ENABLE_SWING_INSPECTOR" value="false" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <module name="" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="ArquillianJUnit" factoryName=""> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <option name="arquillianRunConfiguration"> + <value> + <option name="containerStateName" value="" /> + </value> + </option> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="PACKAGE_NAME" /> + <option name="MAIN_CLASS_NAME" /> + <option name="METHOD_NAME" /> + <option name="TEST_OBJECT" value="class" /> + <option name="VM_PARAMETERS" /> + <option name="PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="singleModule" /> + </option> + <envs /> + <patterns /> + <method /> + </configuration> + <configuration default="true" type="ArquillianTestNG" factoryName=""> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <option name="arquillianRunConfiguration"> + <value> + <option name="containerStateName" value="" /> + </value> + </option> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="SUITE_NAME" /> + <option name="PACKAGE_NAME" /> + <option name="MAIN_CLASS_NAME" /> + <option name="METHOD_NAME" /> + <option name="GROUP_NAME" /> + <option name="TEST_OBJECT" value="CLASS" /> + <option name="VM_PARAMETERS" /> + <option name="PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="OUTPUT_DIRECTORY" /> + <option name="ANNOTATION_TYPE" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="singleModule" /> + </option> + <option name="USE_DEFAULT_REPORTERS" value="false" /> + <option name="PROPERTIES_FILE" /> + <envs /> + <properties /> + <listeners /> + <method /> + </configuration> + <configuration default="true" type="CucumberJavaRunConfigurationType" factoryName="Cucumber java"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <option name="myFilePath" /> + <option name="GLUE" /> + <option name="myNameFilter" /> + <option name="myGeneratedName" /> + <option name="MAIN_CLASS_NAME" /> + <option name="VM_PARAMETERS" /> + <option name="PROGRAM_PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="ENABLE_SWING_INSPECTOR" value="false" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <module name="" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="DjangoTestsConfigurationType" factoryName="Django tests"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs> + <env name="PYTHONUNBUFFERED" value="1" /> + </envs> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="Multiview-Machine-Learning-OMIS" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="TARGET" value="" /> + <option name="SETTINGS_FILE" value="" /> + <option name="CUSTOM_SETTINGS" value="false" /> + <option name="USE_OPTIONS" value="false" /> + <option name="OPTIONS" value="" /> + <method /> + </configuration> + <configuration default="true" type="FlashRunConfigurationType" factoryName="Flash App"> + <option name="BCName" value="" /> + <option name="IOSSimulatorSdkPath" value="" /> + <option name="adlOptions" value="" /> + <option name="airProgramParameters" value="" /> + <option name="appDescriptorForEmulator" value="Android" /> + <option name="debugTransport" value="USB" /> + <option name="debuggerSdkRaw" value="BC SDK" /> + <option name="emulator" value="NexusOne" /> + <option name="emulatorAdlOptions" value="" /> + <option name="fastPackaging" value="true" /> + <option name="fullScreenHeight" value="0" /> + <option name="fullScreenWidth" value="0" /> + <option name="launchUrl" value="false" /> + <option name="launcherParameters"> + <LauncherParameters> + <option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" /> + <option name="launcherType" value="OSDefault" /> + <option name="newPlayerInstance" value="false" /> + <option name="playerPath" value="/usr/bin/flashplayerdebugger" /> + </LauncherParameters> + </option> + <option name="mobileRunTarget" value="Emulator" /> + <option name="moduleName" value="" /> + <option name="overriddenMainClass" value="" /> + <option name="overriddenOutputFileName" value="" /> + <option name="overrideMainClass" value="false" /> + <option name="runTrusted" value="true" /> + <option name="screenDpi" value="0" /> + <option name="screenHeight" value="0" /> + <option name="screenWidth" value="0" /> + <option name="url" value="http://" /> + <option name="usbDebugPort" value="7936" /> + <method /> + </configuration> + <configuration default="true" type="FlexUnitRunConfigurationType" factoryName="FlexUnit" appDescriptorForEmulator="Android" class_name="" emulatorAdlOptions="" method_name="" package_name="" scope="Class"> + <option name="BCName" value="" /> + <option name="launcherParameters"> + <LauncherParameters> + <option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" /> + <option name="launcherType" value="OSDefault" /> + <option name="newPlayerInstance" value="false" /> + <option name="playerPath" value="/usr/bin/flashplayerdebugger" /> + </LauncherParameters> + </option> + <option name="moduleName" value="" /> + <option name="trusted" value="true" /> + <method /> + </configuration> + <configuration default="true" type="GradleRunConfiguration" factoryName="Gradle"> + <ExternalSystemSettings> + <option name="executionName" /> + <option name="externalProjectPath" /> + <option name="externalSystemIdString" value="GRADLE" /> + <option name="scriptParameters" /> + <option name="taskDescriptions"> + <list /> + </option> + <option name="taskNames"> + <list /> + </option> + <option name="vmOptions" /> + </ExternalSystemSettings> + <method /> + </configuration> + <configuration default="true" type="GrailsRunConfigurationType" factoryName="Grails"> + <module name="" /> + <setting name="vmparams" value="" /> + <setting name="cmdLine" value="run-app" /> + <setting name="depsClasspath" value="false" /> + <setting name="passParentEnv" value="true" /> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <setting name="launchBrowser" value="false" /> + <method /> + </configuration> + <configuration default="true" type="JUnit" factoryName="JUnit"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="PACKAGE_NAME" /> + <option name="MAIN_CLASS_NAME" /> + <option name="METHOD_NAME" /> + <option name="TEST_OBJECT" value="class" /> + <option name="VM_PARAMETERS" /> + <option name="PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="singleModule" /> + </option> + <envs /> + <patterns /> + <method /> + </configuration> + <configuration default="true" type="JUnitTestDiscovery" factoryName="JUnit Test Discovery" changeList="All"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="PACKAGE_NAME" /> + <option name="MAIN_CLASS_NAME" /> + <option name="METHOD_NAME" /> + <option name="TEST_OBJECT" value="class" /> + <option name="VM_PARAMETERS" /> + <option name="PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="singleModule" /> + </option> + <envs /> + <patterns /> + <method /> + </configuration> + <configuration default="true" type="JarApplication" factoryName="JAR Application"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="Java Scratch" factoryName="Java Scratch"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <option name="SCRATCH_FILE_ID" value="0" /> + <option name="MAIN_CLASS_NAME" /> + <option name="VM_PARAMETERS" /> + <option name="PROGRAM_PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="ENABLE_SWING_INSPECTOR" value="false" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <module name="" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug"> + <method /> + </configuration> + <configuration default="true" type="JetRunConfigurationType" factoryName="Kotlin"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <option name="MAIN_CLASS_NAME" /> + <option name="VM_PARAMETERS" /> + <option name="PROGRAM_PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <module name="Multiview-Machine-Learning-OMIS" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="KotlinStandaloneScriptRunConfigurationType" factoryName="Kotlin script"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <option name="filePath" /> + <option name="vmParameters" /> + <option name="alternativeJrePath" /> + <option name="programParameters" /> + <option name="passParentEnvs" value="true" /> + <option name="workingDirectory" /> + <option name="isAlternativeJrePathEnabled" value="false" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" working-dir=""> + <method /> + </configuration> + <configuration default="true" type="PyBehaveRunConfigurationType" factoryName="Behave"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs /> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="Multiview-Machine-Learning-OMIS" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="ADDITIONAL_ARGS" value="" /> + <method /> + </configuration> + <configuration default="true" type="PyLettuceRunConfigurationType" factoryName="Lettuce"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs /> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="Multiview-Machine-Learning-OMIS" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="ADDITIONAL_ARGS" value="" /> + <method /> + </configuration> <configuration default="true" type="PythonConfigurationType" factoryName="Python"> <option name="INTERPRETER_OPTIONS" value="" /> <option name="PARENT_ENVS" value="true" /> @@ -219,11 +773,136 @@ <option name="ADD_CONTENT_ROOTS" value="true" /> <option name="ADD_SOURCE_ROOTS" value="true" /> <module name="Multiview-Machine-Learning-OMIS" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> <option name="SCRIPT_NAME" value="" /> <option name="PARAMETERS" value="" /> <option name="SHOW_COMMAND_LINE" value="false" /> <method /> </configuration> + <configuration default="true" type="ScalaTestRunConfiguration" factoryName="ScalaTest"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <setting name="path" value="" /> + <setting name="package" value="" /> + <setting name="vmparams" value="" /> + <setting name="params" value="" /> + <setting name="workingDirectory" value="" /> + <setting name="searchForTest" value="Across module dependencies" /> + <setting name="testName" value="" /> + <setting name="testKind" value="Class" /> + <setting name="showProgressMessages" value="true" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="Specs2RunConfiguration" factoryName="Specs2"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <setting name="path" value="" /> + <setting name="package" value="" /> + <setting name="vmparams" value="" /> + <setting name="params" value="" /> + <setting name="workingDirectory" value="" /> + <setting name="searchForTest" value="Across module dependencies" /> + <setting name="testName" value="" /> + <setting name="testKind" value="Class" /> + <setting name="showProgressMessages" value="true" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="TestNG" factoryName="TestNG"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="SUITE_NAME" /> + <option name="PACKAGE_NAME" /> + <option name="MAIN_CLASS_NAME" /> + <option name="METHOD_NAME" /> + <option name="GROUP_NAME" /> + <option name="TEST_OBJECT" value="CLASS" /> + <option name="VM_PARAMETERS" /> + <option name="PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="OUTPUT_DIRECTORY" /> + <option name="ANNOTATION_TYPE" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="singleModule" /> + </option> + <option name="USE_DEFAULT_REPORTERS" value="false" /> + <option name="PROPERTIES_FILE" /> + <envs /> + <properties /> + <listeners /> + <method /> + </configuration> + <configuration default="true" type="TestNGTestDiscovery" factoryName="TestNG Test Discovery" changeList="All"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="SUITE_NAME" /> + <option name="PACKAGE_NAME" /> + <option name="MAIN_CLASS_NAME" /> + <option name="METHOD_NAME" /> + <option name="GROUP_NAME" /> + <option name="TEST_OBJECT" value="CLASS" /> + <option name="VM_PARAMETERS" /> + <option name="PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="OUTPUT_DIRECTORY" /> + <option name="ANNOTATION_TYPE" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="singleModule" /> + </option> + <option name="USE_DEFAULT_REPORTERS" value="false" /> + <option name="PROPERTIES_FILE" /> + <envs /> + <properties /> + <listeners /> + <method /> + </configuration> + <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js"> + <node-options /> + <gulpfile /> + <tasks /> + <arguments /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="js.build_tools.npm" factoryName="npm"> + <command value="run-script" /> + <scripts /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="mocha-javascript-test-runner" factoryName="Mocha"> + <node-options /> + <working-directory>$PROJECT_DIR$</working-directory> + <pass-parent-env>true</pass-parent-env> + <envs /> + <ui>bdd</ui> + <extra-mocha-options /> + <test-kind>DIRECTORY</test-kind> + <test-directory /> + <recursive>false</recursive> + <method /> + </configuration> + <configuration default="true" type="osgi.bnd.run" factoryName="Run Launcher"> + <method /> + </configuration> + <configuration default="true" type="osgi.bnd.run" factoryName="Test Launcher (JUnit)"> + <method /> + </configuration> <configuration default="true" type="tests" factoryName="Attests"> <option name="INTERPRETER_OPTIONS" value="" /> <option name="PARENT_ENVS" value="true" /> @@ -234,6 +913,7 @@ <option name="ADD_CONTENT_ROOTS" value="true" /> <option name="ADD_SOURCE_ROOTS" value="true" /> <module name="Multiview-Machine-Learning-OMIS" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> <option name="SCRIPT_NAME" value="" /> <option name="CLASS_NAME" value="" /> <option name="METHOD_NAME" value="" /> @@ -253,6 +933,7 @@ <option name="ADD_CONTENT_ROOTS" value="true" /> <option name="ADD_SOURCE_ROOTS" value="true" /> <module name="Multiview-Machine-Learning-OMIS" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> <option name="SCRIPT_NAME" value="" /> <option name="CLASS_NAME" value="" /> <option name="METHOD_NAME" value="" /> @@ -272,6 +953,7 @@ <option name="ADD_CONTENT_ROOTS" value="true" /> <option name="ADD_SOURCE_ROOTS" value="true" /> <module name="Multiview-Machine-Learning-OMIS" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> <option name="SCRIPT_NAME" value="" /> <option name="CLASS_NAME" value="" /> <option name="METHOD_NAME" value="" /> @@ -293,6 +975,7 @@ <option name="ADD_CONTENT_ROOTS" value="true" /> <option name="ADD_SOURCE_ROOTS" value="true" /> <module name="Multiview-Machine-Learning-OMIS" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> <option name="SCRIPT_NAME" value="" /> <option name="CLASS_NAME" value="" /> <option name="METHOD_NAME" value="" /> @@ -315,6 +998,7 @@ <option name="ADD_CONTENT_ROOTS" value="true" /> <option name="ADD_SOURCE_ROOTS" value="true" /> <module name="Multiview-Machine-Learning-OMIS" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> <option name="SCRIPT_NAME" value="" /> <option name="CLASS_NAME" value="" /> <option name="METHOD_NAME" value="" /> @@ -329,6 +1013,34 @@ <option name="USE_KEYWORD" value="false" /> <method /> </configuration> + <configuration default="true" type="uTestRunConfiguration" factoryName="utest"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <setting name="path" value="" /> + <setting name="package" value="" /> + <setting name="vmparams" value="" /> + <setting name="params" value="" /> + <setting name="workingDirectory" value="" /> + <setting name="searchForTest" value="Across module dependencies" /> + <setting name="testName" value="" /> + <setting name="testKind" value="Class" /> + <setting name="showProgressMessages" value="true" /> + <envs /> + <method /> + </configuration> + <list size="1"> + <item index="0" class="java.lang.String" itemvalue="Python.Mumbo" /> + </list> + <recent_temporary> + <list size="1"> + <item index="0" class="java.lang.String" itemvalue="Python.Mumbo" /> + </list> + </recent_temporary> + </component> + <component name="SbtLocalSettings"> + <option name="externalProjectsViewState"> + <projects_view /> + </option> </component> <component name="ShelveChangesManager" show_recycled="false" /> <component name="SvnConfiguration"> @@ -340,31 +1052,68 @@ <created>1459504457506</created> <option name="number" value="Default" /> <updated>1459504457506</updated> + <workItem from="1459841651297" duration="4166000" /> + <workItem from="1459846109835" duration="713000" /> + <workItem from="1459846850476" duration="8855000" /> </task> <servers /> </component> + <component name="TimeTrackingManager"> + <option name="totallyTimeSpent" value="13734000" /> + </component> <component name="ToolWindowManager"> - <frame x="0" y="25" width="1280" height="775" extended-state="6" /> + <frame x="1680" y="24" width="1920" height="1056" extended-state="6" /> <editor active="true" /> <layout> + <window_info id="Palette	" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> + <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> + <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> + <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="true" content_ui="tabs" /> + <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" /> + <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" /> <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" /> - <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" /> - <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" /> - <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> + <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> + <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.18125" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" /> + <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.15478615" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> - <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" /> <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> </layout> + <layout-to-restore> + <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> + <window_info id="Palette	" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> + <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> + <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> + <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> + <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> + <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="true" content_ui="tabs" /> + <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" /> + <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" /> + <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> + <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> + <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> + <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.18125" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" /> + <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" /> + <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> + <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> + <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.15478615" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + </layout-to-restore> </component> <component name="Vcs.Log.UiProperties"> <option name="RECENTLY_FILTERED_USER_GROUPS"> @@ -381,36 +1130,310 @@ <breakpoint-manager /> <watches-manager /> </component> + <component name="antWorkspaceConfiguration"> + <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" /> + <option name="FILTER_TARGETS" value="false" /> + </component> <component name="editorHistoryManager"> <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Mumbo.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="264" column="41" selection-start-line="264" selection-start-column="11" selection-end-line="264" selection-end-column="41" /> + <folding> + <element signature="e#0#18#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="8" column="0" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/FeatExtraction/DBCrawl.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="24" column="49" selection-start-line="24" selection-start-column="8" selection-end-line="24" selection-end-column="49" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/GetMutliviewDb.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="30" column="46" selection-start-line="30" selection-start-column="11" selection-end-line="30" selection-end-column="46" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/ExecMultiview.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding> + <element signature="e#0#27#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="34" selection-start-line="0" selection-start-column="34" selection-end-line="0" selection-end-column="34" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/DecisionTree.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="9" column="43" selection-start-line="9" selection-start-column="43" selection-end-line="9" selection-end-column="43" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Mumbo.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="54" column="24" selection-start-line="54" selection-start-column="24" selection-end-line="54" selection-end-column="24" /> + <folding> + <element signature="e#0#18#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="8" column="0" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/FeatExtraction/DBCrawl.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="24" column="49" selection-start-line="24" selection-start-column="8" selection-end-line="24" selection-end-column="49" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/GetMutliviewDb.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/DecisionTree.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="9" column="43" selection-start-line="9" selection-start-column="43" selection-end-line="9" selection-end-column="43" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Mumbo.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="54" column="24" selection-start-line="54" selection-start-column="24" selection-end-line="54" selection-end-column="24" /> + <folding> + <element signature="e#0#18#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/__init__.py"> <provider selected="true" editor-type-id="text-editor"> <state vertical-scroll-proportion="0.0"> <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="8" column="0" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/FeatExtraction/DBCrawl.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="24" column="49" selection-start-line="24" selection-start-column="8" selection-end-line="24" selection-end-column="49" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/GetMutliviewDb.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/DecisionTree.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="9" column="43" selection-start-line="9" selection-start-column="43" selection-end-line="9" selection-end-column="43" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Mumbo.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="12" column="10" selection-start-line="12" selection-start-column="10" selection-end-line="12" selection-end-column="10" /> <folding> <element signature="e#0#18#0" expanded="true" /> </folding> </state> </provider> </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/DecisionTree.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Mumbo.py"> <provider selected="true" editor-type-id="text-editor"> <state vertical-scroll-proportion="0.0"> - <caret line="117" column="10" selection-start-line="117" selection-start-column="10" selection-end-line="117" selection-end-column="10" /> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <folding> <element signature="e#0#18#0" expanded="true" /> </folding> </state> </provider> </entry> + <entry file="file://$PROJECT_DIR$/Code/FeatExtraction/DBCrawl.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="24" column="49" selection-start-line="24" selection-start-column="8" selection-end-line="24" selection-end-column="49" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="11" column="10" selection-start-line="11" selection-start-column="10" selection-end-line="11" selection-end-column="10" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/GetMutliviewDb.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="29" column="58" selection-start-line="29" selection-start-column="58" selection-end-line="29" selection-end-column="58" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="34" selection-start-line="0" selection-start-column="34" selection-end-line="0" selection-end-column="34" /> + <folding /> + </state> + </provider> + </entry> <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/DecisionTree.py"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.16488549"> - <caret line="6" column="47" selection-start-line="6" selection-start-column="47" selection-end-line="6" selection-end-column="47" /> + <state vertical-scroll-proportion="0.0"> + <caret line="2" column="0" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Classifiers/ModifiedMulticlass.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="70" column="0" selection-start-line="70" selection-start-column="0" selection-end-line="70" selection-end-column="0" /> + <folding> + <element signature="e#1464#1476#0" expanded="true" /> + <element signature="e#2847#3198#0" expanded="false" /> + <element signature="e#3238#3543#0" expanded="false" /> + <element signature="e#3707#4412#0" expanded="false" /> + <element signature="e#4589#5739#0" expanded="false" /> + <element signature="e#5926#6407#0" expanded="false" /> + <element signature="e#6456#6923#0" expanded="false" /> + <element signature="e#7009#8968#1" expanded="false" /> + <element signature="e#9023#9078#0" expanded="false" /> + <element signature="e#16803#20674#0" expanded="false" /> + <element signature="e#20746#22439#0" expanded="false" /> + <element signature="e#22640#23628#0" expanded="false" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/ExecMultiview.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="15" column="0" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" /> + <folding> + <element signature="e#0#27#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/Code/MultiView/Mumbo/Mumbo.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.60912055"> + <caret line="272" column="0" selection-start-line="272" selection-start-column="0" selection-end-line="272" selection-end-column="0" /> <folding> - <element signature="e#0#24#0" expanded="true" /> + <element signature="e#0#18#0" expanded="true" /> </folding> </state> </provider> </entry> </component> + <component name="masterDetails"> + <states> + <state key="ArquillianSettingsConfigurable.UI"> + <settings> + <splitter-proportions> + <option name="proportions"> + <list> + <option value="0.2" /> + </list> + </option> + </splitter-proportions> + </settings> + </state> + </states> + </component> </project> \ No newline at end of file diff --git a/Code/MultiView/ExecMultiview.py b/Code/MultiView/ExecMultiview.py new file mode 100644 index 0000000000000000000000000000000000000000..3e997a544c0a22dc72ee9581952e0ae320ecf2be --- /dev/null +++ b/Code/MultiView/ExecMultiview.py @@ -0,0 +1,15 @@ +import Mumbo.Mumbo as Mumbo +import GetMutliviewDb as DB + +NB_VIEW = 4 +DATASET_LENGTH = 300 +NB_CLASS = 4 +NB_ITER = 50 +classifierName="DecisionTree" +NB_CORES = 4 +classifierConfig = 3 + +DATASET, VIEW_DIMENSIONS, CLASS_LABELS = DB.createFakeData(NB_VIEW, DATASET_LENGTH, NB_CLASS) +bestClassifiers, generalAlphas, bestViews = Mumbo.trainMumbo(DATASET, CLASS_LABELS, NB_CLASS, NB_VIEW, NB_ITER, DATASET_LENGTH, classifierName, NB_CORES, classifierConfig) + +predictedLabels = Mumbo.classifyMumbo(DATASET, bestClassifiers, generalAlphas, bestViews, NB_CLASS) diff --git a/Code/MultiView/GetMutliviewDb.py b/Code/MultiView/GetMutliviewDb.py index f2aa9cb0adbec25b4103bb095e95fdc9032ef405..a3cb40eadfc0937d4df3433f74bd71840d7affa2 100644 --- a/Code/MultiView/GetMutliviewDb.py +++ b/Code/MultiView/GetMutliviewDb.py @@ -1,15 +1,31 @@ import numpy as np -def getOneViewFromDB(viewName, pathToDB): - view = np.genfromtxt(pathToDB + viewName, delimiter=';') - return view - -def getClassLabels(pathToDB): - labels = np.genfromtxt(pathToDB + "ClassLabels.csv", delimiter=';') - return labels - -def getDataset(pathToDB, viewNames): - dataset = [] - for viewName in viewNames: - dataset.append(getOneViewFromDB(viewName, pathtoDB)) - return np.array(dataset) + +def getOneViewFromDB(viewName, pathToDB, DBName): + view = np.genfromtxt(pathToDB + DBName +"-" + viewName, delimiter=';') + return view + + +def getClassLabels(pathToDB, DBName): + labels = np.genfromtxt(pathToDB + DBName + "-" + "ClassLabels.csv", delimiter=';') + return labels + + +def getDataset(pathToDB, viewNames, DBName): + dataset = [] + for viewName in viewNames: + dataset.append(getOneViewFromDB(viewName, pathToDB, DBName)) + return np.array(dataset) + + +def createFakeData(NB_VIEW, DATASET_LENGTH, NB_CLASS): + VIEW_DIMENSIONS = np.random.random_integers(5, 20, NB_VIEW) + + DATA = [ + np.array([ + np.random.normal(0.0, 2, viewDimension) + for i in np.arange(DATASET_LENGTH)]) + for viewDimension in VIEW_DIMENSIONS] + + CLASS_LABELS = np.random.random_integers(0, NB_CLASS-1, DATASET_LENGTH) + return DATA, VIEW_DIMENSIONS, CLASS_LABELS \ No newline at end of file diff --git a/Code/MultiView/Mumbo/Classifiers/DecisionTree.py b/Code/MultiView/Mumbo/Classifiers/DecisionTree.py index 64d28b6f6a23de2d53d4af1e44b986841b5ca7b6..b0dea346f15f67a9891dc1a7be6836b4d32b62d8 100644 --- a/Code/MultiView/Mumbo/Classifiers/DecisionTree.py +++ b/Code/MultiView/Mumbo/Classifiers/DecisionTree.py @@ -1,10 +1,11 @@ from sklearn import tree -from sklearn.multiclass import OneVsRestClassifier - +# from sklearn.multiclass import OneVsRestClassifier +from ModifiedMulticlass import OneVsRestClassifier # Add weights -def decisionTree(data, labels, arg): +def DecisionTree(data, labels, arg, weights): classifier = OneVsRestClassifier(tree.DecisionTreeClassifier(max_depth=arg)) - classifier.fit(data, labels) - return classifier, classifier.predict(data) \ No newline at end of file + classifier.fit(data, labels, sample_weight=weights) + return classifier, classifier.predict(data) + diff --git a/Code/MultiView/Mumbo/Classifiers/ModifiedMulticlass.py b/Code/MultiView/Mumbo/Classifiers/ModifiedMulticlass.py new file mode 100644 index 0000000000000000000000000000000000000000..040342fd9fd542f6087566746e5d10f27e33e895 --- /dev/null +++ b/Code/MultiView/Mumbo/Classifiers/ModifiedMulticlass.py @@ -0,0 +1,718 @@ +""" +Multiclass and multilabel classification strategies +=================================================== +This module implements multiclass learning algorithms: + - one-vs-the-rest / one-vs-all + - one-vs-one + - error correcting output codes +The estimators provided in this module are meta-estimators: they require a base +estimator to be provided in their constructor. For example, it is possible to +use these estimators to turn a binary classifier or a regressor into a +multiclass classifier. It is also possible to use these estimators with +multiclass estimators in the hope that their accuracy or runtime performance +improves. +All classifiers in scikit-learn implement multiclass classification; you +only need to use this module if you want to experiment with custom multiclass +strategies. +The one-vs-the-rest meta-classifier also implements a `predict_proba` method, +so long as such a method is implemented by the base classifier. This method +returns probabilities of class membership in both the single label and +multilabel case. Note that in the multilabel case, probabilities are the +marginal probability that a given sample falls in the given class. As such, in +the multilabel case the sum of these probabilities over all possible labels +for a given sample *will not* sum to unity, as they do in the single label +case. +""" + +# Author: Mathieu Blondel <mathieu@mblondel.org> +# Author: Hamzeh Alsalhi <93hamsal@gmail.com> +# +# License: BSD 3 clause + +import array +import numpy as np +import warnings +import scipy.sparse as sp + +from sklearn.base import BaseEstimator, ClassifierMixin, clone, is_classifier +from sklearn.base import MetaEstimatorMixin, is_regressor +from sklearn.preprocessing import LabelBinarizer +from sklearn.metrics.pairwise import euclidean_distances +from sklearn.utils import check_random_state +from sklearn.utils.validation import _num_samples +from sklearn.utils.validation import check_consistent_length +from sklearn.utils.validation import check_is_fitted +from sklearn.utils import deprecated +from sklearn.externals.joblib import Parallel +from sklearn.externals.joblib import delayed + +__all__ = [ + "OneVsRestClassifier", + "OneVsOneClassifier", + "OutputCodeClassifier", +] + + +def _fit_binary(estimator, X, y, classes=None, sample_weight=None): + """Fit a single binary estimator.""" + unique_y = np.unique(y) + if len(unique_y) == 1: + if classes is not None: + if y[0] == -1: + c = 0 + else: + c = y[0] + warnings.warn("Label %s is present in all training examples." % + str(classes[c])) + estimator = _ConstantPredictor().fit(X, unique_y) + else: + estimator = clone(estimator) + estimator.fit(X, y, sample_weight=sample_weight) + return estimator + + +def _predict_binary(estimator, X): + """Make predictions using a single binary estimator.""" + if is_regressor(estimator): + return estimator.predict(X) + try: + score = np.ravel(estimator.decision_function(X)) + except (AttributeError, NotImplementedError): + # probabilities of the positive class + score = estimator.predict_proba(X)[:, 1] + return score + + +def _check_estimator(estimator): + """Make sure that an estimator implements the necessary methods.""" + if (not hasattr(estimator, "decision_function") and + not hasattr(estimator, "predict_proba")): + raise ValueError("The base estimator should implement " + "decision_function or predict_proba!") + + +@deprecated("fit_ovr is deprecated and will be removed in 0.18." + "Use the OneVsRestClassifier instead.") +def fit_ovr(estimator, X, y, n_jobs=1): + """Fit a one-vs-the-rest strategy. + Parameters + ---------- + estimator : estimator object + An estimator object implementing `fit` and one of `decision_function` + or `predict_proba`. + X : (sparse) array-like, shape = [n_samples, n_features] + Data. + y : (sparse) array-like, shape = [n_samples] or [n_samples, n_classes] + Multi-class targets. An indicator matrix turns on multilabel + classification. + Returns + ------- + estimators : list of estimators object + The list of fitted estimator. + lb : fitted LabelBinarizer + """ + ovr = OneVsRestClassifier(estimator, n_jobs=n_jobs).fit(X, y) + return ovr.estimators_, ovr.label_binarizer_ + + +@deprecated("predict_ovr is deprecated and will be removed in 0.18." + "Use the OneVsRestClassifier instead.") +def predict_ovr(estimators, label_binarizer, X): + """Predict multi-class targets using the one vs rest strategy. + Parameters + ---------- + estimators : list of `n_classes` estimators, Estimators used for + predictions. The list must be homogeneous with respect to the type of + estimators. fit_ovr supplies this list as part of its output. + label_binarizer : LabelBinarizer object, Object used to transform + multiclass labels to binary labels and vice-versa. fit_ovr supplies + this object as part of its output. + X : (sparse) array-like, shape = [n_samples, n_features] + Data. + Returns + ------- + y : (sparse) array-like, shape = [n_samples] or [n_samples, n_classes]. + Predicted multi-class targets. + """ + e_types = set([type(e) for e in estimators if not + isinstance(e, _ConstantPredictor)]) + if len(e_types) > 1: + raise ValueError("List of estimators must contain estimators of the" + " same type but contains types {0}".format(e_types)) + + ovr = OneVsRestClassifier(clone(estimators[0])) + ovr.estimators_ = estimators + ovr.label_binarizer_ = label_binarizer + + return ovr.predict(X) + + +@deprecated("predict_proba_ovr is deprecated and will be removed in 0.18." + "Use the OneVsRestClassifier instead.") +def predict_proba_ovr(estimators, X, is_multilabel): + e_types = set([type(e) for e in estimators if not + isinstance(e, _ConstantPredictor)]) + if len(e_types) > 1: + raise ValueError("List of estimators must contain estimators of the" + " same type but contains types {0}".format(e_types)) + + Y = np.array([e.predict_proba(X)[:, 1] for e in estimators]).T + + if not is_multilabel: + # Then, probabilities should be normalized to 1. + Y /= np.sum(Y, axis=1)[:, np.newaxis] + + return Y + + +class _ConstantPredictor(BaseEstimator): + + def fit(self, X, y): + self.y_ = y + return self + + def predict(self, X): + check_is_fitted(self, 'y_') + + return np.repeat(self.y_, X.shape[0]) + + def decision_function(self, X): + check_is_fitted(self, 'y_') + + return np.repeat(self.y_, X.shape[0]) + + def predict_proba(self, X): + check_is_fitted(self, 'y_') + + return np.repeat([np.hstack([1 - self.y_, self.y_])], + X.shape[0], axis=0) + + +class OneVsRestClassifier(BaseEstimator, ClassifierMixin, MetaEstimatorMixin): + """One-vs-the-rest (OvR) multiclass/multilabel strategy + Also known as one-vs-all, this strategy consists in fitting one classifier + per class. For each classifier, the class is fitted against all the other + classes. In addition to its computational efficiency (only `n_classes` + classifiers are needed), one advantage of this approach is its + interpretability. Since each class is represented by one and one classifier + only, it is possible to gain knowledge about the class by inspecting its + corresponding classifier. This is the most commonly used strategy for + multiclass classification and is a fair default choice. + This strategy can also be used for multilabel learning, where a classifier + is used to predict multiple labels for instance, by fitting on a 2-d matrix + in which cell [i, j] is 1 if sample i has label j and 0 otherwise. + In the multilabel learning literature, OvR is also known as the binary + relevance method. + Read more in the :ref:`User Guide <ovr_classification>`. + Parameters + ---------- + estimator : estimator object + An estimator object implementing `fit` and one of `decision_function` + or `predict_proba`. + n_jobs : int, optional, default: 1 + The number of jobs to use for the computation. If -1 all CPUs are used. + If 1 is given, no parallel computing code is used at all, which is + useful for debugging. For n_jobs below -1, (n_cpus + 1 + n_jobs) are + used. Thus for n_jobs = -2, all CPUs but one are used. + Attributes + ---------- + estimators_ : list of `n_classes` estimators + Estimators used for predictions. + classes_ : array, shape = [`n_classes`] + Class labels. + label_binarizer_ : LabelBinarizer object + Object used to transform multiclass labels to binary labels and + vice-versa. + multilabel_ : boolean + Whether a OneVsRestClassifier is a multilabel classifier. + """ + + def __init__(self, estimator, n_jobs=1): + self.estimator = estimator + self.n_jobs = n_jobs + + def fit(self, X, y, sample_weight=None): + """Fit underlying estimators. + Parameters + ---------- + X : (sparse) array-like, shape = [n_samples, n_features] + Data. + y : (sparse) array-like, shape = [n_samples] or [n_samples, n_classes] + Multi-class targets. An indicator matrix turns on multilabel + classification. + Returns + ------- + self + """ + # A sparse LabelBinarizer, with sparse_output=True, has been shown to + # outpreform or match a dense label binarizer in all cases and has also + # resulted in less or equal memory consumption in the fit_ovr function + # overall. + self.label_binarizer_ = LabelBinarizer(sparse_output=True) + Y = self.label_binarizer_.fit_transform(y) + Y = Y.tocsc() + columns = (col.toarray().ravel() for col in Y.T) + # In cases where individual estimators are very fast to train setting + # n_jobs > 1 in can results in slower performance due to the overhead + # of spawning threads. See joblib issue #112. + self.estimators_ = Parallel(n_jobs=self.n_jobs)(delayed(_fit_binary)( + self.estimator, X, column, classes=[ + "not %s" % self.label_binarizer_.classes_[i], + self.label_binarizer_.classes_[i]], sample_weight=sample_weight) + for i, column in enumerate(columns)) + + return self + + def predict(self, X): + """Predict multi-class targets using underlying estimators. + Parameters + ---------- + X : (sparse) array-like, shape = [n_samples, n_features] + Data. + Returns + ------- + y : (sparse) array-like, shape = [n_samples] or [n_samples, n_classes]. + Predicted multi-class targets. + """ + check_is_fitted(self, 'estimators_') + if (hasattr(self.estimators_[0], "decision_function") and + is_classifier(self.estimators_[0])): + thresh = 0 + else: + thresh = .5 + + n_samples = _num_samples(X) + if self.label_binarizer_.y_type_ == "multiclass": + maxima = np.empty(n_samples, dtype=float) + maxima.fill(-np.inf) + argmaxima = np.zeros(n_samples, dtype=int) + for i, e in enumerate(self.estimators_): + pred = _predict_binary(e, X) + np.maximum(maxima, pred, out=maxima) + argmaxima[maxima == pred] = i + return self.label_binarizer_.classes_[np.array(argmaxima.T)] + else: + indices = array.array('i') + indptr = array.array('i', [0]) + for e in self.estimators_: + indices.extend(np.where(_predict_binary(e, X) > thresh)[0]) + indptr.append(len(indices)) + data = np.ones(len(indices), dtype=int) + indicator = sp.csc_matrix((data, indices, indptr), + shape=(n_samples, len(self.estimators_))) + return self.label_binarizer_.inverse_transform(indicator) + + def predict_proba(self, X): + """Probability estimates. + The returned estimates for all classes are ordered by label of classes. + Note that in the multilabel case, each sample can have any number of + labels. This returns the marginal probability that the given sample has + the label in question. For example, it is entirely consistent that two + labels both have a 90% probability of applying to a given sample. + In the single label multiclass case, the rows of the returned matrix + sum to 1. + Parameters + ---------- + X : array-like, shape = [n_samples, n_features] + Returns + ------- + T : (sparse) array-like, shape = [n_samples, n_classes] + Returns the probability of the sample for each class in the model, + where classes are ordered as they are in `self.classes_`. + """ + check_is_fitted(self, 'estimators_') + # Y[i,j] gives the probability that sample i has the label j. + # In the multi-label case, these are not disjoint. + Y = np.array([e.predict_proba(X)[:, 1] for e in self.estimators_]).T + + if len(self.estimators_) == 1: + # Only one estimator, but we still want to return probabilities + # for two classes. + Y = np.concatenate(((1 - Y), Y), axis=1) + + if not self.multilabel_: + # Then, probabilities should be normalized to 1. + Y /= np.sum(Y, axis=1)[:, np.newaxis] + return Y + + def decision_function(self, X): + """Returns the distance of each sample from the decision boundary for + each class. This can only be used with estimators which implement the + decision_function method. + Parameters + ---------- + X : array-like, shape = [n_samples, n_features] + Returns + ------- + T : array-like, shape = [n_samples, n_classes] + """ + check_is_fitted(self, 'estimators_') + if not hasattr(self.estimators_[0], "decision_function"): + raise AttributeError( + "Base estimator doesn't have a decision_function attribute.") + return np.array([est.decision_function(X).ravel() + for est in self.estimators_]).T + + @property + def multilabel_(self): + """Whether this is a multilabel classifier""" + return self.label_binarizer_.y_type_.startswith('multilabel') + + @property + def classes_(self): + return self.label_binarizer_.classes_ + + @property + def coef_(self): + check_is_fitted(self, 'estimators_') + if not hasattr(self.estimators_[0], "coef_"): + raise AttributeError( + "Base estimator doesn't have a coef_ attribute.") + coefs = [e.coef_ for e in self.estimators_] + if sp.issparse(coefs[0]): + return sp.vstack(coefs) + return np.vstack(coefs) + + @property + def intercept_(self): + check_is_fitted(self, 'estimators_') + if not hasattr(self.estimators_[0], "intercept_"): + raise AttributeError( + "Base estimator doesn't have an intercept_ attribute.") + return np.array([e.intercept_.ravel() for e in self.estimators_]) + + +def _fit_ovo_binary(estimator, X, y, i, j): + """Fit a single binary estimator (one-vs-one).""" + cond = np.logical_or(y == i, y == j) + y = y[cond] + y_binary = np.empty(y.shape, np.int) + y_binary[y == i] = 0 + y_binary[y == j] = 1 + ind = np.arange(X.shape[0]) + return _fit_binary(estimator, X[ind[cond]], y_binary, classes=[i, j]) + + +@deprecated("fit_ovo is deprecated and will be removed in 0.18." + "Use the OneVsOneClassifier instead.") +def fit_ovo(estimator, X, y, n_jobs=1): + ovo = OneVsOneClassifier(estimator, n_jobs=n_jobs).fit(X, y) + return ovo.estimators_, ovo.classes_ + + +@deprecated("predict_ovo is deprecated and will be removed in 0.18." + "Use the OneVsOneClassifier instead.") +def predict_ovo(estimators, classes, X): + """Make predictions using the one-vs-one strategy.""" + + e_types = set([type(e) for e in estimators if not + isinstance(e, _ConstantPredictor)]) + if len(e_types) > 1: + raise ValueError("List of estimators must contain estimators of the" + " same type but contains types {0}".format(e_types)) + + ovo = OneVsOneClassifier(clone(estimators[0])) + ovo.estimators_ = estimators + ovo.classes_ = classes + return ovo.predict(X) + + +class OneVsOneClassifier(BaseEstimator, ClassifierMixin, MetaEstimatorMixin): + """One-vs-one multiclass strategy + This strategy consists in fitting one classifier per class pair. + At prediction time, the class which received the most votes is selected. + Since it requires to fit `n_classes * (n_classes - 1) / 2` classifiers, + this method is usually slower than one-vs-the-rest, due to its + O(n_classes^2) complexity. However, this method may be advantageous for + algorithms such as kernel algorithms which don't scale well with + `n_samples`. This is because each individual learning problem only involves + a small subset of the data whereas, with one-vs-the-rest, the complete + dataset is used `n_classes` times. + Read more in the :ref:`User Guide <ovo_classification>`. + Parameters + ---------- + estimator : estimator object + An estimator object implementing `fit` and one of `decision_function` + or `predict_proba`. + n_jobs : int, optional, default: 1 + The number of jobs to use for the computation. If -1 all CPUs are used. + If 1 is given, no parallel computing code is used at all, which is + useful for debugging. For n_jobs below -1, (n_cpus + 1 + n_jobs) are + used. Thus for n_jobs = -2, all CPUs but one are used. + Attributes + ---------- + estimators_ : list of `n_classes * (n_classes - 1) / 2` estimators + Estimators used for predictions. + classes_ : numpy array of shape [n_classes] + Array containing labels. + """ + + def __init__(self, estimator, n_jobs=1): + self.estimator = estimator + self.n_jobs = n_jobs + + def fit(self, X, y): + """Fit underlying estimators. + Parameters + ---------- + X : (sparse) array-like, shape = [n_samples, n_features] + Data. + y : array-like, shape = [n_samples] + Multi-class targets. + Returns + ------- + self + """ + y = np.asarray(y) + check_consistent_length(X, y) + + self.classes_ = np.unique(y) + n_classes = self.classes_.shape[0] + self.estimators_ = Parallel(n_jobs=self.n_jobs)( + delayed(_fit_ovo_binary)( + self.estimator, X, y, self.classes_[i], self.classes_[j]) + for i in range(n_classes) for j in range(i + 1, n_classes)) + + return self + + def predict(self, X): + """Estimate the best class label for each sample in X. + This is implemented as ``argmax(decision_function(X), axis=1)`` which + will return the label of the class with most votes by estimators + predicting the outcome of a decision for each possible class pair. + Parameters + ---------- + X : (sparse) array-like, shape = [n_samples, n_features] + Data. + Returns + ------- + y : numpy array of shape [n_samples] + Predicted multi-class targets. + """ + Y = self.decision_function(X) + return self.classes_[Y.argmax(axis=1)] + + def decision_function(self, X): + """Decision function for the OneVsOneClassifier. + The decision values for the samples are computed by adding the + normalized sum of pair-wise classification confidence levels to the + votes in order to disambiguate between the decision values when the + votes for all the classes are equal leading to a tie. + Parameters + ---------- + X : array-like, shape = [n_samples, n_features] + Returns + ------- + Y : array-like, shape = [n_samples, n_classes] + """ + check_is_fitted(self, 'estimators_') + + predictions = np.vstack([est.predict(X) for est in self.estimators_]).T + confidences = np.vstack([_predict_binary(est, X) for est in self.estimators_]).T + return _ovr_decision_function(predictions, confidences, + len(self.classes_)) + + +def _ovr_decision_function(predictions, confidences, n_classes): + """Compute a continuous, tie-breaking ovr decision function. + It is important to include a continuous value, not only votes, + to make computing AUC or calibration meaningful. + Parameters + ---------- + predictions : array-like, shape (n_samples, n_classifiers) + Predicted classes for each binary classifier. + confidences : array-like, shape (n_samples, n_classifiers) + Decision functions or predicted probabilities for positive class + for each binary classifier. + n_classes : int + Number of classes. n_classifiers must be + ``n_classes * (n_classes - 1 ) / 2`` + """ + n_samples = predictions.shape[0] + votes = np.zeros((n_samples, n_classes)) + sum_of_confidences = np.zeros((n_samples, n_classes)) + + k = 0 + for i in range(n_classes): + for j in range(i + 1, n_classes): + sum_of_confidences[:, i] -= confidences[:, k] + sum_of_confidences[:, j] += confidences[:, k] + votes[predictions[:, k] == 0, i] += 1 + votes[predictions[:, k] == 1, j] += 1 + k += 1 + + max_confidences = sum_of_confidences.max() + min_confidences = sum_of_confidences.min() + + if max_confidences == min_confidences: + return votes + + # Scale the sum_of_confidences to (-0.5, 0.5) and add it with votes. + # The motivation is to use confidence levels as a way to break ties in + # the votes without switching any decision made based on a difference + # of 1 vote. + eps = np.finfo(sum_of_confidences.dtype).eps + max_abs_confidence = max(abs(max_confidences), abs(min_confidences)) + scale = (0.5 - eps) / max_abs_confidence + return votes + sum_of_confidences * scale + + +@deprecated("fit_ecoc is deprecated and will be removed in 0.18." + "Use the OutputCodeClassifier instead.") +def fit_ecoc(estimator, X, y, code_size=1.5, random_state=None, n_jobs=1): + """Fit an error-correcting output-code strategy. + Parameters + ---------- + estimator : estimator object + An estimator object implementing `fit` and one of `decision_function` + or `predict_proba`. + code_size : float, optional + Percentage of the number of classes to be used to create the code book. + random_state : numpy.RandomState, optional + The generator used to initialize the codebook. Defaults to + numpy.random. + Returns + -------- + estimators : list of `int(n_classes * code_size)` estimators + Estimators used for predictions. + classes : numpy array of shape [n_classes] + Array containing labels. + code_book_ : numpy array of shape [n_classes, code_size] + Binary array containing the code of each class. + """ + ecoc = OutputCodeClassifier(estimator, random_state=random_state, + n_jobs=n_jobs).fit(X, y) + return ecoc.estimators_, ecoc.classes_, ecoc.code_book_ + + +@deprecated("predict_ecoc is deprecated and will be removed in 0.18." + "Use the OutputCodeClassifier instead.") +def predict_ecoc(estimators, classes, code_book, X): + """Make predictions using the error-correcting output-code strategy.""" + ecoc = OutputCodeClassifier(clone(estimators[0])) + ecoc.classes_ = classes + ecoc.estimators_ = estimators + ecoc.code_book_ = code_book + + return ecoc.predict(X) + + +class OutputCodeClassifier(BaseEstimator, ClassifierMixin, MetaEstimatorMixin): + """(Error-Correcting) Output-Code multiclass strategy + Output-code based strategies consist in representing each class with a + binary code (an array of 0s and 1s). At fitting time, one binary + classifier per bit in the code book is fitted. At prediction time, the + classifiers are used to project new points in the class space and the class + closest to the points is chosen. The main advantage of these strategies is + that the number of classifiers used can be controlled by the user, either + for compressing the model (0 < code_size < 1) or for making the model more + robust to errors (code_size > 1). See the documentation for more details. + Read more in the :ref:`User Guide <ecoc>`. + Parameters + ---------- + estimator : estimator object + An estimator object implementing `fit` and one of `decision_function` + or `predict_proba`. + code_size : float + Percentage of the number of classes to be used to create the code book. + A number between 0 and 1 will require fewer classifiers than + one-vs-the-rest. A number greater than 1 will require more classifiers + than one-vs-the-rest. + random_state : numpy.RandomState, optional + The generator used to initialize the codebook. Defaults to + numpy.random. + n_jobs : int, optional, default: 1 + The number of jobs to use for the computation. If -1 all CPUs are used. + If 1 is given, no parallel computing code is used at all, which is + useful for debugging. For n_jobs below -1, (n_cpus + 1 + n_jobs) are + used. Thus for n_jobs = -2, all CPUs but one are used. + Attributes + ---------- + estimators_ : list of `int(n_classes * code_size)` estimators + Estimators used for predictions. + classes_ : numpy array of shape [n_classes] + Array containing labels. + code_book_ : numpy array of shape [n_classes, code_size] + Binary array containing the code of each class. + References + ---------- + .. [1] "Solving multiclass learning problems via error-correcting output + codes", + Dietterich T., Bakiri G., + Journal of Artificial Intelligence Research 2, + 1995. + .. [2] "The error coding method and PICTs", + James G., Hastie T., + Journal of Computational and Graphical statistics 7, + 1998. + .. [3] "The Elements of Statistical Learning", + Hastie T., Tibshirani R., Friedman J., page 606 (second-edition) + 2008. + """ + + def __init__(self, estimator, code_size=1.5, random_state=None, n_jobs=1): + self.estimator = estimator + self.code_size = code_size + self.random_state = random_state + self.n_jobs = n_jobs + + def fit(self, X, y): + """Fit underlying estimators. + Parameters + ---------- + X : (sparse) array-like, shape = [n_samples, n_features] + Data. + y : numpy array of shape [n_samples] + Multi-class targets. + Returns + ------- + self + """ + if self.code_size <= 0: + raise ValueError("code_size should be greater than 0, got {1}" + "".format(self.code_size)) + + _check_estimator(self.estimator) + random_state = check_random_state(self.random_state) + + self.classes_ = np.unique(y) + n_classes = self.classes_.shape[0] + code_size_ = int(n_classes * self.code_size) + + # FIXME: there are more elaborate methods than generating the codebook + # randomly. + self.code_book_ = random_state.random_sample((n_classes, code_size_)) + self.code_book_[self.code_book_ > 0.5] = 1 + + if hasattr(self.estimator, "decision_function"): + self.code_book_[self.code_book_ != 1] = -1 + else: + self.code_book_[self.code_book_ != 1] = 0 + + classes_index = dict((c, i) for i, c in enumerate(self.classes_)) + + Y = np.array([self.code_book_[classes_index[y[i]]] + for i in range(X.shape[0])], dtype=np.int) + + self.estimators_ = Parallel(n_jobs=self.n_jobs)( + delayed(_fit_binary)(self.estimator, X, Y[:, i]) + for i in range(Y.shape[1])) + + return self + + def predict(self, X): + """Predict multi-class targets using underlying estimators. + Parameters + ---------- + X : (sparse) array-like, shape = [n_samples, n_features] + Data. + Returns + ------- + y : numpy array of shape [n_samples] + Predicted multi-class targets. + """ + check_is_fitted(self, 'estimators_') + Y = np.array([_predict_binary(e, X) for e in self.estimators_]).T + pred = euclidean_distances(Y, self.code_book_).argmin(axis=1) + return self.classes_[pred] + diff --git a/Code/MultiView/Mumbo/Classifiers/__init__.py b/Code/MultiView/Mumbo/Classifiers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..67fe9de36bef451e807afd5bebf524100535612a --- /dev/null +++ b/Code/MultiView/Mumbo/Classifiers/__init__.py @@ -0,0 +1,13 @@ +# from os import listdir +# from os.path import isfile, join +# mypath="." +# modules = [f[:-3] for f in listdir(mypath) if isfile(join(mypath, f)) and f[-3:] == ".py" and f!="__init__.py" ] +# __all__ = modules + +import os +for module in os.listdir(os.path.dirname(os.path.realpath(__file__))): + if module == '__init__.py' or module[-3:] != '.py': + continue + __import__(module[:-3], locals(), globals()) +del module +del os diff --git a/Code/MultiView/Mumbo/Mumbo.py b/Code/MultiView/Mumbo/Mumbo.py index db1e02134c750c7a4b4f76e1f8dbf6df4fdeb945..8fd0cb7d890eff42c0e3fd0ca95cce5027a9934e 100644 --- a/Code/MultiView/Mumbo/Mumbo.py +++ b/Code/MultiView/Mumbo/Mumbo.py @@ -1,7 +1,7 @@ import numpy as np import math from joblib import Parallel, delayed -import Classifers +from Classifiers import * # Data shape : ((Views, Examples, Corrdinates)) @@ -29,7 +29,7 @@ def initialize(NB_CLASS, NB_VIEW, NB_ITER, DATASET_LENGTH, CLASS_LABELS): ]) fs = np.zeros((NB_ITER, NB_VIEW, DATASET_LENGTH, NB_CLASS)) ds = np.zeros((NB_ITER, NB_VIEW, DATASET_LENGTH)) - edges = np.zeros((NB_ITER, NB_VIEW, DATASET_LENGTH)) + edges = np.zeros((NB_ITER, NB_VIEW)) alphas = np.zeros((NB_ITER, NB_VIEW)) predictions = np.zeros((NB_ITER, NB_VIEW, DATASET_LENGTH)) generalAlphas = np.zeros(NB_ITER) @@ -41,7 +41,7 @@ def initialize(NB_CLASS, NB_VIEW, NB_ITER, DATASET_LENGTH, CLASS_LABELS): def computeWeights(costMatrices, NB_CLASS, DATASET_LENGTH, iterIndice, viewIndice, CLASS_LABELS): dist = np.sum(costMatrices[iterIndice, viewIndice]) # ATTENTION - weights = np.array([costMatrices[iterIndice, viewIndice, + weights = np.array([costMatrices[iterIndice, viewIndice, exampleIndice, CLASS_LABELS[exampleIndice]]/dist\ for exampleIndice in range(DATASET_LENGTH)]) return weights @@ -51,30 +51,38 @@ def trainWeakClassifier(classifierName, monoviewDataset, CLASS_LABELS, costMatri NB_CLASS, DATASET_LENGTH, iterIndice, viewIndice, classifier_config): weights = computeWeights(costMatrices, NB_CLASS, DATASET_LENGTH, - iterIndice, viewIndice) - #Train classifier(classifierName, weights, DATASET, CLASS_LABEL, classifier_config) + iterIndice, viewIndice, CLASS_LABELS) + classifierMethod=globals()["DecisionTree"].DecisionTree #Permet d'appeler une fonction avec une string + classifier, classes = classifierMethod(monoviewDataset, CLASS_LABELS, classifier_config, weights) return classifier, classes -def trainWeakClassifers(classifierName, DATASET, CLASS_LABELS, costMatrices, +def trainWeakClassifers(classifierName, DATASET, CLASS_LABELS, costMatrices, NB_CLASS, DATASET_LENGTH, iterIndice, classifier_config, - NB_CORES): + NB_CORES, NB_VIEW): + trainedClassifiers = [] + labelsMatrix = [] if NB_CORES > NB_VIEW: NB_JOBS = NB_VIEW else: NB_JOBS = NB_CORES - trainedClassifiers, classesMatrix = Parallel(n_jobs=NB_JOBS)( + trainedClassifiersAndLabels = Parallel(n_jobs=NB_JOBS)( delayed(trainWeakClassifier)(classifierName, DATASET[viewIndice], CLASS_LABELS, costMatrices, NB_CLASS, DATASET_LENGTH, iterIndice, viewIndice, classifier_config) for viewIndice in range(NB_VIEW)) - return trainedClassifiers, classesMatrix + for (classifier, labelsArray) in trainedClassifiersAndLabels: + trainedClassifiers.append(classifier) + labelsMatrix.append(labelsArray) -def computeEdge (predictionMatrix, costMatrix): - return np.sum(predictionMatrix*costMatrix) + return np.array(trainedClassifiers), np.array(labelsMatrix) + + +def computeEdge(predictionMatrix, costMatrix, NB_CLASS): + return np.sum(np.array([np.sum(predictionMatrix*costMatrix[:,classIndice]) for classIndice in range(NB_CLASS)])) def computeAlpha(edge): @@ -131,7 +139,7 @@ def updateCostmatrices(costMatrices, fs, iterIndice, NB_VIEW, DATASET_LENGTH, for exampleIndice in range(DATASET_LENGTH): for classe in range(NB_CLASS): if classe != CLASS_LABELS[exampleIndice]: - costMatrices[iterIndice, viewIndice, exampleIndice, classe] \ + costMatrices[iterIndice+1, viewIndice, exampleIndice, classe] \ = math.exp(fs[iterIndice, viewIndice, exampleIndice, classe] - \ fs[iterIndice, viewIndice, exampleIndice, CLASS_LABELS[exampleIndice]]) @@ -142,9 +150,9 @@ def updateCostmatrices(costMatrices, fs, iterIndice, NB_VIEW, DATASET_LENGTH, return costMatrices -def chooseView(predictions, generalCostMatrix, iterIndice, NB_VIEW): +def chooseView(predictions, generalCostMatrix, iterIndice, NB_VIEW, NB_CLASS): edges = np.array([computeEdge(predictions[iterIndice, viewIndice], - generalCostMatrix) \ + generalCostMatrix[iterIndice], NB_CLASS) \ for viewIndice in range(NB_VIEW)]) bestView = np.argmax(edges) return bestView, edges[bestView] @@ -204,7 +212,7 @@ def computeFinalFs(DATASET_LENGTH, NB_CLASS, generalAlphas, predictions, def trainMumbo(DATASET, CLASS_LABELS, NB_CLASS, NB_VIEW, NB_ITER, DATASET_LENGTH, - classifierName, NB_CORES): + classifierName, NB_CORES, classifierConfig): # Initialization costMatrices, \ @@ -218,57 +226,62 @@ def trainMumbo(DATASET, CLASS_LABELS, NB_CLASS, NB_VIEW, NB_ITER, DATASET_LENGTH # Learning for iterIndice in range(NB_ITER): - classifiers, predictedLabels = trainWeakClassifers(classifierName, - DATASET, - CLASS_LABELS, - costMatrices, - NB_CLASS, - DATASET_LENGTH, - iterIndice, - classifier_config, - NB_CORES) + + classifiers, predictedLabels = trainWeakClassifers(classifierName, + DATASET, + CLASS_LABELS, + costMatrices, + NB_CLASS, + DATASET_LENGTH, + iterIndice, + classifierConfig, + NB_CORES, NB_VIEW) + predictions[iterIndice] = predictedLabels - + for viewIndice in range(NB_VIEW): - + edges[iterIndice, viewIndice] = computeEdge(predictions[iterIndice, - viewIndice], - costMatrices[iterIndice+1, - viewIndice]) - alphas[iterIndice, viewIndice] = computeAlpha(edges[iterIndice, + viewIndice], + costMatrices[iterIndice+1, + viewIndice], NB_CLASS) + + alphas[iterIndice, viewIndice] = computeAlpha(edges[iterIndice, viewIndice]) - - ds = updateDs(ds, predictions, CLASS_LABELS, NB_VIEW, DATASET_LENGTH, - NB_CLASS, iterIndice) - fs = updateFs(predictions, ds, alphas, fs, iterIndice, NB_VIEW, - DATASET_LENGTH, NB_CLASS, CLASS_LABELS) - costMatrices = updateCostmatrices(costMatrices, fs, iterIndice, - NB_VIEW, DATASET_LENGTH, - NB_CLASS, CLASS_LABELS) - - bestView, edge = chooseView(predictions, generalCostMatrix, - iterIndice, NB_VIEW) - + + ds = updateDs(ds, predictions, CLASS_LABELS, NB_VIEW, DATASET_LENGTH, + NB_CLASS, iterIndice) + fs = updateFs(predictions, ds, alphas, fs, iterIndice, NB_VIEW, + DATASET_LENGTH, NB_CLASS, CLASS_LABELS) + costMatrices = updateCostmatrices(costMatrices, fs, iterIndice, + NB_VIEW, DATASET_LENGTH, + NB_CLASS, CLASS_LABELS) + + bestView, edge = chooseView(predictions, generalCostMatrix, + iterIndice, NB_VIEW, NB_CLASS) + bestViews[iterIndice] = bestView generalAlphas[iterIndice] = computeAlpha(edge) bestClassifiers.append(classifiers[bestView]) generalFs = updateGeneralFs(generalFs, iterIndice, predictions, alphas, - DATASET_LENGTH, NB_CLASS, bestView, - generalAlphas, CLASS_LABELS) - generalCostMatrix = updateGeneralCostMatrix(generalCostMatrix, - generalFs, iterIndice, - DATASET_LENGTH, NB_CLASS, + DATASET_LENGTH, NB_CLASS, bestView, + generalAlphas, CLASS_LABELS) + generalCostMatrix = updateGeneralCostMatrix(generalCostMatrix, + generalFs, iterIndice, + DATASET_LENGTH, NB_CLASS, CLASS_LABELS) - + # finalFs = computeFinalFs(DATASET_LENGTH, NB_CLASS, generalAlphas, predictions, bestViews, CLASS_LABELS, NB_ITER) - return bestClassifiers, generalAlphas + return bestClassifiers, generalAlphas, bestViews -def classifyMumbo(DATASET, classifiers, alphas, NB_CLASS): - DATASET_LENGTH = len(DATASET) +def classifyMumbo(DATASET, classifiers, alphas, views, NB_CLASS): + DATASET_LENGTH = len(DATASET[0]) predictedLabels = np.zeros(DATASET_LENGTH) + for exampleIndice in range(DATASET_LENGTH): votes = np.zeros(NB_CLASS) - for classifier, alpha in zip(classifiers, alphas): - votes[int(classifier.predict(DATASET[exampleIndice]))]+=alpha + for classifier, alpha, view in zip(classifiers, alphas, views): + data = np.array([np.array(DATASET[int(view)][exampleIndice])]) + votes[int(classifier.predict(data))]+=alpha predictedLabels[exampleIndice] = np.argmax(votes) return predictedLabels \ No newline at end of file diff --git a/Code/MultiView/Mumbo/__init__.py b/Code/MultiView/Mumbo/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b937cb86efd2e73baabbcfcfe235faf8154faa04 --- /dev/null +++ b/Code/MultiView/Mumbo/__init__.py @@ -0,0 +1 @@ +__all__ = ["Mumbo", "Classifiers"] \ No newline at end of file diff --git a/multiview-machine-learning-omis.iml b/multiview-machine-learning-omis.iml new file mode 100644 index 0000000000000000000000000000000000000000..ad3c0a365c8cd79b6f3291a01ea24ccdc75c0de0 --- /dev/null +++ b/multiview-machine-learning-omis.iml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="PYTHON_MODULE" version="4"> + <component name="NewModuleRootManager" inherit-compiler-output="true"> + <exclude-output /> + <content url="file://$MODULE_DIR$" /> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file