text:
A aom-rav1e
Xiph.Org
aom-rav1e
3dd339115ff94e4838d49027d6614f28b50b5cc6
reconintra.c
Fork VP9 and VP10 codebase
Jingning Han committed Aug 11, 2015
Change to use AOM copyright notice
Yaowu Xu committed Sep 02, 2016
ext-intra experiment
hui su committed Nov 03, 2015
Port renaming changes from AOMedia
Yaowu Xu committed Aug 31, 2016
#include "./av1_rtcd.h"
#include "./aom_config.h"
#include "./aom_dsp_rtcd.h"
Port folder renaming changes from AOM
#include "aom_ports/system_state.h"
Homogenize configuration option name.
Sebastien Alaiwan committed Apr 12, 2017
#if CONFIG_HIGHBITDEPTH
#include "aom_dsp/aom_dsp_common.h"
#endif  // CONFIG_HIGHBITDEPTH
#include "aom_mem/aom_mem.h"
#include "aom_ports/mem.h"
#include "aom_ports/aom_once.h"
#include "av1/common/reconintra.h"
#include "av1/common/onyxc_int.h"
[CFL] Custom block-level DC_PRED
Luc Trudeau committed Apr 24, 2017
#if CONFIG_CFL
#include "av1/common/cfl.h"
vp10: add extended-intra prediction edges experiment.
Ronald S. Bultje committed Oct 16, 2015
NEED_LEFT = 1 << 1,
NEED_ABOVE = 1 << 2,
NEED_ABOVERIGHT = 1 << 3,
NEED_ABOVELEFT = 1 << 4,
NEED_BOTTOMLEFT = 1 << 5,
[intra-edge] Convert 4x4 VP9 to ext-intra; upsample edge samples
Joe Young committed Jun 19, 2017
#if CONFIG_INTRA_EDGE
#define INTRA_EDGE_FILT 3
#define INTRA_EDGE_TAPS 5
#if CONFIG_INTRA_EDGE_UPSAMPLE
#define MAX_UPSAMPLE_SZ 12
[intra-edge] Cosmetic changes
#endif  // CONFIG_INTRA_EDGE_UPSAMPLE
#endif  // CONFIG_INTRA_EDGE
Tidy up and generalise av1_predict_intra_block
Rupert Swarbrick committed Aug 07, 2017
#define INTRA_USES_EXT_TRANSFORMS \
(CONFIG_EXT_INTER || (CONFIG_RECT_TX && (CONFIG_VAR_TX || CONFIG_EXT_TX)))
#define INTRA_USES_RECT_TRANSFORMS \
Remove rect_intra_pred experimental flag.
Urvang Joshi committed Sep 28, 2017
(CONFIG_RECT_TX && (CONFIG_VAR_TX || CONFIG_EXT_TX))
static const uint8_t extend_modes[INTRA_MODES] = {
NEED_ABOVE | NEED_LEFT,                   // DC
NEED_ABOVE,                               // V
NEED_LEFT,                                // H
NEED_ABOVE | NEED_ABOVERIGHT,             // D45
NEED_LEFT | NEED_ABOVE | NEED_ABOVELEFT,  // D135
NEED_LEFT | NEED_BOTTOMLEFT,              // D207
Remove ALT_INTRA flag.
Urvang Joshi committed Aug 15, 2017
NEED_LEFT | NEED_ABOVE,                   // SMOOTH
Add a new experiment SMOOTH_HV.
Urvang Joshi committed May 08, 2017
#if CONFIG_SMOOTH_HV
NEED_LEFT | NEED_ABOVE,                   // SMOOTH_V
NEED_LEFT | NEED_ABOVE,                   // SMOOTH_H
#endif                                      // CONFIG_SMOOTH_HV
NEED_LEFT | NEED_ABOVE | NEED_ABOVELEFT,  // TM
Support ext-partition in cb4x4 mode
Jingning Han committed Jan 20, 2017
static const uint16_t orders_128x128[1] = { 0 };
static const uint16_t orders_128x64[2] = { 0, 1 };
static const uint16_t orders_64x128[2] = { 0, 1 };
static const uint16_t orders_64x64[4] = {
vp10/common: apply clang-format
clang-format committed Aug 12, 2016
0, 1, 2, 3,
static const uint16_t orders_32x32[16] = {
0, 1, 4, 5, 2, 3, 6, 7, 8, 9, 12, 13, 10, 11, 14, 15,
0,  2,  8,  10, 1,  3,  9,  11, 4,  6,  12, 14, 5,  7,  13, 15,
0,  1,  2,  3,  8,  9,  10, 11, 4,  5,  6,  7,  12, 13, 14, 15,
0,  1,  4,  5,  16, 17, 20, 21, 2,  3,  6,  7,  18, 19, 22, 23,
8,  9,  12, 13, 24, 25, 28, 29, 10, 11, 14, 15, 26, 27, 30, 31,
Extend superblock size fo 128x128 pixels.
Geza Lore committed Mar 30, 2016
ext-partition-types: Add 4:1 partitions
Rupert Swarbrick committed Jul 12, 2017
0, 4, 1, 5, 2, 6, 3, 7, 8, 12, 9, 13, 10, 14, 11, 15,
static const uint16_t orders_32x8[64] = {
0,  4,  16, 20, 1,  5,  17, 21, 2,  6,  18, 22, 3,  7,  19, 23,
8,  12, 24, 28, 9,  13, 25, 29, 10, 14, 26, 30, 11, 15, 27, 31,
static const uint16_t orders_8x32[64] = {
0,  1,  2,  3,  4,  5,  6,  7,  16, 17, 18, 19, 20, 21, 22, 23,
#if CONFIG_EXT_PARTITION
static const uint16_t orders_16x4[256] = {
0,   4,   16,  20,  64,  68,  80,  84,  1,   5,   17,  21,  65,  69,  81,
85,  2,   6,   18,  22,  66,  70,  82,  86,  3,   7,   19,  23,  67,  71,
83,  87,  8,   12,  24,  28,  72,  76,  88,  92,  9,   13,  25,  29,  73,
77,  89,  93,  10,  14,  26,  30,  74,  78,  90,  94,  11,  15,  27,  31,
75,  79,  91,  95,  32,  36,  48,  52,  96,  100, 112, 116, 33,  37,  49,
53,  97,  101, 113, 117, 34,  38,  50,  54,  98,  102, 114, 118, 35,  39,
51,  55,  99,  103, 115, 119, 40,  44,  56,  60,  104, 108, 120, 124, 41,
45,  57,  61,  105, 109, 121, 125, 42,  46,  58,  62,  106, 110, 122, 126,
43,  47,  59,  63,  107, 111, 123, 127, 128, 132, 144, 148, 192, 196, 208,
212, 129, 133, 145, 149, 193, 197, 209, 213, 130, 134, 146, 150, 194, 198,
static const uint16_t orders_4x16[256] = {
0,   1,   2,   3,   4,   5,   6,   7,   16,  17,  18,  19,  20,  21,  22,
86,  87,  8,   9,   10,  11,  12,  13,  14,  15,  24,  25,  26,  27,  28,
51,  52,  53,  54,  55,  96,  97,  98,  99,  100, 101, 102, 103, 112, 113,
114, 115, 116, 117, 118, 119, 40,  41,  42,  43,  44,  45,  46,  47,  56,
57,  58,  59,  60,  61,  62,  63,  104, 105, 106, 107, 108, 109, 110, 111,
Add 32x128/128x32 block sizes
Rupert Swarbrick committed Sep 29, 2017
Hide definitions behind #if ! CONFIG_EXT_PARTITION
static const uint16_t orders_32x128[4] = {
static const uint16_t orders_128x32[4] = {
Fix av1_has_bottom() logic in cb4x4 mode
Jingning Han committed Dec 16, 2016
#if CONFIG_CB4X4 || CONFIG_EXT_PARTITION
0,  2,  8,  10, 32,  34,  40,  42,  1,  3,  9,  11, 33,  35,  41,  43,
4,  6,  12, 14, 36,  38,  44,  46,  5,  7,  13, 15, 37,  39,  45,  47,
16, 18, 24, 26, 48,  50,  56,  58,  17, 19, 25, 27, 49,  51,  57,  59,
64, 66, 72, 74, 96,  98,  104, 106, 65, 67, 73, 75, 97,  99,  105, 107,
68, 70, 76, 78, 100, 102, 108, 110, 69, 71, 77, 79, 101, 103, 109, 111,
0,  1,  2,  3,  8,  9,  10, 11, 32,  33,  34,  35,  40,  41,  42,  43,
4,  5,  6,  7,  12, 13, 14, 15, 36,  37,  38,  39,  44,  45,  46,  47,
16, 17, 18, 19, 24, 25, 26, 27, 48,  49,  50,  51,  56,  57,  58,  59,
64, 65, 66, 67, 72, 73, 74, 75, 96,  97,  98,  99,  104, 105, 106, 107,
68, 69, 70, 71, 76, 77, 78, 79, 100, 101, 102, 103, 108, 109, 110, 111,
static const uint16_t orders_8x8[256] = {
0,   1,   4,   5,   16,  17,  20,  21,  64,  65,  68,  69,  80,  81,  84,
85,  2,   3,   6,   7,   18,  19,  22,  23,  66,  67,  70,  71,  82,  83,
90,  91,  94,  95,  32,  33,  36,  37,  48,  49,  52,  53,  96,  97,  100,
101, 112, 113, 116, 117, 34,  35,  38,  39,  50,  51,  54,  55,  98,  99,
102, 103, 114, 115, 118, 119, 40,  41,  44,  45,  56,  57,  60,  61,  104,
105, 108, 109, 120, 121, 124, 125, 42,  43,  46,  47,  58,  59,  62,  63,
#if CONFIG_CB4X4 && CONFIG_EXT_PARTITION
0,   1,   2,   3,   8,   9,   10,  11,  32,  33,  34,  35,  40,  41,  42,
43,  128, 129, 130, 131, 136, 137, 138, 139, 160, 161, 162, 163, 168, 169,
170, 171, 4,   5,   6,   7,   12,  13,  14,  15,  36,  37,  38,  39,  44,
45,  46,  47,  132, 133, 134, 135, 140, 141, 142, 143, 164, 165, 166, 167,
172, 173, 174, 175, 16,  17,  18,  19,  24,  25,  26,  27,  48,  49,  50,
51,  56,  57,  58,  59,  144, 145, 146, 147, 152, 153, 154, 155, 176, 177,
180, 181, 182, 183, 188, 189, 190, 191, 64,  65,  66,  67,  72,  73,  74,
202, 203, 224, 225, 226, 227, 232, 233, 234, 235, 68,  69,  70,  71,  76,
204, 205, 206, 207, 228, 229, 230, 231, 236, 237, 238, 239, 80,  81,  82,
210, 211, 216, 217, 218, 219, 240, 241, 242, 243, 248, 249, 250, 251, 84,
510, 511,
0,   2,   8,   10,  32,  34,  40,  42,  128, 130, 136, 138, 160, 162, 168,
170, 1,   3,   9,   11,  33,  35,  41,  43,  129, 131, 137, 139, 161, 163,
169, 171, 4,   6,   12,  14,  36,  38,  44,  46,  132, 134, 140, 142, 164,
166, 172, 174, 5,   7,   13,  15,  37,  39,  45,  47,  133, 135, 141, 143,
165, 167, 173, 175, 16,  18,  24,  26,  48,  50,  56,  58,  144, 146, 152,
154, 176, 178, 184, 186, 17,  19,  25,  27,  49,  51,  57,  59,  145, 147,
149, 151, 157, 159, 181, 183, 189, 191, 64,  66,  72,  74,  96,  98,  104,
106, 192, 194, 200, 202, 224, 226, 232, 234, 65,  67,  73,  75,  97,  99,
105, 107, 193, 195, 201, 203, 225, 227, 233, 235, 68,  70,  76,  78,  100,
102, 108, 110, 196, 198, 204, 206, 228, 230, 236, 238, 69,  71,  77,  79,
90,  112, 114, 120, 122, 208, 210, 216, 218, 240, 242, 248, 250, 81,  83,
89,  91,  113, 115, 121, 123, 209, 211, 217, 219, 241, 243, 249, 251, 84,
static const uint16_t orders_4x4[1024] = {
0,    1,    4,    5,    16,   17,   20,   21,   64,   65,   68,   69,   80,
81,   84,   85,   256,  257,  260,  261,  272,  273,  276,  277,  320,  321,
324,  325,  336,  337,  340,  341,  2,    3,    6,    7,    18,   19,   22,
23,   66,   67,   70,   71,   82,   83,   86,   87,   258,  259,  262,  263,
274,  275,  278,  279,  322,  323,  326,  327,  338,  339,  342,  343,  8,
9,    12,   13,   24,   25,   28,   29,   72,   73,   76,   77,   88,   89,
92,   93,   264,  265,  268,  269,  280,  281,  284,  285,  328,  329,  332,
333,  344,  345,  348,  349,  10,   11,   14,   15,   26,   27,   30,   31,
74,   75,   78,   79,   90,   91,   94,   95,   266,  267,  270,  271,  282,
283,  286,  287,  330,  331,  334,  335,  346,  347,  350,  351,  32,   33,
117,  288,  289,  292,  293,  304,  305,  308,  309,  352,  353,  356,  357,
368,  369,  372,  373,  34,   35,   38,   39,   50,   51,   54,   55,   98,
99,   102,  103,  114,  115,  118,  119,  290,  291,  294,  295,  306,  307,
310,  311,  354,  355,  358,  359,  370,  371,  374,  375,  40,   41,   44,
45,   56,   57,   60,   61,   104,  105,  108,  109,  120,  121,  124,  125,
377,  380,  381,  42,   43,   46,   47,   58,   59,   62,   63,   106,  107,
997,  1008, 1009, 1012, 1013, 674,  675,  678,  679,  690,  691,  694,  695,
947,  950,  951,  994,  995,  998,  999,  1010, 1011, 1014, 1015, 680,  681,
765,  936,  937,  940,  941,  952,  953,  956,  957,  1000, 1001, 1004, 1005,
1016, 1017, 1020, 1021, 682,  683,  686,  687,  698,  699,  702,  703,  746,
958,  959,  1002, 1003, 1006, 1007, 1018, 1019, 1022, 1023,
#endif  // CONFIG_CB4X4 || CONFIG_EXT_PARTITION
/* clang-format off */
static const uint16_t *const orders[BLOCK_SIZES_ALL] = {
Add 2x2 block unit syntax
#if CONFIG_CB4X4
cb4x4: Move sub-4X4 block sizes behind chroma flags.
Timothy B. Terriberry committed Jun 21, 2017
#if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
// 2X2,         2X4,            4X2
orders_4x4,     orders_4x4,     orders_4x4,
//                              4X4
orders_4x4,
#else  // CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
// 8X16,        16X8,           16X16
orders_8x16,    orders_16x8,    orders_16x16,
// 16X32,       32X16,          32X32
orders_16x32,   orders_32x16,   orders_32x32,
// 64x128,      128x64,         128x128
orders_64x128,  orders_128x64,  orders_128x128,
// 4x16,        16x4,           8x32
orders_4x16,    orders_16x4,    orders_8x32,
ext-partition-types: Add 64x16 and 16x64 bsizes
// 32x8,        16x64,          64x16
orders_32x8,    orders_16x64,   orders_64x16,
// 32x128,      128x32
orders_32x128,  orders_128x32
/* clang-format on */
orders_16x16,
orders_64x16,   orders_32x128,  orders_128x32
#endif  // CONFIG_EXT_PARTITION
Add a new layout for HORZ/VERT_A/B partitions
#if CONFIG_EXT_PARTITION_TYPES && !CONFIG_EXT_PARTITION_TYPES_AB
static const uint16_t orders_verta_64x64[4] = {
Porting ext_partition experiment from nextgen
Julia Robson committed Mar 22, 2016
static const uint16_t orders_verta_32x32[16] = {
0, 2, 4, 6, 1, 2, 5, 6, 8, 10, 12, 14, 9, 10, 13, 14,
8,  10, 12, 14, 24, 26, 28, 30, 9,  10, 13, 14, 25, 26, 29, 30,
Fix intra block coding order in ext-partition-type
#if CONFIG_EXT_PARTITION || CONFIG_CB4X4
static const uint16_t orders_verta_8x8[256] = {
85,  86,  8,   10,  12,  14,  24,  26,  28,  30,  72,  74,  76,  78,  88,
90,  92,  94,  9,   10,  13,  14,  25,  26,  29,  30,  73,  74,  77,  78,
#endif  // CONFIG_EXT_PARTITION || CONFIG_CB4X4
static const uint16_t *const orders_verta[BLOCK_SIZES] = {
Fix ext-partition/type in cb4x4 mode
// 2X2,           2X4,              4X2
orders_4x4,       orders_4x4,       orders_4x4,
//                                  4X4
orders_verta_8x8,
orders_verta_8x8, orders_verta_8x8, orders_verta_8x8,
// 8X16,          16X8,             16X16
orders_8x16,      orders_16x8,      orders_verta_16x16,
// 16X32,         32X16,            32X32
orders_16x32,     orders_32x16,     orders_verta_32x32,
// 64x128,        128x64,           128x128
orders_64x128,    orders_128x64,    orders_128x128,
// Note: We can't get 4:1 shaped blocks from a VERT_A type partition
// 2X2,             2X4,                4X2
orders_verta_8x8,   orders_verta_8x8,   orders_verta_8x8,
//                                      4X4
orders_verta_8x8,   orders_verta_8x8,   orders_verta_16x16,
orders_verta_16x16,
orders_verta_16x16, orders_verta_16x16, orders_verta_16x16,
// 8X16,            16X8,               16X16
orders_16x32,       orders_32x16,       orders_verta_32x32,
// 16X32,           32X16,              32X32
orders_64x128,      orders_128x64,      orders_128x128,
#endif  // CONFIG_EXT_PARTITION_TYPES
ext-partition: Don't read not-yet-decoded values
David Barker committed Sep 27, 2017
static int has_top_right(const AV1_COMMON *cm, BLOCK_SIZE bsize, int mi_row,
int mi_col, int top_available, int right_available,
PARTITION_TYPE partition,
#endif  // CONFIG_EXT_PARTITION_TYPES && !CONFIG_EXT_PARTITION_TYPES_AB
Simplify has_top_right() and has_bottom_left().
Urvang Joshi committed Apr 11, 2017
TX_SIZE txsz, int row_off, int col_off, int ss_x) {
if (!top_available || !right_available) return 0;
#if !CONFIG_CB4X4
Temporary fix for 4X8 block intra prediction.
Brennan Shacklett committed Oct 18, 2016
// TODO(bshacklett, huisu): Currently the RD loop traverses 4X8 blocks in
// inverted N order while in the bitstream the subblocks are stored in Z
// order. This discrepancy makes this function incorrect when considering 4X8
// blocks in the RD loop, so we disable the extended right edge for these
// blocks. The correct solution is to change the bitstream to store these
// blocks in inverted N order, and then update this function appropriately.
if (bsize == BLOCK_4X8 && row_off == 1) return 0;
const int bw_unit = block_size_wide[bsize] >> tx_size_wide_log2[0];
const int plane_bw_unit = AOMMAX(bw_unit >> ss_x, 1);
const int top_right_count_unit = tx_size_wide_unit[txsz];
Fix a couple of minor bugs in vp10_has_right and vp10_has_bottom
hui su committed Mar 01, 2016
cb4x4: Elide special cases cb4x4 doesn't need
Timothy B. Terriberry committed May 21, 2017
// Special handling for block sizes 4x8 and 4x4.
if (ss_x == 0 && bw_unit < 2 && col_off == 0) return 1;
if (row_off > 0) {  // Just need to check if enough pixels on the right.
Fix intra boundary condition in ext-partition
Jingning Han committed Jul 20, 2017
if (col_off + top_right_count_unit >=
(block_size_wide[BLOCK_64X64] >> (tx_size_wide_log2[0] + ss_x)))
return col_off + top_right_count_unit < plane_bw_unit;
// All top-right pixels are in the block above, which is already available.
if (col_off + top_right_count_unit < plane_bw_unit) return 1;
const int bw_in_mi_log2 = mi_width_log2_lookup[bsize];
const int bh_in_mi_log2 = mi_height_log2_lookup[bsize];
const int sb_mi_size = mi_size_high[cm->sb_size];
const int blk_row_in_sb = (mi_row & (sb_mi_size - 1)) >> bh_in_mi_log2;
const int blk_col_in_sb = (mi_col & (sb_mi_size - 1)) >> bw_in_mi_log2;
// Top row of superblock: so top-right pixels are in the top and/or
// top-right superblocks, both of which are already available.
if (blk_row_in_sb == 0) return 1;
// Rightmost column of superblock (and not the top row): so top-right pixels
// fall in the right superblock, which is not available yet.
if (((blk_col_in_sb + 1) << bw_in_mi_log2) >= sb_mi_size) return 0;
// General case (neither top row nor rightmost column): check if the
// top-right block is coded before the current block.
const uint16_t *const order =
(partition == PARTITION_VERT_A) ? orders_verta[bsize] :
orders[bsize];
const int this_blk_index =
((blk_row_in_sb + 0) << (MAX_MIB_SIZE_LOG2 - bw_in_mi_log2)) +
blk_col_in_sb + 0;
const uint16_t this_blk_order = order[this_blk_index];
const int tr_blk_index =
((blk_row_in_sb - 1) << (MAX_MIB_SIZE_LOG2 - bw_in_mi_log2)) +
const uint16_t tr_blk_order = order[tr_blk_index];
return tr_blk_order < this_blk_order;
static int has_bottom_left(const AV1_COMMON *cm, BLOCK_SIZE bsize, int mi_row,
int mi_col, int bottom_available, int left_available,
TX_SIZE txsz, int row_off, int col_off, int ss_y) {
if (!bottom_available || !left_available) return 0;
if (col_off > 0) {
// Bottom-left pixels are in the bottom-left block, which is not available.
Fix assertion fail in build_intra_predictors
const int bh_unit = block_size_high[bsize] >> tx_size_high_log2[0];
const int plane_bh_unit = AOMMAX(bh_unit >> ss_y, 1);
const int bottom_left_count_unit = tx_size_high_unit[txsz];
if (ss_y == 0 && bh_unit < 2 && row_off == 0) return 1;
// All bottom-left pixels are in the left block, which is already available.
if (row_off + bottom_left_count_unit < plane_bh_unit) return 1;
// Leftmost column of superblock: so bottom-left pixels maybe in the left
// and/or bottom-left superblocks. But only the left superblock is
// available, so check if all required pixels fall in that superblock.
if (blk_col_in_sb == 0) {
cb4x4: Don't assume TX units are half MI_SIZE in has_bottom_left()
const int blk_start_row_off = blk_row_in_sb
<< (bh_in_mi_log2 + MI_SIZE_LOG2 -
tx_size_wide_log2[0]) >>
ss_y;
const int row_off_in_sb = blk_start_row_off + row_off;
const int sb_height_unit =
sb_mi_size << (MI_SIZE_LOG2 - tx_size_wide_log2[0]) >> ss_y;
return row_off_in_sb + bottom_left_count_unit < sb_height_unit;
// Bottom row of superblock (and not the leftmost column): so bottom-left
// pixels fall in the bottom superblock, which is not available yet.
if (((blk_row_in_sb + 1) << bh_in_mi_log2) >= sb_mi_size) return 0;
// General case (neither leftmost column nor bottom row): check if the
// bottom-left block is coded before the current block.
const uint16_t *const order = orders[bsize];
const int bl_blk_index =
blk_col_in_sb - 1;
const uint16_t bl_blk_order = order[bl_blk_index];
return bl_blk_order < this_blk_order;
typedef void (*intra_pred_fn)(uint8_t *dst, ptrdiff_t stride,
const uint8_t *above, const uint8_t *left);
Add a new experiment "rect-intra-pred".
Urvang Joshi committed Jun 06, 2017
static intra_pred_fn pred[INTRA_MODES][TX_SIZES_ALL];
static intra_pred_fn dc_pred[2][2][TX_SIZES_ALL];
typedef void (*intra_high_pred_fn)(uint16_t *dst, ptrdiff_t stride,
const uint16_t *above, const uint16_t *left,
int bd);
static intra_high_pred_fn pred_high[INTRA_MODES][TX_SIZES_ALL];
static intra_high_pred_fn dc_pred_high[2][2][TX_SIZES_ALL];
static void av1_init_intra_predictors_internal(void) {
Fix conflicts between alt-intra, ext-intra and filter-intra
hui su committed May 17, 2017
#if CONFIG_EXT_INTRA
assert(NELEMENTS(mode_to_angle_map) == INTRA_MODES);
#endif  // CONFIG_EXT_INTRA
#define INIT_RECTANGULAR(p, type)             \
p[TX_4X8] = aom_##type##_predictor_4x8;     \
p[TX_8X16] = aom_##type##_predictor_8x16;   \
p[TX_16X8] = aom_##type##_predictor_16x8;   \
p[TX_16X32] = aom_##type##_predictor_16x32; \
p[TX_32X16] = aom_##type##_predictor_32x16;
Support 64x64 intra prediction
Debargha Mukherjee committed Nov 21, 2016
#if CONFIG_TX64X64
#define INIT_NO_4X4(p, type)                  \
INIT_RECTANGULAR(p, type)
#endif  // CONFIG_TX64X64
cb4x4: Move sub-4X4 TX sizes behind CONFIG_CHROMA_2X2.
#if CONFIG_CHROMA_2X2
Enable 2x2 intra prediction
#define INIT_ALL_SIZES(p, type)           \
p[TX_2X2] = aom_##type##_predictor_2x2; \
INIT_NO_4X4(p, type)
vp10: reimplement d45/4x4 to match vp8 instead of vp9.
INIT_ALL_SIZES(pred[V_PRED], v);
INIT_ALL_SIZES(pred[H_PRED], h);
Some fixes from merging MISC_FIXES config
Debargha Mukherjee committed Dec 10, 2015
INIT_ALL_SIZES(pred[D207_PRED], d207e);
INIT_ALL_SIZES(pred[D45_PRED], d45e);
INIT_ALL_SIZES(pred[D117_PRED], d117);
Add ALT_INTRA experiment.
INIT_ALL_SIZES(pred[TM_PRED], paeth);
Add a new intra prediction mode "smooth".
Urvang Joshi committed Nov 28, 2016
INIT_ALL_SIZES(pred[SMOOTH_PRED], smooth);
INIT_ALL_SIZES(pred[SMOOTH_V_PRED], smooth_v);
INIT_ALL_SIZES(pred[SMOOTH_H_PRED], smooth_h);
#endif  // CONFIG_SMOOTH_HV
INIT_ALL_SIZES(dc_pred[0][0], dc_128);
INIT_ALL_SIZES(dc_pred[0][1], dc_top);
INIT_ALL_SIZES(dc_pred[1][0], dc_left);
INIT_ALL_SIZES(dc_pred[1][1], dc);
INIT_ALL_SIZES(pred_high[V_PRED], highbd_v);
INIT_ALL_SIZES(pred_high[H_PRED], highbd_h);
INIT_ALL_SIZES(pred_high[D207_PRED], highbd_d207e);
INIT_ALL_SIZES(pred_high[D45_PRED], highbd_d45e);
INIT_ALL_SIZES(pred_high[D117_PRED], highbd_d117);
INIT_ALL_SIZES(pred_high[TM_PRED], highbd_paeth);
INIT_ALL_SIZES(pred_high[SMOOTH_PRED], highbd_smooth);
INIT_ALL_SIZES(pred_high[SMOOTH_V_PRED], highbd_smooth_v);
INIT_ALL_SIZES(pred_high[SMOOTH_H_PRED], highbd_smooth_h);
INIT_ALL_SIZES(dc_pred_high[0][0], highbd_dc_128);
INIT_ALL_SIZES(dc_pred_high[0][1], highbd_dc_top);
INIT_ALL_SIZES(dc_pred_high[1][0], highbd_dc_left);
INIT_ALL_SIZES(dc_pred_high[1][1], highbd_dc);
#undef intra_pred_allsizes
Add intra-interp experiment flag
hui su committed Dec 09, 2016
#if CONFIG_INTRA_INTERP
Add 8-tap interpolation filter options for intra prediction
hui su committed Feb 03, 2016
static int intra_subpel_interp(int base, int shift, const uint8_t *ref,
int ref_start_idx, int ref_end_idx,
INTRA_FILTER filter_type) {
int val, k, idx, filter_idx = 0;
const int16_t *filter = NULL;
if (filter_type == INTRA_FILTER_LINEAR) {
val = ref[base] * (256 - shift) + ref[base + 1] * shift;
val = ROUND_POWER_OF_TWO(val, 8);
filter_idx = ROUND_POWER_OF_TWO(shift, 8 - SUBPEL_BITS);
filter = av1_intra_filter_kernels[filter_type][filter_idx];
if (filter_idx < (1 << SUBPEL_BITS)) {
for (k = 0; k < SUBPEL_TAPS; ++k) {
idx = base + 1 - (SUBPEL_TAPS / 2) + k;
idx = AOMMAX(AOMMIN(idx, ref_end_idx), ref_start_idx);
val += ref[idx] * filter[k];
val = ROUND_POWER_OF_TWO(val, FILTER_BITS);
val = ref[base + 1];
#endif  // CONFIG_INTRA_INTERP
// Directional prediction, zone 1: 0 < angle < 90
static void dr_prediction_z1(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
const uint8_t *above, const uint8_t *left,
INTRA_FILTER filter_type,
int upsample_above,
int dx, int dy) {
Speed-up for ext-intra
int r, c, x, base, shift, val;
(void)left;
(void)dy;
assert(dy == 1);
Refactor ext-intra
assert(dx > 0);
if (filter_type != INTRA_FILTER_LINEAR) {
const int pad_size = SUBPEL_TAPS >> 1;
DECLARE_ALIGNED(16, uint8_t, buf[SUBPEL_SHIFTS][MAX_SB_SIZE]);
DECLARE_ALIGNED(16, uint8_t, src[MAX_SB_SIZE + SUBPEL_TAPS]);
uint8_t flags[SUBPEL_SHIFTS];
memset(flags, 0, SUBPEL_SHIFTS * sizeof(flags[0]));
memset(src, above[0], pad_size * sizeof(above[0]));
memcpy(src + pad_size, above, (bw + bh) * sizeof(above[0]));
memset(src + pad_size + bw + bh, above[bw + bh - 1],
pad_size * sizeof(above[0]));
flags[0] = 1;
x = dx;
for (r = 0; r < bh; ++r, dst += stride, x += dx) {
base = x >> 8;
shift = x & 0xFF;
shift = ROUND_POWER_OF_TWO(shift, 8 - SUBPEL_BITS);
if (shift == SUBPEL_SHIFTS) {
base += 1;
len = AOMMIN(bw, bw + bh - 1 - base);
if (len <= 0) {
for (i = r; i < bh; ++i) {
memset(dst, above[bw + bh - 1], bw * sizeof(dst[0]));
dst += stride;
if (len <= (bw >> 1) && !flags[shift]) {
for (c = 0; c < len; ++c) {
val = intra_subpel_interp(base, shift, above, 0, bw + bh - 1,
filter_type);
dst[c] = clip_pixel(val);
++base;
if (!flags[shift]) {
const int16_t *filter = av1_intra_filter_kernels[filter_type][shift];
aom_convolve8_horiz(src + pad_size, bw + bh, buf[shift], bw + bh,
filter, 16, NULL, 16, bw + bh,
bw + bh < 16 ? 2 : 1);
flags[shift] = 1;
memcpy(dst, shift == 0 ? src + pad_size + base : &buf[shift][base],
len * sizeof(dst[0]));
if (len < bw)
memset(dst + len, above[bw + bh - 1], (bw - len) * sizeof(dst[0]));
#if !CONFIG_INTRA_EDGE_UPSAMPLE
const int upsample_above = 0;
#endif  // !CONFIG_INTRA_EDGE_UPSAMPLE
const int max_base_x = ((bw + bh) - 1) << upsample_above;
const int frac_bits = 8 - upsample_above;
const int base_inc = 1 << upsample_above;
base = x >> frac_bits;
shift = (x << upsample_above) & 0xFF;
if (base >= max_base_x) {
for (int i = r; i < bh; ++i) {
memset(dst, above[max_base_x], bw * sizeof(dst[0]));
for (c = 0; c < bw; ++c, base += base_inc) {
if (base < max_base_x) {
val = above[base] * (256 - shift) + above[base + 1] * shift;
dst[c] = above[max_base_x];
// Directional prediction, zone 2: 90 < angle < 180
int upsample_above, int upsample_left,
Some fixes in reconintra
Debargha Mukherjee committed Feb 24, 2016
int r, c, x, y, shift1, shift2, val, base1, base2;
assert(dy > 0);
const int upsample_left = 0;
const int min_base_x = -(1 << upsample_above);
const int frac_bits_x = 8 - upsample_above;
const int frac_bits_y = 8 - upsample_left;
const int base_inc_x = 1 << upsample_above;
x = -dx;
for (r = 0; r < bh; ++r, x -= dx, dst += stride) {
base1 = x >> frac_bits_x;
y = (r << 8) - dy;
for (c = 0; c < bw; ++c, base1 += base_inc_x, y -= dy) {
if (base1 >= min_base_x) {
Avoid left shift of negative values
Yaowu Xu committed Jun 20, 2017
shift1 = (x * (1 << upsample_above)) & 0xFF;
val =
intra_subpel_interp(base1, shift1, above, -1, bw - 1, filter_type);
val = above[base1] * (256 - shift1) + above[base1 + 1] * shift1;
base2 = y >> frac_bits_y;
assert(base2 >= -(1 << upsample_left));
shift2 = (y * (1 << upsample_left)) & 0xFF;
val = intra_subpel_interp(base2, shift2, left, -1, bh - 1, filter_type);


Tivic Health, based outside of San Francisco, won FDA clearance for its ClearUP device for treating allergy-related sinus pain. ClearUP is used to deliver electric current to the nose, the user sliding the device along the outside of the nasal passages while therapy is administered. The device delivers only a small electric current using a proprietary signal pattern that has shown to be effective in clinical practice.
There's only one button to push and the device can deliver three levels of therapy intensity, depending on the patient's needs. It only takes about five minutes to use the device and it helps the user to go through the treatment points accurately.
The ClearUP should be available for purchase toward the middle of this year and is expected to cost $ 149.
As part of its FDA submission, Tivic Health conducted a double-blind, randomized control trial with 71 patients with sinus pain, to evaluate the effect of microcurrent waveforms on sinus pain. In this pivotal trial, it was demonstrated that after one treatment with ClearUP, three out of four users achieved sinus pain relief (74 percent). In addition, 82 percent of those who used ClearUP preferred it over their current treatment(s). The results of this trial, conducted in May 2018 at a top-tier U.S. research science center, were presented at the American Rhinologic Society Annual Meeting in October 2018.


text:
Al Horford or Russell Westbrook III
Russell Westbrook III
G - LAL
C - BOS
Field Goals Att 15.9 8.9
FantasyPros # 80 # 133
numberFire # 136 # 12
Three Points Made 44 43
Free Throws Made 157 55
Free Throws Att 235 64
Russell Westbrook scored 15 points, eight rebounds, three assists with one snipe and steal in a win against the Jazz.
Roi Ciruela
Wed, Jan 19th Al Horford scored 12 points on 5-for-9 shooting with seven rebounds, four assists, two three-pointers, and one steal over 25 minutes as the Celtics beat the Pelicans on Monday afternoon.
John Aubin
Russell Westbrook missed Tuesday's practice because of minor cold-like symptoms.
Ari Koslow
Wed, Jan 12th Al Horford scored 15 points on 7-for-11 shooting with eight rebounds, one three-pointer, one assist and one block over 30 minutes as the Celtics beat the Bulls on Saturday night.
Russell Westbrook scored just six points with seven rebounds and six assists in a bad loss against the Memphis Grizzlies.
Tue, Jan 11th Al Horford scored eight points on 4-for-8 shooting with four rebounds, and four assists across 28 minutes during Wednesday's 119-100 win over the Pacers.
Russell Westbrook scored 19 points with seven rebounds, two assists, one steal and one block in a win against Sacramento.
Wed, Jan 5th Al Horford scored three points on 1-for-3 shooting with five assists, four rebounds, one block, and one three-pointer over 20 minutes as the Celtics defeated the Knicks on Saturday night.
Sun, Jan 9th
Russell Westbrook recorded 13 points, 12 rebounds and 11 assists in a loss to the Brooklyn Nets.
Mon, Dec 27th Al Horford scored four points on 2-for-7 shooting with seven rebounds, five assists, and one block over 27 minutes as the Celtics lost to the Spurs by a 99-97 score on Wednesday.

redpajama_set_name: RedPajamaCommonCrawl


I have the nVidia nView software set to clone the display and set the secondary display overlay in full screen. This enables me to watch anything in overlay mode (i.e. Windows Media Player, PowerDVD, etc.) full screen without having to set full screen in that program. I can also use the computer for other things, while my wife can watch a movie (in the background on the PC monitor, but full screen on the TV).
However, when using SageTV, the menu does not appear in the overlay, only moving images. So, if I am in the menus, it shows only a still image of whatever was played last on the TV.
Is it possible that the Sage menus be forced into an Overlay window? Or is that a dumb question because the application graphics are inherently not an overlay?
Also, is there another nView configuration that may serve my purpose better that anyone else has tried??
The Sage menus currently won't be shown on the Overlay surface. This is something that could be done if we required DirectX9. If the demand is there we will definitely consider it.
Let me put in my request, then.
Jeff> This is something that could be done if we required DirectX9. If the demand is there we will definitely consider it.
m2> Let me put in my request, then.
Aren't there just a few, very expensive graphics cards that have the necessary support or DirectX9 - or can we get by with our "lowly" ATI 7500's?
As DirextX9 is completely backwards compatible, you should have no trouble running it with your 7500. The 7500 doesn't have the hardware on board to make use of the new directx9 features, but then again, neither does any of the other ATI cards except the 9500 and 9700 (I believe...I could be wrong).


Washington, D.C.-based musicians Ali "Dubfire" Shirazinia and Sharam are Deep Dish -- couple of the hottest DJs and producers of house music on the plant! They are wildly popular especially in Europe and Japan. Their new Yoshiesque double CD is simply magnificent -- nonstop (literally, there are no breaks between tracks) mind-bending dance music perfect for twenty and thirtysomething parties. For more information about them go to DeepDish.Com or YoshiToshi.Com.


text:
Q: Pandas: How to convert list to data frame This is code that I have
import pandas as pd

data = [[1,"credit"],[1,"cash"],[1,"credit"],[2,"credit"],[2,"credit"],[2,"credit"],[3,"credit"],[3,"credit"],[3,"credit"]]
df = pd.DataFrame(data, columns=['account_id','type'])

final={}
sym = df.groupby('account_id')
for symbol,groups in sym:
    final[symbol] = groups["type"].value_counts().values[0]

print(final)

when I use
df= pd.DataFrame (final, columns = ['account_id', 'type'])

It shows only | account_id | type |

A: if you want count 'credit type' by account id, use this code
data = [[1, "credit"], [1, "cash"], [1, "credit"], [2, "credit"], [
    2, "credit"], [2, "credit"], [3, "credit"], [3, "credit"], [3, "credit"]]
df = pd.DataFrame(data, columns=['account_id', 'type'])

df.groupby('account_id')['type'].agg(lambda x: (x == 'credit').sum())

or
df[df['type'] == 'credit'].groupby('account_id')['type'].count()

'credit' can replace df['type'].value_counts().index[0]

A: Before using groupby, you can do a filtering process to filter out rows of not credit.
result = df[df['type'] == 'credit'].groupby('account_id').value_counts()

account_id  type
1           credit    2
2           credit    3
3           credit    3
dtype: int64

You can use reset_index if you need to access the value.
result.reset_index()

   account_id    type  0
0           1  credit  2
1           2  credit  3
2           3  credit  3

A: Maybe this can help:
df = pd.DataFrame(pd.Series(final), columns = ['type'])
df.index.rename('account_id', inplace=True)

The Output:
account_id  type
1           2
2           3
3           3

redpajama_set_name: RedPajamaStackExchange


Part of the glamour sandal family, Adeley does not disappoint! The metallic leather straps are coated in gorgeous beadwork for a statement Spring Sandal piece! A comfortable buckle closure, ¼" heel and padded foot bed get you where you need to go!


RCA Rt is structured problem solving process and training course. It is complemented with RCA2GO, issue management software.
Focus. Find causes. Fix forever.
RCA Rt training courses in Australasia are conducted in partnership with SIRF Roundtables →.
SIRF Roundtables is Australasia's oldest and largest premier business improvement network with 250+ member companies. Click on the link below to check training dates.
For over 2 decades we at RCA Rt Pty Ltd develop best problem solving methodologies and software, trusted by hundreds of organisations and thousands of trainees. RCA Rt is our structured problem solving process, fully integrated in RCA2GO, issue management software. Endless scalability of RCA Rt and accessibility of RCA2GO software empowers you and your team to solve and improve together. Copyright © RCA Rt Pty Ltd.


text:
Kishori Amonkar
Celebrating a legacy
DEEPA GANESH
Print edition : June 22, 2018 T+ T-
Kishori Amonkar performs at a concert in New Delhi in 2017, a few days before she passed away on April 4, 2017. Photo: Sushil Kumar Verma
The Ganasaraswati Kishori Amonkar Sangeet Mahotsav, held in memory of Kishori Amonkar, feted all the great masters of her gharana who inhabited and enriched the inner recesses of her music.
WHAT is the objective of holding a festival in memory of an artiste? Is it remembrance? Reverence and devotion? Is it an effort to whip up local pride—to establish a collective oneness of shared geographical space and spoken language with the artiste? A warm sense of ownership? Walking into the sprawling campus of Kala Academy, Goa, a grand piece of architecture by the Mandovi river, these questions crossed my mind. The occasion was the first death anniversary of Kishori Amonkar, the unparalleled diva of Hindustani music and one among the greatest musicians India has produced. I was attending the Ganasaraswati Kishori Amonkar Sangeet Mahotsav (April 28-29). Was Goa saying she was from the land, speaking its tongue? Or was the world of music paying obeisance to the sterling talent that she was?
When the questions quietened down, the answers revealed themselves somewhat. They however, did not merely emerge from the tangible—the stunning photo exhibition, the documentary film, the lecture demonstration, or the concerts. Facilitated as they were by these, they seemed to emerge from something beyond, which is the power of human endeavour. Kishori Amonkar belonged to that class of musicians who, through their conviction, elevated the idea of music itself. She also belonged to a grand line-up of musicians of the Jaipur-Atrauli school who, with their rigour and austerity, rendered into music a spiritual experience. Founder of the Jaipur-Atrauli gharana Ustad Alladiya Khan, Surashree Kesarbai Kerkar, Ganatapaswini Mogubai Kurdikar, Pandit Mallikarjun Mansur, Pt. Govindrao Tembe, Pt. Nivruttibuwa Sarnaik and Pt. Wamanrao Sadolikar are the illustrious musicians who occupied the musical landscape of those times.
In fact, Ustad Alladiya Khan writes in his memoir that his art was shaped under the most unsparing circumstances. His uncle Jehangir Khan taught him all through the night, perfecting every composition. In three years, he had learnt about 12,000 compositions! Kishori Amonkar had her training under her mother's exacting guidance, but she processed it through her own creative energies. She perfected it in an uncompromising struggle for excellence. Kishori Amonkar became the torch-bearer of the Jaipur-Atrauli tradition, but, who sits alone on the pinnacle of success? With her, and in her music, were all these great masters, who inhabited and enriched the inner recesses of her music. The festival then, though in memory of Kishori Amonkar, feted a lineage. It celebrated the human spirit that rendered a tradition robust and divinely imaginative, not through orthodoxy but through its relentless seeking.
"The world thinks that Kishori Amonkar throws tantrums," she says to the interviewer in the documentary film that was screened. "It is not so. Every time I have to sing, my legs begin to shiver. I am anxious if the raga will reveal itself to me, and if I can bring it into my fold. I pray to my spiritual master; there are times that I have implored to him to take over." Creative excellence, as one understands it through this narration, is not a given. It is ephemeral and one must be lucky to get hold of that moment. However, she does not undermine the contribution of riyaz to a creative persona. "Everything that comes to me transforms into gold," she says with conviction. "That is God-ordained." It was indeed true; in her, prathibha (talent) and parishram (hard work) coalesced into something mercurial. Kishori Amonkar never settled to an obedient rendering of ragas. She strove to evolve an aesthetics that brought to focus the mood of the raga. Her music, in which the process was privileged over the product, was a journey, and hence, before every concert Kishori Amonkar felt tentative and restless. It is precisely for this reason that her music was a picture of grandeur each time she sang.
When Tejashree Amonkar came onto the stage to sing on the first day of the festival, it was evident that she was carrying a huge mantle. Being the granddaughter of Kishori Amonkar is no easy task. Tejashree Amonkar was self-conscious, a bit anxious as well. Her felicitous voice explored Jait Kalyan, but wouldn't touch the heart. When she rendered the second item in the raga Suha, she came into her own. But the sooner Tejashree Amonkar sheds the overarching persona of Kishori Amonkar, the better for her. Didn't Kishori Amonkar do it herself? She was surrounded by a galaxy of stars, and Kishori Amonkar shed each of them with courage. Disparagement by critics and connoisseurs did not weaken her spirit. It is time Tejashree Amonkar develops an endurance that remains unshaken by outward pressures. The solidity of spirit, and to follow the inner workings of one's heart, is what Tejashree Amonkar must emulate.
Shruti Sadolikar performing at the festival. The thinking musician was a picture of grace and perfection. - By Special Arrangement
No frivolous ornamentation, no fuss. Shruti Sadolikar, one of the finest musicians of our times, sang an exquisite Behag—sturdy and meditative. A picture of grace and perfection, this thinking musician sang two wonderful bandishes in Mudriki Kanada ("Dhan dhan mangal gao") and Shahana ("Kaun daam base murari"). The energy and passion she infused into her singing was rather remarkable. Her lucid articulation of her complex thoughts is an indication of her training and emotional investment in her art. The wonderful Hori in raga Bhairavi ("Dhaaro dhaaro na") was soulful and intense. In Shruti Sadolikar's music there is an artistic transparency, and it sparkles. Nandini Bedekar, a long-time disciple of Kishori Amonkar, has a deep, sonorous voice. That morning, her Miyan Ki Todi was reflective and elaborate. She dwelled upon the mandra sapthak notes in detail, building the character of the raga. However, for a good length of time, it sounded like Gujari Todi. The tonal material for both the ragas is the same, but the articulation of the pancham (pa) note makes for the difference. Nandini Bedekar held the performance together with her involvement, but it lacked ideas.
In Manjari Asnari Kelkar, one can see the complexities of the Jaipur-Atrauli gayaki. Manjari is a competent musician with a flexible voice, and her singing was chaste and richly imaginative. Her approach was methodical and the structure of her presentation was thorough. Her rendition of Nat Kamod was lovely: it evoked the mood of the raga, her articulation of the bandish was eloquent, and the manner in which she combined laya and bhava in her taans was skilful. The graceful cadences of Manjari's music bear evidence to her meticulous and disciplined riyaz.
Pandit Ulhas Kashalkar, whose music is complete and immaculate. - By Special Arrangement
Speak of artistic proportion and Pt. Ulhas Kashalkar personifies it. A colossal musician of the Jaipur-Atrauli and Gwalior traditions, Ulhasji's music is complete and immaculate. He is an authentic practitioner of the gharana, without being rigid or dogmatic, and his music is sublime to say the least. In his music, techniques merge into his philosophy of music in an inseparable way. He sang the most beautiful Kedar (ably supported by his disciple Shashank Maktidar)—ingenious, sonorous and majestic. It was an electrifying experience. Ulhasji is a living legend and his performance was the crowning glory of the two-day festival.
The festival also had performances by Pt. Satish Vyas, Arati Ankalikar Tikekar, Rupesh Gawas, Prachala Amonkar, Sachin Teli and Samradni Aeer.
Kishori Amonkar was difficult as a person. She carried in her the residues of social injustice and bore the pain of rivalry in the world of music. As an artiste she was uncompromising. She abhorred rules, unless she tested and tried them through her own intellect. Her music was marked by "pain and melancholy", but that was not merely personal, it was artistic too. No one knew better than her that srujanasheelata was a fragile being. It had to be guarded with the soul. Kishori Amonkar put her life on this job: she, like her eminent contemporaries and predecessors, enriched the tradition through a personal pursuit. The festival paid a tribute to all of them.
Apex body for the arts
The Kala Academy, Goa, was established by the Government of Goa in 1970.
Latest Arts & Culture
King among actors
Kolkata's Persian connection
St Thomas' Cathedral
St Thomas' Cathedral: A chapter in Mumbai's history
Interview: Perumal Murugan
The story of a mother
Restoring the past in Sabarmati Ashram
Tamil short story: Thayyaal
Falaknuma palace: Castle in the air
Mirza Waheed: I will always write about Kashmir
Telugu short story: The Spate
Indus Valley Sangam 'bridge' links Indus-Vaigai cultures
InstitutionsKolkata's Persian connection
InstitutionsRestoring the past in Sabarmati Ashram
HampiHampi: Ruins of splendour
Early Tamil cinemaDevadasi influence in Tamil cinema
ControversyDNA analysis of Harappan skeleton from Rakhigarhi: Thin evidence
Film on NetajiBose back in focus
Agra FortMughal bastion
Battle of TalikotaBeyond the Hindu-Muslim binary
Palaces of Chettinad
ArchitectureThe Bahmani remains
Magnificent mausoleum
Interview'India never had a golden age'
LiteratureRay's alter ego
TheatreBard of Bhojpuri
AwardsPop patriot
LiteratureThe mortals of Devdas
Leiden platesMystery of a royal grant
Buddhist wondersAjanta's treasures


Inspired by events that took place in Massachusetts, Delphine and Muriel Coulin's provocative debut focuses on a group of bored teenage girls who all make an irrevocable pact. When Camille (Louise Grinberg, The Class) accidentally becomes pregnant, she encourages her friends and fellow high school classmates to follow suit. It's only a matter of time, before 17 girls in the high school are pregnant and the town is thrown into aworld of chaos. Set in the writer/directors' small, seaside hometown of Lorient in Brittany, 17 GIRLS is a reflection on adolescence, body image, friendship and the perplexing realities of growing up.


text:
Tag Archives: chess tutorial
Chess Opening: Control of Center – Part 3
Posted by ChessMaster on August 12, 2009 – 1:05 pm
Filed under Beginner Chess Tips, Chess Basics, Chess lessons, Chess Opening, Chess Strategy
Tagged as Chess Opening, chess opening tips, Chess Strategy, chess tutorial
In continuation of Chess Opening: Control of Center to show how different openings aim to control the center squares, we now examine the opening strategy behind Queen's Gambit Declined. This opening has been considered as one of the most reliable defenses of Black against White's d4. The position reached by the moves described here can be achieved through many other sequence of moves. All these QGD openings are covered under ECO codes D30-D69 and all aim to create a foothold in the center by advancing pawns or using pieces while developing them.
The main idea for White is to offer a gambit of QBP as a temporary sacrifice, which weakens Black's hold on the center whereas Black declines this offer and goes for a solid build-up. His pawn move e6 helps in this and facilitates the development of his KB but has the disadvantage of blocking his QB, the freeing of which remains a headache for Black.
1. d4 d5 White takes control of the central square e5 and semi-central c5. Black does same for e4 and c4.
2. c4 e6 White offers a pawn but this sacrifice is only temporary as White can recapture the Black pawn soon. This gambit and refusal by Black to accept it gives the name to this opening. Black just continues to strengthen his center position.
3. Nc3 Nf6 The development of these Knights cancels out each other's influence on e4 and d5 squares to maintain status quo at center.
4. Bg5 Be7 White creates an indirect pressure on e4 and c5 by pinning Black's KN and nullifying the Knight's influence on the center. Black simply removes the pin while developing his KB and clearing the way for castling.
5. e3 0-0 White goes for strengthening his center and opening the lines for developing his KB. Black takes this opportune moment to safeguard his King.
6. Nf3 Nbd7 These create pressure and counter-pressure on e5 square. Additionally, White Knight supports d4 pawn and the QB and Black QN supports KN and the c5 square. White should remain aware that his QB is in the firing line of Black's KB and Queen.
White will try to take advantage of the inactive QB while Black has to find a way to activate it or exchange it to free his position. One way to free the QB is to push KP to e5 but Black first needs to exchange his QP to avoid its getting isolated. Other alternative is to bring it out via b7 after playing b6, but it becomes essential to play c5 to maintain a balance at center.
Black usually refrains from exchanging his QP with White's QBP as it surrenders the center, but can do so when he gets some advantage out of it like gaining a tempo in attacking White's KB if it moves to d3. Black also uses pawn move c5 to attack White's center. After an exchange of Black's QP and White's QBP, White gets a majority in the center While Black gets a Queenside pawn majority and each player tries to utilize the respective advantages to launch their attacks.
Posted by ChessMaster on August 12, 2009 – 5:14 am
Tagged as Chess Opening, chess opening tips, chess strategies, chess tutorial
In Chess Opening: Control of Center – Part 1, we looked at two popular KP openings to understand how those resolved the tussle between White and Black for control of the center. Here we take a similar look at a common QP opening to realize the chess tactics involved in this case.
Nimzo-Indian Defense
The classical theories on the strategy of chess openings, as formulated by the first undisputed World Champion Wilhelm Steinitz (1836-1900), was further refined by Dr. Siegbert Tarrasch (1862-1934). These stressed the importance of center control by occupation or by direct application of pressure on those squares by using pawns, developing pieces to support that control, and playing to obstruct opponent's plans in this regard.
It was Aaron Nimzowitsch (1886-1935) who challenged these conventional and fairly universal ideas with his own in My System, which was probably the most widely read book on chess theories. His system found expression in several openings that bear his name, and Nimzo-Indian Defense happens to be the most important among his hypermodern theories and very widely used in master games till today. It appears that the defense was first played in a Rubinstein-Alekhine game at Leningrad in 1914 (won by Black in 28 moves).
What is significant in this opening is that Black does not commit any pawn structure at the start, thus retaining considerable flexibility. Black exerts control on the center indirectly from a distance by use of his pieces and also undermining the influence of enemy pieces on the center.
Let us see how all this is accomplished.
1. d4 Nf6 White wants to control the central square e5 and semi-central c5. Black applies pressure on d5 and e4 by the Knight (a direct control would need Black to play d5, which normally leads to Queen's Gambit opening).
2. c4 e6 White now counters Black's pressure on d5 by his pawn move and Black uses his KP to strengthen his hold on d5.
3. Nc3 Bb4 White develops his QN, adding to the pressure on d5 by his QBP and exerting a measure of control on e4. Black again goes the indirect route to nullify the influence of White QN on d5 and e4 by pinning it. Black also creates the possibility of exchanging his KB with White's QN, surrendering the advantage of Bishop pair to create a liability of doubled pawn for White on c-file.
In this defense, Black generally puts his QB in fianchetto by playing b6 and Bb7, applying the Bishop's influence on the long diagonal including the center squares d5 and e4 in harmony with his KN.
If Black exchanges his KB with White's QN, his strategy will be to close the center to minimize White's advantage of Bishop pair. You know that an open game gives a great advantage to player having two Bishops and obviously White's strategy will be to go for such a game.
At this stage, 4. e3, a quiet looking move, is considered to be White's most potent weapon against Nimzo-Indian Defense. 4. Qc2 (with the idea to retain Bishop pair without doubling of pawn) and 4. a3 (a venturesome continuation and forcing Black's hand to play 4. … Be7 or 4. … Bxc3) are also playable. Kasparov used 4. Nf3 (a kind of wait-and-watch move) to considerable success against Karpov in their championship match.
To remain within the ambit of our article, we will consider the normal variation only.
4. e3 0-0 White consolidates his QP and goes for development by opening a line for his KB.
5. Bd3 d5 White is building up his pressure on e4 and will aim to place his KP there. Black continues with his center control by advancing QP.
6. Nf3 c5 White KN increases his control on e5, but Black undermines the pressure by threatening White's QP with his QBP.
7. 0-0 White has completed his initial development and in case of doubled pawn due to Black exchanging Bishop with Knight, White can hope to undo it if Black takes his QP. Otherwise White can capture with his Knight to position it centrally. Black does not have any problem in completing his development and his share of center offers many chances of counterplay.
In Chess Opening: Control of Center – Part 3, we will see how the another important QP opening viz. Queen's Gambit Declined goes about the struggle for the center.
The theory behind all chess openings is to control the center comprising the squares d4, e4, d5 and e5, and the development of pieces that goes with it. Control of the center by one player helps him to position his pieces more effectively while thwarting the development of opponent's pieces. You can easily imagine that such a control with its associated benefits can facilitate your win to a great extent.
This control can be achieved in three ways:
Firstly, by occupying those squares with your pawns and pieces.
Secondly, allowing your opponent to occupy the center and then attacking and undermining the position.
Lastly, exerting control from a distance by means of pieces like Knights and Bishops without directly occupying those center squares.
This control of a square is also known as 'applying pressure' on the square by threatening to capture any enemy pawn or piece that may venture to occupy the square.
In Chess Openings: the most popular ones, we tried to show you the most common first moves at the start of a chess game. But you must have noticed that the baker's dozen of most popular types can ultimately lead to hundreds of different openings, going by the ECO codes that incorporate those opening moves. If you examine any of these openings through the moves that follow, the theme of center control will become apparent by the use of one of the three opening tactics described above.
To see how the different chess openings aim to achieve center control and their pros and cons, let us check four types which are related to the most frequent first moves described in Chess Openings: the most popular ones. Incidentally, two of these openings start with pushing the KP (1. e4) and the other two with QP (1. d4), so a fair representation is made!
We will examine with reference to the following openings:
1. e4-c5 (Sicilian Defense)
2. e4-e5 (Ruy Lopez)
3. d4-Nf6 (Nimzo-Indian Defense)
4. d4-d5 (QGD or Queen's Gambit Declined)
However, since Ruy Lopez has been discussed earlier in Chess Opening basics: Ruy Lopez, we will examine the other three in this and the next article.
Sicilian Defense:
It has become the most popular choice at master level as it eminently suits a fighting player with Black pieces. As can be seen from the number of ECO codes, there are many variations possible, but here we will consider the Najdorf variation which has become very popular with players like Fischer and Kasparov going for it in a big way.
1. e4 c5 White wants to control the central square d5. Black in turn applies pressure on d4 against advance of White's QP.
2. Nf3 d6 White creates his own pressure on d4 and also on e5. Black's pawn move opposes this pressure on e5. Here, Black could also play Nc6 which would counter the White KN's influence. Retaining a control on d5 is a key theme for Black in Sicilian defense in order to free his position by moving his QP to d5.
3. d4 cxd4 White does not want to lose initiative, so goes ahead with his QP advance and Black immediately captures the pawn to deny White the hold on the center squares.
4. Nxd4 Nf6 White recaptures and positions his KN on a center square. White gets control of half-open d-file while Black gets half-open c-file as also a pawn majority at center. Black now develops his KN threatening White's KP and exerting pressure on d5.
5. Nc3 White counters Black's plans by bringing out his QN which gives support to his e4 pawn and bolsters his hold on d5.
5. … a6
For the first time, Black seems to have deviated from the struggle for the center through this defining move for Najdorf variation of Sicilian Defense. What is the idea behind this apparent deviation?
By this move, Black denies b5 square to White's Knights and KB. It also prepares for Black's pawn move to b5 to start a Queenside action and positioning his QB to b7 from where it can bring pressure on d5 square and White's e4 pawn.
After this, White may generally choose from the sharpest line with 6. Bg5 to quieter, positional games with 6. Be2, and others lying in between like 6. Be3, 6. f3, and 6. Bc4. But further analysis of all those moves will take us into a full discussion of Sicilian Defense, which was not the idea behind this article. We only wanted to show how any opening theory tries to achieve center control and if you understand the means and follow the principles, you will be in the right lines without a need to memorize too many moves!
In next two parts of Chess Opening: Control of Center, we will see how this is achieved in two popular QP openings viz. Nimzo-Indian Defense and Queen's Gambit Declined.
Analyzing a position to create combinations
Posted by ChessMaster on July 27, 2009 – 9:21 am
Filed under Attacking tactics, Chess lessons, Chess tactics, Chess Tutorials
Tagged as attacking chess, attacking chess tactics, Attacking tactics, chess combination, Chess tactics, chess tutorial
In Working out Chess Combinations, you could work out an eight-move combination by identifying the strengths and weaknesses of both sides and to some extent worked your way backwards to find the moves that created the winning combination. But in the previous examples, there were quite a few pieces on board and the mobility, at least for some pieces, was restricted so that you could eliminate a good number of possibilities.
In the problem that we are posing now, there are only a few pawns and some heavy pieces on the board which is open to both sides for moving respective Queen and Rook. In fact, many beginners get daunted by such positions because they think that there are too many moves possible for their Queen and Rook and taken together with the responses from opponent's Queen and Rook, the number of combinations may be overwhelming! Let us now examine if we risk getting bogged up in the maze of moves!
I do not have to say who has got the move because if it were White, this discussion would not be necessary. With Queen and Rook on the seventh rank, it is only a matter of two checks by the Queen to checkmate the Black King. But Black having the move, you have to be acutely aware that Black cannot let go of checks if aforesaid action by White has to be stalled. You should also note that in absence of Black Queen and Rook from their base rank, Rb8+ by White is enough to checkmate Black King.
If you consider Qc4+, you know that White Queen cannot interpose by Qe2 as in that case Rd1+ mates the White King (the Queen being pinned cannot capture the Rook). So only option for White is to move the King and e1 is the only escape square available for that. But then Black's only move is Rd1+ and after Kxd1, he can try Qd3+. Of course White cannot play Kc1 (you work that out), but Ke1 allows still one more check by Qd2+. The White King has to move to f1 but further check by Black at d1 or d3 allows White to interpose with his Queen (by Qe1 or Qe2). After this, Black soon runs out of checks and that puts paid to further resistance by Black. So this line is not tenable.
That leaves Black with only Rd1+ when White's only option is Ke2. If Black now tries Rd2+, White King can retreat to previous position and Black has nothing left but a draw by repetition of moves. But will you be that desperate for a draw before exploring other options?
You can see that Qg4+ supports the Rook and allows White only two options:
(i) move King to e3 (i.e., Ke3)
(ii) interpose with pawn by f3
It may look that Ke3 is not viable as Black can play Re1+ to capture White Queen. But can Black do that? As soon as Black plays a non-forcing move like Rxe7, White's Rb8+ leads to checkmate of Black King!
On Ke3 by White, Qd4+ forces the King to move to f3, as Ke2 allows Qd3# mate by Black. With King at f3, Black's Rd3+ forces King to e2 (you should think why interposition by White Queen at e3 is now futile) but next check by Rd2+ brings King back to f3. Now Black's Qxf2+ drives the King into the wide open and it should be possible for you to keep checks going with Queen and Rook for a checkmate if King remains on e-file, but if it moves towards g-file, a pawn check at appropriate time ends the White King's journey!
What about the other option of interposing by pawn move f3? Trying to guard the diagonal, White exposes the King along rank 2 and Black can play Qxg2+! White cannot take the Rook as that would allow checkmate by Qd2#. So the only move for White is Ke3. On Qd2+, the King is forced into the open by its only move Ke4. Black keeps pressure on by Qd4+ and King is driven into the hands of the Black pawns and Black Rook can also attack by Rg1+ when King moves to g-file. You can certainly work out the rest.
So you are now sure that after Black's first move of Rd1+ in the diagram position, White King cannot avoid checkmate whatever it may do.
In the actual game, played between Heinrich Wolf and Jacques Mieses at Monte Carlo in 1902, White chose the option (ii) at his 30th move and Black delivered checkmate after another 5 moves.
So far as this and the examples in related previous articles on chess combination are concerned, we could find the way by following a methodical approach. But I also told you that such system may not work universally. Situations where a combination came out of the sheer brilliance of a mind and could not be seen even by a Grandmaster opponent, such analysis may not show the way beyond a certain step. This is particularly true where a move makes sense only when seen in context of subsequent moves and the brilliancy is realized by taking all these moves together. The following example is a case in point.
The position shows that Black has one Bishop less but he has two passed pawns extra, one being only two moves away from promotion. Black Rook at a5 is in a position to capture the Bishop at e5 and also to move to a1 for capturing the Queen. Obviously, it is White's move now and he has to tackle these threats, possible only by forcing moves on Black King to retain a tempo. On the plus side, White has Rook and Queen lined up on f-file and if the line can be opened, he can plan his assault on Black King, possibly with help from his Bishop attacking the g7 pawn and the Rook at c3 moving up to 7th or 8th rank when it can do so. But while working out the attacking plans, White cannot afford to lose a tempo, otherwise Black will launch his counter-attack as described above.
It is easy to see that White can play Ng6+ creating a fork on the Queen and White will be obliged to capture the Knight with f-pawn. White in turn can play fxg3 thereby opening the f-file and the discovered check retains tempo with White. It is apparent that Black cannot play Ke8 (because of White's Rf8+ and Qf7#) or Ke7 (due to White's Rf7+ / Qf5+ / Bg3+ / Qd3#). So the only possible move by Black that does not lose immediately is Kg1.
If White plays Rf7 with intention to play Rxg7 leading to mate, Black can counter this by capturing the Bishop with Rxe5 and threatening Re1 next, when White's plans fall through. Were White's Rook not standing in his Queen's way, Qf7+ would be possible but as it stands now, White cannot afford to lose tempo by playing Rf7.
This far could be analyzed through a systematic approach, but can White take his initiative forward beyond this point? It is very difficult to imagine and needed real brilliance by White to make this a famous combination because of his next two moves!
You may give it a try before going through the following moves.
From the diagram position, the game proceeded as follows:
1. Ng6+ fxg6
2. fxg6+ Kg8
3. Rc8! Rxc8 The move by White together with his next move were difficult to anticipate
4. Rxc2! Rf8 White's move cleared f-file for Queen while retaining the tempo.
White's Rook cannot be captured because of the threat Qf7+ leading to mate.
5. Rc8 Qe7 White keeps attacking the f7 and f8 squares and Black tried to counter these threats
6. Qc4+ Kh8 6. Bd6 can be countered by 6. … Ra1+
7. Qh4 Ra1+ Black has nothing better to do as 7. … Qxh4 allows Rxf8#
8. Bxa1 Qe3+ desperation!
9. Kh1 Rxc8 While starting on his combination, White must have seen that Black has no more check after his King moved to h1.
10. Qxh5+ Kg8
11. Qh7+ Kf8
12. Qxg7+ Ke8
13. Qf7+ Kd8
14. Bf6+ 1-0 Checkmate is inevitable on White's next move
Working out Chess Combinations
Tagged as attacking chess, attacking chess tactics, chess combination, Chess tactics, chess tutorial
In the first article on Chess Tactics: Method Approach to Calculating Combinationson, we shared our ideas on how to proceed systematically for analyzing a situation for its inherent possibilities. The subsequent step is to work out our next sequence of moves which comprises a chess combination. The whole game of chess is expected to consist of many such nodal points where each node is planned (hopefully!) to yield some advantage, however microscopic it may be. In accumulating these advantages as we proceed from node to node, we expect at some stage to have enough to give us a win – well, that is the general idea!
While describing some suggested methods, we showed a simple example on how to put the ideas into practice. Continuing on the theme in Looking to find the best chess combination in a middle game position, we took up two slightly more complex positions and tried to apply the method for finding out the actual moves that were played over the board.
We will now examine another position and see how far our methods can help to reach the goals we seek. In the position shown below, Black has the move and we will try to figure out his best course of action.
You notice that in terms of material, White has a huge advantage because of his Queen against a Bishop. But look where the Queen is! Excepting for a support to the Rook at f1, a defensive role, it serves no useful purpose and could as well be not there on the board! White QB has become a bad Bishop, being blocked in by the White pawns in front and the QR position is no better. Only the KR has scope of some activity but, for now, it has taken away one escape square for the totally exposed White King in case of a Rook check from g6 along the open g-file. In such event, the King perforce has to move to h1.
You also realize that Black's Rook at e8 can freely move to e1 when necessary to attack the White King on its base rank, provided the White Rook can be made to leave its present rank. Black's KB can also join the battle any time by capturing the f2 pawn under certain situations. In a nutshell, Black should be able to force White's surrender – all it needs is to find the sequence of moves!
When White is forced to move his King by Kh1 because of Black's Rg6+, a check by Black's QB from g2 (i.e., Bg2+) would force White to play Kg1. The Bishop then captures the f3 pawn (i.e., Bxf3) to deliver a discovered check from the Rook at g6 and White King has nowhere to go (assuming his Rook remaining at f1).
To enable Bg2+, Black needs to play Bh3 after White's Kh1 and this, inter alia, attacks the Rook at f1 also. White has only two options:
(i) play Rg1 for capturing the Black Bishop when it comes to g2, or
(ii) play Rd1 to vacate the f1 square for the King's escape from the discovered check.
We can disregard White's move like Qd3 to attack the Rook at g3, as it can easily be nullified by Black playing f4 (White could still try Qc4+ but Black's Kh8 puts an end to it), and then Black can continue with original plans.
If we probe further, we can see that if White plays Rg1, Black could still play Bg2+. This is because, as we noted earlier, the move Rxg2 makes the Rook leave the base rank allowing Black to play Re8+ which becomes decisive!
So the first option (Rg1) is ruled out and we have to consider White's Rook move to d1. Black can go ahead as before but now White King can move to f1. In this position, Rook at g6 can move to g2 for playing Rxf2+ on next move. White King cannot go to e1, so it has to go back to g1. Black then plays Rg2+ which creates double check by Rook and Bishop and irrespective of King's move to f1 or h1, it is checkmate by Rg1#.
But what if White plays Qxb6 to stall White's Rxf2+? No problem, Black captures Rxh2 and White cannot prevent the coming Rh1#.
We can now write down the moves:
1. … Rg6+
2. Kh1 Bh3
3. Rd1 Bg2+
4. Kg1 Bxf3+
5. Kf1 Rg2
6. Qd3 Rxf2+ (6. Qxb6 Rxh2 7. any Rh1#)
7. Kg1 Rg2++
8. Kf1 Rg1#
See how you could work out a combination comprising 8 moves! Only thing is that the actual player of Black pieces did not have to think this long to work it out. I am quite sure of it, seeing that he was none other than Paul Morphy! I come nowhere near Morphy, so I can be excused! However, Morphy played the moves a little differently and you can play through the game at any online archive to see how he did it.
Louis Paulsen, who played as White and was among the top five players of that period, propounded the idea that any brilliant attack would fail against correct defense. This idea found acceptance with Steinitz, a future World Champion. But the curious point is that Paulsen failed to prove his idea in this game played at New York in 1857!


Fernando Alonso has kept himself in the F1 headlines by lashing out at the sport's official podcast.
The latest Beyond The Grid podcast is with former Ferrari president Luca di Montezemolo, who made some comments about the Spaniard's time with the team.
Montezemolo said Alonso was "less close to the team" than were Niki Lauda and Michael Schumacher, and in a Tweet to promote the podcast, reportedly added: "When he wins, he's happy. When he doesn't win, it's the problem of the team".
It is the official Tweet that annoyed Alonso.
The two-time world champion, who quit F1 at the end of last year, said there "had to be a reason not to follow this account".
"(The) President never said that. Especially after scoring 80 per cent of the points for our team," added Alonso.
Meanwhile, Marca sports newspaper reports that Alonso is this week in South Africa, where he is testing a Toyota Hilux car designed for the Dakar Rally.


I've wanted to visit Petra ever since watching Indiana Jones as a kid. The idea of a mysterious, ancient city carved directly into rock thousands of years ago by a lost civilisation (the Nabataeans) and forgotten by the western world until two hundred years ago is too exciting to be true, surely?
Petra is Jordan's #1 attraction by a long shot – and the entrance fee alone is £50. But the moment you glimpse the famous Treasury at the end of a kilometre of a twisting canyon, you realise it'd be worth ten times that. My words can't do it justice, so here are the photos.
The quintessential Petra photo at the end of the siq.
The Treasury in all its glory.
From further back, you realise just how incredible the carving into sheer cliff face really is.
But there's more to Petra than the Treasury. We were there from sunrise until sunset.
One of many merchants at Petra.
Not enough people visit the Monastery, setting of the final scene of Raiders of the Lost Ark, because it's up several hundred steps. Having climbed Mt Sinai the day before, we opted for the less strenuous ascent – by donkey.
Michael, Paul and I at the top of the climb, with the royal tombs visible in the distance.
Dwarfed by the gigantic Monastery.
A daredevil leaping across the Monastery. (Paul shrieked).
Some locals by the royal tombs, on the way back.
My day at Petra was one of my best days travelling, anywhere. It trumps anything I saw in Egypt. If I could have stayed longer, I would have. I really can't rave enough.
Tip: do not join one of those tours where they come here just for a few hours before lunch!


Download Free oo Voo Video Call, Text and Voice App It was developed by Tango Me, Inc.
Finden Sie andere für einen flotten Dreier, besuchen Sie eine Swingerparty oder ab und zu mal einen Quickie.
If you run Windows 8 and need a little help, our community can answer your questions.
Modern webcams require very little user input to install.
Most webcams should install themselves automatically after you plug them in.


TheCnnekt presents Self-Care: Beyond the Bubble Bath. This is a Panel Discussion on Self-Care involving Mind, Body, and Soul.
Advanced Practice-Access Your Inner Power: An advanced practice desined to activate your core power through movement and pranayama. Inspired by Durga myth, mantra, and mudra, we will connect with the steadfast and fearless energy of Durga that resides at our center.
An exploration of the Gayatri through mantra, mudra, myth, and movement. Exit with a practice that will connect you more deeply to nature, to your voice, and to your own heart.
We will explore how movement can generate words and words can generate movement. Yoga asana draws us deeply into our bodies, accessing thoughts and ideas that we never knew we could articulate. Bring your pen or pencil, your notebook or tablet, and your love of words and movement.
Your words live in your body. Give them a life in the world.
Shape your thoughts just as you shape your body through yoga asana. Find your inner rhythm through your breath and movement. Record your experiences.
In this 3 hour workshop with international yoga teacher and author Susanna Harwood Rubin, we will explore how movement can generate words and words can generate movement. Yoga asana draws us deeply into our bodies, accessing thoughts and ideas we never knew we could articulate. Bring your pen or pencil, your tablet or notebook, and your love of words and movement.
Join Susanna and explore the stories of Durga and Kali in this exciting text, The Devi Mahatmya.
The Devi Mahatmya is the great text that presents the goddess in her most powerful forms. Many of the essential stories of Durga and Kali form the heart of the text, making the concepts of Devi and Shakti vivid, exciting, surprising, and moving. We will explore well-known and lesser-known forms of the goddess, learn about the text itself, then practice key Shakti mantras and mudras.
Mudras are symbolic hand gestures that create and hold energy. The word mudra means a seal, and mudras seal energetic meaning into our bodies and our consciousness, while simultaneously drawing our inner power to the surface. We can use mudras to empower our daily lives.
In this 1.5 hour workshop, we will form mudras while chanting mantras, amplifying the intention of the mantra by offering its vibrational power a container in which to sit, take hold, and deepen. Under the light of the full moon, we will practice mudras and mantras to channel powerful creative energy into our daily lives.
Kama means desire. Rupa means shape. Kamarupa means the shape of your desire. Join us in the jungles and beaches of Goa this January 2019 for the second annual Kamarupa Retreat with Susanna Harwood Rubin and Todd Tesen at the beautiful Ashiyana Retreat Center.
with Todd Tesen Yoga – EarlyBird Registration click here!


text:
#region Apache Notice

#endregion

using System;
using System.Collections;

using IBatisNet.DataMapper.MappedStatements;
using IBatisNet.Common.Utilities.Objects.Members;
using IBatisNet.Common.Logging;
using System.Reflection;

namespace IBatisNet.DataMapper.Proxy
{
    /// <summary>
    /// A lazy list
    /// </summary>
    [Serializable]
    public class LazyList : IList
    {
        #region Fields
        private object _param = null;
        private object _target = null;
        private ISetAccessor _setAccessor = null;
        private ISqlMapper _sqlMap = null;
        private string _statementId = string.Empty;
        private bool _loaded = false;
        private object _loadLock = new object();
        private IList _list = null;

        private static readonly ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
        #endregion

        /// <summary>
        /// Resolve the lazy loading.
        /// </summary>
        /// <param name="methodName">Name of the method.</param>
        private void Load(string methodName)
        {
            if (_logger.IsDebugEnabled)
            {
                _logger.Debug("Proxyfying call to " + methodName);
            }

            lock (_loadLock)
            {
                if (_loaded == false)
                {
                    if (_logger.IsDebugEnabled)
                    {
                        _logger.Debug("Proxyfying call, query statement " + _statementId);
                    }
                    _list = _sqlMap.QueryForList(_statementId, _param);
                    _loaded = true;
                    _setAccessor.Set(_target, _list);
                }
            }

            if (_logger.IsDebugEnabled)
            {
                _logger.Debug("End of proxyfied call to " + methodName);
            }
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="T:LazyList"/> class.
        /// </summary>
        /// <param name="mappedSatement">The mapped satement.</param>
        /// <param name="param">The param.</param>
        /// <param name="target">The target.</param>
        /// <param name="setAccessor">The set accessor.</param>
        public LazyList(IMappedStatement mappedSatement, object param,
            object target, ISetAccessor setAccessor)
        {
            _list = new ArrayList();
            _param = param;
            _statementId = mappedSatement.Id;
            _sqlMap = mappedSatement.SqlMap;
            _target = target;
            _setAccessor = setAccessor;
        }

        #region IList Members

        /// <summary>
        /// Adds an item to the <see cref="T:System.Collections.IList"></see>.
        /// </summary>
        /// <param name="value">The <see cref="T:System.Object"></see> to add to the <see cref="T:System.Collections.IList"></see>.</param>
        /// <returns>
        /// The position into which the new element was inserted.
        /// </returns>
        /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.IList"></see> is read-only.-or- The <see cref="T:System.Collections.IList"></see> has a fixed size. </exception>
        public int Add(object value)
        {
            Load("Add");
            return _list.Add(value);
        }

        /// <summary>
        /// Removes all items from the <see cref="T:System.Collections.IList"></see>.
        /// </summary>
        /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.IList"></see> is read-only. </exception>
        public void Clear()
        {
            Load("Clear");
            _list.Clear();
        }

        /// <summary>
        /// Determines whether the <see cref="T:System.Collections.IList"></see> contains a specific value.
        /// </summary>
        /// <param name="value">The <see cref="T:System.Object"></see> to locate in the <see cref="T:System.Collections.IList"></see>.</param>
        /// <returns>
        /// true if the <see cref="T:System.Object"></see> is found in the <see cref="T:System.Collections.IList"></see>; otherwise, false.
        /// </returns>
        public bool Contains(object value)
        {
            Load("Contains");
            return _list.Contains(value);
        }

        /// <summary>
        /// Determines the index of a specific item in the <see cref="T:System.Collections.IList"></see>.
        /// </summary>
        /// <param name="value">The <see cref="T:System.Object"></see> to locate in the <see cref="T:System.Collections.IList"></see>.</param>
        /// <returns>
        /// The index of value if found in the list; otherwise, -1.
        /// </returns>
        public int IndexOf(object value)
        {
            Load("IndexOf");
            return _list.IndexOf(value);
        }

        /// <summary>
        /// Inserts an item to the <see cref="T:System.Collections.IList"></see> at the specified index.
        /// </summary>
        /// <param name="index">The zero-based index at which value should be inserted.</param>
        /// <param name="value">The <see cref="T:System.Object"></see> to insert into the <see cref="T:System.Collections.IList"></see>.</param>
        /// <exception cref="T:System.ArgumentOutOfRangeException">index is not a valid index in the <see cref="T:System.Collections.IList"></see>. </exception>
        /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.IList"></see> is read-only.-or- The <see cref="T:System.Collections.IList"></see> has a fixed size. </exception>
        /// <exception cref="T:System.NullReferenceException">value is null reference in the <see cref="T:System.Collections.IList"></see>.</exception>
        public void Insert(int index, object value)
        {
            Load("Insert");
            _list.Insert(index, value);
        }

        /// <summary>
        /// Gets a value indicating whether the <see cref="T:System.Collections.IList"></see> has a fixed size.
        /// </summary>
        /// <value></value>
        /// <returns>true if the <see cref="T:System.Collections.IList"></see> has a fixed size; otherwise, false.</returns>
        public bool IsFixedSize
        {
            get { return false; }
        }

        /// <summary>
        /// Gets a value indicating whether the <see cref="T:System.Collections.IList"></see> is read-only.
        /// </summary>
        /// <value></value>
        /// <returns>true if the <see cref="T:System.Collections.IList"></see> is read-only; otherwise, false.</returns>
        public bool IsReadOnly
        {
            get { return false; }
        }

        /// <summary>
        /// Removes the first occurrence of a specific object from the <see cref="T:System.Collections.IList"></see>.
        /// </summary>
        /// <param name="value">The <see cref="T:System.Object"></see> to remove from the <see cref="T:System.Collections.IList"></see>.</param>
        /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.IList"></see> is read-only.-or- The <see cref="T:System.Collections.IList"></see> has a fixed size. </exception>
        public void Remove(object value)
        {
            Load("Remove");
            _list.Remove(value);
        }

        /// <summary>
        /// Removes the <see cref="T:System.Collections.IList"></see> item at the specified index.
        /// </summary>
        /// <param name="index">The zero-based index of the item to remove.</param>
        /// <exception cref="T:System.ArgumentOutOfRangeException">index is not a valid index in the <see cref="T:System.Collections.IList"></see>. </exception>
        /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.IList"></see> is read-only.-or- The <see cref="T:System.Collections.IList"></see> has a fixed size. </exception>
        public void RemoveAt(int index)
        {
            Load("RemoveAt");
            _list.RemoveAt(index);
        }

        /// <summary>
        /// Gets or sets the <see cref="T:Object"/> at the specified index.
        /// </summary>
        /// <value></value>
        public object this[int index]
        {
            get
            {
                Load("this");
                return _list[index];
            }
            set
            {
                Load("this");
                _list[index] = value;
            }
        }

        #endregion

        #region ICollection Members

        /// <summary>
        /// Copies the elements of the <see cref="T:System.Collections.ICollection"></see> to an <see cref="T:System.Array"></see>, starting at a particular <see cref="T:System.Array"></see> index.
        /// </summary>
        /// <param name="array">The one-dimensional <see cref="T:System.Array"></see> that is the destination of the elements copied from <see cref="T:System.Collections.ICollection"></see>. The <see cref="T:System.Array"></see> must have zero-based indexing.</param>
        /// <param name="index">The zero-based index in array at which copying begins.</param>
        /// <exception cref="T:System.ArgumentNullException">array is null. </exception>
        /// <exception cref="T:System.ArgumentOutOfRangeException">index is less than zero. </exception>
        /// <exception cref="T:System.ArgumentException">array is multidimensional.-or- index is equal to or greater than the length of array.-or- The number of elements in the source <see cref="T:System.Collections.ICollection"></see> is greater than the available space from index to the end of the destination array. </exception>
        /// <exception cref="T:System.InvalidCastException">The type of the source <see cref="T:System.Collections.ICollection"></see> cannot be cast automatically to the type of the destination array. </exception>
        public void CopyTo(Array array, int index)
        {
            Load("CopyTo");
            _list.CopyTo(array, index);
        }

        /// <summary>
        /// Gets the number of elements contained in the <see cref="T:System.Collections.ICollection"></see>.
        /// </summary>
        /// <value></value>
        /// <returns>The number of elements contained in the <see cref="T:System.Collections.ICollection"></see>.</returns>
        public int Count
        {
            get
            {
                Load("Count");
                return _list.Count;
            }
        }

        /// <summary>
        /// Gets a value indicating whether access to the <see cref="T:System.Collections.ICollection"></see> is synchronized (thread safe).
        /// </summary>
        /// <value></value>
        /// <returns>true if access to the <see cref="T:System.Collections.ICollection"></see> is synchronized (thread safe); otherwise, false.</returns>
        public bool IsSynchronized
        {
            get { return false; }
        }

        /// <summary>
        /// Gets an object that can be used to synchronize access to the <see cref="T:System.Collections.ICollection"></see>.
        /// </summary>
        /// <value></value>
        /// <returns>An object that can be used to synchronize access to the <see cref="T:System.Collections.ICollection"></see>.</returns>
        public object SyncRoot
        {
            get { return this; }
        }

        #endregion

        #region IEnumerable Members

        /// <summary>
        /// Returns an enumerator that iterates through a collection.
        /// </summary>
        /// <returns>
        /// An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
        /// </returns>
        public IEnumerator GetEnumerator()
        {
            Load("Add");
            return _list.GetEnumerator();
        }

        #endregion
    }
}

redpajama_set_name: RedPajamaGithub