| 1 | /* | |
| 2 | * Licensed to the Apache Software Foundation (ASF) under one or more | |
| 3 | * contributor license agreements. See the NOTICE file distributed with | |
| 4 | * this work for additional information regarding copyright ownership. | |
| 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 | |
| 6 | * (the "License"); you may not use this file except in compliance with | |
| 7 | * the License. You may obtain a copy of the License at | |
| 8 | * | |
| 9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
| 10 | * | |
| 11 | * Unless required by applicable law or agreed to in writing, software | |
| 12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
| 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 14 | * See the License for the specific language governing permissions and | |
| 15 | * limitations under the License. | |
| 16 | */ | |
| 17 | package org.apache.commons.math3.transform; | |
| 18 | ||
| 19 | import java.io.Serializable; | |
| 20 | ||
| 21 | import org.apache.commons.math3.analysis.FunctionUtils; | |
| 22 | import org.apache.commons.math3.analysis.UnivariateFunction; | |
| 23 | import org.apache.commons.math3.exception.MathIllegalArgumentException; | |
| 24 | import org.apache.commons.math3.exception.util.LocalizedFormats; | |
| 25 | import org.apache.commons.math3.util.ArithmeticUtils; | |
| 26 | ||
| 27 | /** | |
| 28 | * Implements the Fast Hadamard Transform (FHT). | |
| 29 | * Transformation of an input vector x to the output vector y. | |
| 30 | *
 | |
| 31 | * In addition to transformation of real vectors, the Hadamard transform can | |
| 32 | * transform integer vectors into integer vectors. However, this integer transform | |
| 33 | * cannot be inverted directly. Due to a scaling factor it may lead to rational results. | |
| 34 | * As an example, the inverse transform of integer vector (0, 1, 0, 1) is rational | |
| 35 | * vector (1/2, -1/2, 0, 0). | |
| 36 | * | |
| 37 | * @version $Id: FastHadamardTransformer.java 1385310 2012-09-16 16:32:10Z tn $ | |
| 38 | * @since 2.0 | |
| 39 | */ | |
| 40 | public class FastHadamardTransformer implements RealTransformer, Serializable { | |
| 41 | ||
| 42 | /** Serializable version identifier. */ | |
| 43 | static final long serialVersionUID = 20120211L; | |
| 44 | ||
| 45 | /** | |
| 46 | * {@inheritDoc} | |
| 47 | * | |
| 48 | * @throws MathIllegalArgumentException if the length of the data array is | |
| 49 | * not a power of two | |
| 50 | */ | |
| 51 | public double[] transform(final double[] f, final TransformType type) { | |
| 52 | 1 | if (type == TransformType.FORWARD) { |
| 53 | 1 | return fht(f); |
| 54 | } | |
| 55 | 2 | return TransformUtils.scaleArray(fht(f), 1.0 / f.length); |
| 56 | } | |
| 57 | ||
| 58 | /** | |
| 59 | * {@inheritDoc} | |
| 60 | * | |
| 61 | * @throws org.apache.commons.math3.exception.NonMonotonicSequenceException | |
| 62 | * if the lower bound is greater than, or equal to the upper bound | |
| 63 | * @throws org.apache.commons.math3.exception.NotStrictlyPositiveException | |
| 64 | * if the number of sample points is negative | |
| 65 | * @throws MathIllegalArgumentException if the number of sample points is not a power of two | |
| 66 | */ | |
| 67 | public double[] transform(final UnivariateFunction f, | |
| 68 | final double min, final double max, final int n, | |
| 69 | final TransformType type) { | |
| 70 | ||
| 71 | 1 | return transform(FunctionUtils.sample(f, min, max, n), type); |
| 72 | } | |
| 73 | ||
| 74 | /** | |
| 75 | * Returns the forward transform of the specified integer data set.The | |
| 76 | * integer transform cannot be inverted directly, due to a scaling factor | |
| 77 | * which may lead to double results. | |
| 78 | * | |
| 79 | * @param f the integer data array to be transformed (signal) | |
| 80 | * @return the integer transformed array (spectrum) | |
| 81 | * @throws MathIllegalArgumentException if the length of the data array is not a power of two | |
| 82 | */ | |
| 83 | public int[] transform(final int[] f) { | |
| 84 | 1 | return fht(f); |
| 85 | } | |
| 86 | ||
| 87 | /** | |
| 88 | * The FHT (Fast Hadamard Transformation) which uses only subtraction and | |
| 89 | * addition. Requires {@code N * log2(N) = n * 2^n} additions. | |
| 90 | * | |
| 91 | *
Short Table of manual calculation for N=8
 | |
| 92 | *
 | |
| 93 | *
x is the input vector to be transformed,
 | |
| 94 | *
y is the output vector (Fast Hadamard transform of x),
 | |
| 95 | *
a and b are helper rows.
 | |
| 96 | *
 | |
| 97 | *
 | |
| 98 | *
 | |
| 99 | *
 | |
| 100 | * x	 | |
| 101 | * a	 | |
| 102 | * b	 | |
| 103 | * y	 | |
| 104 | *
 | |
| 105 | *
 | |
| 106 | * x0	 | |
| 107 | * a0 = x0 + x1	 | |
| 108 | * b0 = a0 + a1	 | |
| 109 | * y0 = b0+ b1	 | |
| 110 | *
 | |
| 111 | *
 | |
| 112 | * x1	 | |
| 113 | * a1 = x2 + x3	 | |
| 114 | * b0 = a2 + a3	 | |
| 115 | * y0 = b2 + b3	 | |
| 116 | *
 | |
| 117 | *
 | |
| 118 | * x2	 | |
| 119 | * a2 = x4 + x5	 | |
| 120 | * b0 = a4 + a5	 | |
| 121 | * y0 = b4 + b5	 | |
| 122 | *
 | |
| 123 | *
 | |
| 124 | * x3	 | |
| 125 | * a3 = x6 + x7	 | |
| 126 | * b0 = a6 + a7	 | |
| 127 | * y0 = b6 + b7	 | |
| 128 | *
 | |
| 129 | *
 | |
| 130 | * x4	 | |
| 131 | * a0 = x0 - x1	 | |
| 132 | * b0 = a0 - a1	 | |
| 133 | * y0 = b0 - b1	 | |
| 134 | *
 | |
| 135 | *
 | |
| 136 | * x5	 | |
| 137 | * a1 = x2 - x3	 | |
| 138 | * b0 = a2 - a3	 | |
| 139 | * y0 = b2 - b3	 | |
| 140 | *
 | |
| 141 | *
 | |
| 142 | * x6	 | |
| 143 | * a2 = x4 - x5	 | |
| 144 | * b0 = a4 - a5	 | |
| 145 | * y0 = b4 - b5	 | |
| 146 | *
 | |
| 147 | *
 | |
| 148 | * x7	 | |
| 149 | * a3 = x6 - x7	 | |
| 150 | * b0 = a6 - a7	 | |
| 151 | * y0 = b6 - b7	 | |
| 152 | *
 | |
| 153 | *
 | |
| 154 | *
 | |
| 155 | * | |
| 156 | *
How it works
 | |
| 157 | *
 | |
| 158 | *
Construct a matrix with {@code N} rows and {@code n + 1} columns, | |
| 159 | * {@code hadm[n+1][N]}.
 | |
| 160 | * (If I use [x][y] it always means [row-offset][column-offset] of a | |
| 161 | * Matrix with n rows and m columns. Its entries go from M[0][0] | |
| 162 | * to M[n][N])
 | |
| 163 | *
Place the input vector {@code x[N]} in the first column of the | |
| 164 | * matrix {@code hadm}.
 | |
| 165 | *
The entries of the submatrix {@code D_top} are calculated as follows | |
| 166 | *
 | |
| 167 | *
{@code D_top} goes from entry {@code [0][1]} to | |
| 168 | * {@code [N / 2 - 1][n + 1]},
 | |
| 169 | *
the columns of {@code D_top} are the pairwise mutually | |
| 170 | * exclusive sums of the previous column.
 | |
| 171 | *
 | |
| 172 | *
 | |
| 173 | *
The entries of the submatrix {@code D_bottom} are calculated as | |
| 174 | * follows | |
| 175 | *
 | |
| 176 | *
{@code D_bottom} goes from entry {@code [N / 2][1]} to | |
| 177 | * {@code [N][n + 1]},
 | |
| 178 | *
the columns of {@code D_bottom} are the pairwise differences | |
| 179 | * of the previous column.
 | |
| 180 | *
 | |
| 181 | *
 | |
| 182 | *
The consputation of {@code D_top} and {@code D_bottom} are best | |
| 183 | * understood with the above example (for {@code N = 8}). | |
| 184 | *
The output vector {@code y} is now in the last column of | |
| 185 | * {@code hadm}.
 | |
| 186 | *
Algorithm from chipcenter.
 | |
| 187 | *
 | |
| 188 | *
Visually
 | |
| 189 | *
 | |
| 190 | *
 | |
| 191 | *
 | |
| 192 | * 	0	1	2	3	 | |
| 193 | * …	 | |
| 194 | * n + 1	 | |
| 195 | *
 | |
| 196 | *
 | |
| 197 | * 0	 | |
| 198 | * x0	 | |
| 199 | *  | |
| 200 | * ↑
 | |
| 201 | * ← Dtop →
 | |
| 202 | * ↓ | |
| 203 | * 	 | |
| 204 | *
 | |
| 205 | *
1	x1
 | |
| 206 | *
2	x2
 | |
| 207 | *
…	…
 | |
| 208 | *
N / 2 - 1	xN/2-1
 | |
| 209 | *
 | |
| 210 | * N / 2	 | |
| 211 | * xN/2	 | |
| 212 | *  | |
| 213 | * ↑
 | |
| 214 | * ← Dbottom →
 | |
| 215 | * ↓ | |
| 216 | * 	 | |
| 217 | *
 | |
| 218 | *
N / 2 + 1	xN/2+1
 | |
| 219 | *
N / 2 + 2	xN/2+2
 | |
| 220 | *
…	…
 | |
| 221 | *
N	xN
 | |
| 222 | *
 | |
| 223 | *
 | |
| 224 | * | |
| 225 | * @param x the real data array to be transformed | |
| 226 | * @return the real transformed array, {@code y} | |
| 227 | * @throws MathIllegalArgumentException if the length of the data array is not a power of two | |
| 228 | */ | |
| 229 | protected double[] fht(double[] x) throws MathIllegalArgumentException { | |
| 230 | ||
| 231 | final int n = x.length; | |
| 232 | 1 | final int halfN = n / 2; |
| 233 | ||
| 234 | 1 | if (!ArithmeticUtils.isPowerOfTwo(n)) { |
| 235 | throw new MathIllegalArgumentException( | |
| 236 | LocalizedFormats.NOT_POWER_OF_TWO, | |
| 237 | Integer.valueOf(n)); | |
| 238 | } | |
| 239 | ||
| 240 | /* | |
| 241 | * Instead of creating a matrix with p+1 columns and n rows, we use two | |
| 242 | * one dimension arrays which we are used in an alternating way. | |
| 243 | */ | |
| 244 | double[] yPrevious = new double[n]; | |
| 245 | double[] yCurrent = x.clone(); | |
| 246 | ||
| 247 | // iterate from left to right (column) | |
| 248 | 3 | for (int j = 1; j < n; j <<= 1) { |
| 249 | ||
| 250 | // switch columns | |
| 251 | final double[] yTmp = yCurrent; | |
| 252 | yCurrent = yPrevious; | |
| 253 | yPrevious = yTmp; | |
| 254 | ||
| 255 | // iterate from top to bottom (row) | |
| 256 | 3 | for (int i = 0; i < halfN; ++i) { |
| 257 | // Dtop: the top part works with addition | |
| 258 | 1 | final int twoI = 2 * i; |
| 259 | 2 | yCurrent[i] = yPrevious[twoI] + yPrevious[twoI + 1]; |
| 260 | } | |
| 261 | 3 | for (int i = halfN; i < n; ++i) { |
| 262 | // Dbottom: the bottom part works with subtraction | |
| 263 | 1 | final int twoI = 2 * i; |
| 264 | 4 | yCurrent[i] = yPrevious[twoI - n] - yPrevious[twoI - n + 1]; |
| 265 | } | |
| 266 | } | |
| 267 | ||
| 268 | 1 | return yCurrent; |
| 269 | ||
| 270 | } | |
| 271 | ||
| 272 | /** | |
| 273 | * Returns the forward transform of the specified integer data set. The FHT | |
| 274 | * (Fast Hadamard Transform) uses only subtraction and addition. | |
| 275 | * | |
| 276 | * @param x the integer data array to be transformed | |
| 277 | * @return the integer transformed array, {@code y} | |
| 278 | * @throws MathIllegalArgumentException if the length of the data array is not a power of two | |
| 279 | */ | |
| 280 | protected int[] fht(int[] x) throws MathIllegalArgumentException { | |
| 281 | ||
| 282 | final int n = x.length; | |
| 283 | 1 | final int halfN = n / 2; |
| 284 | ||
| 285 | 1 | if (!ArithmeticUtils.isPowerOfTwo(n)) { |
| 286 | throw new MathIllegalArgumentException( | |
| 287 | LocalizedFormats.NOT_POWER_OF_TWO, | |
| 288 | Integer.valueOf(n)); | |
| 289 | } | |
| 290 | ||
| 291 | /* | |
| 292 | * Instead of creating a matrix with p+1 columns and n rows, we use two | |
| 293 | * one dimension arrays which we are used in an alternating way. | |
| 294 | */ | |
| 295 | int[] yPrevious = new int[n]; | |
| 296 | int[] yCurrent = x.clone(); | |
| 297 | ||
| 298 | // iterate from left to right (column) | |
| 299 | 3 | for (int j = 1; j < n; j <<= 1) { |
| 300 | ||
| 301 | // switch columns | |
| 302 | final int[] yTmp = yCurrent; | |
| 303 | yCurrent = yPrevious; | |
| 304 | yPrevious = yTmp; | |
| 305 | ||
| 306 | // iterate from top to bottom (row) | |
| 307 | 3 | for (int i = 0; i < halfN; ++i) { |
| 308 | // Dtop: the top part works with addition | |
| 309 | 1 | final int twoI = 2 * i; |
| 310 | 2 | yCurrent[i] = yPrevious[twoI] + yPrevious[twoI + 1]; |
| 311 | } | |
| 312 | 3 | for (int i = halfN; i < n; ++i) { |
| 313 | // Dbottom: the bottom part works with subtraction | |
| 314 | 1 | final int twoI = 2 * i; |
| 315 | 4 | yCurrent[i] = yPrevious[twoI - n] - yPrevious[twoI - n + 1]; |
| 316 | } | |
| 317 | } | |
| 318 | ||
| 319 | // return the last computed output vector y | |
| 320 | 1 | return yCurrent; |
| 321 | ||
| 322 | } | |
| 323 | ||
| 324 | } | |
Mutations | ||
| 52 |
negated conditional : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 53 |
mutated return of Object value for org/apache/commons/math3/transform/FastHadamardTransformer::transform to ( if (x != null) null else throw new RuntimeException ) : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 55 |
mutated return of Object value for org/apache/commons/math3/transform/FastHadamardTransformer::transform to ( if (x != null) null else throw new RuntimeException ) : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) Replaced double division with multiplication : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 71 |
mutated return of Object value for org/apache/commons/math3/transform/FastHadamardTransformer::transform to ( if (x != null) null else throw new RuntimeException ) : NO_COVERAGE |
|
| 84 |
mutated return of Object value for org/apache/commons/math3/transform/FastHadamardTransformer::transform to ( if (x != null) null else throw new RuntimeException ) : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 232 |
Replaced integer division with multiplication : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 234 |
negated conditional : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test3Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 248 |
Replaced Shift Left with Shift Right : TIMED_OUT negated conditional : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) changed conditional boundary : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 256 |
negated conditional : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) changed conditional boundary : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) Changed increment from 1 to -1 : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 258 |
Replaced integer multiplication with division : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 259 |
Replaced integer addition with subtraction : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) Replaced double addition with subtraction : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 261 |
negated conditional : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) Changed increment from 1 to -1 : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) changed conditional boundary : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 263 |
Replaced integer multiplication with division : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 264 |
Replaced integer subtraction with addition : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) Replaced integer addition with subtraction : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) Replaced double subtraction with addition : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) Replaced integer subtraction with addition : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 268 |
mutated return of Object value for org/apache/commons/math3/transform/FastHadamardTransformer::fht to ( if (x != null) null else throw new RuntimeException ) : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.testNoIntInverse(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 283 |
Replaced integer division with multiplication : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 285 |
negated conditional : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 299 |
Replaced Shift Left with Shift Right : TIMED_OUT changed conditional boundary : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) negated conditional : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 307 |
Changed increment from 1 to -1 : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) negated conditional : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) changed conditional boundary : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 309 |
Replaced integer multiplication with division : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 310 |
Replaced integer addition with subtraction : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) Replaced integer addition with subtraction : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 312 |
changed conditional boundary : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) negated conditional : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) Changed increment from 1 to -1 : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 314 |
Replaced integer multiplication with division : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 315 |
Replaced integer subtraction with addition : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) Replaced integer subtraction with addition : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) Replaced integer addition with subtraction : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) Replaced integer subtraction with addition : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |
|
| 320 |
mutated return of Object value for org/apache/commons/math3/transform/FastHadamardTransformer::fht to ( if (x != null) null else throw new RuntimeException ) : KILLED -> org.apache.commons.math3.transform.FastHadamardTransformerTest.test8Points(org.apache.commons.math3.transform.FastHadamardTransformerTest) |


