Example #1
0
def exercise_variate_generators():
    from scitbx.random \
         import variate, normal_distribution, bernoulli_distribution, \
                gamma_distribution, poisson_distribution
    for i in range(10):
        scitbx.random.set_random_seed(0)
        g = variate(normal_distribution())
        assert approx_equal(g(), -0.917787219374)
        assert approx_equal(
            g(10),
            (1.21838707856, 1.732426915, 0.838038157555, -0.296895169923,
             0.246451144946, -0.635474652255, -0.0980626986425, 0.36458295417,
             0.534073780268, -0.665073136294))

    stat = basic_statistics(flex.double(itertools.islice(g, 1000000)))
    assert approx_equal(stat.mean, 0, eps=0.005)
    assert approx_equal(stat.biased_variance, 1, eps=0.005)
    assert approx_equal(stat.skew, 0, eps=0.005)
    assert approx_equal(stat.kurtosis, 3, eps=0.005)

    bernoulli_seq = variate(bernoulli_distribution(0.1))
    for b in itertools.islice(bernoulli_seq, 10):
        assert b in (True, False)
    bernoulli_sample = flex.bool(itertools.islice(bernoulli_seq, 10000))
    assert approx_equal(bernoulli_sample.count(True) / len(bernoulli_sample),
                        0.1,
                        eps=0.01)

    # Boost 1.64 changes the exponential distribution to use Ziggurat algorithm
    scitbx.random.set_random_seed(0)
    g = variate(gamma_distribution())
    if (boost_version < 106400):
        assert approx_equal(g(), 0.79587450456577546)
        assert approx_equal(g(2), (0.89856038848394115, 1.2559307580473893))
    else:
        assert approx_equal(g(), 0.864758191783)
        assert approx_equal(g(2), (1.36660841837, 2.26740986094))
    stat = basic_statistics(flex.double(itertools.islice(g, 1000000)))
    assert approx_equal(stat.mean, 1, eps=0.005)
    assert approx_equal(stat.skew, 2, eps=0.01)
    assert approx_equal(stat.biased_variance, 1, eps=0.005)
    scitbx.random.set_random_seed(0)
    g = variate(gamma_distribution(alpha=2, beta=3))
    assert approx_equal(g(), 16.670850592722729)
    assert approx_equal(g(2), (10.03662877519449, 3.9357158398972873))
    stat = basic_statistics(flex.double(itertools.islice(g, 1000000)))
    assert approx_equal(stat.mean, 6, eps=0.005)
    assert approx_equal(stat.skew, 2 / math.sqrt(2), eps=0.05)
    assert approx_equal(stat.biased_variance, 18, eps=0.05)

    mean = 10.0
    pv = variate(poisson_distribution(mean))
    draws = pv(1000000).as_double()
    m = flex.mean(draws)
    v = flex.mean(draws * draws) - m * m
    assert approx_equal(m, mean, eps=0.05)
    assert approx_equal(v, mean, eps=0.05)
