Pakistan v England: Sarah Glenn handed first call-up for Malaysia tour
England have called up leg-spinner Sarah Glenn for the first time for their limited-overs series against Pakistan in Kuala Lumpur, Malaysia.
Glenn took 11 wickets at 18.72 this summer for Kia Super League semi-finalists Loughborough Lightning.
Sussex seamer Freya Davies has also been recalled for the three one-day internationals and three Twenty20s.
Interim coach Ali Maiden will oversee the tour before Lisa Keightley takes over as head coach in January.
Keightley replaced Mark Robinson, who stepped down after this summer's Ashes series.
"This tour is an opportunity to start a new era and move forward," captain Heather Knight said.
"There's a few younger faces in the group but also a lot of proven talent. We can't wait for the next few months."
The ODIs are England's final fixtures in the ICC Women's Championship, which determines qualification for the 2021 World Cup - although they are all but mathematically certain to qualify.
While Pakistan recently hosted Bangladesh in a limited-overs series in Lahore, many of their recent "home" series have been played in Malaysia or the United Arab Emirates because of security concerns.
England squad: Heather Knight (Berkshire, capt), Tammy Beaumont (Kent), Katherine Brunt (Yorkshire), Kate Cross (Lancashire), Freya Davies (Sussex), Sophie Ecclestone (Lancashire), Sarah Glenn (Worcestershire), Kirstie Gordon (Nottinghamshire), Amy Jones (Warwickshire, wk), Nat Sciver (Surrey), Anya Shrubsole (Berkshire), Mady Villiers (Essex), Fran Wilson (Kent), Lauren Winfield (Yorkshire), Danni Wyatt (Sussex).
Pakistan v England schedule
(all games at Kinrara Oval, Kuala Lumpur)
9 December *First ODI, 01:30 GMT
12 December *Second ODI, 01:30 GMT
14 December *Third ODI, 01:30 GMT
17 December First Twenty20 international, 02:00 GMT
19 December Second Twenty20 international, 02:00 GMT
20 December Third Twenty20 international, 02:00 GMT
*All three ODIs count towards the ICC Women's Championship, which determines qualification for the 2021 World Cup.


Edit Policy Definition
Update this policy definition's configuration settings using the form below.
Policy Configuration
Please manually configure your policy's JSON configuration below.
{{ policyDefJSON }}
Update Policy
Cancel


CIAO, PROFESSORE! A film review by Edwin Jahiel Copyright 1995 Edwin Jahiel
(Italy, 1992) *** 1/2 Directed by Lina Wertmuller. Written by Wertmuller, Leo Benvenuti, Piero De Barnardi, Alessandro Vencivenni, Domenico Saverni. Photography, Gianni Tafani. Editing, Pierluigi Leonardi. Cast: Paolo Villagio et al. A Miramax release. In Italian with subtitles. 91 min. Rated R (language)
With some nine movies between 1963 and 1976, director Lina Wertmuller became a cult figure, admired for her caustic humor, social criticism, excesses, farcical or steamy sexuality, absurdism and maverick filmmaking.
SEVEN BEAUTIES (1976) made her the first woman to be Oscar-nominated as a director. But her next film (1978), starring starring Giancarlo Gianini and Candice Bergen, THE END OF THE WORLD IN OUR USUAL BED IN A NIGHT FULL OF RAIN failed. The dozen pictures that followed, for sundry reasons, made no more than a ripple. Wertmuller almost disappeared from the international scene.
With CIAO, PROFESSORE! she is back at the head of the class. The film is much more mainstream, toned-down and warm than previous ones by Wertmuller.. At the same time, she uses her sharpness and irony in unpretentious, un-showy ways that protect the movie from facile sentimentalism.
The picture is based on "Me, Let's Hope I Make It," a book which I suppose was written by a teacher about his experiences. That was also the movie's title at the 1993 Toronto Film Festival, after which it became CIAO, PROFESSORE!
The basic story -- new teacher conquers, and is conquered by, a difficult class -- is not new, but its specific context, details and variations on a familiar theme, make it fresh and original.
Marco Tullio Sperelli had asked to be transferred to the northern town of Corsano but was mistakenly assigned to Corzano in the south, a grimy, dilapidated, impoverished, lawless disaster area in the region of Naples.
At school, three-fourths of Sperelli's third-grade students are no-shows, but many can be located, at work around the mean streets of Corzano as a waiter, a hawker of stolen cigarettes, an ice-cream seller, a barber's assistant, a flegdling racketeer.
Corruption reigns, from the Mayor (a party to breaking child-labor and school-attendance laws), to the school's black-marketeer janitor (he sells cakes as well as chalk and toilet-paper to teachers and pupils), to his do-nothing janitress/cleaning lady wife, to the absentee, perpetually pregnant school director who accepts everything -- and everything is wrong -- with a shrug and a smile.
 With patience, tolerance and humor (much of it at his own expense) he treats the youths like humans, disciplines them with wit and imagination, teaches them some academic things and some values -- while he himself learns about life in the area. We may be in recognizable territory, but it is light-years away from The Blackboard Jungle type of movies.
