Skip to content

Commit 0e2650b

Browse files
author
Christian Ponte
committed
Create Toxo implementation and its documentation
Squashed commit of the following: commit ab35f1a Author: Christian Ponte <christian.ponte@udc.es> Date: Tue Jan 22 08:05:47 2019 +0100 Include suggestions from Maria J. Martín and Jorge González commit a427bb7 Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Jan 21 14:26:40 2019 +0100 Minor changes in readme commit dffc4ef Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Jan 21 13:39:22 2019 +0100 Replace math expressions with dinamically generated images commit a73214d Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Jan 21 13:09:27 2019 +0100 Update README Added installation instructions, usage notes, and classes documentation. commit 2b4154a Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Jan 18 13:45:45 2019 +0100 Update PTable class documentation commit 1ee0c18 Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Jan 18 13:30:44 2019 +0100 Update generate_models sample script with Model and PTable changes commit abcadfa Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Jan 18 13:29:54 2019 +0100 Remove unused private static method counter commit b5b993e Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Jan 18 13:28:16 2019 +0100 Change PTable text output format to csv to be consistent with Model input format commit fb17906 Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Jan 18 13:06:53 2019 +0100 Change PTable implementation -PTable no longer stores the penetrance values using double precision, instead the symbolic expressions are used internally. -Simplified static methods for formatting ID. -Changed how the calculated Model variable values are stored in PTable, using a Map object instead of direct variables. commit a882fb9 Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Jan 18 13:05:03 2019 +0100 Fix the multiple solutions problem in find_max_prevalence and find_max_heritability Model methods commit 7d4ef26 Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Jan 18 12:16:40 2019 +0100 Modify genotype_probabilities to use symbolic expressions for fractions, avoiding losses in decimal precision commit a383958 Author: Christian Ponte <christian.ponte@udc.es> Date: Thu Jan 17 13:49:27 2019 +0100 Update PTable class constructor and variable names commit 899b416 Author: Christian Ponte <christian.ponte@udc.es> Date: Thu Jan 17 10:45:13 2019 +0100 Rename PT class to PTable for simplicity commit 764e117 Author: Christian Ponte <christian.ponte@udc.es> Date: Thu Jan 17 10:43:11 2019 +0100 Rewrite find_max_prevalence method commit 79857b1 Author: Christian Ponte <christian.ponte@udc.es> Date: Thu Jan 17 10:31:50 2019 +0100 Rewrite find_max_heritability method commit 5d9b109 Author: Christian Ponte <christian.ponte@udc.es> Date: Thu Jan 17 09:04:20 2019 +0100 Move genotype_probabilities function outside of class Model commit 6856efa Author: Christian Ponte <christian.ponte@udc.es> Date: Wed Jan 16 14:30:37 2019 +0100 Update Model class constructor commit 423ca15 Author: Christian Ponte <christian.ponte@udc.es> Date: Wed Jan 16 13:46:18 2019 +0100 Reformated model files as csv commit d3dfa5a Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Nov 26 14:28:27 2018 +0100 Add basic README commit 391f800 Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Nov 26 13:15:07 2018 +0100 Add sample script commit 3705ba2 Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Nov 26 13:14:24 2018 +0100 Fix bad MException ID in Model commit 0812fe1 Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Nov 26 13:02:47 2018 +0100 Add name property to Model commit e743920 Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Nov 26 12:31:17 2018 +0100 Add documentation to class PT commit 40be863 Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Nov 26 11:18:39 2018 +0100 Add header to all models with author reference commit 03af8cb Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Nov 26 11:11:55 2018 +0100 Add documentation to Model class, allow comments in model file commit 19be981 Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Nov 26 11:11:38 2018 +0100 Add documentation to function nfold commit ca50e5f Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Nov 26 09:00:53 2018 +0100 Add find_max_heritability method to Model class commit d5d9beb Author: Christian Ponte <christian.ponte@udc.es> Date: Mon Nov 26 08:47:54 2018 +0100 Fix penetrance table output format -Added more digits to decimal numbers -Fixed genotype string error in plaintext output commit dea1087 Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Nov 23 18:22:17 2018 +0100 Create class Model, encapsulating model operations commit 878fb34 Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Nov 23 18:21:56 2018 +0100 Create class PT, encapsulating all penetrance table operations commit 82f8539 Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Nov 23 18:21:32 2018 +0100 Create function nfold commit b66b9df Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Nov 23 13:02:26 2018 +0100 Add sample epistatic models from Marchini et al. 2005 for second, third and fourth order commit 4876875 Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Nov 23 10:39:52 2018 +0100 Add .gitattributes commit 2e7cdc3 Author: Christian Ponte <christian.ponte@udc.es> Date: Fri Nov 23 10:38:11 2018 +0100 Add .gitignore
1 parent 41519c2 commit 0e2650b