Preparation time
less than 30 mins
Cooking time
1 to 2 hours
Serves
Serves 4
Dietary
Pour the milk into a heavy-based pan and heat gently (you can preheat the milk in a jug in the microwave then transfer the hot milk to the pan, to save time, if you prefer).
Add the cardamom pods and rice to the milk.
Slowly bring to the boil then lower the heat and simmer rapidly, stirring from time to time to prevent the rice from sticking to the bottom of the pan. Simmer, stirring occasionally, until the milk is reduced by about half; this may take as long as 1¼ hours.
While the milk is simmering, roughly chop the pistachios.
When the milk has reduced by half or more, remove and discard the cardamom pods.
Transfer the rice pudding to a bowl. Add the sugar and taste, adding more sugar if you want it sweeter.
Add the chopped pistachios, stir well, and leave to cool.
Cover the bowl with cling film and cool in the fridge for at least four hours or overnight.
When ready to serve, spoon into individual serving bowls. Decorate with vark, if using.
Sprinkle a few more chopped pistachios on top.
Serve.


Company details
Name of Company:
Address:
Contact no.:
Email id:
Name of the Bank:
Branch:
Account number:
IFCS code:
PAN card number:
GST number:


Home Page
Happiness in the World
Correlation GINI D3
Correlation GDP D3
Correlation GINI Plotly
Country in Region
Regions Compare
Explaining Happiness
Happiness API
Happiness in a Map
Plotting Happiness by MapBox and Leaflet
Link to the Map
Correlation Between Happiness & Gini (D3)
Plotting Happiness and Gini Coefficient with D3
Correlation D3
Correlation Between Happiness & GDP per Capita by Regions (D3)
Plotting Happiness and GDP per Capita with D3 by region
Correlation D3
Correlation Between Happiness & Gini (Plotly)
Plotting Happiness and Gini Coefficient with D3
Correlation Plotly
Country Count in Region
Pie chart that shows the numbers of country in each study region.
Link to Pie Chart
Comparing Regions Average Happiness and Gine Coefficient
Plotting the average happiness scores and Gini coefficient by region.
Link to Plot
Explaining Happiness
Plotting the attribution to happiness in the top 5 and bottom 5 countries using stacked bar chart.
Link to Plot
Happiness API
The frontend visualizations are based on this Happiness Database API
Link to the Backend Database Web Site
Happiness in the Map
Geo-Mapping
Plotting Happiness by MapBox and Leaflet
Link to the Map
Happiness in the Map
Geo-Mapping
Plotting Happiness by MapBox and Leaflet
Link to the Map
Happiness in the Map
Geo-Mapping
Plotting Happiness by MapBox and Leaflet
Link to the Map
Happiness in the Map
Geo-Mapping
Plotting Happiness by MapBox and Leaflet
Link to the Map
Happiness in the Map
Geo-Mapping
Plotting Happiness by MapBox and Leaflet
Link to the Map
Happiness in the Map
Geo-Mapping
Plotting Happiness by MapBox and Leaflet
Link to the Map


The Little American Project
PHOTOS OF ONE YEAR IN THE STATES
Skate Park, Venice Beach, LA
Santa Monica Beach, LA
Venice Boulevard, LA
Venice Boulevard, LA
Venice Boulevard, LA
Levitated Mass at LACMA, LA
Classic Abbot Kinney, LA
Cliff at Big Trees State Park
Santa Monica Beach, LA
Venice Boulevard, LA