One assignment to the kids is to write parables. This is particularly relevant as the movie itself is also a parable of Italy's North vs. South. The North is industrial, affluent, developed and "cultivated." Northerners often looks down upon a South (the "Mezzogiorno") perceived as foreign and backward. They can be repaid with suspiciousness and defensiveness born of inferiority complexes.
The North-South gap is cunningly symbolized by the Southerners' peculiar pronunciation of De Amicis -- the school being named after Edmondo De Amicis, the writer whose "Cuore" (Hearts), a book about school-children, may well be the most read classic in Italy.
Sperelli is a Northerner, but a friendly one, with minimal prejudices and maximum good will. He appreciates nature's beauty and some aspects of southern hospitality. He accepts peculiarities, superstitions, and soon he understands a great deal : the conditions that make the locals take the Camorra and its drug traffic for granted. (The subtitles call it Mafia, but the Mafia is Sicilian, the Ndragheta is Calabrian and the Camorra is Neapolitan); the bright kid whose dream is "to be a man" (read "above the law") and "feel nothing"; the proliferation of births; the prematurely wise little girl who is the head of a wretched household; the sleepy boy who has to stay up nights helping his father to collect discarded cardboard in the streets; the fat boy who takes refuge in overeating.
Sperelli is not merely a routine teacher, but a self-appointed social worker. Knowledge comes to him in little shock waves mixed with a constant flow of comic moments.
The kids are street-wise. One of the movie's charms is the amusing-sad way they talk like grown-ups, with adult gestures, body language and a rich scatological vocabulary. Appealing too is the fact that in spite of little schooling, the kids know a surprising (albeit oddly interpreted) amount of things academic, from anthropology to geography. They are fast learners and fast thinkers, and the bond that grows between them and their teacher is a delight.
This bond is predictable, but the uninhibited give-and-take of the dialogue, the succession of clever, believable events, their details, the acute, specific observations of the ethos and lifestyles of Neapolitan culture, take you from small surprises to larger revelations.
CIAO, PROFESSORE! is a very serious funny movie, excellently written, directed and played. A picture that has five writers spells catastrophe in Hollywood, but in Italy many of the very best films have had several scenarists.
When Sperelli leaves for good, neither he nor we, the viewers, harbor illusions. What the Professore has contributed may be no more than band-aid treatment. Yet, as he goes away, the two-way affection will remain with him and in the hearts of Corzano.
[published 4 Sept. 1994. Minor cosmetic changes 25 Dec. 1995]
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