17 files changed

+895
-0
lines changed

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Line endings
2+
* text eol=lf

.gitignore

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
### Python template
2+
# Byte-compiled / optimized / DLL files
3+
__pycache__/
4+
*.py[cod]
5+
*$py.class
6+
7+
# Jupyter Notebook
8+
.ipynb_checkpoints
9+
10+
### Jetbrains
11+
# All project-related files
12+
.idea

README.rst

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
=====================================
2+
Toxo
3+
=====================================
4+
5+
Toxo is an object-oriented MATLAB library for calculating penetrance tables of any interaction order model. It is centered on bivariate epistasis models, that is, models where the penetrance is an expression of two intervening variables. The user specifies the model, its desired heritability (or prevalence) and Minor Allele Frequency (MAF) and the library maximizes the resulting table's prevalence (or heritability).
6+
7+
Toxo includes, as an example, the `models <https://github.com/chponte/toxo/blob/master/models/>`__ proposed by Marchini *et al*. [1]_ together with a `script <https://github.com/chponte/toxo/blob/master/generate_models.m>`__ to generate penetrance tables derived from those models.
8+
9+
Requirements
10+
-------------------------------------
11+
12+
* MATLAB (checked against version R2018a, it is likely to work on many others).
13+
14+
15+
Installation
16+
-------------------------------------
17+
18+
1) Download the latest Toxo release from `here <https://github.com/chponte/toxo/releases/latest>`__.
19+
2) Unzip the contents of the file.
20+
3) Add the ``src/`` folder into your MATLAB environment or script:
21+
22+
.. code:: matlab
23+
24+
addpath('path/to/src/folder');
25+
26+
27+
Usage
28+
-------------------------------------
29+
30+
Using Toxo starts with defining a model in CSV-like format. Not all models are supported by Toxo, make sure the desired model complies with the two requirements expressed below. Model variable values are then calculated, and the resulting penetrance table is written into a text file. A complete working example can be found `here <https://github.com/chponte/toxo/blob/master/generate_models.m>`__.
31+
32+
Model requirements
33+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
34+
In order for Toxo to calculate the values of the two variables for which the prevalence (or heritability) is maximum, two requirements must be met:
35+
36+
1) Penetrance expressions are non-decreasing monotonic polynomials in the real positive number space. Polynomials that meet this criteria have positive partial derivatives for all real positive values of both variables. For example, the polynomial |e1| is monotonically non-decreasing because |e2| and |e3| are positive for x > 0 and y > 0.
37+
2) Polynomials can be sorted unequivocally in the real positive number space. This can be demonstrated analytically for all models by comparing the polynomials in pairs. As an example, the demonstration that |e4| is greater than |e5| for real positive numbers would be:
38+
39+
.. |e1| image:: https://latex.codecogs.com/gif.latex?x%281&plus;y%29%5E2
40+
:align: bottom
41+
42+
.. |e2| image:: https://latex.codecogs.com/gif.latex?%5Ctfrac%7B%5Cpartial%7D%7B%5Cpartial%20x%7D%5Cbig%28x%281&plus;y%29%5E2%5Cbig%29%20%3D%20%281&plus;y%29%5E2
43+
:align: bottom
44+
45+
.. |e3| image:: https://latex.codecogs.com/gif.latex?%5Ctfrac%7B%5Cpartial%7D%7B%5Cpartial%20y%7D%5Cbig%28x%281&plus;y%29%5E2%5Cbig%29%20%3D%20x%282y%20&plus;%202%29
46+
:align: bottom
47+
48+
.. |e4| image:: https://latex.codecogs.com/gif.latex?x%281&plus;y%29%5E4
49+
:align: bottom
50+
51+
.. |e5| image:: https://latex.codecogs.com/gif.latex?x%281&plus;y%29%5E3
52+
:align: bottom
53+
54+
.. figure:: https://latex.codecogs.com/gif.latex?x%281&plus;y%29%5E4%20%26%5Cge%20x%281&plus;y%29%5E3
55+
:align: center
56+
57+
.. figure:: https://latex.codecogs.com/gif.latex?%281&plus;y%29%5E4%20%26%5Cge%20%281&plus;y%29%5E3
58+
:align: center
59+
60+
.. figure:: https://latex.codecogs.com/gif.latex?1&plus;y%20%26%5Cge%201
61+
:align: center
62+
63+
.. figure:: https://latex.codecogs.com/gif.latex?y%20%26%5Cge%200
64+
:align: center
65+
66+
Model description
67+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
68+
Models read by Toxo are formatted in CSV-like style, where each row represents a genotype combination and its associated penetrance (separated by a comma). The order in which the rows appear does not matter. Empty lines or lines starting with '#' (comments) are ignored.
69+
70+
Genotypes are represented as two characters, each one corresponding to each of the alleles from genotype. Alleles of the same genotype use the same alphabetic letter, and the difference in capitalization encodes the minor (lowercase) and major (uppercase) allele. There is no limit on the genotype combination size.
71+
72+
Penetrance expressions are functions of two variables. Variables can take any alphabetic name, but for simplicity we will name them x and y.
73+
74+
An example of model would be:
75+
76+
.. code:: text
77+
78+
# Model name
79+
80+
AABB, x
81+
AABb, x
82+
AAbb, x
83+
AaBB, x
84+
AaBb, x*(1+y)
85+
Aabb, x*(1+y)
86+
aaBB, x
87+
aaBb, x*(1+y)
88+
aabb, x*(1+y)
89+
90+
Penetrance table calculation
91+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
92+
Once the model is defined, obtaining the penetrance table is very straightforward. First the model is imported into MATLAB using the Model class. Then, the penetrance class is obtained. The last step is to save the calculated table into a file. The following code snippet exemplifies the process:
93+
94+
95+
.. code:: matlab
96+
97+
model = 'sample_model.csv';
98+
output = 'penetrance_table.csv';
99+
maf = 0.25;
100+
prevalence = 0.1;
101+
m = toxo.Model(model);
102+
p = m.find_max_heritability(maf, prevalence);
103+
p.write(output, toxo.PTable.format_csv);
104+
105+
106+
Classes in Toxo
107+
-------------------------------------
108+
Toxo implements two main classes, Model_ and PTable_, which encapsulate all the functionality:
109+
110+
Model
111+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
112+
Model is a symbolic representation of an epistasis model. It is responsible for reading the model, parsing the text file and converting the penetrance strings to symbolic expressions. It offers two methods to calculate penetrance tables which maximize the associated penetrance or heritability under certain constraints.
113+
114+
Attributes
115+
"""""""""""""""""""""""""""""""""""""
116+
name : ``String``
117+
Name of the model.
118+
order : ``Integer``
119+
Number of loci involved in the epistatic model.
120+
penetrances : ``Array of symbolic``
121+
Array of symbolic expressions, representing the epistatic model.
122+
variables : ``Array of symbolic``
123+
List of all variables contained in all symbolic expressions
124+
125+
Methods
126+
"""""""""""""""""""""""""""""""""""""
127+
Model(path)
128+
Construct an instance of this class from the given model.
129+
130+
- ``path`` : ``String`` - Path to the model CSV file.
131+
find_max_prevalence(maf, h)
132+
Calculate the penetrance table(s) of the model with the maximum admissible prevalence given its MAF and heritability.
133+
134+
- ``maf`` : ``Double`` - MAF of the resulting penetrance table.
135+
- ``h`` : ``Double`` - Heritability of the resulting penetrance table.
136+
- ``output`` : ``toxo.PTable`` - Resulting penetrance table.
137+
find_max_heritability(maf, p)
138+
Calculate the penetrance table(s) of the model with the maximum admissible heritability given its MAF and prevalence.
139+
140+
- ``maf`` : ``Double`` - MAF of the resulting penetrance table.
141+
- ``p`` : ``Double`` - Prevalence of the resulting penetrance table.
142+
- ``output`` : ``toxo.PTable`` - Resulting penetrance table.
143+
144+
PTable
145+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
146+
Numeric representation of a penetrance table. This class provides methods to calculate several metrics, as well as a method to write the table to a file in several formats.
147+
148+
Static constants
149+
"""""""""""""""""""""""""""""""""""""
150+
format_csv : ``Integer``
151+
Represents the CSV output format, taken as a parameter in the write method.
152+
format_gametes: ``Integer``
153+
Represents the GAMETES output format, taken as a parameter in the write method.
154+
155+
Attributes
156+
"""""""""""""""""""""""""""""""""""""
157+
order : ``Integer``
158+
Number of loci involved in the penetrance table.
159+
maf : ``Double``
160+
Common MAF of all locis involved in the interaction.
161+
vars : ``Map``
162+
Values of the variables present in the original model.
163+
gp : ``Array of symbolic``
164+
Genotype probabilities table array.
165+
pt : ``Array of symbolic``
166+
Penetrances table array.
167+
168+
Methods
169+
"""""""""""""""""""""""""""""""""""""
170+
PTable(model, maf, values)
171+
Create a penetrance table from a given Model, using the MAF and variable values desired.
172+
173+
- ``model`` : ``toxo.Model`` - Model from which the table is constructed.
174+
- ``maf`` : ``Double`` - MAF of the penetrance table.
175+
- ``values`` : ``Array of double`` - Values of the variables in Model.
176+
prevalence( )
177+
Calculate the prevalence of the penetrance table.
178+
179+
- ``output`` : ``Double`` - Prevalence of the table.
180+
heritability( )
181+
Calculate the heritability of the penetrance table.
182+
183+
- ``output`` : ``Double`` - Heritability of the table.
184+
write(path, format)
185+
Write the penetrance table into a text file using a specific output format.
186+
187+
- ``path`` : ``String`` - File path in which the table should be written into.
188+
- ``format`` : ``Integer`` - Format to use for the output.
189+
190+
Troubleshooting
191+
-------------------------------------
192+
193+
If you are having trouble using Toxo, encounter any error or would like to see some additional functionality implemented, feel free to open an `Issue <https://github.com/chponte/toxo/issues>`_.
194+
195+
References
196+
-------------------------------------
197+
198+
.. [1] Marchini, Jonathan, Peter Donnelly, and Lon R. Cardon. 2005. "Genome-Wide Strategies for Detecting Multiple Loci That Influence Complex Diseases". Nature Genetics 37 (4): 413. https://doi.org/10.1038/ng1537.