”All models are wrong, but some are useful.” George Box
What?
- A simple epidemic model able to capture the lockdown-relaxation, and possible re-infection (due to virus mutation for example).
Why?
- Relaxing the lockdown constraints may flare up the epidemic.
- Possible re-infection feedback may perpetuate the epidemic.
How?
- SIRD population model: Susceptible, Infective, Recovered, Deceased.
- Constraints: lockdown-relaxation.
- Feedback: re-infection.
SIRD - basic model
Standard differential equations model, currently used by everybody:
dS/dt = -aSI
dI/dt = aSI - gI - hI
dR/dt = gI
dD/dt = hI
Cannot capture the lockdown-relaxation and re-infections effects.
SIRD - Scaling Properties
Scaling doesn't change the shape of the solution. Assume that this is the model before scaling:
dS/dt' = -a'SI
dI/dt' = a'SI - g'I - h'I
dR/dt' = g'I
dD/dt' = h'I
One can conveniently scale the model such that: g + h = 1:
g = g'/(g' + h')
h = h'/(g' + h')
a = a'/(g' + h')
dt = (g' + h')dt'
SIRD - with constraints and feedback
The constraints model lockdown-relaxation, the feedbak models possible re-infections.
The lockdown is modeled splitting the Susceptible population in two sub-populations, Confined and Unconfined.
The re-infection is modeled using a feedback f>0 from Recovered to Unconfined.
The system becomes:
dC/dt = -aCI
dU/dt = -bUI + fR
dI/dt = aCI + bUI - gI - hI
dR/dt = gI - fR
dD/dt = hI
We assume also that for the Confined the parameter a=a(t) can be a step-step function or a step-linear function. This will model the lockdown-relaxation of the Confined population.
The Main Assumptions
- Susceptible = Confined + Unconfined.
- Initial fraction of infective: I(0) = 0.00001.
- Integration step: dt = 0.001.
- Time scaling: 1000*dt = 5 days (an infected can be infective for 5 days).
- Reproduction number for Confined: a = 1. Number of infections resulting from a single infection in the Confined population.
- Reproduction number for Unconfined: 1 <= b <= 9. Number of infections resulting from a single infection in the Confined population. Default value: b = 2.6.
- Re-infection feedback rate: 0 <= f <=1.
- Rate of Deceased: 0 <= h <= 0.9. Default value h = 0.034 (estimated by WHO).
- Rate of Recovered: g = 1.0 - h.
- Lockdown starts after 20 days (fixed value).
- Lockdown duration 10 days <= Ts <= 100 days. Default value Ts = 40 days.
- Linear relaxation time 1 days <= Ts <= 100 days. Default value Ts = 80 days.
- Simulation time: 730 days (2 years), fixed value.
SIRD-with re-infection feedback and without lockdown-relaxation constraint
- See the right panel, top chart.
- The reproduction numbers are identical a=b for both Confined and Unconfined, since all population is Unconfined.
- The feedback f can be used to simulate the possibility of re-infection of the Recovered.
- If f = 0 then the virus has a short and painful effect.
- If f > 0 then one can have waves of epidemic and increased number of deaths.
SIRD-with re-infection feedback and step-step lockdown-relaxation constraint
- See the right panel, middle chart.
- The lockdown starts after 20 days, and the length is variable: 10 days <= Ts <= 100 days
- At the begining of the lockdown the Unconfined is set to 0.1 <= U <= 0.9, and the Confined population is set to C = 1 - U.
- The reproduction number for the Confined population is: a = 1 for 20 days <= t <= Ts, and a = b otherwise.
- The reproduction number for the Unconfined population is variable: 1 <= b <= 9.
- The re-infection feedback f is as described before.
- One can see a big infective peak after the step relaxation of lockdown, accompanied by waves of epidemic if f > 0.
SIRD-with re-infection feedback and step-linear lockdown-relaxation constraint
- See the right panel, bottom chart.
- The lockdown is as before a step function of length Ts.
- The relaxation is a linear function of length 1 day <= Tl <= 100 days.
- The rest of the parameters are as before.
- One can see that by using a linear relaxation over a longer time the infective peak and the waves become smaller.
Conclusions
The step lockdown-relaxation cannot flatten the peak of possible epidemic flare up.
The step-linear lockdown-relaxation requires long time to flatten the peak of possible epidemic flare up.
The possibility of a re-infection feedback is particularly worrying because it can create waves of epidemics and it can keep the virus active for long time.
The number of deaths can be very high if the death rate is 3.4% (current WHO estimate), and there is re-infection feedback
References
1. E. Mordecai, M. Childs, M. Kain, N. Nova, J. Ritchie and M. Harris, Potential Long-Term Intervention Strategies for COVID-19, https://covid-measures.github.io.
2. G. Nakamura, B. Grammaticos and M. Badoual, Confinement strategies in a simple SIR model, preprint April 2020.
3. R.E. Mickens, Exact solutions to a finite-difference model of a nonlinear reaction-advection equation: Implications for numerical analysis, Numer. Methods Partial Diff. Eq. 5 (1989) 313.
4. D. Adam, Special report: The simulations driving the world’s response to COVID-19, in https://www.nature.com/articles/d41586-020-01003-6 (2020).
5. https://www.worldometers.info/coronavirus


DaisyMaths was a maths learning program for ages 3-12 developed by Myles Harding. Around 2003, a web application was introduced that allowed PDF problem sheets to be created from selected exercises. That web application was written in Perl using the mod_perl web framework and Apache FOP to create the PDFs. This site is trying to revive and update that original web application.
The DaisyMaths Exercises web application is written in Java using basic Servlet and JSP technology. It is still very much a work in progress and should be considered to be in alpha state.
The source code is freely available from GitHub. The project provides a number of web applications:
Pre-built WAR files, that can be run in a web container such as Tomcat or Jetty, can be obtained here.


{% extends "frappe/templates/base.html" %} {% block head_include %} {% endblock %} {% block content %}
does not exist
Your Site Name (can only contain letters and numbers.)
First Name
Last Name
Your Email
Please enter a valid email address
You will receive an verification code at registered email id , asking you to verify this account request.
It may take a few minutes before you receive this email. If you don't find it, please check your SPAM folder.
Number of Users
Please enter a valid number of users.
Currency
I have read and agree to the Terms of Use and Privacy Policy.