Parquet Files
- Loading Data Programmatically
- Partition Discovery
- Schema Merging
- Hive metastore Parquet table conversion
- Columnar Encryption
- Data Source Option
Parquet is a columnar format that is supported by many other data processing systems. Spark SQL provides support for both reading and writing Parquet files that automatically preserves the schema of the original data. When reading Parquet files, all columns are automatically converted to be nullable for compatibility reasons.
Loading Data Programmatically
Using the data from the above example:
// Encoders for most common types are automatically provided by importing spark.implicits._
import spark.implicits._
val peopleDF = spark.read.json("examples/src/main/resources/people.json")
// DataFrames can be saved as Parquet files, maintaining the schema information
peopleDF.write.parquet("people.parquet")
// Read in the parquet file created above
// Parquet files are self-describing so the schema is preserved
// The result of loading a Parquet file is also a DataFrame
val parquetFileDF = spark.read.parquet("people.parquet")
// Parquet files can also be used to create a temporary view and then used in SQL statements
parquetFileDF.createOrReplaceTempView("parquetFile")
val namesDF = spark.sql("SELECT name FROM parquetFile WHERE age BETWEEN 13 AND 19")
namesDF.map(attributes => "Name: " + attributes(0)).show()
// +------------+
// | value|
// +------------+
// |Name: Justin|
// +------------+
import org.apache.spark.api.java.function.MapFunction;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
Dataset<Row> peopleDF = spark.read().json("examples/src/main/resources/people.json");
// DataFrames can be saved as Parquet files, maintaining the schema information
peopleDF.write().parquet("people.parquet");
// Read in the Parquet file created above.
// Parquet files are self-describing so the schema is preserved
// The result of loading a parquet file is also a DataFrame
Dataset<Row> parquetFileDF = spark.read().parquet("people.parquet");
// Parquet files can also be used to create a temporary view and then used in SQL statements
parquetFileDF.createOrReplaceTempView("parquetFile");
Dataset<Row> namesDF = spark.sql("SELECT name FROM parquetFile WHERE age BETWEEN 13 AND 19");
Dataset<String> namesDS = namesDF.map(
(MapFunction<Row, String>) row -> "Name: " + row.getString(0),
Encoders.STRING());
namesDS.show();
// +------------+
// | value|
// +------------+
// |Name: Justin|
// +------------+
peopleDF = spark.read.json("examples/src/main/resources/people.json")
# DataFrames can be saved as Parquet files, maintaining the schema information.
peopleDF.write.parquet("people.parquet")
# Read in the Parquet file created above.
# Parquet files are self-describing so the schema is preserved.
# The result of loading a parquet file is also a DataFrame.
parquetFile = spark.read.parquet("people.parquet")
# Parquet files can also be used to create a temporary view and then used in SQL statements.
parquetFile.createOrReplaceTempView("parquetFile")
teenagers = spark.sql("SELECT name FROM parquetFile WHERE age >= 13 AND age <= 19")
teenagers.show()
# +------+
# | name|
# +------+
# |Justin|
# +------+
df <- read.df("examples/src/main/resources/people.json", "json")
# SparkDataFrame can be saved as Parquet files, maintaining the schema information.
write.parquet(df, "people.parquet")
# Read in the Parquet file created above. Parquet files are self-describing so the schema is preserved.
# The result of loading a parquet file is also a DataFrame.
parquetFile <- read.parquet("people.parquet")
# Parquet files can also be used to create a temporary view and then used in SQL statements.
createOrReplaceTempView(parquetFile, "parquetFile")
teenagers <- sql("SELECT name FROM parquetFile WHERE age >= 13 AND age <= 19")
head(teenagers)
## name
## 1 Justin
# We can also run custom R-UDFs on Spark DataFrames. Here we prefix all the names with "Name:"
schema <- structType(structField("name", "string"))
teenNames <- dapply(df, function(p) { cbind(paste("Name:", p$name)) }, schema)
for (teenName in collect(teenNames)$name) {
cat(teenName, "\n")
}
## Name: Michael
## Name: Andy
## Name: Justin
Partition Discovery
Table partitioning is a common optimization approach used in systems like Hive. In a partitioned
table, data are usually stored in different directories, with partitioning column values encoded in
the path of each partition directory. All built-in file sources (including Text/CSV/JSON/ORC/Parquet)
are able to discover and infer partitioning information automatically.
For example, we can store all our previously used
population data into a partitioned table using the following directory structure, with two extra
columns, gender
and country
as partitioning columns:
By passing path/to/table
to either SparkSession.read.parquet
or SparkSession.read.load
, Spark SQL
will automatically extract the partitioning information from the paths.
Now the schema of the returned DataFrame becomes:
Notice that the data types of the partitioning columns are automatically inferred. Currently,
numeric data types, date, timestamp and string type are supported. Sometimes users may not want
to automatically infer the data types of the partitioning columns. For these use cases, the
automatic type inference can be configured by
spark.sql.sources.partitionColumnTypeInference.enabled
, which is default to true
. When type
inference is disabled, string type will be used for the partitioning columns.
Starting from Spark 1.6.0, partition discovery only finds partitions under the given paths
by default. For the above example, if users pass path/to/table/gender=male
to either
SparkSession.read.parquet
or SparkSession.read.load
, gender
will not be considered as a
partitioning column. If users need to specify the base path that partition discovery
should start with, they can set basePath
in the data source options. For example,
when path/to/table/gender=male
is the path of the data and
users set basePath
to path/to/table/
, gender
will be a partitioning column.
Schema Merging
Like Protocol Buffer, Avro, and Thrift, Parquet also supports schema evolution. Users can start with a simple schema, and gradually add more columns to the schema as needed. In this way, users may end up with multiple Parquet files with different but mutually compatible schemas. The Parquet data source is now able to automatically detect this case and merge schemas of all these files.
Since schema merging is a relatively expensive operation, and is not a necessity in most cases, we turned it off by default starting from 1.5.0. You may enable it by
- setting data source option
mergeSchema
totrue
when reading Parquet files (as shown in the examples below), or - setting the global SQL option
spark.sql.parquet.mergeSchema
totrue
.
// This is used to implicitly convert an RDD to a DataFrame.
import spark.implicits._
// Create a simple DataFrame, store into a partition directory
val squaresDF = spark.sparkContext.makeRDD(1 to 5).map(i => (i, i * i)).toDF("value", "square")
squaresDF.write.parquet("data/test_table/key=1")
// Create another DataFrame in a new partition directory,
// adding a new column and dropping an existing column
val cubesDF = spark.sparkContext.makeRDD(6 to 10).map(i => (i, i * i * i)).toDF("value", "cube")
cubesDF.write.parquet("data/test_table/key=2")
// Read the partitioned table
val mergedDF = spark.read.option("mergeSchema", "true").parquet("data/test_table")
mergedDF.printSchema()
// The final schema consists of all 3 columns in the Parquet files together
// with the partitioning column appeared in the partition directory paths
// root
// |-- value: int (nullable = true)
// |-- square: int (nullable = true)
// |-- cube: int (nullable = true)
// |-- key: int (nullable = true)
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
public static class Square implements Serializable {
private int value;
private int square;
// Getters and setters...
}
public static class Cube implements Serializable {
private int value;
private int cube;
// Getters and setters...
}
List<Square> squares = new ArrayList<>();
for (int value = 1; value <= 5; value++) {
Square square = new Square();
square.setValue(value);
square.setSquare(value * value);
squares.add(square);
}
// Create a simple DataFrame, store into a partition directory
Dataset<Row> squaresDF = spark.createDataFrame(squares, Square.class);
squaresDF.write().parquet("data/test_table/key=1");
List<Cube> cubes = new ArrayList<>();
for (int value = 6; value <= 10; value++) {
Cube cube = new Cube();
cube.setValue(value);
cube.setCube(value * value * value);
cubes.add(cube);
}
// Create another DataFrame in a new partition directory,
// adding a new column and dropping an existing column
Dataset<Row> cubesDF = spark.createDataFrame(cubes, Cube.class);
cubesDF.write().parquet("data/test_table/key=2");
// Read the partitioned table
Dataset<Row> mergedDF = spark.read().option("mergeSchema", true).parquet("data/test_table");
mergedDF.printSchema();
// The final schema consists of all 3 columns in the Parquet files together
// with the partitioning column appeared in the partition directory paths
// root
// |-- value: int (nullable = true)
// |-- square: int (nullable = true)
// |-- cube: int (nullable = true)
// |-- key: int (nullable = true)
from pyspark.sql import Row
# spark is from the previous example.
# Create a simple DataFrame, stored into a partition directory
sc = spark.sparkContext
squaresDF = spark.createDataFrame(sc.parallelize(range(1, 6))
.map(lambda i: Row(single=i, double=i ** 2)))
squaresDF.write.parquet("data/test_table/key=1")
# Create another DataFrame in a new partition directory,
# adding a new column and dropping an existing column
cubesDF = spark.createDataFrame(sc.parallelize(range(6, 11))
.map(lambda i: Row(single=i, triple=i ** 3)))
cubesDF.write.parquet("data/test_table/key=2")
# Read the partitioned table
mergedDF = spark.read.option("mergeSchema", "true").parquet("data/test_table")
mergedDF.printSchema()
# The final schema consists of all 3 columns in the Parquet files together
# with the partitioning column appeared in the partition directory paths.
# root
# |-- double: long (nullable = true)
# |-- single: long (nullable = true)
# |-- triple: long (nullable = true)
# |-- key: integer (nullable = true)
df1 <- createDataFrame(data.frame(single=c(12, 29), double=c(19, 23)))
df2 <- createDataFrame(data.frame(double=c(19, 23), triple=c(23, 18)))
# Create a simple DataFrame, stored into a partition directory
write.df(df1, "data/test_table/key=1", "parquet", "overwrite")
# Create another DataFrame in a new partition directory,
# adding a new column and dropping an existing column
write.df(df2, "data/test_table/key=2", "parquet", "overwrite")
# Read the partitioned table
df3 <- read.df("data/test_table", "parquet", mergeSchema = "true")
printSchema(df3)
# The final schema consists of all 3 columns in the Parquet files together
# with the partitioning column appeared in the partition directory paths
## root
## |-- single: double (nullable = true)
## |-- double: double (nullable = true)
## |-- triple: double (nullable = true)
## |-- key: integer (nullable = true)
Hive metastore Parquet table conversion
When reading from Hive metastore Parquet tables and writing to non-partitioned Hive metastore
Parquet tables, Spark SQL will try to use its own Parquet support instead of Hive SerDe for
better performance. This behavior is controlled by the spark.sql.hive.convertMetastoreParquet
configuration, and is turned on by default.
Hive/Parquet Schema Reconciliation
There are two key differences between Hive and Parquet from the perspective of table schema processing.
- Hive is case insensitive, while Parquet is not
- Hive considers all columns nullable, while nullability in Parquet is significant
Due to this reason, we must reconcile Hive metastore schema with Parquet schema when converting a Hive metastore Parquet table to a Spark SQL Parquet table. The reconciliation rules are:
-
Fields that have the same name in both schema must have the same data type regardless of nullability. The reconciled field should have the data type of the Parquet side, so that nullability is respected.
-
The reconciled schema contains exactly those fields defined in Hive metastore schema.
- Any fields that only appear in the Parquet schema are dropped in the reconciled schema.
- Any fields that only appear in the Hive metastore schema are added as nullable field in the reconciled schema.
Metadata Refreshing
Spark SQL caches Parquet metadata for better performance. When Hive metastore Parquet table conversion is enabled, metadata of those converted tables are also cached. If these tables are updated by Hive or other external tools, you need to refresh them manually to ensure consistent metadata.
Columnar Encryption
Since Spark 3.2, columnar encryption is supported for Parquet tables with Apache Parquet 1.12+.
Parquet uses the envelope encryption practice, where file parts are encrypted with “data encryption keys” (DEKs), and the DEKs are encrypted with “master encryption keys” (MEKs). The DEKs are randomly generated by Parquet for each encrypted file/column. The MEKs are generated, stored and managed in a Key Management Service (KMS) of user’s choice. The Parquet Maven repository has a jar with a mock KMS implementation that allows to run column encryption and decryption using a spark-shell only, without deploying a KMS server (download the parquet-hadoop-tests.jar
file and place it in the Spark jars
folder):
KMS Client
The InMemoryKMS class is provided only for illustration and simple demonstration of Parquet encryption functionality. It should not be used in a real deployment. The master encryption keys must be kept and managed in a production-grade KMS system, deployed in user’s organization. Rollout of Spark with Parquet encryption requires implementation of a client class for the KMS server. Parquet provides a plug-in interface for development of such classes,
An example of such class for an open source KMS can be found in the parquet-mr repository. The production KMS client should be designed in cooperation with organization’s security administrators, and built by developers with an experience in access control management. Once such class is created, it can be passed to applications via the parquet.encryption.kms.client.class
parameter and leveraged by general Spark users as shown in the encrypted dataframe write/read sample above.
Note: By default, Parquet implements a “double envelope encryption” mode, that minimizes the interaction of Spark executors with a KMS server. In this mode, the DEKs are encrypted with “key encryption keys” (KEKs, randomly generated by Parquet). The KEKs are encrypted with MEKs in KMS; the result and the KEK itself are cached in Spark executor memory. Users interested in regular envelope encryption, can switch to it by setting the parquet.encryption.double.wrapping
parameter to false
. For more details on Parquet encryption parameters, visit the parquet-hadoop configuration page.
Data Source Option
Data source options of Parquet can be set via:
- the
.option
/.options
methods ofDataFrameReader
DataFrameWriter
DataStreamReader
DataStreamWriter
OPTIONS
clause at CREATE TABLE USING DATA_SOURCE
| Property Name | Default | Meaning | Scope |
|---|---|---|---|
datetimeRebaseMode |
(value of spark.sql.parquet.datetimeRebaseModeInRead configuration) |
The datetimeRebaseMode option allows to specify the rebasing mode for the values of the DATE , TIMESTAMP_MILLIS , TIMESTAMP_MICROS logical types from the Julian to Proleptic Gregorian calendar.Currently supported modes are:
|
read |
int96RebaseMode |
(value of spark.sql.parquet.int96RebaseModeInRead configuration) |
The int96RebaseMode option allows to specify the rebasing mode for INT96 timestamps from the Julian to Proleptic Gregorian calendar.Currently supported modes are:
|
read |
mergeSchema |
(value of spark.sql.parquet.mergeSchema configuration) |
Sets whether we should merge schemas collected from all Parquet part-files. This will override spark.sql.parquet.mergeSchema . |
read |
compression |
snappy |
Compression codec to use when saving to file. This can be one of the known case-insensitive shorten names (none, uncompressed, snappy, gzip, lzo, brotli, lz4, and zstd). This will override spark.sql.parquet.compression.codec . |
write |
Other generic options can be found in Generic Files Source Options
Configuration
Configuration of Parquet can be done using the setConf
method on SparkSession
or by running
SET key=value
commands using SQL.
| Property Name | Default | Meaning | Since Version |
|---|---|---|---|
spark.sql.parquet.binaryAsString |
false | Some other Parquet-producing systems, in particular Impala, Hive, and older versions of Spark SQL, do not differentiate between binary data and strings when writing out the Parquet schema. This flag tells Spark SQL to interpret binary data as a string to provide compatibility with these systems. | 1.1.1 |
spark.sql.parquet.int96AsTimestamp |
true | Some Parquet-producing systems, in particular Impala and Hive, store Timestamp into INT96. This flag tells Spark SQL to interpret INT96 data as a timestamp to provide compatibility with these systems. | 1.3.0 |
spark.sql.parquet.compression.codec |
snappy |
Sets the compression codec used when writing Parquet files. If either compression or
parquet.compression is specified in the table-specific options/properties, the precedence would be
compression , parquet.compression , spark.sql.parquet.compression.codec . Acceptable values include:
none, uncompressed, snappy, gzip, lzo, brotli, lz4, zstd.
Note that brotli requires BrotliCodec to be installed.
|
1.1.1 |
spark.sql.parquet.filterPushdown |
true | Enables Parquet filter push-down optimization when set to true. | 1.2.0 |
spark.sql.hive.convertMetastoreParquet |
true | When set to false, Spark SQL will use the Hive SerDe for parquet tables instead of the built in support. | 1.1.1 |
spark.sql.parquet.mergeSchema |
false |
When true, the Parquet data source merges schemas collected from all data files, otherwise the schema is picked from the summary file or a random data file if no summary file is available. |
1.5.0 |
spark.sql.parquet.writeLegacyFormat |
false | If true, data will be written in a way of Spark 1.4 and earlier. For example, decimal values will be written in Apache Parquet's fixed-length byte array format, which other systems such as Apache Hive and Apache Impala use. If false, the newer format in Parquet will be used. For example, decimals will be written in int-based format. If Parquet output is intended for use with systems that do not support this newer format, set to true. | 1.6.0 |
| spark.sql.parquet.datetimeRebaseModeInRead | EXCEPTION |
The rebasing mode for the values of the DATE , TIMESTAMP_MILLIS , TIMESTAMP_MICROS logical types from the Julian to Proleptic Gregorian calendar:
|
3.0.0 |
| spark.sql.parquet.datetimeRebaseModeInWrite | EXCEPTION |
The rebasing mode for the values of the DATE , TIMESTAMP_MILLIS , TIMESTAMP_MICROS logical types from the Proleptic Gregorian to Julian calendar:
|
3.0.0 |
| spark.sql.parquet.int96RebaseModeInRead | EXCEPTION |
The rebasing mode for the values of the INT96 timestamp type from the Julian to Proleptic Gregorian calendar:
|
3.1.0 |
| spark.sql.parquet.int96RebaseModeInWrite | EXCEPTION |
The rebasing mode for the values of the INT96 timestamp type from the Proleptic Gregorian to Julian calendar:
|
3.1.0 |