generate_models.m

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
%% Import Toxo library
2+
addpath('src/');
3+
4+
%% Penetrance table generation
5+
% Read all the models from models/ folder
6+
models = {};
7+
for m = dir('models')'
8+
if ~ m.isdir
9+
models{end + 1} = toxo.Model(fullfile(m.folder, m.name));
10+
end
11+
end
12+
13+
% Create a list of MAFs and heritabilities to test
14+
maf = [0.1, 0.25, 0.4];
15+
h = [0.1, 0.25, 0.5, 0.8];
16+
17+
% Create the output folder
18+
output_folder = "output\";
19+
if ~ isfolder(output_folder)
20+
mkdir(output_folder);
21+
end
22+
23+
% Find the associated penetrance tables and write the results into files
24+
for m = models
25+
for i = maf
26+
for j = h
27+
try
28+
pt = m{:}.find_max_prevalence(i, j);
29+
file_name = sprintf("%s_%.2f_h%.2f.txt", m{:}.name, i, j);
30+
pt.write(fullfile(output_folder, file_name), toxo.PTable.format_gametes);
31+
catch ME
32+
disp(ME.message);
33+
warning("Unable to generate model %s with MAF %f and heritability %f.\n", m{:}.name, i, j);
34+
continue;
35+
end
36+
end
37+
end
38+
end