The Hadoop YARN web service REST APIs are a set of URI resources that give access to the cluster, nodes, applications, and application historical information. The URI resources are grouped into APIs based on the type of information returned. Some URI resources return collections while others return singletons.
The URIs for the REST-based Web services have the following syntax:
http://{http address of service}/ws/{version}/{resourcepath}
The elements in this syntax are as follows:
{http address of service} - The http address of the service to get information about. Currently supported are the ResourceManager, NodeManager, MapReduce application master, and history server. {version} - The version of the APIs. In this release, the version is v1. {resourcepath} - A path that defines a singleton resource or a collection of resources.
To invoke a REST API, your application calls an HTTP operation on the URI associated with a resource.
Currently only GET is supported. It retrieves information about the resource specified.
The web service REST API’s go through the same security as the web UI. If your cluster adminstrators have filters enabled you must authenticate via the mechanism they specified.
* Accept * Accept-Encoding
Currently the only fields used in the header is Accept and Accept-Encoding. Accept currently supports XML and JSON for the response type you accept. Accept-Encoding currently supports only gzip format and will return gzip compressed output if this is specified, otherwise output is uncompressed. All other header fields are ignored.
The next few sections describe some of the syntax and other details of the HTTP Responses of the web service REST APIs.
This release supports gzip compression if you specify gzip in the Accept-Encoding header of the HTTP request (Accept-Encoding: gzip).
This release of the web service REST APIs supports responses in JSON and XML formats. JSON is the default. To set the response format, you can specify the format in the Accept header of the HTTP request.
As specified in HTTP Response Codes, the response body can contain the data that represents the resource or an error message. In the case of success, the response body is in the selected format, either JSON or XML. In the case of error, the resonse body is in either JSON or XML based on the format requested. The Content-Type header of the response contains the format requested. If the application requests an unsupported format, the response status code is 500. Note that the order of the fields within response body is not specified and might change. Also, additional fields might be added to a response body. Therefore, your applications should use parsing routines that can extract data from a response body in any order.
After calling an HTTP request, an application should check the response status code to verify success or detect an error. If the response status code indicates an error, the response body contains an error message. The first field is the exception type, currently only RemoteException is returned. The following table lists the items within the RemoteException error message:
| Item | Data Type | Description |
|---|---|---|
| exception | String | Exception type |
| javaClassName | String | Java class name of exception |
| message | String | Detailed message of exception |
HTTP Request: GET http://rmhost.domain:8088/ws/v1/cluster/apps/application\_1324057493980\_0001
Response Status Line: HTTP/1.1 200 OK
Response Header:
HTTP/1.1 200 OK Content-Type: application/json Transfer-Encoding: chunked Server: Jetty(6.1.26)
Response Body:
{ app": { "id":"application_1324057493980_0001", "user":"user1", "name":"", "queue":"default", "state":"ACCEPTED", "finalStatus":"UNDEFINED", "progress":0, "trackingUI":"UNASSIGNED", "diagnostics":"", "clusterId":1324057493980, "startedTime":1324057495921, "finishedTime":0, "elapsedTime":2063, "amContainerLogs":"http:\/\/amNM:2\/node\/containerlogs\/container_1324057493980_0001_01_000001", "amHostHttpAddress":"amNM:2" } }
Here we request information about an application that doesn’t exist yet.
HTTP Request: GET http://rmhost.domain:8088/ws/v1/cluster/apps/application\_1324057493980\_9999
Response Status Line: HTTP/1.1 404 Not Found
Response Header:
HTTP/1.1 404 Not Found Content-Type: application/json Transfer-Encoding: chunked Server: Jetty(6.1.26)
Response Body:
{ "RemoteException" : { "javaClassName" : "org.apache.hadoop.yarn.webapp.NotFoundException", "exception" : "NotFoundException", "message" : "java.lang.Exception: app with id: application_1324057493980_9999 not found" } }
You can use any number of ways/languages to use the web services REST API’s. This example uses the curl command line interface to do the REST GET calls.
In this example, a user submits a MapReduce application to the ResourceManager using a command like:
hadoop jar hadoop-mapreduce-test.jar sleep -Dmapred.job.queue.name=a1 -m 1 -r 1 -rt 1200000 -mt 20
The client prints information about the job submitted along with the application id, similar to:
12/01/18 04:25:15 INFO mapred.ResourceMgrDelegate: Submitted application application_1326821518301_0010 to ResourceManager at host.domain.com/<IP_ADDRESS>:8032 12/01/18 04:25:15 INFO mapreduce.Job: Running job: job_1326821518301_0010 12/01/18 04:25:21 INFO mapred.ClientServiceDelegate: The url to track the job: host.domain.com:8088/proxy/application_1326821518301_0010/ 12/01/18 04:25:22 INFO mapreduce.Job: Job job_1326821518301_0010 running in uber mode : false 12/01/18 04:25:22 INFO mapreduce.Job: map 0% reduce 0%
The user then wishes to track the application. The users starts by getting the information about the application from the ResourceManager. Use the –comopressed option to request output compressed. curl handles uncompressing on client side.
curl --compressed -H "Accept: application/json" -X GET "http://host.domain.com:8088/ws/v1/cluster/apps/application_1326821518301_0010"
Output:
{ "app" : { "finishedTime" : 0, "amContainerLogs" : "http://host.domain.com:8042/node/containerlogs/container_1326821518301_0010_01_000001", "trackingUI" : "ApplicationMaster", "state" : "RUNNING", "user" : "user1", "id" : "application_1326821518301_0010", "clusterId" :<PHONE_NUMBER>301, "finalStatus" : "UNDEFINED", "amHostHttpAddress" : "host.domain.com:8042", "progress" : 82.44703, "name" : "Sleep job", "startedTime" :<PHONE_NUMBER>335, "elapsedTime" : 31814, "diagnostics" : "", "trackingUrl" : "http://host.domain.com:8088/proxy/application_1326821518301_0010/", "queue" : "a1" } }
The user then wishes to get more details about the running application and goes directly to the MapReduce application master for this application. The ResourceManager lists the trackingUrl that can be used for this application: http://host.domain.com:8088/proxy/application\_1326821518301\_0010. This could either go to the web browser or use the web service REST API’s. The user uses the web services REST API’s to get the list of jobs this MapReduce application master is running:
curl --compressed -H "Accept: application/json" -X GET "http://host.domain.com:8088/proxy/application_1326821518301_0010/ws/v1/mapreduce/jobs"
Output:
{ "jobs" : { "job" : [ { "runningReduceAttempts" : 1, "reduceProgress" : 72.104515, "failedReduceAttempts" : 0, "newMapAttempts" : 0, "mapsRunning" : 0, "state" : "RUNNING", "successfulReduceAttempts" : 0, "reducesRunning" : 1, "acls" : [ { "value" : " ", "name" : "mapreduce.job.acl-modify-job" }, { "value" : " ", "name" : "mapreduce.job.acl-view-job" } ], "reducesPending" : 0, "user" : "user1", "reducesTotal" : 1, "mapsCompleted" : 1, "startTime" :<PHONE_NUMBER>902, "id" : "job_1326821518301_10_10", "successfulMapAttempts" : 1, "runningMapAttempts" : 0, "newReduceAttempts" : 0, "name" : "Sleep job", "mapsPending" : 0, "elapsedTime" : 64432, "reducesCompleted" : 0, "mapProgress" : 100, "diagnostics" : "", "failedMapAttempts" : 0, "killedReduceAttempts" : 0, "mapsTotal" : 1, "uberized" : false, "killedMapAttempts" : 0, "finishTime" : 0 } ] } }
The user then wishes to get the task details about the job with job id job_1326821518301_10_10 that was listed above.
curl --compressed -H "Accept: application/json" -X GET "http://host.domain.com:8088/proxy/application_1326821518301_0010/ws/v1/mapreduce/jobs/job_1326821518301_10_10/tasks"
Output:
{ "tasks" : { "task" : [ { "progress" : 100, "elapsedTime" : 5059, "state" : "SUCCEEDED", "startTime" :<PHONE_NUMBER>014, "id" : "task_1326821518301_10_10_m_0", "type" : "MAP", "successfulAttempt" : "attempt_1326821518301_10_10_m_0_0", "finishTime" :<PHONE_NUMBER>073 }, { "progress" : 72.104515, "elapsedTime" : 0, "state" : "RUNNING", "startTime" :<PHONE_NUMBER>984, "id" : "task_1326821518301_10_10_r_0", "type" : "REDUCE", "successfulAttempt" : "", "finishTime" : 0 } ] } }
The map task has finished but the reduce task is still running. The users wishes to get the task attempt information for the reduce task task_1326821518301_10_10_r_0, note that the Accept header isn’t really required here since JSON is the default output format:
curl --compressed -X GET "http://host.domain.com:8088/proxy/application_1326821518301_0010/ws/v1/mapreduce/jobs/job_1326821518301_10_10/tasks/task_1326821518301_10_10_r_0/attempts"
Output:
{ "taskAttempts" : { "taskAttempt" : [ { "elapsedMergeTime" : 158, "shuffleFinishTime" :<PHONE_NUMBER>378, "assignedContainerId" : "container_1326821518301_0010_01_000003", "progress" : 72.104515, "elapsedTime" : 0, "state" : "RUNNING", "elapsedShuffleTime" : 2394, "mergeFinishTime" :<PHONE_NUMBER>536, "rack" : "/<IP_ADDRESS>", "elapsedReduceTime" : 0, "nodeHttpAddress" : "host.domain.com:8042", "type" : "REDUCE", "startTime" :<PHONE_NUMBER>984, "id" : "attempt_1326821518301_10_10_r_0_0", "finishTime" : 0 } ] } }
The reduce attempt is still running and the user wishes to see the current counter values for that attempt:
curl --compressed -H "Accept: application/json" -X GET "http://host.domain.com:8088/proxy/application_1326821518301_0010/ws/v1/mapreduce/jobs/job_1326821518301_10_10/tasks/task_1326821518301_10_10_r_0/attempts/attempt_1326821518301_10_10_r_0_0/counters"
Output:
{ "JobTaskAttemptCounters" : { "taskAttemptCounterGroup" : [ { "counterGroupName" : "org.apache.hadoop.mapreduce.FileSystemCounter", "counter" : [ { "value" : 4216, "name" : "FILE_BYTES_READ" }, { "value" : 77151, "name" : "FILE_BYTES_WRITTEN" }, { "value" : 0, "name" : "FILE_READ_OPS" }, { "value" : 0, "name" : "FILE_LARGE_READ_OPS" }, { "value" : 0, "name" : "FILE_WRITE_OPS" }, { "value" : 0, "name" : "HDFS_BYTES_READ" }, { "value" : 0, "name" : "HDFS_BYTES_WRITTEN" }, { "value" : 0, "name" : "HDFS_READ_OPS" }, { "value" : 0, "name" : "HDFS_LARGE_READ_OPS" }, { "value" : 0, "name" : "HDFS_WRITE_OPS" } ] }, { "counterGroupName" : "org.apache.hadoop.mapreduce.TaskCounter", "counter" : [ { "value" : 0, "name" : "COMBINE_INPUT_RECORDS" }, { "value" : 0, "name" : "COMBINE_OUTPUT_RECORDS" }, { "value" : 1767, "name" : "REDUCE_INPUT_GROUPS" }, { "value" : 25104, "name" : "REDUCE_SHUFFLE_BYTES" }, { "value" : 1767, "name" : "REDUCE_INPUT_RECORDS" }, { "value" : 0, "name" : "REDUCE_OUTPUT_RECORDS" }, { "value" : 0, "name" : "SPILLED_RECORDS" }, { "value" : 1, "name" : "SHUFFLED_MAPS" }, { "value" : 0, "name" : "FAILED_SHUFFLE" }, { "value" : 1, "name" : "MERGED_MAP_OUTPUTS" }, { "value" : 50, "name" : "GC_TIME_MILLIS" }, { "value" : 1580, "name" : "CPU_MILLISECONDS" }, { "value" : 141320192, "name" : "PHYSICAL_MEMORY_BYTES" }, { "value" :<PHONE_NUMBER>, "name" : "VIRTUAL_MEMORY_BYTES" }, { "value" : 73728000, "name" : "COMMITTED_HEAP_BYTES" } ] }, { "counterGroupName" : "Shuffle Errors", "counter" : [ { "value" : 0, "name" : "BAD_ID" }, { "value" : 0, "name" : "CONNECTION" }, { "value" : 0, "name" : "IO_ERROR" }, { "value" : 0, "name" : "WRONG_LENGTH" }, { "value" : 0, "name" : "WRONG_MAP" }, { "value" : 0, "name" : "WRONG_REDUCE" } ] }, { "counterGroupName" : "org.apache.hadoop.mapreduce.lib.output.FileOutputFormatCounter", "counter" : [ { "value" : 0, "name" : "BYTES_WRITTEN" } ] } ], "id" : "attempt_1326821518301_10_10_r_0_0" } }
The job finishes and the user wishes to get the final job information from the history server for this job.
curl --compressed -X GET "http://host.domain.com:19888/ws/v1/history/mapreduce/jobs/job_1326821518301_10_10"
Output:
{ "job" : { "avgReduceTime" : 1250784, "failedReduceAttempts" : 0, "state" : "SUCCEEDED", "successfulReduceAttempts" : 1, "acls" : [ { "value" : " ", "name" : "mapreduce.job.acl-modify-job" }, { "value" : " ", "name" : "mapreduce.job.acl-view-job" } ], "user" : "user1", "reducesTotal" : 1, "mapsCompleted" : 1, "startTime" :<PHONE_NUMBER>902, "id" : "job_1326821518301_10_10", "avgMapTime" : 5059, "successfulMapAttempts" : 1, "name" : "Sleep job", "avgShuffleTime" : 2394, "reducesCompleted" : 1, "diagnostics" : "", "failedMapAttempts" : 0, "avgMergeTime" : 2552, "killedReduceAttempts" : 0, "mapsTotal" : 1, "queue" : "a1", "uberized" : false, "killedMapAttempts" : 0, "finishTime" :<PHONE_NUMBER>164 } }
The user also gets the final applications information from the ResourceManager.
curl --compressed -H "Accept: application/json" -X GET "http://host.domain.com:8088/ws/v1/cluster/apps/application_1326821518301_0010"
Output:
{ "app" : { "finishedTime" :<PHONE_NUMBER>282, "amContainerLogs" : "http://host.domain.com:8042/node/containerlogs/container_1326821518301_0010_01_000001", "trackingUI" : "History", "state" : "FINISHED", "user" : "user1", "id" : "application_1326821518301_0010", "clusterId" :<PHONE_NUMBER>301, "finalStatus" : "SUCCEEDED", "amHostHttpAddress" : "host.domain.com:8042", "progress" : 100, "name" : "Sleep job", "startedTime" :<PHONE_NUMBER>335, "elapsedTime" : 1275947, "diagnostics" : "", "trackingUrl" : "http://host.domain.com:8088/proxy/application_1326821518301_0010/jobhistory/job/job_1326821518301_10_10", "queue" : "a1" } }


--- title: ResNet keywords: fastai sidebar: home_sidebar summary: "Fully implemented ResNet architecture from scratch: https://arxiv.org/pdf/1512.03385.pdf" ---
We first need to make new classes that allow architectures that aren't straight forward passes through a defined set of layers. This is normally handled in the forward passes of pytorch with autograd. We need to be a bit more clever due to the fact that we need to define our gradients in each module.
Testing the gradients and the outputs:
m = SequentialModel(TestMixingGrads(), Linear(25,10, False))
db = get_mnist_databunch()
lf = CrossEntropy()
optimizer = adam_opt()
m
learn = Learner(m, CrossEntropy(), Optimizer, db)
run = Runner(learn, [CheckGrad()])
run.fit(1,0.1)
Before we can start making ResNets, we first define a few helper modules that abstract some of the layers:
Final built up ResNet blocks that implement the skip connecton layers characteristic of a ResNet
class ResLayer(NestedModel):
"Sequential res layers"
def __init__(self, block, n, n_in, n_out, *args, **kwargs):
layers = []
self.block, self.n, self.n_in, self.n_out = block, n, n_in, n_out
downsampling = 2 if n_in != n_out else 1
layers = [ResBlock(n_in, n_out, block, stride=downsampling),
*[ResBlock(n_out * block.expansion, n_out, block, stride=1) for i in range(n-1)]]
self.layers = SequentialModel(*layers)
def __repr__(self): return f'ResLayer(\n{self.layers}\n)'
class ResNet(NestedModel):
"Class to create ResNet architectures of dynamic sizing"
def __init__(self, block, layer_sizes=[64, 128, 256, 512], depths=[2,2,2,2], c_in=3,
c_out=1000, im_size=(28,28), activation=ReLU, *args, **kwargs):
self.layer_sizes = layer_sizes
gate = [
Reshape(c_in, im_size[0], im_size[1]),
ConvBatch(c_in, self.layer_sizes[0], stride=2, kernel_size=7),
activation(),
Pool(max_pool, ks=3, stride=2, padding=Padding(1))
]
self.conv_sizes = list(zip(self.layer_sizes, self.layer_sizes[1:]))
body = [
ResLayer(block, depths[0], self.layer_sizes[0], self.layer_sizes[0], Activation=activation, *args, **kwargs),
*[ResLayer(block, n, n_in * block.expansion, n_out, Activation=activation)
for (n_in,n_out), n in zip(self.conv_sizes, depths[1:])]
]
tail = [
Pool(avg_pool, ks=1, stride=1, padding=None),
Flatten(),
Linear(self.layer_sizes[-1]*block.expansion, c_out, relu_after=False)
]
self.layers = SequentialModel(
*[layer for layer in gate],
*[layer for layer in body],
*[layer for layer in tail]
)
def __repr__(self): return f'ResNet: \n{self.layers}'
res = ResNet(BasicResBlock)
res
Testing out the ResNet Architectures:
GetResnet(18, c_in=1, c_out=10)
GetResnet(34, c_in=1, c_out=10)
GetResnet(50, c_in=1, c_out=10)
GetResnet(150, c_in=1, c_out=10)
GetResnet(152, c_in=1, c_out=10)
run = get_runner(model=GetResnet(18,c_in=1, c_out=10))


Git is a free, open source and very commonly used version control system. Git is known to be used to track your source code and many softwares project rely on Git thanks to it version control. It is widely recommended since it allows many to work together using the same files, and it also stores software development history in a reposistory.
GitHub is a code hosting platform made by Microsoft for version control and collaboration using Git. GitHub helps developers to store, manage as well as tracking and making changes to their codes. GitHub is also one of the largest coding communities that let you save your codes online and allow developers of a project to see changes one has made, and it is one of the easiest ways to get your projects known.
1. Go to Git Installer page to download the latest version of Git for Windows. 2. Follow the instructions in the Setup Wizard. 3. Open the windows command promt (or Git Bash). 4. Type 'git version' to verify that Git was installed.
1. Go to Git Installer page to download the latest version of Git for MacOS. 2. Follow the instructions provided. 3. Open the command promt 'terminal'. 4. Type 'git version' to verify that Git was installed.
For beginners and experts alike, Git has some basic but vital commands that are going to stick with the users throughout their time with Git.
Sometimes developers will try to edit the same content. A conflict may frequently occur when one tries to edit a code that another is editing. The 'git merge' command is created to combine branches and resolve any conflicts.
In order to indentify and resolve conflicts:
A branch is a way to code a new feature or modification to the software and still not affecting the main part of the project.
Creating a branch: start on a default branch or create a new branch.
Merging a branch: a running branch can merge with any other branch in your Git repository: 'git merge [commit]
Deleting a branch: a running branch can be deleted from the reposistory.
Checking out a branch: a running branch can pull or checkout to make a clone of it so that the user can work on any of them.


Yes, brown-nosing :) but we will be practically living at DBC more than our own homes!
This has always been my main home page for News, Sports, Weather, Email, etc.
The default place to go for anything you want to know.