| # | Author | Commits | Lines added | Lines deleted | First_commit | Last commit | ||
|---|---|---|---|---|---|---|---|---|
| 1 | Michael Kovacs<EMAIL_ADDRESS>| 739 | 268490 | 43138 | November 09, 2011 18:44 | January 17, 2013 21:25 | Activity | Details |
| 2 | Alicia Liu<EMAIL_ADDRESS>| 347 | 52223 | 6371 | November 14, 2011 18:52 | May 14, 2012 12:31 | Activity | Details |
| 3 | Alicia Liu <alicialiu@alicia-mbp.(none)> | 158 | 5752 | 2448 | February 29, 2012 00:03 | May 08, 2012 00:03 | Activity | Details |
| 4 | Alicia Liu<EMAIL_ADDRESS>| 12 | 532 | 149 | January 26, 2012 14:58 | January 29, 2012 17:07 | Activity | Details |
| 5 | Alicia Liu<EMAIL_ADDRESS>| 2 | 8 | 0 | August 14, 2012 10:35 | August 14, 2012 10:35 | Activity | Details |
| 6 | rails <rails@db1.(none)> | 1 | 718 | 0 | February 01, 2012 19:43 | February 01, 2012 19:43 | Activity | Details |


Tools module (quspin.tools
)¶
Classes and functions to manipulate quantum states and do calculations.
evolution¶
ED_state_vs_time (psi, E, V, times[, iterate]) |
Calculates the time evolution of initial state using a complete eigenbasis. |
evolve (v0, t0, times, f[, solver_name, …]) |
Implements (imaginary) time evolution for a user-defined first-order ODE. |
expm_multiply_parallel (A[, a]) |
Implements scipy.sparse.linalg.expm_multiply() for openmp. |
Floquet¶
Floquet (evo_dict[, HF, UF, thetaF, VF, n_jobs]) |
Calculates the Floquet spectrum, Floquet Hamiltonian and Floquet states. |
Floquet_t_vec (Omega, N_const[, len_T, N_up, …]) |
Creates a Floquet time vector with fixed number of points per period. |
measurements¶
ent_entropy (system_state, basis[, …]) |
Calculates entanglement entropy of a subsystem using Singular Value Decomposition (svd). |
diag_ensemble (N, system_state, E2, V2[, …]) |
Calculates expectation values in the Diagonal ensemble of the initial state. |
obs_vs_time (psi_t, times, Obs_dict[, …]) |
Calculates expectation value of observable(s) as a function of time in a time-dependent state. |
block_tools¶
block_ops (blocks, static, dynamic, …[, …]) |
Splits up the dynamics of a state over various symmetry sectors. |
block_diag_hamiltonian (blocks, static, …) |
Block-diagonalises a Hamiltonian obeying a symmetry. |
misc¶
matvec (array, other[, overwrite_out, out, a]) |
Calculates omp-parallelized matrix vector products. |
get_matvec_function (array) |
Determines automatically the matrix vector product routine for an array based on its type. |
mean_level_spacing (E[, verbose]) |
Calculates the mean-level spacing of an energy spectrum. |
project_op (Obs, proj[, dtype]) |
Projects observable onto symmetry-reduced subspace. |
KL_div (p1, p2) |
Calculates Kullback-Leibler divergence of two discrete probability distributions. |
csr_matvec (A, v[, a, out, overwrite_out]) |
Calculates matrix vector products \(x += a A y\) or \(x = a A y\) with csr matrix. |


