Index: /issm/trunk-jpl/src/m/array/MatlabArray.py
===================================================================
--- /issm/trunk-jpl/src/m/array/MatlabArray.py	(revision 25096)
+++ /issm/trunk-jpl/src/m/array/MatlabArray.py	(revision 25097)
@@ -1,8 +1,9 @@
 from copy import deepcopy
+from functools import reduce
+
 import numpy as np
+
+from helpers import *
 from MatlabFuncs import *
-#move this later
-from helpers import *
-from functools import reduce
 
 
@@ -167,5 +168,5 @@
     such that: given the array / matrix a,
         idim is the linear index of an element in a,
-        return the x / y / z / w / ... coordinates of idim in n dimensions
+        return the x/y/z/w/... coordinates of idim in n dimensions
 
     ex. a = [1 2 3
Index: /issm/trunk-jpl/src/m/classes/qmu/histogram_bin_uncertain.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu/histogram_bin_uncertain.m	(revision 25096)
+++ /issm/trunk-jpl/src/m/classes/qmu/histogram_bin_uncertain.m	(revision 25097)
@@ -59,4 +59,6 @@
             end
         end % }}}
+		%virtual functions needed by qmu processing algorithms:
+		%implemented:
         function [desc]=prop_desc(hbu,dstr) % {{{ 
             desc=cell(1,numel(hbu));
@@ -74,6 +76,9 @@
             desc=allempty(desc);
         end  %}}}
