Exemple #1
0
 def __init__(self, reward, number_type=None):
     if not isinstance(reward, (numbers.Real, str)):
         raise TypeError('specify a numeric reward')
     if number_type is None:
         number_type = cdd.get_number_type_from_value(reward)
     cdd.NumberTypeable.__init__(self, number_type)
     self.reward = self.make_number(reward)
Exemple #2
0
 def __init__(self, reward, number_type=None):
     if not isinstance(reward, (numbers.Real, str)):
         raise TypeError('specify a numeric reward')
     if number_type is None:
         number_type = cdd.get_number_type_from_value(reward)
     cdd.NumberTypeable.__init__(self, number_type)
     self.reward = self.make_number(reward)
Exemple #3
0
 def get_number_type(xprevs, xprobs):
     """Determine number type from arguments."""
     # special case: nothing specified, defaults to float
     if (all(xprev is None for xprev in xprevs)
             and all(xprob is None for xprob in xprobs)):
         return 'float'
     # inspect all values
     for xprev in xprevs:
         if xprev is None:
             continue
         for key, value in xprev.iteritems():
             # inspect gamble
             if isinstance(key, Gamble):
                 if key.number_type == 'float':
                     return 'float'
             elif isinstance(key, collections.Sequence):
                 if cdd.get_number_type_from_sequences(key) == 'float':
                     return 'float'
             elif isinstance(key, collections.Mapping):
                 if cdd.get_number_type_from_sequences(
                         key.itervalues()) == 'float':
                     return 'float'
             # inspect value(s)
             if isinstance(value, collections.Sequence):
                 if cdd.get_number_type_from_sequences(
                         value) == 'float':
                     return 'float'
             else:
                 if cdd.get_number_type_from_value(value) == 'float':
                     return 'float'
     for xprob in xprobs:
         if xprob is None:
             continue
         for key, value in iter_items(xprob):
             if cdd.get_number_type_from_value(value) == 'float':
                 return 'float'
     # everything is fraction
     return 'fraction'
Exemple #4
0
 def get_number_type(xprevs, xprobs):
     """Determine number type from arguments."""
     # special case: nothing specified, defaults to float
     if (all(xprev is None for xprev in xprevs)
         and all(xprob is None for xprob in xprobs)):
         return 'float'
     # inspect all values
     for xprev in xprevs:
         if xprev is None:
             continue
         for key, value in xprev.iteritems():
             # inspect gamble
             if isinstance(key, Gamble):
                 if key.number_type == 'float':
                     return 'float'
             elif isinstance(key, collections.Sequence):
                 if cdd.get_number_type_from_sequences(key) == 'float':
                     return 'float'
             elif isinstance(key, collections.Mapping):
                 if cdd.get_number_type_from_sequences(key.itervalues()) == 'float':
                     return 'float'
             # inspect value(s)
             if isinstance(value, collections.Sequence):
                 if cdd.get_number_type_from_sequences(value) == 'float':
                     return 'float'
             else:
                 if cdd.get_number_type_from_value(value) == 'float':
                     return 'float'
     for xprob in xprobs:
         if xprob is None:
             continue
         for key, value in iter_items(xprob):
             if cdd.get_number_type_from_value(value) == 'float':
                 return 'float'
     # everything is fraction
     return 'fraction'
Exemple #5
0
    def __init__(self, pspace, data, number_type=None):
        """Construct a gamble on the given possibility space.

        :param pspace: The possibility space.
        :type pspace: |pspacetype|
        :param data: The specification of a gamble, or a constant.
        :type data: |gambletype|
        :param number_type: The type to use for numbers: ``'float'``
            or ``'fraction'``. If omitted, then
            :func:`~cdd.get_number_type_from_sequences` is used to
            determine the number type.
        :type number_type: :class:`str`
        """
        self._pspace = PSpace.make(pspace)
        if isinstance(data, collections.Mapping):
            if number_type is None:
                cdd.NumberTypeable.__init__(
                    self,
                    cdd.get_number_type_from_sequences(data.itervalues()))
            else:
                cdd.NumberTypeable.__init__(self, number_type)
            self._data = dict((omega, self.make_number(data.get(omega, 0)))
                              for omega in self.pspace)
        elif isinstance(data, collections.Sequence):
            if len(data) < len(self.pspace):
                raise ValueError("data sequence too short")
            if number_type is None:
                cdd.NumberTypeable.__init__(
                    self,
                    cdd.get_number_type_from_sequences(data))
            else:
                cdd.NumberTypeable.__init__(self, number_type)
            self._data = dict((omega, self.make_number(value))
                              for omega, value
                              in itertools.izip(self.pspace, data))
        elif isinstance(data, numbers.Real):
            if number_type is None:
                cdd.NumberTypeable.__init__(
                    self,
                    cdd.get_number_type_from_value(data))
            else:
                cdd.NumberTypeable.__init__(self, number_type)
            self._data = dict((omega, self.make_number(data))
                              for omega in self.pspace)
        else:
            raise TypeError('specify data as sequence or mapping')