File: MarkovModelEventTest.java

package info (click to toggle)
biojava-live 1%3A1.7.1-8
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 55,160 kB
  • sloc: java: 180,820; xml: 6,908; sql: 510; makefile: 50
file content (167 lines) | stat: -rw-r--r-- 7,444 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
package org.biojava.bio.dp;

import junit.framework.TestCase;

import org.biojava.bio.Annotation;
import org.biojava.bio.dist.Distribution;
import org.biojava.bio.dist.DistributionFactory;
import org.biojava.bio.dist.UniformDistribution;
import org.biojava.bio.seq.DNATools;
import org.biojava.bio.symbol.FiniteAlphabet;
import org.biojava.bio.symbol.IllegalAlphabetException;
import org.biojava.bio.symbol.IllegalSymbolException;
import org.biojava.utils.ChangeType;
import org.biojava.utils.ChangeVetoException;

/**
 * Test the event forwarding mess in MarkovModel & impls.
 *
 * @author Matthew Pocock
 */
public class MarkovModelEventTest
extends TestCase {
  public void testAddRemoveState() {
    try {
      // set up a model
      SimpleMarkovModel smm = new SimpleMarkovModel(1, DNATools.getDNA(), "add/remove test");

      EventCounter archC = new EventCounter("Architecture counter");
      EventCounter paraC = new EventCounter("Parameter counter");

      smm.addChangeListener(archC, MarkovModel.ARCHITECTURE);
      smm.addChangeListener(paraC, MarkovModel.PARAMETER);


      // make some silly states
      DotState ds = new SimpleDotState("d1");
      EmissionState es = new SimpleEmissionState(
              "e1",
              Annotation.EMPTY_ANNOTATION,
              new int[]{1},
              DistributionFactory.DEFAULT.createDistribution(DNATools.getDNA()));


      // add ds & check events
      smm.addState(ds);
      assertEquals("All architecture events allowed: " + archC, archC.getPreCounts(), archC.getPostCounts());
      assertEquals("All parameter events allowed: " + paraC, paraC.getPreCounts(), paraC.getPostCounts());
      assertEquals("One architecture event: " + archC, 1, archC.getPostCounts());
      assertEquals("No parameter events: " + paraC, 0, paraC.getPostCounts());

      archC.zeroCounts();
      paraC.zeroCounts();

      // add es & check events
      smm.addState(es);
      assertEquals("All architecture events allowed: " + archC, archC.getPreCounts(), archC.getPostCounts());
      assertEquals("All parameter events allowed: " + paraC, paraC.getPreCounts(), paraC.getPostCounts());
      assertEquals("One architecture event: " + archC, 1, archC.getPostCounts());
      assertEquals("No parameter events: " + paraC, 0, paraC.getPostCounts());

      archC.zeroCounts();
      paraC.zeroCounts();

      // create transition
      smm.createTransition(ds, es);
      assertEquals("All architecture events allowed: " + archC, archC.getPreCounts(), archC.getPostCounts());
      assertEquals("All parameter events allowed: " + paraC, paraC.getPreCounts(), paraC.getPostCounts());
      assertEquals("One architecture event: " + archC, 1, archC.getPostCounts());
      assertEquals("No parameter events: " + paraC, 0, paraC.getPostCounts());

      archC.zeroCounts();
      paraC.zeroCounts();

      // delete transition
      smm.destroyTransition(ds, es);
      assertEquals("All architecture events allowed: " + archC, archC.getPreCounts(), archC.getPostCounts());
      assertEquals("All parameter events allowed: " + paraC, paraC.getPreCounts(), paraC.getPostCounts());
      assertEquals("One architecture event: " + archC, 1, archC.getPostCounts());
      assertEquals("No parameter events: " + paraC, 0, paraC.getPostCounts());

      archC.zeroCounts();
      paraC.zeroCounts();

      // remove ds
      smm.removeState(ds);
      smm.removeState(es);
    } catch (IllegalAlphabetException iae) {
      throw (AssertionError) new AssertionError("Could not create distributions.").initCause(iae);
    } catch (ChangeVetoException cve) {
      throw (AssertionError) new AssertionError("Could not modify model.").initCause(cve);
    } catch (IllegalSymbolException ise) {
      throw (AssertionError) new AssertionError("Could not modify model.").initCause(ise);
    } catch (IllegalTransitionException ite) {
      throw (AssertionError) new AssertionError("Could not modify model.").initCause(ite);
    }
  }

  public void testSetWeights() {
    try {
      // set up a model
      SimpleMarkovModel smm = new SimpleMarkovModel(1, DNATools.getDNA(), "add/remove test");

      EventCounter everything = new EventCounter("Everything");
      EventCounter archC = new EventCounter("Architecture counter");
      EventCounter paraC = new EventCounter("Parameter counter");

      smm.addChangeListener(everything, ChangeType.UNKNOWN);
      smm.addChangeListener(archC, MarkovModel.ARCHITECTURE);
      smm.addChangeListener(paraC, MarkovModel.PARAMETER);

      // make some silly states
      DotState ds = new SimpleDotState("d1");
      EmissionState es = new SimpleEmissionState(
              "e1",
              Annotation.EMPTY_ANNOTATION,
              new int[]{1},
              DistributionFactory.DEFAULT.createDistribution(DNATools.getDNA()));

      smm.addState(ds);
      smm.addState(es);
      smm.createTransition(ds, es);

      everything.zeroCounts();
      archC.zeroCounts();
      paraC.zeroCounts();

      // set the transition weight distribution
      smm.setWeights(ds, new UniformDistribution((FiniteAlphabet) smm.getWeights(ds).getAlphabet()));
      assertEquals("All architecture events allowed: " + archC + "\n\t" + everything, archC.getPreCounts(), archC.getPostCounts());
      assertEquals("All parameter events allowed: " + paraC + "\n\t" + everything, paraC.getPreCounts(), paraC.getPostCounts());
      assertEquals("No architecture event: " + archC + "\n\t" + everything, 0, archC.getPostCounts());
      assertEquals("One parameter events: " + paraC + "\n\t" + everything, 1, paraC.getPostCounts());

      everything.zeroCounts();
      archC.zeroCounts();
      paraC.zeroCounts();

      // set the distribution associated with es
      Distribution dist = DistributionFactory.DEFAULT.createDistribution(DNATools.getDNA());
      es.setDistribution(dist);
      assertEquals("All architecture events allowed: " + archC + "\n\t" + everything, archC.getPreCounts(), archC.getPostCounts());
      assertEquals("All parameter events allowed: " + paraC + "\n\t" + everything, paraC.getPreCounts(), paraC.getPostCounts());
      assertEquals("No architecture event: " + archC + "\n\t" + everything, 0, archC.getPostCounts());
      assertEquals("One parameter events: " + paraC + "\n\t" + everything, 1, paraC.getPostCounts());

      everything.zeroCounts();
      archC.zeroCounts();
      paraC.zeroCounts();

      // set two individual weights in dist
      dist.setWeight(DNATools.a(), 0.9);
      dist.setWeight(DNATools.t(), 0.1);
      assertEquals("All architecture events allowed: " + archC + "\n\t" + everything, archC.getPreCounts(), archC.getPostCounts());
      assertEquals("All parameter events allowed: " + paraC + "\n\t" + everything, paraC.getPreCounts(), paraC.getPostCounts());
      assertEquals("No architecture event: " + archC + "\n\t" + everything, 0, archC.getPostCounts());
      assertEquals("Two parameter events: " + paraC + "\n\t" + everything, 2, paraC.getPostCounts());
    } catch (IllegalAlphabetException iae) {
      throw (AssertionError) new AssertionError("Could not create distributions.").initCause(iae);
    } catch (ChangeVetoException cve) {
      throw (AssertionError) new AssertionError("Could not modify model.").initCause(cve);
    } catch (IllegalSymbolException ise) {
      throw (AssertionError) new AssertionError("Could not modify model.").initCause(ise);
    }
  }


}