Contains the functions for read trimming. More...
Go to the source code of this file.
Classes | |
| struct | Tail |
| The tagging structure for the Tail trimming algorithm. More... | |
| struct | BWA |
| The tagging structure for the BWA trimming algorithm. More... | |
| struct | Mean |
| The tagging structure for the window trimming algorithm. More... | |
| struct | Dna5QAdapter |
| This structure wraps a sequence with dedicated Dna5 and quality strings so we can use it with our trimming function. More... | |
| struct | QualityTrimmingStats |
Functions | |
| unsigned | getQuality (const seqan::String< seqan::Dna5Q > &seq, unsigned i) |
| Determines the quality at position i of the Dna5QString. More... | |
| unsigned | getQuality (const Dna5QAdapter &seq, unsigned i) |
| Determines the quality at position i in the quality string of the Dna5QAdapter. More... | |
| unsigned | length (const Dna5QAdapter &seq) |
| A specialization of the length function for use with the wrapper Dna5QAdapter. Returns the length of the sequence contained in the wrapper. | |
| void | erase (const Dna5QAdapter &seq, unsigned begin, unsigned end) |
| A specialization of the erase function for use with the wrapper Dna5QAdapter. Simply trimmes both sequence and quality strings separately. | |
| template<typename TSeq > | |
| unsigned | _trimRead (const TSeq &seq, unsigned const cutoff, Tail const &) |
| A very simple trimming mechanism that removes low quality bases from the end. More... | |
| template<typename TSeq > | |
| unsigned | _trimRead (const TSeq &seq, unsigned const cutoff, BWA const &) |
| A trimming algorithm using the method implemented in BWA. More... | |
| template<typename TSeq > | |
| unsigned | _trimRead (const TSeq &seq, unsigned const _cutoff, Mean const &spec) |
| A trimming algorithm using a sliding window method to find the trimming position. More... | |
| template<typename TSeq , typename TQual , typename TSpec > | |
| unsigned | trimRead (TSeq &seq, TQual &qual, unsigned const cutoff, TSpec const &spec) |
| Interface that trims a sequence. More... | |
| template<typename TSeq , typename TSpec > | |
| unsigned | trimRead (TSeq &seq, unsigned const cutoff, TSpec const &spec) |
| Interface that trims a sequence. More... | |
| template<typename TSet , typename TSpec > | |
| unsigned | _trimReads (TSet &seqSet, unsigned const cutoff, TSpec const &spec) |
| Trims a set of reads and marks reads that are too short for removal. More... | |
| template<typename TSet1 , typename TSet2 , typename TId > | |
| void | removeValues (TSet1 &set1, TSet2 &set2, TId id) |
| Removes two sequences at the position id from two StringSets. More... | |
| template<typename TId , typename TSeq > | |
| unsigned | dropReads (seqan::StringSet< TId > &idSet, seqan::StringSet< TSeq > &seqSet, unsigned const min_length, QualityTrimmingStats &stats) |
| Drop reads which are too short. This is done in a way such that the pair structure is conserved. More... | |
| template<typename TId , typename TSeq > | |
| unsigned | dropReads (seqan::StringSet< TId > &idSet1, seqan::StringSet< TSeq > &seqSet1, seqan::StringSet< TId > &idSet2, seqan::StringSet< TSeq > &seqSet2, unsigned const min_length, QualityTrimmingStats &stats) |
| Drop reads which are too short. This is done in a way such that the pair structure is conserved. More... | |
| template<typename TSeq , typename TSpec > | |
| unsigned | trimBatch (seqan::StringSet< TSeq > &seqSet, unsigned const cutoff, TSpec const &spec) |
| Trims bad quality bases from a set of sequences. More... | |
| template<typename TSeq , typename TSpec > | |
| seqan::Pair< unsigned, unsigned > | trimPairBatch (seqan::StringSet< TSeq > &seqSet1, seqan::StringSet< TSeq > &seqSet2, unsigned const cutoff, TSpec const &spec) |
| Trims bad quality bases from two sets of sequences. More... | |
Contains the functions for read trimming.
| unsigned _trimRead | ( | const TSeq & | seq, |
| unsigned const | cutoff, | ||
| Tail const & | |||
| ) |
A very simple trimming mechanism that removes low quality bases from the end.
| seq | The sequence that shall be trimmed. |
| cutoff | The minimum quality required. |
| unsigned _trimRead | ( | const TSeq & | seq, |
| unsigned const | cutoff, | ||
| BWA const & | |||
| ) |
| unsigned _trimRead | ( | const TSeq & | seq, |
| unsigned const | _cutoff, | ||
| Mean const & | spec | ||
| ) |
A trimming algorithm using a sliding window method to find the trimming position.
| seq | The sequence that shall be trimmed. |
| cutQual | The minimum quality required. |
| spec | The algorithm tag containing the window size used for trimming. |
| unsigned _trimReads | ( | TSet & | seqSet, |
| unsigned const | cutoff, | ||
| TSpec const & | spec | ||
| ) |
Trims a set of reads and marks reads that are too short for removal.
| removedID | A collection that stores the IDs of sequences marked for removal. |
| seqSet | A collection of sequences that shall be trimmed. |
| cutoff | The minimum quality required from a base. |
| min_length | The minimum length required after trimming. Shorter sequences are marked for removal in removedID. |
| spec | The trimming algorithm used for trimming. |
| unsigned dropReads | ( | seqan::StringSet< TId > & | idSet, |
| seqan::StringSet< TSeq > & | seqSet, | ||
| unsigned const | min_length, | ||
| QualityTrimmingStats & | stats | ||
| ) |
Drop reads which are too short. This is done in a way such that the pair structure is conserved.
| idSet | StringSet of FastA-IDs for the set of sequences. |
| seqSet | StringSet containing the reads. |
| min_length | The minimum length required after trimming. Shorter sequences will be deleted. |
| stats | Quality statistic struct to store how many reads were dropped. |
| unsigned dropReads | ( | seqan::StringSet< TId > & | idSet1, |
| seqan::StringSet< TSeq > & | seqSet1, | ||
| seqan::StringSet< TId > & | idSet2, | ||
| seqan::StringSet< TSeq > & | seqSet2, | ||
| unsigned const | min_length, | ||
| QualityTrimmingStats & | stats | ||
| ) |
Drop reads which are too short. This is done in a way such that the pair structure is conserved.
| idSet1 | StringSet of FastA-IDs for the first set of sequences. |
| seqSet1 | StringSet containing the forward reads of the paired sequences. |
| idSet2 | StringSet of FastA-IDs for the second set of sequences. |
| seqSet2 | StringSet containing the backward reads of the paired sequences. |
| min_length | The minimum length required after trimming. Shorter sequences will be deleted. (See remark). |
| stats | Quality statistic struct to store how many reads were dropped. |
|
inline |
Determines the quality at position i of the Dna5QString.
| seq | The Dna5QString containing bases and qualities. |
| i | The index of the base whose quality shall be returned. |
|
inline |
Determines the quality at position i in the quality string of the Dna5QAdapter.
| seq | The Dna5QAdapter structure containing the quality string. |
| i | The index of the base whose quality shall be returned. |
| void removeValues | ( | TSet1 & | set1, |
| TSet2 & | set2, | ||
| TId | id | ||
| ) |
Removes two sequences at the position id from two StringSets.
| set1 | The first set where position id is removed. |
| set2 | The second set where position id is removed. |
| id | The id that identifies the read to be removed. |
| unsigned trimBatch | ( | seqan::StringSet< TSeq > & | seqSet, |
| unsigned const | cutoff, | ||
| TSpec const & | spec | ||
| ) |
Trims bad quality bases from a set of sequences.
| idSet | StringSet of FastA-IDs for the first set of sequences. |
| seqSet | StringSet containing the forward reads of the paired sequences. |
| cutoff | The minimum quality required of a base. |
| spec | The trimming algorithm used to trim the sequences. |
| seqan::Pair<unsigned, unsigned> trimPairBatch | ( | seqan::StringSet< TSeq > & | seqSet1, |
| seqan::StringSet< TSeq > & | seqSet2, | ||
| unsigned const | cutoff, | ||
| TSpec const & | spec | ||
| ) |
Trims bad quality bases from two sets of sequences.
| seqSet1 | StringSet containing the forward reads of the paired sequences. |
| seqSet2 | StringSet containing the backward reads of the paired sequences. |
| cutoff | The minimum quality required from a base. |
| spec | The trimming algorithm used to trim the sequences. |
| unsigned trimRead | ( | TSeq & | seq, |
| TQual & | qual, | ||
| unsigned const | cutoff, | ||
| TSpec const & | spec | ||
| ) |
Interface that trims a sequence.
| seq | The sequence that shall be trimmed. |
| cutoff | The minimum quality required from a base. |
| spec | The trimming algorithm used for trimming. |
| unsigned trimRead | ( | TSeq & | seq, |
| unsigned const | cutoff, | ||
| TSpec const & | spec | ||
| ) |
Interface that trims a sequence.
| seq | The sequence that shall be trimmed. |
| cutoff | The minimum quality required from a base. |
| spec | The trimming algorithm used for trimming. |