-        function [initpt]=prop_initpt(hbu) % {{{
-            initpt=[];
+        function [mean]=prop_mean(hbu) % {{{
+            mean=[];
+        end % }}}
+        function [stddev]=prop_stddev(hbu) % {{{
+            stddev=[];
         end % }}}
         function [lower]=prop_lower(hbu) % {{{
@@ -82,19 +87,4 @@
         function [upper]=prop_upper(hbu) % {{{
             upper=[];
-        end % }}}
-        function [mean]=prop_mean(hbu) % {{{
-            mean=[];
-        end % }}}
-        function [stddev]=prop_stddev(hbu) % {{{
-            stddev=[];
-        end % }}}
-        function [initst]=prop_initst(hbu) % {{{ 
-            initst=[];
-        end % }}}
-        function [stype]=prop_stype(hbu) % {{{
-            stype={};
-        end % }}}
-        function [scale]=prop_scale(hbu) % {{{
-            scale=[]; 
         end % }}}
 		function [abscissas]=prop_abscissas(hbu) % {{{
@@ -119,4 +109,16 @@
 			counts=allequal(counts,-Inf);
         end % }}}
+        function [initpt]=prop_initpt(hbu) % {{{
+            initpt=[];
+        end % }}}
+        function [initst]=prop_initst(hbu) % {{{ 
+            initst=[];
+        end % }}}
+        function [stype]=prop_stype(hbu) % {{{
+            stype={};
+        end % }}}
+        function [scale]=prop_scale(hbu) % {{{
+            scale=[]; 
+        end % }}}
 		function scaled=isscaled(self) % {{{
 			if strncmp(self.descriptor,'scaled_',7),
Index: /issm/trunk-jpl/src/m/classes/qmu/histogram_bin_uncertain.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu/histogram_bin_uncertain.py	(revision 25096)
+++ /issm/trunk-jpl/src/m/classes/qmu/histogram_bin_uncertain.py	(revision 25097)
@@ -1,3 +1,5 @@
 import numpy as np
+
+from MatlabArray import string_dim
 
 
@@ -65,2 +67,140 @@
         else:
             raise Exception("Construction of histogram_bin_uncertain class object requires either (1) no arguments, (2) a histogram_bin_uncertain instance to copy from, or (3) a descriptor and pairs per variable, abscissas, and counts lists")
+
+    @staticmethod
+    def __repr__(hbu): #{{{
+        s = ""
+        for i in range(len(hbu)):
+            s += "class {} object {} = \n".format(hbu.__class__.__name__, string_dim(hbu, i))
+        s = "{}\n{}".format(s, fielddisplay(self, 'descriptor', 'name tag'))
+        s = "{}\n{}".format(s, fielddisplay(self, 'pairs_per_variable', 'pairs per variable'))
+        s = "{}\n{}".format(s, fielddisplay(self, 'abscissas', 'abscissas'))
+        s = "{}\n{}".format(s, fielddisplay(self, 'counts', 'counts'))
+
+        return s
+    #}}}
+
+    def checkconsistency(self, md, solution, analyses): #{{{
+        return
+    #}}}
+
+    #virtual functions needed by qmu processing algorithms
+    #implemented:
+
+    @staticmethod
+    def prop_desc(hbu, dstr): #{{{
+        desc = ['' for i in range(np.size(hbu))]
+        for i in range(np.size(hbu)):
+            if hbu[i].descriptor != '' or type(hbu[i].descriptor) != str:
+                desc[i] = str(hbu[i].descriptor)
+            elif dstr != '':
+                desc[i] = str(dstr) + str(string_dim(hbu, i, 'vector'))
+            else:
+                desc[i] = 'hbu' + str(string_dim(hbu, i, 'vector'))
+
+        desc = allempty(desc)
+
+        return desc
+    #}}}
+
+    @staticmethod
+    def prop_mean(hbu): #{{{
+        mean = np.zeros(np.size(hbu))
+        for i in range(np.size(hbu)):
+            mean[i] = hbu[i].mean
+        return mean
+    #}}}
+
+    @staticmethod
+    def prop_stddev(hbu): #{{{
+        stddev = np.zeros(np.size(hbu))
+        for i in range(np.size(hbu)):
+            stddev[i] = hbu[i].stddev
+        return stddev
+    #}}}
+
+    @staticmethod
+    def prop_lower(hbu): #{{{
+        lower = []
+        return
+    #}}}
+
+    @staticmethod
+    def prop_upper(hbu): #{{{
+        upper = []
+        return upper
+    #}}}
+
+    #default
+    @staticmethod
+    def prop_abscissas(hbu): #{{{
+        abscissas = []
+        for i in range(len(hbu)):
+            abscissas.extend(hbu[i].abscissas)
+        abscissas = allequal(abscissas, -np.inf)
+        return abscissas
+    #}}}
+
+    @staticmethod
+    def prop_pairs_per_variable(hbu): #{{{
+        pairs_per_variable = np.zeros((1, len(hbu)))
+        for i in range(len(hbu)):
+            pairs_per_variable[i] = hbu[i].pairs_per_variable
+        abscissas = allequal(pairs_per_variable, -np.inf)
+        return pairs_per_variable
+    #}}}
+
+    @staticmethod
+    def prop_counts(hbu): #{{{
+        counts = []
+        for i in range(len(hbu)):
+            counts.extend(hbu[i].counts)
+        counts = allequal(counts, -np.inf)
+        return counts
+    #}}}
+
+    @staticmethod
+    def prop_initpt(hbu): #{{{
+        initpt = []
+        return initpt
+    #}}}
+
+    @staticmethod
+    def prop_initst(hbu): #{{{
+        inist = []
+        return inist
+    #}}}
+
+    @staticmethod
+    def prop_stype(hbu): #{{{
+        stype = []
+        return stype
+    #}}}
+
+    @staticmethod
+    def prop_scale(hbu): #{{{
+        scale = []
+        return scale
+    #}}}
+
+    #new methods:
+    def isscaled(self): #{{{
+        if strncmp(self.descriptor, 'scaled_', 7):
+            return True
+        else:
+            return False
+    #}}}
+
+    @staticmethod
+    def dakota_write(fidi, dvar):
+        # possible namespace pollution, the above import seems not to work
+        from vlist_write import vlist_write
+        # collect only the variables of the appropriate class
+        hbu = deepcopy(dvar)
+        fields = fieldnames(hbu)
+        for field in fields:
+            if getattr(hbu, field)[0].__class__.__name__ != 'histogram_bin_uncertain':
+                delattr(hbu, field)
+        if len(hbu) > 0:
+            vlist_write(fidi, 'histogram_bin_uncertain', 'hbu', hbu)
+    #}}}
Index: /issm/trunk-jpl/src/m/classes/qmu/linear_inequality_constraint.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu/linear_inequality_constraint.py	(revision 25096)
+++ /issm/trunk-jpl/src/m/classes/qmu/linear_inequality_constraint.py	(revision 25097)
@@ -13,5 +13,5 @@
   where the required args are:
     matrix        (double row, variable coefficients, float('NaN'))
-    lower         (double vector, lower bounds, -np.Inf)
+    lower         (double vector, lower bounds, -np.inf)
     upper         (double vector, upper bounds, 0.)
   and the optional args and defaults are:
@@ -25,5 +25,5 @@
     def __init__(self):
         self.matrix = np.array([[float('NaN')]])
-        self.lower = -np.Inf
+        self.lower = -np.inf
         self.upper = 0.
         self.scale_type = 'none'
@@ -131,5 +131,5 @@
             lower[i] = lic[i].lower
 
-        lower = allequal(lower, -np.Inf)
+        lower = allequal(lower, -np.inf)
 
         return lower
Index: /issm/trunk-jpl/src/m/classes/qmu/normal_uncertain.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu/normal_uncertain.m	(revision 25096)
+++ /issm/trunk-jpl/src/m/classes/qmu/normal_uncertain.m	(revision 25097)
@@ -133,5 +133,10 @@
 			end
 		end % }}}
-		%default
+		function [lower]=prop_lower(nuv) % {{{
+			lower=[];
+		end % }}}
+		function [upper]=prop_upper(nuv) % {{{
+			upper=[];
+		end % }}}
 		function [abscissas]=prop_abscissas(hbu) % {{{
 			abscissas=[];
@@ -145,10 +150,4 @@
 		function [initpt]=prop_initpt(nuv) % {{{
 			initpt=[];
-		end % }}}
-		function [lower]=prop_lower(nuv) % {{{
-			lower=[];
-		end % }}}
-		function [upper]=prop_upper(nuv) % {{{
-			upper=[];
 		end % }}}
 		function [initst]=prop_initst(nuv) % {{{
Index: /issm/trunk-jpl/src/m/classes/qmu/normal_uncertain.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu/normal_uncertain.py	(revision 25096)
+++ /issm/trunk-jpl/src/m/classes/qmu/normal_uncertain.py	(revision 25097)
@@ -41,6 +41,6 @@
     def __init__(self): #{{{
         self.descriptor = ''
-        self.mean       = np.NaN
-        self.stddev     = np.NaN
+        self.mean       = np.nan
+        self.stddev     = np.nan
         self.partition  = []
         self.nsteps     = 0
@@ -176,4 +176,16 @@
     #}}}
 
+    @staticmethod
+    def prop_lower(nuv): #{{{
+        lower = []
+        return lower
+    #}}}
+
+    @staticmethod
+    def prop_upper(nuv): #{{{
+        upper = []
+        return upper
+    #}}}
+
     #default
     @staticmethod
@@ -184,31 +196,18 @@
 
     @staticmethod
+    def prop_pairs_per_variable(hbu): #{{{
+        pairs_per_variable = []
+        return pairs_per_variable
+    #}}}
+
+    @staticmethod
     def prop_counts(hbu): #{{{
         counts = []
         return counts
     #}}}
-
-    @staticmethod
-    def prop_pairs_per_variable(hbu): #{{{
-        pairs_per_variable = []
-        return pairs_per_variable
-    #}}}
-
     @staticmethod
     def prop_initpt(nuv): #{{{
         initpt = []
         return initpt
-    #}}}
-
-    @staticmethod
-    def prop_lower(nuv): #{{{
-        lower = []
-        return lower
-    #}}}
-
-    @staticmethod
-    def prop_upper(nuv): #{{{
-        upper = []
-        return upper
     #}}}
 
@@ -244,5 +243,4 @@
         from vlist_write import vlist_write
         # collect only the variables of the appropriate class
-        # nuv = [struc_class(i, 'normal_uncertain', 'nuv') for i in dvar]
         nuv = deepcopy(dvar)
         fields = fieldnames(nuv)
Index: /issm/trunk-jpl/src/m/classes/qmu/uniform_uncertain.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu/uniform_uncertain.py	(revision 25096)
+++ /issm/trunk-jpl/src/m/classes/qmu/uniform_uncertain.py	(revision 25097)
@@ -41,6 +41,6 @@
     def __init__(self): #{{{
         self.descriptor = ''
-        self.lower      = -np.Inf
-        self.upper      = np.Inf
+        self.lower      = -np.inf
+        self.upper      = np.inf
         self.partition  = []
         self.nsteps     = 0
@@ -162,4 +162,16 @@
 
     @staticmethod
+    def prop_stddev(uuv): #{{{
+        stddev = []
+        return stddev
+    #}}}
+
+    @staticmethod
+    def prop_mean(uuv): #{{{
+        mean = []
+        return mean
+    #}}}
+
+    @staticmethod
     def prop_lower(uuv): #{{{
         lower = np.zeros(np.size(uuv))
@@ -167,5 +179,5 @@
             lower[i] = uuv[i].lower
 
-        lower = allequal(lower, -np.Inf)
+        lower = allequal(lower, -np.inf)
 
         return lower
@@ -178,5 +190,5 @@
             upper[i] = uuv[i].upper
 
-        #upper = allequal(upper, np.Inf)
+        upper = allequal(upper, np.inf)
 
         return upper
@@ -184,13 +196,19 @@
 
     @staticmethod
-    def prop_stddev(uuv): #{{{
-        stddev = []
-        return stddev
-    #}}}
-
-    @staticmethod
-    def prop_mean(uuv): #{{{
-        mean = []
-        return mean
+    def prop_abscissas(hbu): #{{{
+        abscissas = []
+        return abscissas
+    #}}}
+
+    @staticmethod
+    def prop_pairs_per_variable(hbu): #{{{
+        pairs_per_variable = []
+        return pairs_per_variable
+    #}}}
+
+    @staticmethod
+    def prop_counts(hbu): #{{{
+        counts = []
+        return counts
     #}}}
 
@@ -217,22 +235,4 @@
         scale = []
         return scale
-    #}}}
-
-    @staticmethod
-    def prop_abscissas(hbu): #{{{
-        abscissas = []
-        return abscissas
-    #}}}
-
-    @staticmethod
-    def prop_counts(hbu): #{{{
-        counts = []
-        return counts
-    #}}}
-
-    @staticmethod
-    def prop_pairs_per_variable(hbu): #{{{
-        pairs_per_variable = []
-        return pairs_per_variable
     #}}}
 
@@ -249,6 +249,5 @@
         # possible namespace pollution, the above import seems not to work
         from vlist_write import vlist_write
-        # # collect only the variables of the appropriate class
-        # uuv = [struc_class(i, 'uniform_uncertain', 'uuv') for i in dvar]
+        # collect only the variables of the appropriate class
         uuv = deepcopy(dvar)
         fields = fieldnames(uuv)
