Ignore:
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/orngDlgs.py

    r11075 r11094  
    33#    signal dialog, canvas options dialog 
    44 
     5import sys 
     6import os 
     7import subprocess 
     8from contextlib import closing 
     9 
    510from PyQt4.QtCore import * 
    611from PyQt4.QtGui import * 
    712from orngCanvasItems import MyCanvasText 
    8 from contextlib import closing 
    9 import OWGUI, sys, os 
     13 
     14import OWGUI 
    1015 
    1116has_pip = True 
     
    725730        self.memo.setMinimumHeight(min(300, documentSize.height() + 2 * self.memo.frameWidth())) 
    726731 
     732 
    727733class AddOnManagerDialog(QDialog): 
    728734    def __init__(self, canvasDlg, *args): 
     
    870876                self.repaint() 
    871877                Orange.utils.addons.upgrade(name, self.pcb) 
     878            except subprocess.CalledProcessError, ex: 
     879                errormessage("Error", 
     880                             "setup.py script exited with error code %i" \ 
     881                             % ex.returncode, 
     882                             details=ex.output) 
    872883            except Exception, e: 
    873884                errormessage("Error", 
    874885                             "Problem upgrading add-on %s: %s" % (name, e), 
    875886                             exc_info=True) 
    876             except SystemExit, e: 
    877                 errormessage("Error", "Abnormal exit", exc_info=True) 
    878887 
    879888        for name in remove: 
     
    892901                self.repaint() 
    893902                Orange.utils.addons.install(name, self.pcb) 
     903            except subprocess.CalledProcessError, ex: 
     904                errormessage("Error", 
     905                             "setup.py script exited with error code %i" \ 
     906                             % ex.returncode, 
     907                             details=ex.output) 
     908 
    894909            except Exception, e: 
    895910                errormessage("Error", 
    896911                             "Problem installing add-on %s: %s" % (name, e), 
    897912                             exc_info=True) 
    898             except SystemExit, e: 
    899                 errormessage("Error", "Abnormal exit", exc_info=True) 
    900913 
    901914        if len(upgrade) > 0: 
  • Orange/OrangeCanvas/orngHelp.py

    r9671 r11089  
    3131         
    3232    def showHelpFor(self, widgetInfo, bringToFront=False): 
    33         helpFileName = os.path.join(widgetInfo.docDir(), "%s.htm" % (widgetInfo.fileName[2:])).replace("\\", "/") 
    34         if not os.path.exists(helpFileName): 
     33        helpFileName = None 
     34        docdir = widgetInfo.docDir() 
     35        if docdir is not None: 
     36            helpFileName = os.path.join(widgetInfo.docDir(), "%s.htm" % (widgetInfo.fileName[2:])).replace("\\", "/") 
     37 
     38        if helpFileName is None or not os.path.exists(helpFileName): 
    3539            QMessageBox.warning( None, "Not available", "Sorry, there is no documentation available for this widget.", QMessageBox.Ok) 
    3640            return 
  • Orange/OrangeCanvas/orngOutput.py

    r9671 r11093  
    2323    @wraps(func) 
    2424    def safe_wrapper(self, *args, **kwargs): 
    25         if not hasattr(self, "_thread_safe_thread"):  
     25        if not hasattr(self, "_thread_safe_thread"): 
    2626            self._thread_safe_thread = self.thread() 
    2727        if QThread.currentThread() is not self._thread_safe_thread: 
    28             print >> sys.stderr, "Calling", func, "with", args, kwargs, "from the wrong thread.", "Queuing the call!" 
    2928            QMetaObject.invokeMethod(self, "queuedInvoke", Qt.QueuedConnection, Q_ARG("PyQt_PyObject", partial(safe_wrapper, self, *args, **kwargs))) 
    3029        else: 
    3130            return func(self, *args, **kwargs) 
    32              
     31 
    3332    return safe_wrapper 
    3433 
     
    5049        self.defaultExceptionHandler = sys.excepthook 
    5150        self.defaultSysOutHandler = sys.stdout 
     51        self.defaultSysErrHandler = sys.stderr 
    5252 
    5353        self.logFile = open(os.path.join(canvasDlg.canvasSettingsDir, "outputLog.html"), "w") # create the log file 
     
    9999        if __DISABLE_OUTPUT__: 
    100100            return 
    101         if catch: sys.excepthook = self.exceptionHandler 
    102         else:     sys.excepthook = self.defaultExceptionHandler 
     101        if catch: 
     102            sys.excepthook = self.exceptionHandler 
     103        else: 
     104            sys.excepthook = self.defaultExceptionHandler 
    103105 
    104106    def catchOutput(self, catch): 
    105107        if __DISABLE_OUTPUT__: 
    106             return  
    107         if catch:    sys.stdout = self 
    108         else:         sys.stdout = self.defaultSysOutHandler 
     108            return 
     109        if catch: 
     110            sys.stdout = self 
     111            sys.stderr = self 
     112        else: 
     113            sys.stdout = self.defaultSysOutHandler 
     114            sys.stderr = self.defaultSysErrHandler 
    109115 
    110116    def clear(self): 
  • Orange/__init__.py

    r11031 r11092  
    3535            UserWarning, 2) 
    3636        alreadyWarned = True 
     37 
    3738 
    3839def _import_addons(): 
     
    108109_import("classification.knn") 
    109110_import("classification.majority") 
     111_import("classification.neural") 
    110112 
    111113_import("tuning") 
  • Orange/data/discretization.py

    r10046 r11091  
    66    Preprocessor_discretize 
    77 
     8 
    89class DiscretizeTable(object): 
    910    """Discretizes all continuous features of the data table. 
    1011 
    11     :param data: data to discretize. 
     12    :param data: Data to discretize. 
    1213    :type data: :class:`Orange.data.Table` 
    1314 
    14     :param features: data features to discretize. None (default) to discretize all features. 
     15    :param features: Data features to discretize. `None` (default) to 
     16        discretize all features. 
    1517    :type features: list of :class:`Orange.feature.Descriptor` 
    1618 
    17     :param method: feature discretization method. 
    18     :type method: :class:`Discretization` 
     19    :param method: Feature discretization method. 
     20    :type method: :class:`Orange.feature.discretization.Discretization` 
    1921 
    20     :param clean: clean the data domain after discretization. If True, features discretized to a constant will be 
    21       removed. Useful only for discretizers which infer number of discretization intervals from data, 
    22       like :class:`Orange.feature.discretize.Entropy` (default: True). 
    23     :type clean: boolean 
     22    :param clean: Clean the data domain after discretization. If `True`, 
     23        features discretized to a constant will be removed. Useful only 
     24        for discretizers which infer number of discretization intervals 
     25        from data, like :class:`Orange.feature.discretize.Entropy` 
     26        (default: `True`). 
     27    :type clean: bool 
    2428 
    2529    """ 
    26     def __new__(cls, data=None, features=None, discretize_class=False, method=EqualFreq(n=3), clean=True): 
     30    def __new__(cls, data=None, features=None, discretize_class=False, 
     31                method=EqualFreq(n=3), clean=True): 
    2732        if data is None: 
    2833            self = object.__new__(cls) 
    2934            return self 
    3035        else: 
    31             self = cls(features=features, discretize_class=discretize_class, method=method, clean=clean) 
     36            self = cls(features=features, discretize_class=discretize_class, 
     37                       method=method, clean=clean) 
    3238            return self(data) 
    3339 
    34     def __init__(self, features=None, discretize_class=False, method=EqualFreq(n=3), clean=True): 
     40    def __init__(self, features=None, discretize_class=False, 
     41                 method=EqualFreq(n=3), clean=True): 
    3542        self.features = features 
    3643        self.discretize_class = discretize_class 
     
    3946 
    4047    def __call__(self, data): 
    41         pp = Preprocessor_discretize(attributes=self.features, discretizeClass=self.discretize_class) 
     48        pp = Preprocessor_discretize(attributes=self.features, 
     49                                     discretize_class=self.discretize_class) 
    4250        pp.method = self.method 
    4351        ddata = pp(data) 
    4452 
    4553        if self.clean: 
    46             return ddata.select([x for x in ddata.domain.features if len(x.values)>1] + [ddata.domain.classVar]) 
     54            features = [x for x in ddata.domain.features if len(x.values) > 1] 
     55            domain = Orange.data.Domain(features, ddata.domain.class_var, 
     56                                        class_vars=ddata.domain.class_vars) 
     57            return Orange.data.Table(domain, ddata) 
    4758        else: 
    4859            return ddata 
  • Orange/utils/addons.py

    r11071 r11094  
    3030import sys 
    3131import platform 
     32import subprocess 
     33 
    3234from collections import namedtuple, defaultdict 
    3335from contextlib import closing 
     
    177179    rebuild_index() 
    178180 
     181 
    179182def run_setup(setup_script, args): 
    180     old_dir = os.getcwd() 
    181     save_argv = sys.argv[:] 
    182     save_path = sys.path[:] 
    183     setup_dir = os.path.abspath(os.path.dirname(setup_script)) 
    184     temp_dir = os.path.join(setup_dir,'temp') 
    185     if not os.path.isdir(temp_dir): os.makedirs(temp_dir) 
    186     save_tmp = tempfile.tempdir 
    187     save_modules = sys.modules.copy() 
    188     try: 
    189         tempfile.tempdir = temp_dir 
    190         os.chdir(setup_dir) 
    191         try: 
    192             sys.argv[:] = [setup_script]+list(args) 
    193             sys.path.insert(0, setup_dir) 
    194             execfile( 
    195                     "setup.py", 
    196                     {'__file__':setup_script, '__name__':'__main__'} 
    197                 ) 
    198         except SystemExit, v: 
    199             if v.args and v.args[0]: 
    200                 raise 
    201                 # Normal exit, just return 
    202     finally: 
    203         sys.modules.update(save_modules) 
    204         for key in list(sys.modules): 
    205             if key not in save_modules: del sys.modules[key] 
    206         os.chdir(old_dir) 
    207         sys.path[:] = save_path 
    208         sys.argv[:] = save_argv 
    209         tempfile.tempdir = save_tmp 
     183    """ 
     184    Run `setup_script` with `args` in a subprocess, using 
     185    :ref:`subprocess.check_output`. 
     186 
     187    """ 
     188    source_root = os.path.dirname(setup_script) 
     189    executable = sys.executable 
     190    extra_kwargs = {} 
     191    if os.name == "nt" and os.path.basename(executable) == "pythonw.exe": 
     192        dirname, _ = os.path.split(executable) 
     193        executable = os.path.join(dirname, "python.exe") 
     194        # by default a new console window would show up when executing the 
     195        # script 
     196        startupinfo = subprocess.STARTUPINFO() 
     197        startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
     198        extra_kwargs["startupinfo"] = startupinfo 
     199 
     200    subprocess.check_output([executable, setup_script] + args, 
     201                             cwd=source_root, 
     202                             stderr=subprocess.STDOUT, 
     203                             **extra_kwargs) 
    210204 
    211205 
     
    235229            raise Exception("Unable to install add-on - it is not properly packed.") 
    236230 
    237         try: 
    238             switches = [] 
    239             if site.USER_SITE in sys.path:   # we're not in a virtualenv 
    240                 switches.append('--user') 
    241             run_setup(setup_py, ['install'] + switches) 
    242         except Exception, e: 
    243             raise Exception("Unable to install add-on: %s" % e) 
     231        switches = [] 
     232        if site.USER_SITE in sys.path:   # we're not in a virtualenv 
     233            switches.append('--user') 
     234        run_setup(setup_py, ['install'] + switches) 
    244235    finally: 
    245236        shutil.rmtree(tmpdir, ignore_errors=True) 
  • docs/tutorial/rst/code/regression-cv.py

    r11052 r11090  
    1313 
    1414res = Orange.evaluation.testing.cross_validation(learners, data, folds=5) 
    15 mse = Orange.evaluation.scoring.RMSE(res) 
     15rmse = Orange.evaluation.scoring.RMSE(res) 
    1616 
    1717print "Learner  RMSE" 
    1818for i in range(len(learners)): 
    19   print "%-7s %5.2f" % (learners[i].name, mse[i]) 
     19    print "{0:8}".format(learners[i].name), 
     20    print "%.2f" % rmse[i] 
  • docs/tutorial/rst/regression.rst

    r11058 r11090  
    5454Just like for classification, the same evaluation module (``Orange.evaluation``) is available for regression. Its testing submodule includes procedures such as cross-validation, leave-one-out testing and similar, and functions in scoring submodule can assess the accuracy from the testing: 
    5555 
    56 .. literalinclude:: code/regression-other.py 
     56.. literalinclude:: code/regression-cv.py 
    5757   :lines: 3- 
    5858 
Note: See TracChangeset for help on using the changeset viewer.