Example #2
0
def exercise_variate_generators():
  from scitbx.random \
       import variate, normal_distribution, bernoulli_distribution, \
              gamma_distribution, poisson_distribution
  for i in xrange(10):
    scitbx.random.set_random_seed(0)
    g = variate(normal_distribution())
    assert approx_equal(g(), -1.2780081289048213)
    assert approx_equal(g(10),
      (-0.40474189234755492, -0.41845505596083288,
       -1.8825790263067721, -1.5779112018107659,
       -1.1888174422378859, -1.8619619179878537,
       -0.53946818661388318, -1.2400941724410812,
       0.64511959841907285, -0.59934120033270688))

  stat = basic_statistics(flex.double(itertools.islice(g, 1000000)))
  assert approx_equal(stat.mean,            0, eps=0.005)
  assert approx_equal(stat.biased_variance, 1, eps=0.005)
  assert approx_equal(stat.skew,            0, eps=0.005)
  assert approx_equal(stat.kurtosis,        3, eps=0.005)

  bernoulli_seq = variate(bernoulli_distribution(0.1))
  for b in itertools.islice(bernoulli_seq, 10):
    assert b in (True, False)
  bernoulli_sample = flex.bool(itertools.islice(bernoulli_seq, 10000))
  assert approx_equal(
    bernoulli_sample.count(True)/len(bernoulli_sample),
    0.1,
    eps = 0.01)

  scitbx.random.set_random_seed(0)
  g = variate(gamma_distribution())
  assert approx_equal(g(), 0.79587450456577546)
  assert approx_equal(g(2), (0.89856038848394115, 1.2559307580473893))
  stat = basic_statistics(flex.double(itertools.islice(g, 1000000)))
  assert approx_equal(stat.mean,            1, eps=0.005)
  assert approx_equal(stat.skew,            2, eps=0.005)
  assert approx_equal(stat.biased_variance, 1, eps=0.005)
  scitbx.random.set_random_seed(0)
  g = variate(gamma_distribution(alpha=2, beta=3))
  assert approx_equal(g(), 16.670850592722729)
  assert approx_equal(g(2), (10.03662877519449, 3.9357158398972873))
  stat = basic_statistics(flex.double(itertools.islice(g, 1000000)))
  assert approx_equal(stat.mean,            6, eps=0.005)
  assert approx_equal(stat.skew,            2/math.sqrt(2), eps=0.05)
  assert approx_equal(stat.biased_variance, 18, eps=0.05)

  mean = 10.0
  pv = variate(poisson_distribution(mean))
  draws = pv(1000000).as_double()
  m = flex.mean(draws)
  v = flex.mean(draws*draws) - m*m
  assert approx_equal(m,mean,eps=0.05)
  assert approx_equal(v,mean,eps=0.05)