Company profile - Canadian Company Capabilities
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
CPCS Transcom Limited
Mailing Address:
72 Chamberlain AveOTTAWA, Ontario
K1S 1V9
Location Address:
72 Chamberlain AveOTTAWA, Ontario
K1S 1V9
Tel.:<PHONE_NUMBER>
Fax:<PHONE_NUMBER>
Company Profile
CPCS is an international professional services firm that has been providing specialized infrastructure development advice to public and private sector clients since 1969. Specializing in mobilizing private investment in public infrastructure and services, we develop strategies and programs that ensure sustainable infrastructure service delivery and promote economic growth. We are currently the third largest company in Canada for consulting projects funded by International Financial Institutions - a significant portion of our work has been implemented in challenging international markets.
CPCS has been honored with the World Bank's Award of Excellence, the Canadian Award for International Cooperation, and a Canadian Award for International Development (Best Transport Services Project).
CPCS provides advisory services across a broad spectrum of infrastructure sectors, including: Ports, Rail, Urban (transit and property development), Power, Marine, Multimodal Logistics and Roads. Our team brings international expertise in the areas of transaction structuring, public-private partnerships (PPP), financial and economic modeling, legal and regulatory reform, operations, engineering and social and environmental advisory. This strong combination of in-house commercial and technical expertise is what makes CPCS different and has enabled us to successfully complete over 900 projects in 80 countries.
We are an employee-owned, independent company. We have no corporate affiliations that would compromise our ability to provide independent advice to our clients regarding downstream project work. We have established an active and successful transaction advisory practice that advises our clients on the value of professionalism and transparency and we have brought those principles fully on board in our own dealings with clients and partners alike.
North American Practice:
In 2006, the North American Practice was formally created as a division of CPCS and operates with its own dedicated team. This has allowed CPCS to better respond to the specific needs of clients in North America and to develop a depth of experience specific to this market. The Practice continues to draw on CPCSs Global experience and experts as needed.
In a short period of time, CPCS North American Practice has established itself as market leader. We continue to bolster our presence and team in this market in response to a growing volume of work. Since 2006, we have completed over 50 assignments for both public and private sector clients. Public sector clients include municipal, provincial and federal governments as well as agencies. Private sector clients have included port operators, Class 1 Railways and other logistics providers as well as private debt and equity investors.
Full profile
Full profile
Contact information
Company description
Product / Service / Licensing
Market profile
Industry sector market interests:
- Transportation
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
Contacts
Contact information
Description
Company description
Products, services and licensing
Product / Service / Licensing
Market
Market profile
Industry sector market interests:
- Transportation


This site collects opt-in automatic feedback from players of {{ PROJECT_NAME }}
Published data: OpenGL capabilities. CPU features. Memory. Operating System.


LUXURY RESORT
WelCome
to The Home
of Luxyry Resort
Home
About
Room Size
Double Room
Room Type
Standard
Superior
Deluxe
Room Description
Insite Your Room
Outsite Your Room
Evening
Our Facility
is perfect
Our Facility
is stunning
Your Info
Name
Email
Input your Passport (option)
Go to the end of this Page
Email Us
Insite the room
Enveloping the spirit of Samoa, Sinalei’s nostalgic Traditional Villas are nestled among our lush tropical grounds.
Embodying authentic Samoan charm, these villas offer the ultimate in island experience, fused with a chic twist on tradition.
The hidden treasure of what has historically made Sinalei so unique and alluring, each villa allows your moonlit shower dreams a chance to come true
Enjoy the beauty of your surrounds on the rustic patio, overlooking dotted palms and a sparkling turquoise lagoon in the distance.
Outsdte the room
Our gorgeous Garden View Villas, dotted amongst the swaying palms, are designed for those wanting to experience light filled chic villas nestled amongst cascading gardens.
Wake up amongst the natural foliage of Sinalei, as the sun seeps through your windows, inviting you to enjoy its wonder for the day.
Where island style marries naturally lit abodes. Affording you the most stunning of sunlit showers, our bathrooms boast glass ceilings which allow for the natural light to pour into your morning routine.
In the Evening
Nestled amongst immaculate gardens, with views
over the sparkling aqua lagoon, our Ocean View Villas are one step closer to the soft white sands of the sea.
Go to Top Page
Click here to Google
Click here to see our 1st option
Click here to see our 2nd option
Click Here to know where I am living
Review
How do you hear about us
Google
Friends
Facbook
Would you like to visit again?
Yes
No
Comment
Sign me up for email update


climate models model {border-style global px;} weather #ffffff;} change regional science scientific observed warming ability changes present Clim. Earth Fig. Meteorol. Palmer Soc. observational physical px; uncertainty {font-family Am. Bull. Climate change. comprehensive fidelity font-size possible prediction systematic temperature understanding basic change, data double; ensemble important observations period processes resolution response society surface used Box Change However, Sci. anomalies application biases border-color border-width challenges development generation information integrations largely mean models. new numerical parameterizations policy precipitation solid; using {font-style {font-weight Global Phys. approach bias bold challenge circulation community computational courier; efforts em; error help idea magnitude past picture pt;} purpose reliable scale simulation world


Class Wizard: Summary
The Summary step simply displays the information on your new class or the class you are editing. Click the Finish button if everything looks alright to finish creating or editing the class.


What If...?
The 2016 US Election Map
Scenario
Popular Vote Winner:
Electoral College Winner:
Dem Electoral Votes:
GOP Electoral Votes:
* Currently Maine displays as a winner-takes-all state; in reality, it has a more complicated voting model.
Copyright 2016 Andrew Varnerin


Competition class.
More...
#include <competition.h>
◆ Competition()
| Competition::Competition |
( |
ros::NodeHandle & |
node | ) |
|
|
explicit |
◆ areOrdersLeft()
| bool Competition::areOrdersLeft |
( |
| ) |
|
|
inline |
◆ competition_clock_callback()
| void Competition::competition_clock_callback |
( |
const rosgraph_msgs::Clock::ConstPtr & |
msg | ) |
|
Time since the competition started.
Callback to get the clock.
- Parameters
-
◆ competition_state_callback()
| void Competition::competition_state_callback |
( |
const std_msgs::String::ConstPtr & |
msg | ) |
|
Get the state of the competition (init, end, etc)
Competition State Callback.
- Parameters
-
| msg | |
| msg | Subscribed Message |
◆ endCompetition()
| void Competition::endCompetition |
( |
| ) |
|
End competition through ROS service.
End the competition.
◆ get_product_list()
| std::vector< Product > Competition::get_product_list |
( |
| ) |
|
getter to obtain the current list of products
- Returns
- std::vector<Product> list of products being processed
◆ get_product_list_from_shipment()
| std::vector< Product > Competition::get_product_list_from_shipment |
( |
Shipment |
shipment | ) |
|
getter to obtain the current list of products from a particluar shipment
- Returns
- std::vector<Product> list of products being processed
◆ get_shipment_list()
| std::vector<Shipment> Competition::get_shipment_list |
( |
| ) |
|
|
inline |
◆ getAgvInUse()
| std::string Competition::getAgvInUse |
( |
| ) |
const |
|
inline |
◆ getClock()
| double Competition::getClock |
( |
| ) |
|
Get the Clock objectGet.
get the current clock time
- Returns
- double
◆ getCompetitionState()
| std::string Competition::getCompetitionState |
( |
| ) |
|
Get the Competition State object.
Get the state of the competition.
- Returns
- std::string
◆ getStartTime()
| double Competition::getStartTime |
( |
| ) |
|
Get the Start Time object.
Get competition start time.
- Returns
- double
◆ getTotalReceivedOrdersCount()
| int Competition::getTotalReceivedOrdersCount |
( |
| ) |
const |
|
inline |
◆ init()
| void Competition::init |
( |
| ) |
|
Initialize components of the class (suscribers, publishers, etc)
Constructor.
◆ newOrderAlert()
| bool Competition::newOrderAlert |
( |
| ) |
|
|
inline |
◆ order_callback()
| void Competition::order_callback |
( |
const nist_gear::Order::ConstPtr & |
order_msg | ) |
|
Deal with received orders from /ariac/orders topic.
Order list callback.
- Parameters
-
| msg | |
| order_msg | Subscribed Message |
◆ orderTransition()
Process a new priority order.
- Parameters
-
| prevShipments | shipment that is currently being build and needs to be stored |
| gantry | Gantry class passed by reference |
◆ processOrder()
| bool Competition::processOrder |
( |
| ) |
|
Handle products in the order.
Process the order list.
- Returns
- true
-
false
◆ removePrevProductsFromAGV()
Transfer Products from one AGV tray to another.
- Parameters
-
| fromAGV | From AGV ID |
| sensors | Sensors object |
| gantry | Gantry Object |
◆ setAgvInUse()
| void Competition::setAgvInUse |
( |
const std::string & |
agv_id | ) |
|
Check free AGV to place part.
- Parameters
-
◆ setNewOrderAlert()
| bool Competition::setNewOrderAlert |
( |
bool |
flag | ) |
|
|
inline |
◆ startCompetition()
| void Competition::startCompetition |
( |
| ) |
|
Start the competition through ROS service.
Start the competition.
◆ updateAGVProductMap()
| void Competition::updateAGVProductMap |
( |
std::string |
agvid, |
|
|
Product |
prod |
|
) |
| |
|
inline |
◆ updateTotalOrderCount()
| int Competition::updateTotalOrderCount |
( |
| ) |
|
|
inline |
◆ agvInUse
| std::string Competition::agvInUse = "" |
|
private |
◆ agvToProductsMap
| std::unordered_map<std::string, std::vector<Product> > Competition::agvToProductsMap {{AGV1_ID, {}}, {AGV2_ID, {}}} |
|
private |
◆ agvToShipmentMap
| std::unordered_map<std::string, std::queue<std::string> > Competition::agvToShipmentMap |
◆ competition_clock_
| ros::Time Competition::competition_clock_ |
|
private |
clock to check if we are close to the time limit
◆ competition_clock_subscriber_
| ros::Subscriber Competition::competition_clock_subscriber_ |
|
private |
subscriber to the topic /clock
◆ competition_start_time_
| double Competition::competition_start_time_ |
|
private |
◆ competition_state_
| std::string Competition::competition_state_ |
|
private |
◆ competition_state_subscriber_
| ros::Subscriber Competition::competition_state_subscriber_ |
|
private |
subscriber to the topic /ariac/competition_state
◆ current_score_
| double Competition::current_score_ |
|
private |
current score during the trial
◆ current_score_subscriber_
| ros::Subscriber Competition::current_score_subscriber_ |
|
private |
subscriber to the topic /ariac/current_score
◆ newOrderAlertFlag
| bool Competition::newOrderAlertFlag = false |
|
private |
◆ node_
| ros::NodeHandle Competition::node_ |
|
private |
node h_type: "ordeandle for this class
◆ order_list_
| std::vector<Order> Competition::order_list_ |
|
private |
◆ orders_subscriber_
| ros::Subscriber Competition::orders_subscriber_ |
|
private |
subscriber to the topic /ariac/orders
◆ orderSet
| std::unordered_set<std::string> Competition::orderSet |
|
private |
◆ orderStack
| std::stack<std::vector<Shipment> > Competition::orderStack |
|
private |
◆ product_list_
| std::vector<Product> Competition::product_list_ |
|
private |
◆ received_orders_
| std::vector<nist_gear::Order> Competition::received_orders_ |
|
private |
◆ receivedOrdersCount
| int Competition::receivedOrdersCount |
|
private |
◆ shipment_list_
| std::vector<Shipment> Competition::shipment_list_ |
|
private |
The documentation for this class was generated from the following files:
- /home/sandeep/ariac_ws/src/ARIAC_Group_1/rwa5_group_1/include/competition.h
- /home/sandeep/ariac_ws/src/ARIAC_Group_1/rwa5_group_1/src/competition.cpp