"Feminism is the radical notion that women are human beings." -Cheris Kramarae
"It has become appalingly obvious that our technology has exceeded our humanity" -Albert Einstein
"The question isn't who is going to let me,its who is going to stop me." -Ayn Rand
"Simplicity is about subtracting the obvious and adding the meaningful" -John Maeda


"Our mission is to educate the public, especially our children, about the value of a farm to table community food system that also teaches us to value the environment."
You Only Live Once — plant vegetables!
This season's seedssample text
"Our mission is to educate the public, especially our children, about the value of a farm to table community food system that also teaches us to value the environment."
You Only Live Once — plant vegetables!
This season's seedssample text


Login
{% include 'includes/_messages.html' %}
Username
Password
Login
Don't have an account? Register now.
Home Page


This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main pa`ge
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
vThis is the main page
vThis is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main pa`ge
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page
This is the main page


THE TEAM
Matthew Vargeson
David Valles
Peter Chim
Alex Wong
"We believe that reviewing notes itself is not enough to fully comprehend a concept. Having some sort of testing method is required to help solidify that understanding. Thus we created Memowise."


benchbuild.utils.path module¶
Path utilities for benchbuild.
-
benchbuild.utils.path.
list_to_path
(pathlist)[source]¶ Convert a list of path elements to a path string.
-
benchbuild.utils.path.
mkdir_interactive
(dirpath)[source]¶ Create a directory if required.
This will query the user for a confirmation.
Parameters: dirname – The path to create.
-
benchbuild.utils.path.
mkdir_uchroot
(dirpath, root='.')[source]¶ Create a file inside a uchroot env.
You will want to use this when you need to create a file with apropriate rights inside a uchroot container with subuid/subgid handling enabled.
Parameters: - dirpath – The dirpath that should be created. Absolute inside the uchroot container.
- root – The root PATH of the container filesystem as seen outside of the container.
-
benchbuild.utils.path.
mkfile_uchroot
(filepath, root='.')[source]¶ Create a file inside a uchroot env.
You will want to use this when you need to create a file with apropriate rights inside a uchroot container with subuid/subgid handling enabled.
Parameters: - filepath – The filepath that should be created. Absolute inside the uchroot container.
- root – The root PATH of the container filesystem as seen outside of the container.
-
benchbuild.utils.path.
path_to_list
(pathstr)[source]¶ Conver a path string to a list of path elements.