models/additive_2.csv

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Jonathan Marchini, Peter Donnelly, and Lon R. Cardon
2+
# Genome-Wide Strategies for Detecting Multiple Loci That Influence Complex Diseases
3+
# Nature Genetics 37, no. 4 (April 2005): 413�17
4+
# https://doi.org/10.1038/ng1537.
5+
#
6+
# 2-way additive epistatic model
7+
8+
AABB, x
9+
AABb, x*(1+y)
10+
AAbb, x*(1+y)^2
11+
AaBB, x*(1+y)
12+
AaBb, x*(1+y)^2
13+
Aabb, x*(1+y)^3
14+
aaBB, x*(1+y)^2
15+
aaBb, x*(1+y)^3
16+
aabb, x*(1+y)^4

models/additive_3.csv

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Jonathan Marchini, Peter Donnelly, and Lon R. Cardon
2+
# Genome-Wide Strategies for Detecting Multiple Loci That Influence Complex Diseases
3+
# Nature Genetics 37, no. 4 (April 2005): 413�17
4+
# https://doi.org/10.1038/ng1537.
5+
#
6+
# 3-way additive epistatic model
7+
8+
AABBCC, x
9+
AABBCc, x*(1+y)
10+
AABBcc, x*(1+y)^2
11+
AABbCC, x*(1+y)
12+
AABbCc, x*(1+y)^2
13+
AABbcc, x*(1+y)^3
14+
AAbbCC, x*(1+y)^2
15+
AAbbCc, x*(1+y)^3
16+
AAbbcc, x*(1+y)^4
17+
AaBBCC, x*(1+y)
18+
AaBBCc, x*(1+y)^2
19+
AaBBcc, x*(1+y)^3
20+
AaBbCC, x*(1+y)^2
21+
AaBbCc, x*(1+y)^3
22+
AaBbcc, x*(1+y)^4
23+
AabbCC, x*(1+y)^3
24+
AabbCc, x*(1+y)^4
25+
Aabbcc, x*(1+y)^5
26+
aaBBCC, x*(1+y)^2
27+
aaBBCc, x*(1+y)^3
28+
aaBBcc, x*(1+y)^4
29+
aaBbCC, x*(1+y)^3
30+
aaBbCc, x*(1+y)^4
31+
aaBbcc, x*(1+y)^5
32+
aabbCC, x*(1+y)^4
33+
aabbCc, x*(1+y)^5
34+
aabbcc, x*(1+y)^6