--Select Language--
English
Spanish
Japanese
Hindi
Select a Language to continue
Currently Speech Synthesis for Indian Languages is not supported. Text Support only.


the and (.) coronavirus that for were with pharmacists participants was awareness pharmacy their study about COVID- they {background The from not this during role margin are {border-style years has have health patients px;} #ffffff;} information used such using been than This community management public <Â clinical majority pandemic treatment infection more research respiratory risk (nÂ believed can care students use when (.%) Adm hydroxychloroquine important items reported sample should Health also appropriate counseling how may services via (%) Pharm./j.sapharm... Soc answers disease educational higher immune px; questions them through updates {font-family â€¢ â€¢â€" March WHO against age associated available could course evidence font-size highest including infection. knew latest need pharmaceutical pharmacist providing significantly size symptoms which while workshops Coronavirus Jordan Jordan. Pharmacists Pharmacy Study Table University addition after allowed among any being but cases current double; early epidemics/pandemics first ibuprofen increase infections level linear medications novel only participants' pharmacies play regarding required score service team under viral who Elsevier Fig. For More all analysis asked between border-color border-width collab: control correct countries distance drive-through enough experience feet) healthcare media online people perspective private questionnaire rest roles section solid; some support survey syndrome then treatments university versus world {font-style {font-weight & (pÂ --- Amman, Applied COVID-. COVID-: China Jordan, Jordanian Reference. States United World able acute affected affecting ago along anti-inflammatory around bold boost both caused cells centre considered contracting courier; data did different drugs education elderly em; email expected fact factors follow followed had half hospital indicate indicated infected infection., international into least made make media. number other outbreak pandemic, pandemic. patient person pharmacists. population practice prevalence previous provide provided pt;} regression resource results review severe significant source spread student suspected therapy transmission virus. well where will willing would year yearly â€¢Pharmacy


Country Trivia
Enter country below:
Country:
Select==>
India
Bangladesh
Australia
Capital:
Currency:
Primary Language:


Main page
Contents
Featured content
Current events
Random article
Donate to Wikipedia
Wikipedia store
Interaction
Help
About Wikipedia
Community portal
Recent changes
Contact page
Tools
What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Wikidata item
Print/export
Create a book
Download as PDF
Printable version
In other projects
Wikimedia Commons
MediaWiki
Meta-Wiki
Wikispecies
Wikibooks
Wikidata
Wikinews
Wikiquote
Wikisource
Wikiversity
Wikivoyage
Not logged in Talk Contributions Create account Log in
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio.
Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains."


@author YAMATODANI Kiyoshi
@version $Id: Overview.html,v 1.3 2007/04/19 04:10:32 kiyoshiy Exp $
'LMLML' is Library of MultiLingualization for ML, which aims to support writing multi-linugalized program in ML. The current version supports multi-byte string processing only.
String manipulation modules of existing ML compilers and ML Basis library assume, in fact, a codec which encodes a character in a byte. They do not expect codecs which encode a character in multi-bytes. Therefore, it is hard for ML programmer to write applications which have to handle texts encoded in various codecs. SML# project developed LMLML to support development of such multi-byte string applications.
With LMLML, you can select used codec dynamically for each string. And, you can manipulate strings encoded in heterogeneous codecs as instances of the same type. Therefore, with LMLML, you can isolate program codes which depends on spcific codecs from program codes of codec-independent.
You can select encoding method dynamically with MultiByteString
structure.
decode
functions of MultiByteString
take a string which specify the encoding method to use.
signature MULTI_BYTE_STRING = sig structure Char : sig type char val decodeBytesSlice : String.string -> Word8VectorSlice.slice -> char option val decodeBytes : String.string -> Word8Vector.vector -> char option val decodeString : String.string -> String.string -> char option : end structure String : sig type string val decodeBytesSlice : String.string -> Word8VectorSlice.slice -> string val decodeBytes : String.string -> Word8Vector.vector -> string val decodeString : String.string -> String.string -> string : end end structure MultiByteString : MULTI_BYTE_STRING
For example, you can decode a byteVector : Word8Vector.vector
in UTF-16 encoding as follows.
# val s1 = MultiByteString.String.decodeBytes "UTF-16" byteVector; val s1 = - : MultiByteString.String.string
Available encoding methods are listed by MultiByteString.getCodecNames
.
# MultiByteString.getCodecNames(); val it = [ "UTF-16", "UTF-16LE", "UTF-16BE", "UTF-8", "SHIFT_JIS", "MS_KANJI", "CSSHIFTJIS", "ISO-2022-JP", "CSISO2022JP", "GB2312", "CSGB2312", "GBK", "CP936", "MS936", "WINDOWS-936", "EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE", "CSEUCPKDFMTJAPANESE", "EUC-JP", "ANSI_X3.4-1968", "ISO-IR-6", "ANSI_X3.4-1986", "ISO_646.IRV:1991", "ASCII", "ISO646-US", "US-ASCII", "US", "IBM367", "CP367", "CSASCII" ] : string list
As described below, new encoding method can be added.
If the encoding method to use is statically fixed, it is more efficient to use a structure that implements the encoding method.
# val s2 = UTF16Codec.String.fromBytes byteVector; val s2 = - : UTF16Codec.String.string
However, strings obtained in these ways are not compatible each other.
# MultiByteString.String.size s2; stdIn:5.1-5.30 Error: operator and operand don't agree operator domain: MultiByteString.String.string operand: UTF16Codec.String.string
MultiByteString
and encoding-specific modules, such as UTF16Codec
, provide interfaces almost compatible with Char
and String
of Basis.
It is easy to upgrade existing ML program to support multi-byte string codecs with minor changes only.
signature MB_CHAR = sig type char val compare : char * char -> order val isAscii : char -> bool : end signature MB_STRING = sig type string type char val sub : string * int -> char val explode : string -> char list : end signature MULTI_BYTE_STRING = sig structure Char : MB_CHAR structure String : MB_STRING sharing type Char.string = String.string sharing type Char.char = String.char end structure MultiByteString : MULTI_BYTE_STRING signature CODEC = sig structure Char : MB_CHAR structure String : MB_STRING sharing type Char.string = String.string sharing type Char.char = String.char end structure UTF16Codec : CODEC
And, LMLML provides functors to generate multibyte-string version of Substring
, StringCvt
and ParserComb
.
functor SubstringBase functor StringConverterBase functor ParserCombinatorBase
Note: For the current version, functors are not loaded in the prelude. You should load "LMLML/extension.sml" as follows to use these functors.
# use "LMLML/extension.sml";
For example, you can obtain a multibyte-string version of Substring
for UTF-16 encoding as follows.
local structure MBS = UTF16Codec.String structure MBC = UTF16Codec.Char structure P = struct type char = MBS.char type string = MBS.string val sub = MBS.sub val substring = MBS.substring val size = MBS.size val concat = MBS.concat val compare = MBS.compare val compareChar = MBC.compare end in structure UTF16Substring : MB_SUBSTRING = SubstringBase(P) end
LMLML supports major codecs, such as ShiftJIS and UTF-16 already. You can extend LMLML by adding a new module that supports an encoding method you need without changing LMLML.
First, you have to define a structure that implements PRIM_CODEC
signature.
For example, to support an encoding "foo", define a structure as follows.
structure FooCodecPrim : PRIM_CODEC = struct val names = ["foo"] : end
Then, apply Codec
functor to it.
structure FooCodec = Codec(FooCodecPrim);
This code registers foo codec to MultiByteString
.
You can decode in foo codec as follows.
val mbs1 = MultiByteString.String.decodeBytes "foo" byteVector;
Of course, you can use FooCodec
directly.
val mbs2 = FooCodec.String.fromBytes byteVector;
Major features of LMLML are implemented without depending on SML# features. LMLML can be used with any compiler that conform to the Definition of Standard ML, including of cource SML# but probably also SML/NJ, MLton, and many others.
LMLML is installed with SML# system. And, its core modules are loaded in prelude.
In current version of SML#, Codec functor is not loaded in prelude for an implementation reason. To use Codec functor to extend LMLML with new codec, you have to load "LMLML/extension.sml" as follows.
# use "LMLML/extension.sml";
Use sources.cm with SML/NJ CM.
Use sources.mlb with MLton Basis system.
As an example programming with LMLML, we try to search a character '剣' in a string "白血病abc剣道".
In Shift_JIS, "白血病abc剣道" is encded into the following byte vector:
0wx94, 0wx92, 0wx8C, 0wx8C, 0wx95, 0wx61, (* 白血病 *) 0wx61, 0wx62, 0wx63, (* abc *) 0wx8C, 0wx95, 0wx93, 0wxB9 (* 剣道 *)
A pair of the second byte of '血' and the first byte of '血' is ( 0wx8C, 0wx95 ), which eqauls to '剣'. Therefore, if we search '剣'(0wx8C, 0wx95) in this byte vector, we find incorrectly the byte sequence spanning the second character and the third character of "白血病".
With LMLML, we can obtain the correct result.
At first, we decode a Shift_JIS string from the byte vector.
(* "白血病abc剣道" *) val bytes = Word8Vector.fromList [ 0wx94, 0wx92, 0wx8C, 0wx8C, 0wx95, 0wx61, (* 白血病 *) 0wx61, 0wx62, 0wx63, (* abc *) 0wx8C, 0wx95, 0wx93, 0wxB9 (* 剣道 *) ]; val string = MultiByteString.String.decodeBytes "Shift_JIS" bytes; (* "剣" *) val KenBytes = Word8Vector.fromList [0wx8C, 0wx95]; (* 剣 *) val KenString = MultiByteString.String.decodeBytes "Shift_JIS" KenBytes;
Then, search "剣" in "白血病abc剣道" .
val (leftSS, rightSS) = MBSubstring.position KenString (MBSubstring.full substring);
The obtained leftSS is first 6 characters of "白血病abc", which indicates that the 7th charcter "剣" is found correctly.
# MBSubstring.size leftSS; val it = 6 : int
In this example, codec is fixed at Shift_JIS, you can write by using Shift_JIS specific module as follows.
val ShiftJISString = ShiftJISCodec.String.fromBytes bytes; val ShiftJISKenString = ShiftJISCodec.String.fromBytes KenBytes; structure ShiftJISSubstring = SubstringBase (struct open ShiftJISCodec.String val compareChar = ShiftJISCodec.Char.compare end); val (leftSS, rightSS) = ShiftJISSubstring.position ShiftJISKenString (ShiftJISSubstring.full ShiftJISString); val len = ShiftJISSubstring.size leftSS;


{{ response.amountSent }} Sent {{ response.amountReceived }} Received {{ response.qualityOfProduct }}


Irish Gangsters | List of the 13 Most Infamous Irish Mobsters and ...
These are the notorious godfathers - the top crime bosses from the Irish Mob and . Owney Madden was the boss of 'The Westies,' a group that ruled supreme .
http://www.ranker.com/list/the-13-most-infamous-irish-mobsters/public-enemy
Treatment for Herniated or Bulging Discs
The Westies: Inside New York's Irish Mob by T.J. English - Reviews ...
If you enjoy true crime and mob stories The Westies is a must. . The Westies describes the history of the Irish mob in Hell's Kitchen, which was the lower west .
http://www.goodreads.com/book/show/158121.The_Westies
Gangland.net - The Westies
There was no real boss of the Gophers, but there were many gang members who stuck . In 1931, he was made a representative of the Irish Mob in New York by .
http://www.gangland.net/westies.htm
true story about irish mob westies Herniated or Bulging Discs
The Westies: Inside New York's Irish Mob - T. J. ... - Google Books
Review: The Westies: Inside New York's Irish Mob. User Review - Peter - Goodreads. If you enjoy true crime and mob stories The Westies is a must. There seem .
http://books.google.com/books/about/The_Westies.html?id=1_HaOfn0nw4C
Paddy Whacked: The Untold Story of the Irish American Gangster ...
Here is the shocking true saga of the Irish American mob, from the . Mickey Featherstone, troubled Vietnam vet turned Westies gang leader from Hell's Kitchen; .
http://books.google.com/books/about/Paddy_Whacked.html?id=uvDN9yBVBF8C
10 Best Irish Mob Movies | Screen Junkies
Feb 7, 2011 . Check out 10 Best Irish Mob Movies in Movies Gangster Movies and more . It's the classic story of tough gangs, street kids, and guys just out of prison. . The Irish Westies control everything west of Times Square, but the yuppies . Critics might not like it, but true Southies will tell you, this one will give you a .
http://www.screenjunkies.com/movies/genres-movies/gangster/10-best-irish-mob-movies/
Official Impairment Listing for Spinal Disorders
THE IRISH MAFIA - YouTube
Sep 11, 2012 . THE WESTIES OMADDEN AND LOT'S MORE IMFAMOUS IRISH . chicago mob takedownby deathclock269057,762 views; The True Story of .
http://www.youtube.com/watch?v=npoPuSO2xWA
- oklahoma department of motor vechical (narrowing of the spine)
The Westies: Inside New York's Irish Mob - T. J. ... - Google Books
Nov 15, 2011 . Review: The Westies: Inside New York's Irish Mob. User Review - Peter - Goodreads. If you enjoy true crime and mob stories The Westies is a .
http://books.google.com/books/about/The_Westies.html?id=ytjdyXQxwDgCThe Westies: Inside New York's Irish Mob: T. J. English - Amazon.com
Even among the Mob, the Westies were feared. Starting with a . Paddy Whacked : The Untold Story of the Irish American Gangster by T. J. English Paperback $10.87 . $7.99. Black Mass: The True Story of an Unholy Alliance Dick Lehr .
http://www.amazon.com/Westies-Inside-New-Yorks-Irish/dp/0312362846
Irish Mob - Wikipedia, the free encyclopedia
The Irish Mob is one of the oldest organized crime groups in the United States, in existence . 1.2.1 Pre-prohibition; 1.2.2 Prohibition; 1.2.3 The Westies . The General (1998), Real life story of Irishman, Martin Cahill (Brendan Gleeson) who .
http://en.wikipedia.org/wiki/Irish_Mob
BARNES & NOBLE | The Westies: Inside New York's Irish Mob by ...
Oct 31, 2006 . Even among the Mob, the Westies were feared. Starting with a . Buy Now. Murder Machine: A True Story of Murder, Madness, and the Mafia .
http://www.barnesandnoble.com/w/westies-t-j-english/1103476725
Medical-Vocational Allowance for Herniated Disc
The Westies | T. J. English | Macmillan
Even among the Mob, the Westies were feared. . Masterfully told, gracefully written
the true story of the most violent men this . Inside New York's Irish Mob .
http://us.macmillan.com/thewesties/TEnglish
Does the Irish mob still exist? (New York, Union: crime ...
Aug 5, 2010 . As an Irish American that generation of the Westies (1970s) gave . I heard stories where they used to RAPE rival drug dealers mothers, . The REAL Irish mob in NY is nothing like that, they are feared for a different reason.
http://www.city-data.com/forum/new-york-city/1051103-does-irish-mob-still-exist-new.html
Appealing a Denial of Benefits
THE LORD'S OF HELL'S KITCHEN - New York Times
Apr 5, 1987 . But if the Westies seem like ghosts, they are harrowingly real. New York law . The Irish gangs never had the formal structure or initiation rites of the Mafia. ''The Italians . ''But you'd hear the most horrible stories.'' In 1971, for .
http://www.nytimes.com/1987/04/05/magazine/the-lord-s-of-hell-s-kitchen.html?pagewanted=all&src=pm


care PPE use {border-style Ebola px;} #ffffff;} face PAPR control AGPs < health infection respiratory (Accessed Safety les patient protection Health Infection hood respirator Control Figure ensure equipment mask protective px; respirators {font-family air-purifying airborne font-size hygiene suspected using August Occupational Personal contact des disposable double; hand patients performed powered precautions present procedures Air EVD General Hospital Institute Jewish National Prevention USA) advantages appropriate black blower border-color border-width disadvantages fever filtering filters including individuals outbreak policy removal room solid; transmission tube virus {font-style {font-weight (USA) (eg, Air-Mate CDC Division Hand PAPRs Powered Respiratory Solutions available bold courier; doffing donning em; entering filter fit hemorrhagic hospital hospitalized include infected infectious known personal piece place. potential precautions. procedure proper pt;} removed reprocessing required reusable risk room, routine shield shoe tested type


{% extends 'brambling/layouts/12.html' %} {% block title %}418 Error – {{ block.super }}{% endblock %} {% block main %}
Short and stout and unable to brew coffee.
See HTCPCP-TEA §2.3.3 or Wikipedia.


/brython.js
in the tutorial directory is Brython version 20130106-224621. You can update this by downloading the latest version from Google Code, renaming it brython.js
, and replacing /brython.js
with the new one.
To run the server if you have python 2 installed, run /server_python2.py
. If you have python 3, /server_python3.py
. If you are on Mac OS or Linux you probably already have one of these installed, or the installation is easy following the instructions on http://python.org/. If you are on windows and do not have a Python installation, here is a .exe (link broken). Download it, and place it next to the two .py
files. It is a small standalone server.
When you start to use this tutorial, run the server. When you are done, simply close it. It will handle any asynchronous requests (and don't worry if you don't know what that means yet).
/src/
contains the tutorial itself. /example_files/
contains the source for the finished numbered entries (see below).
On the menu on the left side of the screen there are several numbered pages. These are full working examples with explanations. To view the examples, they need to be running on a web server. Following the steps in Starting the server (aka, double cliking the server file) will allow you to view these. We will discuss why later in the tutorial. All links to examples assume you are running one of the provided servers.
If you want modify or play with the source of one of the example files, copy the contents of its directory to /example_files/playground/
and modify it from there. Assuming that the server is running, there is a link to the playground in the title bar. It will return 404 if the server is not running or no files have been copied.


{% extends "base.html" %} {% load bootstrap4 %} {% block content %} {% load static %}
{{neighborhood.description}}
{% if request.user.profile.neighborhood == neighborhood %} Leave {{neighborhood.name}} Neighborhood {% elif not request.user.profile.neighborhood %} Move into {{neighborhood.name}} Neighborhood {% endif %} {% if neighborhood.admin.user.username == current_user.username %} {% endif %}


Resolve rejected outputs by uploading a new version or protesting.
You may also choose to upload a new version for accepted outputs at this time. The reason you may wish to do this is if you know the verification was a false-acceptance, it will reduce the risk of being rejected during the open verification stage. One penalty point will occur for your upload if it is accepted, and the verification will be done by the instructor.
| Input | Your Output | Status | Actions |
|---|---|---|---|
|
|
|
||
| Nothing submitted |


Big Daddy (1999) A Capsule Review by Nathaniel R. Atcheson
Director: Dennis Dugan Cast: Adam Sandler, Cole Sprouse, Dylan Sprouse, Jon Stewart, Leslie Mann Joey Lauren Adams Screenplay: Steve Franks, Tim Herlihy, Adam Sandler Producers: Sidney Ganis, Jack Giarraputo Runtime: US Distribution: Columbia Rated PG-13: language, crude humor
Copyright 1999 Nathaniel R. Atcheson
Adam Sandler isn't known for appearing in deep, thought-provoking films, but he's still a really funny guy.  Big Daddy is the first film in which the story seems more important than Sandler's comic performance, and it's a miserable failure.  As one might expect from the synopsis, director Dennis Dugan resorts to the usual bag of manipulative and sentimental sequences, including a repulsive courtroom battle and a lot of teary scenes in which characters say "good-bye" to one another; in addition, there's a ridiculous amount of disgusting toilet humor (urine and vomit both get more screen time than Sandler himself). There's a hilarious running joke featuring a female doctor who previously worked at Hooters, and the film features passable performances from Sandler, Joey Lauren Adams (as the love interest), and the two young boys, but the film on the whole is trite and disappointingly unfunny.
Psychosis Rating: 3/10
Visit FILM PSYCHOSIS at http://www.pyramid.net/natesmovies
Nathaniel R. Atcheson
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


A simple web app log for your home items to track perishables, inventory & more.
Click + above to add new item.
Search for items by filter and/or by search bar.


welcome to xyz bank services
OUR SERVICES ARE:
withdraw money
deposit money
check current balance
update user pin
logout


{% spaceless %}
{% if relationships.solo or relationships.with or relationships.for %}
{% if relationships.solo and not relationships.soloist %}
Solo Work
{% else %}
{% if not relationships.soloist %}
{% if relationships.for %}
for {% for relationship in relationships.for %}{{ relationship }}{% include "utilities/commaify.html" %}{% endfor %}
{% endif %}
{% if relationships.with %}
with {% for relationship in relationships.with %}{{ relationship }}{% include "utilities/commaify.html" %}{% endfor %}
{% endif %}


To draw a rectangle:
- Select the rectangle tool
- Move your mouse to the WorkArea
- Drag from the top left to the bottom right. For Squares, hold down the Control key while dragging.
- Hold down Ctrl while dragging to create a square
- Drag the shape handles to re-size


This example is a simple and uncomplete test of a single DLATRAM component . After simulation until 400 s plot dLATRAM.addr[1], dLATRAM.addr[2], and dLATRAM.dataOUT[1], dLATRAM.dataOut[2]. The address inputs are prescribed with all possible combinations of logic values. It can be checked in which cases of address values the output is 'X' or '0'.


- HTTP/2 Enabled:
- SPDY/3.1 Enabled:
- Use Alternative Service:
- ALPN Protocols:
- NPN Protocols:
HTTP/2 sessions
None
View live HTTP/2 sessions
| Host |
Proxy |
ID |
Negotiated Protocol |
Active streams |
Unclaimed pushed |
Max |
Initiated |
Pushed |
Pushed and claimed |
Abandoned |
Received frames |
Secure |
Sent settings |
Received settings |
Send window |
Receive window |
Unacked received data |
Error |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|


Autogenerated Services¶
Overview¶
The XML configuration file has two elements autoService and autoServiceCustom to configure bindings for interfaces, for which the implementations are auto-generated.
Element autoService allows specifying interface implementation completely in configuration. Element autoServiceCustom allows specifying an implementation of interface IoC.Configuration.ConfigurationFile.ICustomAutoServiceCodeGenerator in child element autoServiceCodeGenerator that generates the implementation of autogenerated interface implementation.
Element autoService is easier to setup, however autoServiceCustom allows more control over the generated implementation. The motivation for adding autoServiceCustom was to provide auto-implemented interface implementations based on C# attributes applied to interfaces and interface methods and properties.
Elements autoService and autoServiceCustom can appear in any order under iocConfiguration/dependencyInjection/autoGeneratedServices and iocConfiguration/pluginsSetup/pluginSetup/dependencyInjection/autoGeneratedServices elements.