US national security officials objected to stopping Ukraine aid
Democrats release new batch of testimony from Trump impeachment inquiry before public hearings.
The view among the national security officials was unanimous: Military aid to Ukraine should not be stopped. But the White House's acting chief of staff thought otherwise.
That was the testimony of Laura Cooper, a Defense Department official, whose deposition was released Monday in the House impeachment inquiry of President Donald Trump.
"My sense is that all of the senior leaders of the US national security departments and agencies were all unified in their - in their view that this assistance was essential," she said. "And they were trying to find ways to engage the president on this."
More:
-
Trump impeachment inquiry: Pence aide testifies; Bolton a no-show
-
Trump impeachment inquiry: Public hearing schedule
-
Read the redacted whistle-blower complaint involving Trump
Cooper's testimony was among several hundred pages of transcripts released Monday, along with those of State Department officials Catherine Croft and Christopher Anderson.
Cooper told investigators that, in a series of July meetings at the White House, she came to understand that Trump's acting chief of staff, Mick Mulvaney, was holding up the military aid for the US ally.
"There was just this issue of the White House chief of staff has conveyed that the president has concerns about Ukraine," she testified.
When she and others tried to get an explanation, they found none.
"We did not get clarification," she said.
She said it was "unusual" to have congressional funds suddenly halted that way, and aides raised concerns about the legality of it. The Pentagon was "concerned" about the hold-up of funds and "any signal that we would send to Ukraine about a wavering in our commitment", she said.
Cooper told investigators that she was visited in August by Kurt Volker, the US special envoy to Ukraine, who explained there was a "statement" that the Ukraine government could make to get the security money flowing.
It was the first she had heard of the quid pro quo that is now the central question of the impeachment inquiry - the administration's push for the Ukraine government to investigate Trump's political rivals.
"Somehow, an effort that he was engaged in to see if there was a statement that the government of Ukraine would make," said Cooper, an assistant defence secretary, "that would somehow disavow any interference in US elections and would commit to the prosecution of any individuals involved in election interference."
The House is investigating whether Trump violated his oath of office by pushing Ukraine's president to investigate Democrats, including Joe Biden, while the administration was withholding military funds for the East European ally.
Cooper described the Ukraine Security Assistance Initiative, saying it involved a range of items such as night-vision goggles, vehicles, sniper rifles and medical equipment.
"Security assistance is vital to helping the Ukrainians be able to defend themselves," Cooper said.
Because Ukraine and Georgia are two "front-line states" facing Russian aggression, the US needed to "shore up these countries' abilities to defend themselves".
"It's in our interest to deter Russian aggression elsewhere around the world," she said.


Purpose
A view to visualize the AST (abstract syntax tree) of a Java
file open in the editor. Navigate from text selection to AST nodes and
from nodes to selections. Show bindings and compare them.
Install
Update Site:
-
http://www.eclipse.org/jdt/ui/update-site
Manual Install:
Usage
- Open the AST view
- from the view menu: Window > Show View > Other..., Java > AST View
- via shortcut: Alt+Shift+Q, A
- Open a Java file in the editor
- Click on 'Show AST of active editor' ( ) to
populate the view: The view shows the AST of the file opened in the
editor and will also reveal the element corresponding to the current
text selection
- Enable 'Link with editor' () to
automatically track the active editor and the selection in the active
editor.
- Double click on AST nodes to get the corresponding element
revealed in the editor.
- Double click again to see the 'extended range' of a node,
that means the range including all comments associated with it (comment
mapper heuristic).
- Open the context menu on a binding to add it to the comparison tray
- When the AST's underlying document has been changed use
'Refresh' () to update the AST.
AST View Elements
The AST view shows the following nodes:
- AST nodes are shown in gray color and with source range
information. Children of AST nodes are the node properties.
- node properties have names that are all all capitalized.
Node properties represent lists of child nodes, a child node or a
primitive node attribute (String, int or boolean)
- bindings are shown in blue. Only selected bindings are
shown
Advanced Features
- You can toggle between the AST Level 2 and AST level 3 in
the view menu (triangle). AST level 3 is the extended and modified AST
that includes the new 5.0 language constructs. Note that the AST level
3 is only available in 3.1 and later builds
- You can choose to show or hide bindings in the view menu
- You can choose the method to generate an AST in 'Advance Options' in the view menu
- You can choose 'Add to Comparison Tray' in the context menu of a binding.
This moves the binding to a special area in the view. When you select another binding
in the tree, the comparison tray shows various relationships between the selection
and the chosen binding
Comments and Requests
Thanks and credits go to Christian Hauser: The current AST view plugin
is based his AST view implementation from the Zuerich Code Camp. Thanks
a lot!
Markus Keller has helped absorbing AST changes and implemented more features.


WITNESS LIST Corrections Committee March 13, 2001-2:00P HB 223 Against: DeLuca, Stuart (Self) HB 772 Against: Green, Dana (Self and Restful Acres Care Center) On: Kifowit, Dee (Tx. Council on Offenders with Mental Impairments) Registering, but not testifying: For: Harrell, William (ACLU of Texas; NAACP of Texas) Henson, Scott (ACLU) Mizcles, Amy (National Alliance for the Mentally Ill) On: Gibson, Mary Lou (Texas Comptroller's Office) Yarbrough, Linda (Texas Comptroller's Office) HB 859 For: Foster, Arlan (Self and AFSCME Correction Council 7) Hill, Dan (Sun Healthcare Group) Lennox, M.D., David (Sun Healthcare Group) Moore, Michael (Detention Specialists, Inc.) On: Hightower, Allen (Correctional Managed Health Care Committee) Sapp, Allen (Correctional Managed Health Care Committee) Scott, Wayne (Texas Department of Criminal Justice) Registering, but not testifying: For: Harrell, William (ACLU of Texas; NAACP of Texas) Henson, Scott (ACLU) On: Jessee, Gary (Texas Department on Aging) Kifowit, Dee (Tx. Council on Offenders with Mental Impairments) HB 1238 For: DeLuca, Stuart (Self) Hart, Susan (Self) Keenan, Barry (Self) Rayfield, Penny (Self) Against: Macha, Barry (Self) McCormick, Kelley (Brazoria County Criminal District Attorney) Registering, but not testifying: For: Harrell, William (ACLU of Texas; NAACP of Texas) Mizcles, Amy (National Alliance for the Mentally Ill of Texas) Woodford, Suzy (Self and Common Cause Texas) HB 1314 For: Roper, Helga (Self) On: Scott, Wayne (Texas Department of Criminal Justice) Registering, but not testifying: For: Mizcles, Amy (National Alliance for the Mentally Ill of Texas) HB 1658 On: Scott, Wayne (Texas Department of Criminal Justice) HB 1659 On: Scott, Wayne (Texas Department of Criminal Justice) Overview of TDCJ Population Trends On: Fabelo, Dr. Tony (Criminal Justice Policy Council) Scott, Wayne (Texas Department of Criminal Justice)