models/additive_4.csv

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Jonathan Marchini, Peter Donnelly, and Lon R. Cardon
2+
# Genome-Wide Strategies for Detecting Multiple Loci That Influence Complex Diseases
3+
# Nature Genetics 37, no. 4 (April 2005): 413�17
4+
# https://doi.org/10.1038/ng1537.
5+
#
6+
# 4-way additive epistatic model
7+
8+
AABBCCDD, x
9+
AABBCCDd, x*(1+y)
10+
AABBCCdd, x*(1+y)^2
11+
AABBCcDD, x*(1+y)
12+
AABBCcDd, x*(1+y)^2
13+
AABBCcdd, x*(1+y)^3
14+
AABBccDD, x*(1+y)^2
15+
AABBccDd, x*(1+y)^3
16+
AABBccdd, x*(1+y)^4
17+
AABbCCDD, x*(1+y)
18+
AABbCCDd, x*(1+y)^2
19+
AABbCCdd, x*(1+y)^3
20+
AABbCcDD, x*(1+y)^2
21+
AABbCcDd, x*(1+y)^3
22+
AABbCcdd, x*(1+y)^4
23+
AABbccDD, x*(1+y)^3
24+
AABbccDd, x*(1+y)^4
25+
AABbccdd, x*(1+y)^5
26+
AAbbCCDD, x*(1+y)^2
27+
AAbbCCDd, x*(1+y)^3
28+
AAbbCCdd, x*(1+y)^4
29+
AAbbCcDD, x*(1+y)^3
30+
AAbbCcDd, x*(1+y)^4
31+
AAbbCcdd, x*(1+y)^5
32+
AAbbccDD, x*(1+y)^4
33+
AAbbccDd, x*(1+y)^5
34+
AAbbccdd, x*(1+y)^6
35+
AaBBCCDD, x*(1+y)
36+
AaBBCCDd, x*(1+y)^2
37+
AaBBCCdd, x*(1+y)^3
38+
AaBBCcDD, x*(1+y)^2
39+
AaBBCcDd, x*(1+y)^3
40+
AaBBCcdd, x*(1+y)^4
41+
AaBBccDD, x*(1+y)^3
42+
AaBBccDd, x*(1+y)^4
43+
AaBBccdd, x*(1+y)^5
44+
AaBbCCDD, x*(1+y)^2
45+
AaBbCCDd, x*(1+y)^3
46+
AaBbCCdd, x*(1+y)^4
47+
AaBbCcDD, x*(1+y)^3
48+
AaBbCcDd, x*(1+y)^4
49+
AaBbCcdd, x*(1+y)^5
50+
AaBbccDD, x*(1+y)^4
51+
AaBbccDd, x*(1+y)^5
52+
AaBbccdd, x*(1+y)^6
53+
AabbCCDD, x*(1+y)^3
54+
AabbCCDd, x*(1+y)^4
55+
AabbCCdd, x*(1+y)^5
56+
AabbCcDD, x*(1+y)^4
57+
AabbCcDd, x*(1+y)^5
58+
AabbCcdd, x*(1+y)^6
59+
AabbccDD, x*(1+y)^5
60+
AabbccDd, x*(1+y)^6
61+
Aabbccdd, x*(1+y)^7
62+
aaBBCCDD, x*(1+y)^2
63+
aaBBCCDd, x*(1+y)^3
64+
aaBBCCdd, x*(1+y)^4
65+
aaBBCcDD, x*(1+y)^3
66+
aaBBCcDd, x*(1+y)^4
67+
aaBBCcdd, x*(1+y)^5
68+
aaBBccDD, x*(1+y)^4
69+
aaBBccDd, x*(1+y)^5
70+
aaBBccdd, x*(1+y)^6
71+
aaBbCCDD, x*(1+y)^3
72+
aaBbCCDd, x*(1+y)^4
73+
aaBbCCdd, x*(1+y)^5
74+
aaBbCcDD, x*(1+y)^4
75+
aaBbCcDd, x*(1+y)^5
76+
aaBbCcdd, x*(1+y)^6
77+
aaBbccDD, x*(1+y)^5
78+
aaBbccDd, x*(1+y)^6
79+
aaBbccdd, x*(1+y)^7
80+
aabbCCDD, x*(1+y)^4
81+
aabbCCDd, x*(1+y)^5
82+
aabbCCdd, x*(1+y)^6
83+
aabbCcDD, x*(1+y)^5
84+
aabbCcDd, x*(1+y)^6
85+
aabbCcdd, x*(1+y)^7
86+
aabbccDD, x*(1+y)^6
87+
aabbccDd, x*(1+y)^7
88+
aabbccdd, x*(1+y)^8

0 commit comments

Comments
 (0)