190 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| # encoding: utf-8
 | |
| """
 | |
| HelperMethods.py
 | |
| 
 | |
| Created by Miguel Molero on 2013-08-28.
 | |
| Copyright (c) 2013 MMolero. All rights reserved.
 | |
| """
 | |
| 
 | |
| import os
 | |
| # from PySide.QtCore import *
 | |
| # from PySide.QtGui import *
 | |
| 
 | |
| import collections
 | |
| import re, copy
 | |
| import numpy as np
 | |
| 
 | |
| 
 | |
| def sort_nicely(l):
 | |
|     """
 | |
|     Sort the given list in the way that humans expect.
 | |
|     """
 | |
|     convert = lambda text: int(text) if text.isdigit() else text
 | |
|     alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
 | |
|     l.sort(key=alphanum_key)
 | |
| 
 | |
| 
 | |
| def createAction(parent, text, slot=None, shortcut=None, icon=None,
 | |
|                  tip=None, checkable=False, signal="triggered()"):
 | |
|     action = QAction(text, parent)
 | |
|     if icon is not None:
 | |
|         action.setIcon(QIcon(":/%s" % icon))
 | |
|     if shortcut is not None:
 | |
|         action.setShortcut(shortcut)
 | |
|     if tip is not None:
 | |
|         action.setToolTip(tip)
 | |
|         action.setStatusTip(tip)
 | |
|     if slot is not None:
 | |
|         parent.connect(action, SIGNAL(signal), slot)
 | |
|     if checkable:
 | |
|         action.setCheckable(True)
 | |
|     return action
 | |
| 
 | |
| 
 | |
| def addActions(target, actions):
 | |
|     if not isinstance(actions, collections.Iterable):
 | |
|         target.addAction(actions)
 | |
|     else:
 | |
|         for action in actions:
 | |
|             if action is None:
 | |
|                 target.addSeparator()
 | |
|             else:
 | |
|                 target.addAction(action)
 | |
| 
 | |
| 
 | |
| def addWidgets(target, widgets):
 | |
|     if not isinstance(widgets, collections.Iterable):
 | |
|         target.addWidget(widgets)
 | |
|     else:
 | |
|         for widget in widgets:
 | |
|             target.addWidget(widget)
 | |
| 
 | |
| 
 | |
| def setEnabled(actions, state):
 | |
|     if not isinstance(actions, collections.Iterable):
 | |
|         actions.setEnabled(state)
 | |
|     else:
 | |
|         for action in actions:
 | |
|             if action is not None:
 | |
|                 action.setEnabled(state)
 | |
| 
 | |
| 
 | |
| def setVisible(target, state):
 | |
|     if not isinstance(target, collections.Iterable):
 | |
|         target.setVisible(state)
 | |
|     else:
 | |
|         for item in target:
 | |
|             if item is not None:
 | |
|                 item.setVisible(state)
 | |
| 
 | |
| 
 | |
| def setText(target, string):
 | |
|     if not isinstance(target, collections.Iterable):
 | |
|         target.setText(string)
 | |
|     else:
 | |
|         for item in target:
 | |
|             if item is not None:
 | |
|                 item.setText(string)
 | |
| 
 | |
| 
 | |
| def clear(target):
 | |
|     if not isinstance(target, collections.Iterable):
 | |
|         target.clear()
 | |
|     else:
 | |
|         for item in target:
 | |
|             item.clear()
 | |
| 
 | |
| 
 | |
| def is_number(s):
 | |
|     try:
 | |
|         float(s)
 | |
|         return True
 | |
|     except ValueError:
 | |
|         return False
 | |
| 
 | |
| 
 | |
| def mat2Obj(fromMat, toObj):
 | |
|     for name in fromMat._fieldnames:
 | |
|         value = getattr(fromMat, name)
 | |
|         if hasattr(toObj, name):
 | |
|             # print toObj, name
 | |
|             if isinstance(value, float) or isinstance(value, str) or isinstance(value, int):
 | |
|                 setattr(toObj, name, value)
 | |
|             elif isinstance(value, np.ndarray):
 | |
|                 if value.size == 1:
 | |
|                     setattr(toObj, name, value.item())
 | |
|                 else:
 | |
|                     setattr(toObj, name, value)
 | |
| 
 | |
|     return toObj
 | |
| 
 | |
| 
 | |
| def objWithListstoArrays(obj):
 | |
|     for name in obj._fieldnames:
 | |
|         value = getattr(obj, name)
 | |
|         if isinstance(value, list):
 | |
|             setattr(obj, name, np.array(value))
 | |
| 
 | |
|     return obj
 | |
| 
 | |
| 
 | |
| def objWithArraysToLists(obj):
 | |
|     for name in obj._fieldnames:
 | |
|         value = getattr(obj, name)
 | |
|         if isinstance(value, np.ndarray):
 | |
|             setattr(obj, name, value.tolist())
 | |
| 
 | |
|     return obj
 | |
| 
 | |
| 
 | |
| def loadDataFromList(data2load, key, Class):
 | |
|     if key in data2load:
 | |
|         target = list()
 | |
|         if isinstance(data2load[key], np.ndarray):
 | |
|             for item in (data2load[key]).tolist():
 | |
|                 _item = copy.deepcopy(mat2Obj(item, Class))
 | |
|                 target.append(_item)
 | |
|         else:
 | |
|             _class = copy.deepcopy(mat2Obj(data2load[key], Class))
 | |
|             target.append(_class)
 | |
| 
 | |
|         return target
 | |
|     else:
 | |
|         None
 | |
| 
 | |
| 
 | |
| def loadDataFromListWithLabels(data2load, key, listLabels, listClasses):
 | |
|     if key in data2load:
 | |
|         target = list()
 | |
| 
 | |
|         if isinstance(data2load[key], np.ndarray):
 | |
|             for item in (data2load[key]).tolist():
 | |
|                 for i in range(len(listLabels)):
 | |
|                     if item.Name == listLabels[i]:
 | |
|                         _class = copy.deepcopy(mat2Obj(item, listClasses[i]))
 | |
|                         target.append(_class)
 | |
|         else:
 | |
|             item = data2load[key]
 | |
|             for i in range(len(listLabels)):
 | |
|                 if item.Name == listLabels[i]:
 | |
|                     _class = copy.deepcopy(mat2Obj(item, listClasses[i]))
 | |
|                     target.append(_class)
 | |
|         return target
 | |
| 
 | |
|     else:
 | |
|         None
 | |
| 
 | |
| 
 | |
| def loadDataWithLabels(data2load, key, listLabels, listClasses):
 | |
|     if key in data2load:
 | |
|         item = data2load[key]
 | |
|         for i in range(len(listLabels)):
 | |
|             if item.Name == listLabels[i]:
 | |
|                 target = copy.deepcopy(mat2Obj(item, listClasses[i]))
 | |
|         return target
 | |
|     else:
 | |
|         None
 | |
| 
 | |
| 
 |