code: def test_allow_downcast_floatX(self):
      a = tensor.fscalar("a")
      b = tensor.fvector("b")
  
      f = pfunc([a, b], (a + b), allow_input_downcast=True)
      g = pfunc([a, b], (a + b), allow_input_downcast=False)
      h = pfunc([a, b], (a + b), allow_input_downcast=None)
  
      # If the values can be accurately represented, OK
      assert np.all(f(0, [0]) == 0)
      assert np.all(g(0, [0]) == 0)
      assert np.all(h(0, [0]) == 0)
  
      # For the vector: OK iff allow_input_downcast is True
      assert np.allclose(f(0, [0.1]), 0.1)
      self.assertRaises(TypeError, g, 0, [0.1])
      self.assertRaises(TypeError, h, 0, [0.1])
  
      # For the scalar: OK if allow_input_downcast is True,
      # or None and floatX==float32
      assert np.allclose(f(0.1, [0]), 0.1)
      self.assertRaises(TypeError, g, 0.1, [0])
      if config.floatX == "float32":
          assert np.allclose(h(0.1, [0]), 0.1)
      else:
          self.assertRaises(TypeError, h, 0.1, [0])
  
imports: from __future__ import absolute_import, print_function, division
  import unittest
  from nose.plugins.skip import SkipTest
  import numpy
  import theano
  from theano.tensor import dmatrix, iscalar, lscalar, dmatrices
  from theano import tensor
  from theano.compile import In
  from theano.compile import pfunc
  from theano.compile import shared
  from theano.compile import config
label_desc: Use image node_id 13 for calling the Test_pfunc obj's underlying member method code with example usage: obj.test_allow_downcast_floatX() without return types