Example #3
0
def exercise_variate_generators():
    from scitbx.random \
         import variate, normal_distribution, bernoulli_distribution, \
                gamma_distribution, poisson_distribution
    for i in xrange(10):
        scitbx.random.set_random_seed(0)
        g = variate(normal_distribution())
        assert approx_equal(g(), -1.2780081289048213)
        assert approx_equal(
            g(10),
            (-0.40474189234755492, -0.41845505596083288, -1.8825790263067721,
             -1.5779112018107659, -1.1888174422378859, -1.8619619179878537,
             -0.53946818661388318, -1.2400941724410812, 0.64511959841907285,
             -0.59934120033270688))

    stat = basic_statistics(flex.double(itertools.islice(g, 1000000)))
    assert approx_equal(stat.mean, 0, eps=0.005)
    assert approx_equal(stat.biased_variance, 1, eps=0.005)
    assert approx_equal(stat.skew, 0, eps=0.005)
    assert approx_equal(stat.kurtosis, 3, eps=0.005)

    bernoulli_seq = variate(bernoulli_distribution(0.1))
    for b in itertools.islice(bernoulli_seq, 10):
        assert b in (True, False)
    bernoulli_sample = flex.bool(itertools.islice(bernoulli_seq, 10000))
    assert approx_equal(bernoulli_sample.count(True) / len(bernoulli_sample),
                        0.1,
                        eps=0.01)

    scitbx.random.set_random_seed(0)
    g = variate(gamma_distribution())
    assert approx_equal(g(), 0.79587450456577546)
    assert approx_equal(g(2), (0.89856038848394115, 1.2559307580473893))
    stat = basic_statistics(flex.double(itertools.islice(g, 1000000)))
    assert approx_equal(stat.mean, 1, eps=0.005)
    assert approx_equal(stat.skew, 2, eps=0.005)
    assert approx_equal(stat.biased_variance, 1, eps=0.005)
    scitbx.random.set_random_seed(0)
    g = variate(gamma_distribution(alpha=2, beta=3))
    assert approx_equal(g(), 16.670850592722729)
    assert approx_equal(g(2), (10.03662877519449, 3.9357158398972873))
    stat = basic_statistics(flex.double(itertools.islice(g, 1000000)))
    assert approx_equal(stat.mean, 6, eps=0.005)
    assert approx_equal(stat.skew, 2 / math.sqrt(2), eps=0.05)
    assert approx_equal(stat.biased_variance, 18, eps=0.05)

    mean = 10.0
    pv = variate(poisson_distribution(mean))
    draws = pv(1000000).as_double()
    m = flex.mean(draws)
    v = flex.mean(draws * draws) - m * m
    assert approx_equal(m, mean, eps=0.05)
    assert approx_equal(v, mean, eps=0.05)
 def __init__(self, space_group_info, **kwds):
     libtbx.adopt_optional_init_args(self, kwds)
     self.space_group_info = space_group_info
     self.structure = random_structure.xray_structure(
         space_group_info,
         elements=self.elements,
         volume_per_atom=20.,
         min_distance=1.5,
         general_positions_only=True,
         use_u_aniso=False,
         u_iso=adptbx.b_as_u(10),
     )
     self.structure.set_inelastic_form_factors(1.54, "sasaki")
     self.scale_factor = 0.05 + 10 * flex.random_double()
     fc = self.structure.structure_factors(anomalous_flag=True,
                                           d_min=self.d_min,
                                           algorithm="direct").f_calc()
     fo = fc.as_amplitude_array()
     fo.set_observation_type_xray_amplitude()
     if self.use_students_t_errors:
         nu = random.uniform(1, 10)
         normal_g = variate(normal_distribution())
         gamma_g = variate(gamma_distribution(0.5 * nu, 2))
         errors = normal_g(fc.size()) / flex.sqrt(2 * gamma_g(fc.size()))
     else:
         # use gaussian errors
         g = variate(normal_distribution())
         errors = g(fc.size())
     fo2 = fo.as_intensity_array()
     self.fo2 = fo2.customized_copy(
         data=(fo2.data() + errors) * self.scale_factor,
         sigmas=flex.double(fc.size(), 1),
     )
     self.fc = fc
     xs_i = self.structure.inverse_hand()
     self.fc_i = xs_i.structure_factors(anomalous_flag=True,
                                        d_min=self.d_min,
                                        algorithm="direct").f_calc()
     fo2_twin = self.fc.customized_copy(
         data=self.fc.data() + self.fc_i.data()).as_intensity_array()
     self.fo2_twin = fo2_twin.customized_copy(
         data=(errors + fo2_twin.data()) * self.scale_factor,
         sigmas=self.fo2.sigmas())
 def __init__(self, space_group_info, **kwds):
   libtbx.adopt_optional_init_args(self, kwds)
   self.space_group_info = space_group_info
   self.structure = random_structure.xray_structure(
     space_group_info,
     elements=self.elements,
     volume_per_atom=20.,
     min_distance=1.5,
     general_positions_only=True,
     use_u_aniso=False,
     u_iso=adptbx.b_as_u(10),
   )
   self.structure.set_inelastic_form_factors(1.54, "sasaki")
   self.scale_factor = 0.05 + 10 * flex.random_double()
   fc = self.structure.structure_factors(
         anomalous_flag=True, d_min=self.d_min, algorithm="direct").f_calc()
   fo = fc.as_amplitude_array()
   fo.set_observation_type_xray_amplitude()
   if self.use_students_t_errors:
     nu = random.uniform(1, 10)
     normal_g = variate(normal_distribution())
     gamma_g = variate(gamma_distribution(0.5*nu, 2))
     errors = normal_g(fc.size())/flex.sqrt(2*gamma_g(fc.size()))
   else:
     # use gaussian errors
     g = variate(normal_distribution())
     errors = g(fc.size())
   fo2 = fo.as_intensity_array()
   self.fo2 = fo2.customized_copy(
     data=(fo2.data()+errors)*self.scale_factor,
     sigmas=flex.double(fc.size(), 1),
   )
   self.fc = fc
   xs_i = self.structure.inverse_hand()
   self.fc_i = xs_i.structure_factors(
     anomalous_flag=True, d_min=self.d_min, algorithm="direct").f_calc()
   fo2_twin = self.fc.customized_copy(
     data=self.fc.data()+self.fc_i.data()).as_intensity_array()
   self.fo2_twin = fo2_twin.customized_copy(
     data=(errors + fo2_twin.data()) * self.scale_factor,
     sigmas=self.fo2.sigmas())