Changeset eafc9fa in sasmodels for sasmodels/kernelpy.py
- Timestamp:
- Jan 30, 2016 9:39:59 PM (8 years ago)
- Branches:
- master, core_shell_microgels, costrafo411, magnetic_model, release_v0.94, release_v0.95, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- 5925e90
- Parents:
- 823e620
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/kernelpy.py
r4c2c535 reafc9fa 1 """ 2 Python driver for python kernels 3 4 Calls the kernel with a vector of $q$ values for a single parameter set. 5 Polydispersity is supported by looping over different parameter sets and 6 summing the results. The interface to :class:`PyModel` matches those for 7 :class:`kernelcl.GpuModel` and :class:`kerneldll.DllModel`. 8 """ 1 9 import numpy as np 2 10 from numpy import pi, cos … … 5 13 6 14 class PyModel(object): 15 """ 16 Wrapper for pure python models. 17 """ 7 18 def __init__(self, info): 8 19 self.info = info 9 20 10 def __call__(self, q_input): 11 kernel = self.info['Iqxy'] if q_input.is_2D else self.info['Iq'] 21 def __call__(self, q_vectors): 22 q_input = PyInput(q_vectors, dtype=F64) 23 kernel = self.info['Iqxy'] if q_input.is_2d else self.info['Iq'] 12 24 return PyKernel(kernel, self.info, q_input) 13 25 14 # pylint: disable=no-self-use15 def make_input(self, q_vectors):16 return PyInput(q_vectors, dtype=F64)17 18 26 def release(self): 27 """ 28 Free resources associated with the model. 29 """ 19 30 pass 20 31 … … 41 52 self.nq = q_vectors[0].size 42 53 self.dtype = dtype 43 self.is_2 D= (len(q_vectors) == 2)54 self.is_2d = (len(q_vectors) == 2) 44 55 self.q_vectors = [np.ascontiguousarray(q, self.dtype) for q in q_vectors] 45 56 self.q_pointers = [q.ctypes.data for q in self.q_vectors] 46 57 47 58 def release(self): 59 """ 60 Free resources associated with the model inputs. 61 """ 48 62 self.q_vectors = [] 49 63 … … 71 85 self.q_input = q_input 72 86 self.res = np.empty(q_input.nq, q_input.dtype) 73 dim = '2d' if q_input.is_2 Delse '1d'87 dim = '2d' if q_input.is_2d else '1d' 74 88 # Loop over q unless user promises that the kernel is vectorized by 75 89 # taggining it with vectorized=True … … 77 91 if dim == '2d': 78 92 def vector_kernel(qx, qy, *args): 93 """ 94 Vectorized 2D kernel. 95 """ 79 96 return np.array([kernel(qxi, qyi, *args) 80 97 for qxi, qyi in zip(qx, qy)]) 81 98 else: 82 99 def vector_kernel(q, *args): 100 """ 101 Vectorized 1D kernel. 102 """ 83 103 return np.array([kernel(qi, *args) 84 104 for qi in q]) … … 122 142 123 143 def release(self): 144 """ 145 Free resources associated with the kernel. 146 """ 124 147 self.q_input = None 125 148
Note: See TracChangeset
for help on using the changeset viewer.