At least four dead in Sicily firework depot explosion
by AFPROME: At least four people died Wednesday in an explosion at a fireworks factory in Sicily, firefighters said after the incident at the family-run firm.
The late afternoon blast immediately killed two workmen and the 71-year-old wife of the owner of the Costa company in Barcellona Pozzo di Gotto, in Sicily’s Messina region.
The owner’s son was one of four people hurt and was taken to hospital in the island’s capital Palermo with serious injuries.
One of the injured, whose name was not given, later succumbed to their injuries in hospital.
Firefighters managed to extricate one employee who was inside the depot at the time of the explosion but were still searching for one of his colleagues who was reported missing.
The local prosecutor’s office opened an enquiry into the disaster.
Staff were preparing for New Year celebrations comprising traditional firework displays across the south of Italy designed to chase away evil spirits.
Preparations for such displays, a tradition dating back to 1540, annually see a number of fatal incidents.


Celebrate Kutch's wildlife and natural heritage with the Kutch Wildlife Week 2021 competitions.
Photography
Submit up to 2 photos.
Themes:
- Wildlife of Kutch
Submit by 5 Oct 2021 9PM
Submit Entry Here
Artwork
Drawing or painting (A3 size)
Themes:
- Wildlife and its habitat
- Save environment to save wildlife
Submit between 10AM to 12PM on 5 Oct 2021 at:
Office of Deputy Conservator of Forests, Kutch West Division, Arihantnagar Road, Bhuj.
Place of Exibition & Result Declaration
Exhibition from 10am to 1pm, 7-8 October
Van Chetna Kendra, B. Ed College Road, Bhuj
Guidelines
- Each photographer can submit 2 maximum photograph.
- Photograph must be taken in Kutch.
- Photographs should be submitted in JPG format with a minimum resolution of 3000 pixels on the larger side.
- Photos should be sent with details of date, place of photography and name of species.
- To maintain uniformity, watermark or name of photographer should not be mentioned on photograph.
- Drawings must be A3 size or larger.
- Selected photographs will be exhibited by the department.
- The decision of the department for selection will be final.
- Photos should be submitted to www.KutchWildlifeWeek.com by Oct 5 9PM.
- Artwork should be submitted at Office of Deputy Conservator of Forests, Kutch West Division, Arihantnagar Road, Bhuj by 12PM noon on Oct 5.
- Prize distribution will be for three positions in both photography and artwork.
- Best 3 photographs and artworks will be awarded by the department on 06-10-2021, which will be selected by the committee of experts formed by the department.
- All participants will receive a certificate.
- Prizes will be distributed on Oct 7, at 11AM at the Exhibition.
- The copyright of all the photographs will be held by the photographer and the Kutch (West) Forest Division. Kutch (West) Forest Division will be free to use the photos wherever and whenever required.
- The department shall have the right to exhibit and use the submitted photos with due photo courtesy given to the photographer.
Organized by


37
If-Else Ambiguity
A shift-reduce conflict that frequently occurs involves the
if-else
construct. Assume we have the
following rules:
stmt:
IF expr stmt
| IF expr stmt ELSE stmt
...
and the following state:
IF expr stmt IF expr stmt . ELSE stmt
We need to decide if we should shift the
ELSE
or reduce the
IF expr stmt
at the top of the stack.
If we shift then we have
IF expr stmt IF expr stmt . ELSE stmt
IF expr stmt IF expr stmt ELSE . stmt
IF expr stmt IF expr stmt ELSE stmt .
IF expr stmt stmt .
where the second
ELSE
is paired with the second
IF
. If we reduce we have
IF expr stmt IF expr stmt . ELSE stmt
IF expr stmt stmt . ELSE stmt
IF expr stmt . ELSE stmt
IF expr stmt ELSE . stmt
IF expr stmt ELSE stmt .
where the second
ELSE
is paired with the first
IF
. Modern programming languages pair an
ELSE
with the most recent unpaired
IF
. Consequently the former behavior is expected. This works well
with yacc because the default behavior, when a shift-reduce conflict is encountered, is to shift.
Although yacc does the right thing it also issues a shift-reduce warning message. To remove the
message give
IF-ELSE
a higher precedence than the simple
IF
statement:
%nonassoc IFX
%nonassoc ELSE
stmt:
IF expr stmt %prec IFX
| IF expr stmt ELSE stmt


Thanks for updating your WiFi info! Don't forget to install our Alexa Skill.
Please update your WiFi info below and install our Alexa Skill.
WiFi Network:
WiFi Password:
© 2017 Neal Shyam


