source: sasview/src/sas/sasgui/perspectives/fitting/gpu_options.py @ 6a569b3

Last change on this file since 6a569b3 was 6a569b3, checked in by wojciech, 8 years ago

lint fixes

  • Property mode set to 100644
File size: 3.5 KB
Line 
1'''
2Created on Nov 29, 2016
3
4@author: wpotrzebowski
5'''
6
7import os
8import warnings
9
10import wx
11import wx.richtext
12import wx.lib.hyperlink
13
14from sas.sasgui.guiframe.documentation_window import DocumentationWindow
15
16class GpuOptions(wx.Dialog):
17    """
18    "Acknowledgement" Dialog Box
19
20    Shows the current method for acknowledging SasView in
21    scholarly publications.
22
23    """
24
25    def __init__(self, *args, **kwds):
26
27        kwds["style"] = wx.DEFAULT_DIALOG_STYLE
28        wx.Dialog.__init__(self, *args, **kwds)
29
30        clinfo = self._get_clinfo()
31
32        self.panel1 = wx.Panel(self, -1)
33        static_box1 = wx.StaticBox(self.panel1, -1, "Available OpenCL Options:")
34
35        boxsizer = wx.BoxSizer(orient=wx.VERTICAL)
36        self.option_button = {}
37        for index, clopt in enumerate(clinfo):
38            button = wx.RadioButton(self.panel1, -1, label=clopt, name=clopt)
39            if clopt != "No OpenCL":
40                self.option_button[clopt] = str(index)
41            else:
42                self.option_button[clopt] = "None"
43            self.Bind(wx.EVT_RADIOBUTTON, self.on_radio, id=button.GetId())
44            boxsizer.Add(button, 0, 0)
45
46        fit_hsizer = wx.StaticBoxSizer(static_box1, orient=wx.VERTICAL)
47        fit_hsizer.Add(boxsizer, 0, wx.ALL, 5)
48
49        self.panel1.SetSizer(fit_hsizer)
50
51        self.vbox = wx.BoxSizer(wx.VERTICAL)
52        self.vbox.Add(self.panel1, 0, wx.ALL, 10)
53
54        accept_btn = wx.Button(self, wx.ID_OK)
55        accept_btn.SetToolTipString("Accept OpenCL settings")
56
57        help_btn = wx.Button(self, wx.ID_HELP, 'Help')
58        help_btn.SetToolTipString("Help on the GPU options")
59
60        self.Bind(wx.EVT_BUTTON, self.on_accept, accept_btn)
61        self.Bind(wx.EVT_BUTTON, self.on_help, help_btn)
62        self.Bind(wx.EVT_CLOSE, self.on_close)
63
64        btn_sizer = wx.BoxSizer(wx.HORIZONTAL)
65        btn_sizer.Add((10, 20), 1) # stretchable whitespace
66        btn_sizer.Add(accept_btn, 0)
67        btn_sizer.Add((10, 20), 0) # non-stretchable whitespace
68        btn_sizer.Add(help_btn, 0)
69
70        # Add the button sizer to the main sizer.
71        self.vbox.Add(btn_sizer, 0, wx.EXPAND|wx.ALL, 10)
72
73        self.SetSizer(self.vbox)
74        self.vbox.Fit(self)
75
76        self.Centre()
77
78    def _get_clinfo(self):
79        try:
80            import pyopencl as cl
81            clinfo = []
82            for platform in cl.get_platforms():
83                for device in platform.get_devices():
84                    clinfo.append(device.name)
85            clinfo.append("No OpenCL")
86        except ImportError:
87            warnings.warn("pyopencl import failed")
88            clinfo = None
89        return clinfo
90
91    def on_radio(self, event):
92        """
93        Action triggered when button is selected
94        :param event:
95        :return:
96        """
97
98        import sasmodels
99        button = event.GetEventObject()
100        os.environ["SAS_OPENCL"] = self.option_button[button.Name]
101        sasmodels.kernelcl.ENV = None
102        #Need to reload sasmodels.core module to account SAS_OPENCL = "None"
103        reload(sasmodels.core)
104
105    def on_accept(self, event):
106        """
107        Close window on accpetance
108        """
109        event.Skip()
110
111    def on_help(self):
112        """
113        Provide help on opencl options.
114        """
115        TreeLocation = "user/gpu_computations.html"
116        anchor = "#device-selection"
117        DocumentationWindow(self, -1,
118                            TreeLocation, anchor, "OpenCL Options Help")
119
120    def on_close(self, event):
121        """
122        Close window
123        """
124        event.Skip()
Note: See TracBrowser for help on using the repository browser.