Changeset 6c497b7 in sasview for src/sas/sascalc
- Timestamp:
- Apr 16, 2017 1:01:30 PM (8 years ago)
- Branches:
- master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- f94a935
- Parents:
- de99a5f0 (diff), e5cbbce (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Location:
- src/sas/sascalc
- Files:
-
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sascalc/calculator/kiessig_calculator.py
rb699768 r235f514 49 49 return None 50 50 # check if delta_q is zero 51 if dq == 0.0 or dq ==None:51 if dq == 0.0 or dq is None: 52 52 return None 53 53 else: -
src/sas/sascalc/calculator/resolution_calculator.py
r9c0f3c17 r7432acb 608 608 a_value *= 1.0E-16 609 609 # if lamda is give (broad meanning of A) return 2* lamda^2 * A 610 if lamda !=None:610 if lamda is not None: 611 611 a_value *= (4 * lamda * lamda) 612 612 return a_value -
src/sas/sascalc/calculator/sas_gen.py
r9c0f3c17 r7432acb 97 97 :Param volume: pixel volume [float] 98 98 """ 99 if self.data_vol ==None:99 if self.data_vol is None: 100 100 raise 101 101 self.data_vol = volume … … 119 119 pos_z = self.data_z 120 120 len_x = len(pos_x) 121 if self.is_avg ==None:121 if self.is_avg is None: 122 122 len_x *= -1 123 123 pos_x, pos_y, pos_z = transform_center(pos_x, pos_y, pos_z) … … 257 257 self.sld_n = np.zeros(length) 258 258 259 if omfdata.mx ==None:259 if omfdata.mx is None: 260 260 self.mx = np.zeros(length) 261 if omfdata.my ==None:261 if omfdata.my is None: 262 262 self.my = np.zeros(length) 263 if omfdata.mz ==None:263 if omfdata.mz is None: 264 264 self.mz = np.zeros(length) 265 265 … … 691 691 output.set_pix_type('pixel') 692 692 output.set_pixel_symbols('pixel') 693 if vol_pix !=None:693 if vol_pix is not None: 694 694 output.set_pixel_volumes(vol_pix) 695 695 return output … … 703 703 :Param data: MagSLD data object 704 704 """ 705 if path ==None:705 if path is None: 706 706 raise ValueError, "Missing the file path." 707 if data ==None:707 if data is None: 708 708 raise ValueError, "Missing the data to save." 709 709 x_val = data.pos_x … … 713 713 length = len(x_val) 714 714 sld_n = data.sld_n 715 if sld_n ==None:715 if sld_n is None: 716 716 sld_n = np.zeros(length) 717 717 sld_mx = data.sld_mx 718 if sld_mx ==None:718 if sld_mx is None: 719 719 sld_mx = np.zeros(length) 720 720 sld_my = np.zeros(length) … … 867 867 self.sld_theta = None 868 868 self.pix_symbol = None 869 if sld_mx != None and sld_my != None and sld_mz !=None:869 if sld_mx is not None and sld_my is not None and sld_mz is not None: 870 870 self.set_sldms(sld_mx, sld_my, sld_mz) 871 871 self.set_nodes() … … 935 935 :Params pixel: str; pixel or atomic symbol, or array of strings 936 936 """ 937 if self.sld_n ==None:937 if self.sld_n is None: 938 938 return 939 939 if symbol.__class__.__name__ == 'str': … … 947 947 :Params pixel: str; pixel or atomic symbol, or array of strings 948 948 """ 949 if self.sld_n ==None:949 if self.sld_n is None: 950 950 return 951 951 if vol.__class__.__name__ == 'ndarray': -
src/sas/sascalc/data_util/calcthread.py
r64ca561 r7432acb 205 205 def update(self, **kwargs): 206 206 """Update GUI with the lastest results from the current work unit.""" 207 if self.updatefn !=None and clock() > self._time_for_update:207 if self.updatefn is not None and clock() > self._time_for_update: 208 208 self._lock.acquire() 209 209 self._time_for_update = clock() + self._delay … … 221 221 def complete(self, **kwargs): 222 222 """Update the GUI with the completed results from a work unit.""" 223 if self.completefn !=None:223 if self.completefn is not None: 224 224 self.completefn(**kwargs) 225 225 sleep(self.yieldtime) -
src/sas/sascalc/data_util/qsmearing.py
r9a5097c r235f514 42 42 # This checks for 2D data (does not throw exception because fail is common) 43 43 if data.__class__.__name__ not in ['Data1D', 'Theory1D']: 44 if data ==None:44 if data is None: 45 45 return None 46 elif data.dqx_data == None or data.dqy_data ==None:46 elif data.dqx_data is None or data.dqy_data is None: 47 47 return None 48 48 return PySmear2D(data) -
src/sas/sascalc/dataloader/data_info.py
r959eb01 r7432acb 806 806 # create zero vector 807 807 dy_other = other.dy 808 if other.dy ==None or (len(other.dy) != len(other.y)):808 if other.dy is None or (len(other.dy) != len(other.y)): 809 809 dy_other = np.zeros(len(other.y)) 810 810 811 811 # Check that we have errors, otherwise create zero vector 812 812 dy = self.dy 813 if self.dy ==None or (len(self.dy) != len(self.y)):813 if self.dy is None or (len(self.dy) != len(self.y)): 814 814 dy = np.zeros(len(self.y)) 815 815 … … 822 822 dy, dy_other = self._validity_check(other) 823 823 result = self.clone_without_data(len(self.x)) 824 if self.dxw ==None:824 if self.dxw is None: 825 825 result.dxw = None 826 826 else: 827 827 result.dxw = np.zeros(len(self.x)) 828 if self.dxl ==None:828 if self.dxl is None: 829 829 result.dxl = None 830 830 else: … … 884 884 self._validity_check_union(other) 885 885 result = self.clone_without_data(len(self.x) + len(other.x)) 886 if self.dy ==None or other.dy is None:886 if self.dy is None or other.dy is None: 887 887 result.dy = None 888 888 else: 889 889 result.dy = np.zeros(len(self.x) + len(other.x)) 890 if self.dx ==None or other.dx is None:890 if self.dx is None or other.dx is None: 891 891 result.dx = None 892 892 else: 893 893 result.dx = np.zeros(len(self.x) + len(other.x)) 894 if self.dxw ==None or other.dxw is None:894 if self.dxw is None or other.dxw is None: 895 895 result.dxw = None 896 896 else: 897 897 result.dxw = np.zeros(len(self.x) + len(other.x)) 898 if self.dxl ==None or other.dxl is None:898 if self.dxl is None or other.dxl is None: 899 899 result.dxl = None 900 900 else: … … 907 907 result.y = np.append(self.y, other.y) 908 908 result.y = result.y[ind] 909 if result.dy !=None:909 if result.dy is not None: 910 910 result.dy = np.append(self.dy, other.dy) 911 911 result.dy = result.dy[ind] … … 1030 1030 # Check that the scales match 1031 1031 err_other = other.err_data 1032 if other.err_data ==None or \1032 if other.err_data is None or \ 1033 1033 (len(other.err_data) != len(other.data)): 1034 1034 err_other = np.zeros(len(other.data)) … … 1036 1036 # Check that we have errors, otherwise create zero vector 1037 1037 err = self.err_data 1038 if self.err_data ==None or \1038 if self.err_data is None or \ 1039 1039 (len(self.err_data) != len(self.data)): 1040 1040 err = np.zeros(len(other.data)) … … 1051 1051 dy, dy_other = self._validity_check(other) 1052 1052 result = self.clone_without_data(np.size(self.data)) 1053 if self.dqx_data == None or self.dqy_data ==None:1053 if self.dqx_data is None or self.dqy_data is None: 1054 1054 result.dqx_data = None 1055 1055 result.dqy_data = None … … 1125 1125 result.ymin = self.ymin 1126 1126 result.ymax = self.ymax 1127 if self.dqx_data == None or self.dqy_data ==None or \1128 other.dqx_data == None or other.dqy_data ==None:1127 if self.dqx_data is None or self.dqy_data is None or \ 1128 other.dqx_data is None or other.dqy_data is None: 1129 1129 result.dqx_data = None 1130 1130 result.dqy_data = None -
src/sas/sascalc/dataloader/manipulations.py
rc0ca2e3d r6c497b7 24 24 import numpy as np 25 25 import sys 26 26 27 27 #from data_info import plottable_2D 28 28 from data_info import Data1D … … 226 226 # def; dqx_data = dq_r dqy_data = dq_phi 227 227 # Convert dq 2D to 1D here 228 dq_data = np.sqrt(dqx_data**2 + dqx_data**2) 228 dq_data = np.sqrt(dqx_data**2 + dqx_data**2) 229 229 return dq_data 230 230 … … 602 602 dq_data = get_dq_data(data2D) 603 603 604 #q_data_max = np.max(q_data) 605 if len(data2D.q_data) is None: 604 if len(q_data) == 0: 606 605 msg = "Circular averaging: invalid q_data: %g" % data2D.q_data 607 606 raise RuntimeError(msg) … … 734 733 735 734 # Set space for 1d outputs 736 737 735 phi_bins = np.zeros(self.nbins_phi) 736 phi_counts = np.zeros(self.nbins_phi) 738 737 phi_values = np.zeros(self.nbins_phi) 739 738 phi_err = np.zeros(self.nbins_phi) … … 844 843 phi_min = flip_phi(self.phi_min) 845 844 phi_max = flip_phi(self.phi_max) 846 845 847 846 # binning object 848 847 if run.lower() == 'phi': … … 850 849 else: 851 850 binning = Binning(self.r_min, self.r_max, self.nbins, self.base) 852 851 853 852 for n in range(len(data)): 854 853 -
src/sas/sascalc/dataloader/readers/ascii_reader.py
r959eb01 r235f514 128 128 if new_lentoks > 2: 129 129 _dy = float(toks[2]) 130 has_error_dy = False if _dy ==None else True130 has_error_dy = False if _dy is None else True 131 131 132 132 # If a 4th row is present, consider it dx 133 133 if new_lentoks > 3: 134 134 _dx = float(toks[3]) 135 has_error_dx = False if _dx ==None else True135 has_error_dx = False if _dx is None else True 136 136 137 137 # Delete the previously stored lines of data candidates if -
src/sas/sascalc/dataloader/readers/cansas_reader.py
r63d773c r7432acb 807 807 :param data1d: presumably a Data1D object 808 808 """ 809 if self.current_dataset ==None:809 if self.current_dataset is None: 810 810 x_vals = np.empty(0) 811 811 y_vals = np.empty(0) … … 895 895 # Write the file 896 896 file_ref = open(filename, 'w') 897 if self.encoding ==None:897 if self.encoding is None: 898 898 self.encoding = "UTF-8" 899 899 doc.write(file_ref, encoding=self.encoding, … … 1015 1015 :param entry_node: lxml node ElementTree object to be appended to 1016 1016 """ 1017 if datainfo.run ==None or datainfo.run == []:1017 if datainfo.run is None or datainfo.run == []: 1018 1018 datainfo.run.append(RUN_NAME_DEFAULT) 1019 1019 datainfo.run_name[RUN_NAME_DEFAULT] = RUN_NAME_DEFAULT … … 1133 1133 self.write_node(point, "T", spectrum.transmission[i], 1134 1134 {'unit': spectrum.transmission_unit}) 1135 if spectrum.transmission_deviation !=None \1135 if spectrum.transmission_deviation is not None \ 1136 1136 and len(spectrum.transmission_deviation) >= i: 1137 1137 self.write_node(point, "Tdev", … … 1213 1213 str(datainfo.source.name)) 1214 1214 self.append(source, instr) 1215 if datainfo.source.radiation ==None or datainfo.source.radiation == '':1215 if datainfo.source.radiation is None or datainfo.source.radiation == '': 1216 1216 datainfo.source.radiation = "neutron" 1217 1217 self.write_node(source, "radiation", datainfo.source.radiation) … … 1254 1254 :param instr: lxml node ElementTree object to be appended to 1255 1255 """ 1256 if datainfo.collimation == [] or datainfo.collimation ==None:1256 if datainfo.collimation == [] or datainfo.collimation is None: 1257 1257 coll = Collimation() 1258 1258 datainfo.collimation.append(coll) … … 1299 1299 :param inst: lxml instrument node to be appended to 1300 1300 """ 1301 if datainfo.detector ==None or datainfo.detector == []:1301 if datainfo.detector is None or datainfo.detector == []: 1302 1302 det = Detector() 1303 1303 det.name = "" … … 1464 1464 local_unit = None 1465 1465 exec "local_unit = storage.%s_unit" % toks[0] 1466 if local_unit !=None and units.lower() != local_unit.lower():1466 if local_unit is not None and units.lower() != local_unit.lower(): 1467 1467 if HAS_CONVERTER == True: 1468 1468 try: -
src/sas/sascalc/dataloader/readers/danse_reader.py
r959eb01 r235f514 166 166 167 167 x_vals.append(qx) 168 if xmin ==None or qx < xmin:168 if xmin is None or qx < xmin: 169 169 xmin = qx 170 if xmax ==None or qx > xmax:170 if xmax is None or qx > xmax: 171 171 xmax = qx 172 172 … … 181 181 182 182 y_vals.append(qy) 183 if ymin ==None or qy < ymin:183 if ymin is None or qy < ymin: 184 184 ymin = qy 185 if ymax ==None or qy > ymax:185 if ymax is None or qy > ymax: 186 186 ymax = qy 187 187 -
src/sas/sascalc/dataloader/readers/xml_reader.py
r463e7ffc r235f514 240 240 :param name: The name of the element to be created 241 241 """ 242 if attrib ==None:242 if attrib is None: 243 243 attrib = {} 244 244 return etree.Element(name, attrib, nsmap) … … 299 299 """ 300 300 text = str(text) 301 if attrib ==None:301 if attrib is None: 302 302 attrib = {} 303 303 elem = E(elementname, attrib, text) -
src/sas/sascalc/file_converter/cansas_writer.py
r0b1a677 r7432acb 17 17 # Write the file 18 18 file_ref = open(filename, 'w') 19 if self.encoding ==None:19 if self.encoding is None: 20 20 self.encoding = "UTF-8" 21 21 doc.write(file_ref, encoding=self.encoding, … … 96 96 self.write_node(point, "I", datainfo.y[i], 97 97 {'unit': datainfo.y_unit}) 98 if datainfo.dy !=None and len(datainfo.dy) > i:98 if datainfo.dy is not None and len(datainfo.dy) > i: 99 99 self.write_node(point, "Idev", datainfo.dy[i], 100 100 {'unit': datainfo.y_unit}) 101 if datainfo.dx !=None and len(datainfo.dx) > i:101 if datainfo.dx is not None and len(datainfo.dx) > i: 102 102 self.write_node(point, "Qdev", datainfo.dx[i], 103 103 {'unit': datainfo.x_unit}) 104 if datainfo.dxw !=None and len(datainfo.dxw) > i:104 if datainfo.dxw is not None and len(datainfo.dxw) > i: 105 105 self.write_node(point, "dQw", datainfo.dxw[i], 106 106 {'unit': datainfo.x_unit}) 107 if datainfo.dxl !=None and len(datainfo.dxl) > i:107 if datainfo.dxl is not None and len(datainfo.dxl) > i: 108 108 self.write_node(point, "dQl", datainfo.dxl[i], 109 109 {'unit': datainfo.x_unit}) -
src/sas/sascalc/fit/AbstractFitEngine.py
r9a5097c r7432acb 190 190 if qmin == 0.0 and not np.isfinite(self.y[qmin]): 191 191 self.qmin = min(self.x[self.x != 0]) 192 elif qmin !=None:192 elif qmin is not None: 193 193 self.qmin = qmin 194 if qmax !=None:194 if qmax is not None: 195 195 self.qmax = qmax 196 196 # Determine the range needed in unsmeared-Q to cover … … 202 202 self._last_unsmeared_bin = len(self.x) - 1 203 203 204 if self.smearer !=None:204 if self.smearer is not None: 205 205 self._first_unsmeared_bin, self._last_unsmeared_bin = \ 206 206 self.smearer.get_bin_range(self.qmin, self.qmax) … … 294 294 295 295 ## fitting range 296 if qmin ==None:296 if qmin is None: 297 297 self.qmin = 1e-16 298 if qmax ==None:298 if qmax is None: 299 299 self.qmax = math.sqrt(x_max * x_max + y_max * y_max) 300 300 ## new error image for fitting purpose 301 if self.err_data ==None or self.err_data == []:301 if self.err_data is None or self.err_data == []: 302 302 self.res_err_data = np.ones(len(self.data)) 303 303 else: … … 318 318 Set smearer 319 319 """ 320 if smearer ==None:320 if smearer is None: 321 321 return 322 322 self.smearer = smearer … … 330 330 if qmin == 0.0: 331 331 self.qmin = 1e-16 332 elif qmin !=None:332 elif qmin is not None: 333 333 self.qmin = qmin 334 if qmax !=None:334 if qmax is not None: 335 335 self.qmax = qmax 336 336 self.radius = np.sqrt(self.qx_data**2 + self.qy_data**2) … … 357 357 return the residuals 358 358 """ 359 if self.smearer !=None:359 if self.smearer is not None: 360 360 fn.set_index(self.idx) 361 361 gn = fn.get_value() … … 612 612 """ 613 613 """ 614 if self.pvec ==None and self.model is None and self.param_list is None:614 if self.pvec is None and self.model is None and self.param_list is None: 615 615 return "No results" 616 616 -
src/sas/sascalc/fit/Loader.py
r959eb01 rac07a3a 34 34 def set_values(self): 35 35 """ Store the values loaded from file in local variables""" 36 if not self.filename ==None:36 if self.filename is not None: 37 37 input_f = open(self.filename, 'r') 38 38 buff = input_f.read() -
src/sas/sascalc/fit/MultiplicationModel.py
r9a5097c r7432acb 178 178 """ 179 179 value = self.params['volfraction'] 180 if value !=None:180 if value is not None: 181 181 factor = self.p_model.calculate_VR() 182 if factor ==None or factor == NotImplemented or factor == 0.0:182 if factor is None or factor == NotImplemented or factor == 0.0: 183 183 val = value 184 184 else: … … 195 195 effective_radius = self.p_model.calculate_ER() 196 196 #Reset the effective_radius of s_model just before the run 197 if effective_radius !=None and effective_radius != NotImplemented:197 if effective_radius is not None and effective_radius != NotImplemented: 198 198 self.s_model.setParam('radius_effective', effective_radius) 199 199 -
src/sas/sascalc/invariant/invariant.py
r959eb01 r7432acb 329 329 330 330 ##power is given only for function = power_law 331 if power !=None:331 if power is not None: 332 332 sigma2 = linearized_data.dy * linearized_data.dy 333 333 a = -(power) … … 389 389 self._data = self._get_data(data) 390 390 # get the dxl if the data is smeared: This is done only once on init. 391 if self._data.dxl !=None and self._data.dxl.all() > 0:391 if self._data.dxl is not None and self._data.dxl.all() > 0: 392 392 # assumes constant dxl 393 393 self._smeared = self._data.dxl[0] … … 579 579 580 580 result_data = LoaderData1D(x=q, y=iq, dy=diq) 581 if self._smeared !=None:581 if self._smeared is not None: 582 582 result_data.dxl = self._smeared * np.ones(len(q)) 583 583 return result_data -
src/sas/sascalc/pr/fit/AbstractFitEngine.py
r9a5097c r7432acb 190 190 if qmin == 0.0 and not np.isfinite(self.y[qmin]): 191 191 self.qmin = min(self.x[self.x != 0]) 192 elif qmin !=None:192 elif qmin is not None: 193 193 self.qmin = qmin 194 if qmax !=None:194 if qmax is not None: 195 195 self.qmax = qmax 196 196 # Determine the range needed in unsmeared-Q to cover … … 202 202 self._last_unsmeared_bin = len(self.x) - 1 203 203 204 if self.smearer !=None:204 if self.smearer is not None: 205 205 self._first_unsmeared_bin, self._last_unsmeared_bin = \ 206 206 self.smearer.get_bin_range(self.qmin, self.qmax) … … 294 294 295 295 ## fitting range 296 if qmin ==None:296 if qmin is None: 297 297 self.qmin = 1e-16 298 if qmax ==None:298 if qmax is None: 299 299 self.qmax = math.sqrt(x_max * x_max + y_max * y_max) 300 300 ## new error image for fitting purpose 301 if self.err_data ==None or self.err_data == []:301 if self.err_data is None or self.err_data == []: 302 302 self.res_err_data = np.ones(len(self.data)) 303 303 else: … … 318 318 Set smearer 319 319 """ 320 if smearer ==None:320 if smearer is None: 321 321 return 322 322 self.smearer = smearer … … 330 330 if qmin == 0.0: 331 331 self.qmin = 1e-16 332 elif qmin !=None:332 elif qmin is not None: 333 333 self.qmin = qmin 334 if qmax !=None:334 if qmax is not None: 335 335 self.qmax = qmax 336 336 self.radius = np.sqrt(self.qx_data**2 + self.qy_data**2) … … 357 357 return the residuals 358 358 """ 359 if self.smearer !=None:359 if self.smearer is not None: 360 360 fn.set_index(self.idx) 361 361 # Get necessary data from self.data and set the data for smearing … … 615 615 """ 616 616 """ 617 if self.pvec ==None and self.model is None and self.param_list is None:617 if self.pvec is None and self.model is None and self.param_list is None: 618 618 return "No results" 619 619 -
src/sas/sascalc/pr/fit/Loader.py
r959eb01 rac07a3a 34 34 def set_values(self): 35 35 """ Store the values loaded from file in local variables""" 36 if not self.filename ==None:36 if self.filename is not None: 37 37 input_f = open(self.filename, 'r') 38 38 buff = input_f.read() -
src/sas/sascalc/pr/invertor.py
r9c0f3c17 r45dffa69 162 162 return self.set_dmax(value) 163 163 elif name == 'q_min': 164 if value ==None:164 if value is None: 165 165 return self.set_qmin(-1.0) 166 166 return self.set_qmin(value) 167 167 elif name == 'q_max': 168 if value ==None:168 if value is None: 169 169 return self.set_qmax(-1.0) 170 170 return self.set_qmax(value) … … 395 395 Check q-value against user-defined range 396 396 """ 397 if not self.q_min ==None and q < self.q_min:397 if self.q_min is not None and q < self.q_min: 398 398 return False 399 if not self.q_max ==None and q > self.q_max:399 if self.q_max is not None and q > self.q_max: 400 400 return False 401 401 return True … … 658 658 file.write("#has_bck=0\n") 659 659 file.write("#alpha_estimate=%g\n" % self.suggested_alpha) 660 if not self.out ==None:660 if self.out is not None: 661 661 if len(self.out) == len(self.cov): 662 662 for i in range(len(self.out)): -
src/sas/sascalc/pr/num_term.py
r959eb01 r7432acb 67 67 self.alpha_list = [] 68 68 for k in range(self.nterm_min, self.nterm_max, 1): 69 if self.isquit_func !=None:69 if self.isquit_func is not None: 70 70 self.isquit_func() 71 71 best_alpha, message, _ = inver.estimate_alpha(k) … … 159 159 scale = None 160 160 min_err = 0.0 161 if not path ==None:161 if path is not None: 162 162 input_f = open(path, 'r') 163 163 buff = input_f.read() … … 171 171 err = float(toks[2]) 172 172 else: 173 if scale ==None:173 if scale is None: 174 174 scale = 0.05 * math.sqrt(test_y) 175 175 #scale = 0.05/math.sqrt(y) -
src/sas/sascalc/realspace/VolumeCanvas.py
r959eb01 r235f514 293 293 """ 294 294 # If the handle is not provided, create one 295 if id ==None:295 if id is None: 296 296 id = shapeDesc.params["type"]+str(self.shapecount) 297 297 … … 325 325 """ 326 326 # If the handle is not provided, create one 327 if id ==None:327 if id is None: 328 328 id = "shape"+str(self.shapecount) 329 329 … … 663 663 # If this is the first simulation call, we need to generate the 664 664 # space points 665 if self.points ==None:665 if self.points is None: 666 666 self._create_modelObject() 667 667 668 668 # Protect against empty model 669 if self.points ==None:669 if self.points is None: 670 670 return 0 671 671
Note: See TracChangeset
for help on using the changeset viewer.