Israel welcomes U.S. reversal on settlements as Palestinians fume
Israel on Monday welcomed the U.S. decision to no longer view its settlements in areas captured in 1967 as illegal, but said that it would . remain ready to negotiate a final status agreement with Israel
Netanyahu also maintained that the settlements were a matter to be decided by the Israeli courts.
“Israel’s legal system, which has proven itself fully capable of addressing legal questions related to the settlements, is the appropriate place for these matters to be adjudicated - not biased international forums that pay no attention to history or facts,” he wrote.
The comments came shortly after Secretary of State Mike Pompeo announced on Monday that the U.S. is softening its position on Israeli settlements in the occupied West Bank, the latest in a series of Trump administration moves that weaken Palestinian claims to statehood.
Pompeo said the U.S. repudiates a 1978 State Department legal opinion that held that civilian settlements in the occupied territories are “inconsistent with international law.”
The move angered Palestinians and was likely to put the U.S. at odds with other nations working to end the conflict.
Palestinian Authority spokesman Nabil Abu Rudeinah condemned the U.S. move as “unacceptable,” the Israeli media reported.
Abu Rudeineh said Pompeo’s announcement “totally contradicts international law and resolutions that reject settlements.”
He urged the international community to disregard Pompeo’s “illegal” pronouncement, which he said was a threat to international peace and security.
PLO chief Saeb Erekat also slammed the announcement by Pompeo, saying that the Trump administration has “completely lost all credibility and no longer has any role in the peace process,” the Jerusalem Post reported.


C++ Interface
The C++ interface to the Zoltan library is contained in the header files
listed below.
Each header file defines one class. Each class represents a Zoltan
data structure and the functions that operate on that data structure.
The class methods in the header files call functions in the Zoltan C library.
So to use the C++ interface from your application, include
the appropriate header file and link with the Zoltan C library.
| header file | class |
| include/zoltan_cpp.h |
Zoltan, representing a
load balancing instance |
| Utilities/Communication/zoltan_comm_cpp.h |
Zoltan_Comm, representing an
unstructured communication instance |
| Utilities/DDirectory/zoltan_dd_cpp.h |
Zoltan_DD, representing a
distributed directory instance |
| Utilities/Timer/zoltan_timer_cpp.h |
Zoltan_Timer, representing a timer instance |
More detailed information about the interface may be found in the
Zoltan Developer's Guide.
Simple examples of the use of the interface may be found in the
examples/CPP directory. A more complete example is the
test driver zCPPdrive. The
source code for this test driver is in the driver directory.
A note on declaring application registered query functions from a
C++ application may be found in the section titled
Application-Registered Query Functions.
Two peculiarities of the wrapping of Zoltan with C++ classes are
mentioned here:
-
You must call the C language function
Zoltan_Initialize
before using the C++ interface to the Zoltan library. This function should only
be called once. Due to design choices,
the C++ interface maintains no global state that is
independent of any instantiated objects, so it does not know if the
function has been called or not. Therefore, the C++ wrappers do not call
Zoltan_Initialize
for you.
-
It is preferable to allocate Zoltan objects dynamically so you can
explicitly delete them before your application exits.
(Zoltan objects allocated instead on the stack will be deleted
automatically at the completion of the scope in which they were created.)
The reason is that the Zoltan
destructor calls Zoltan_Destroy(), which makes an MPI call to free
the communicator in use by the Zoltan object. However the
MPI destructor may have been called before the Zoltan
destructor. In this case you
would receive an error while your application is exiting.
This second point is illustrated in the good and bad example below.
int main(int argc, char *argv[])
{
MPI::Init(argc, argv);
int rank = MPI::COMM_WORLD.Get_rank();
int size = MPI::COMM_WORLD.Get_size();
//Initialize the Zoltan library with a C language call
float version;
Zoltan_Initialize(argc, argv, &version);
//Dynamically create Zoltan object.
Zoltan *zz = new Zoltan(MPI::COMM_WORLD);
zz->Set_Param("LB_METHOD", "RCB");
//Several lines of code would follow, working with zz
//Explicitly delete the Zoltan object
delete zz;
MPI::Finalize();
}
|
Good example, Zoltan object is dynamically allocated
and explicity deleted before exit.
int main(int argc, char *argv[])
{
Zoltan zz;
MPI::Init(argc, argv);
int rank = MPI::COMM_WORLD.Get_rank();
int size = MPI::COMM_WORLD.Get_size();
//Initialize the Zoltan library with a C language call
float version;
Zoltan_Initialize(argc, argv, &version);
zz.Set_Param("LB_METHOD", "RCB");
//Several lines of code would follow, working with zz
MPI::Finalize();
}
|
Bad example, the MPI destructor may execute before the
Zoltan destructor at process exit.
[Table of Contents |
Next: Fortran Interface
| Previous: Zoltan Usage | Privacy and Security]


My Profile
Danny, 32
Barcelona, Spain
82% profile complete
Edit Profile
Update your info and get more visits
Settings
What are you looking for?
View All
0 Spotlights
0 Arrows
GO UNLIMITED


{% extends "../base.html" %} {% block content_block %}
Take some time to think about your answers on this form. They'll give us an understanding of how we can help you with your career.
We need to know your age so that we give you information on things that you're eligible for. For example, funding schemes for certain age groups.
We need to know which area you live in so that we give you local information and advice.
Give us as much detail as possible about your query. It'll help us get back to you quickly and accurately.


Towards Better Funds Management
This is a webpage platform that gives you a chance to manage your spending habits
We bring all your money to one place, from balances and bills to loans and more.
BALANCE
| Item Description | Amounts |
|---|---|
| Total |


🎶 Connect with Last.fm 🎵
Click the button below to connect your lyrix account with Last.fm ✨
Connect with Last.fm


| Desktop Appraisals | ||
|---|---|---|
| 1st Valuation | US 1580. | Choose Current, Past, or Future Valuations, Residual Value Projections, Fair Market Values, Liquidation Values, Replacement Cost New or Reproduction Cost New. |
| 2nd-5th Valuation | US 1280.00 | |
| 6th and Additional valution | US 500.00 |
| 1st valuation | 1580 |
| 2-5 valuations each | 1280 |


What happens if my opponent’s card tries to move damage counters onto one of my other characters?
Motormaster’s ability won’t affect any card that tries to move damage counters from one character to another. That doesn’t count as dealing damage. (The damage was already dealt. It’s just moving.)
Does Motormaster’s ability have any effect on my own cards?
No. Your cards can still do damage to your other characters. (Although they hope you have a good reason for doing that.)
Can I choose an untapped Stunticon to defend, even if I have other tapped Stunticons?
Yes. You can choose any Stunticon to defend, ignoring abilities like brave and stealth, and ignoring which characters are tapped and untapped.
Does Motormaster take the damage with his Alt Mode effect?
Motormaster takes damage that would normally be dealt to him, but does not take damage meant for other characters.