text:
namespace Data
{
	class CParams;
}

class dtQueryFilter;
struct dtObstacleAvoidanceParams;
typedef dtObstacleAvoidanceParams COAParams;

namespace AI
{
#define AISrv AI::CAIServer::Instance()

class CAIServer: public Core::CObject
{
	RTTI_CLASS_DECL(AI::CAIServer, Core::CObject);
	__DeclareSingleton(CAIServer);

private:

	CPlanner							Planner; //???or singleton?
	CDict<CStrID, CSmartAction>			SOActTpls;
	CDict<CStrID, dtQueryFilter*>		NavQueryFilters;
	dtQueryFilter*						pDebugFilter;
	CDict<CStrID, COAParams*>			ObstacleAvoidanceParams;
	CPathRequestQueue					PathQueues[DEM_THREAD_COUNT];

public:

	CAIServer();
	~CAIServer();

	void					Trigger();

	void					AddSmartAction(CStrID ID, const Data::CParams& Desc);
	const CSmartAction*		GetSmartAction(CStrID ID) const;

	void					AddNavQueryFilter(CStrID ID, const Data::CParams& Desc);
	const dtQueryFilter*	GetNavQueryFilter(CStrID ID) const;
	const dtQueryFilter*	GetDefaultNavQueryFilter() const { return GetNavQueryFilter(CStrID::Empty); }
	const dtQueryFilter*	GetDebugNavQueryFilter() const { return pDebugFilter; }

	void					AddObstacleAvoidanceParams(CStrID ID, const Data::CParams& Desc);
	const COAParams*		GetObstacleAvoidanceParams(CStrID ID) const;
	const COAParams*		GetDefaultObstacleAvoidanceParams() const { return GetObstacleAvoidanceParams(CStrID::Empty); }

	CPathRequestQueue*		GetPathQueue(UPTR ThreadID = 0) { n_assert(ThreadID < DEM_THREAD_COUNT); return PathQueues + ThreadID; }

	CPlanner&				GetPlanner() { return Planner; } //???or singleton?
	static PAction			CreatePlanFromDesc(Data::PParams Desc);
};

inline const dtQueryFilter* CAIServer::GetNavQueryFilter(CStrID ID) const
{
	IPTR Idx = NavQueryFilters.FindIndex(ID);
	return Idx != INVALID_INDEX ? NavQueryFilters.ValueAt(Idx) : nullptr;
}
//---------------------------------------------------------------------

inline const COAParams* CAIServer::GetObstacleAvoidanceParams(CStrID ID) const
{
	IPTR Idx = ObstacleAvoidanceParams.FindIndex(ID);
	return Idx != INVALID_INDEX ? ObstacleAvoidanceParams.ValueAt(Idx) : nullptr;
}
//---------------------------------------------------------------------

}

#endif

redpajama_set_name: RedPajamaGithub


text:
Ryan Gomez Runs for Orleans Parish Democratic Executive Committee
July 3, 2020 By Frank Perez
Ryan Gomez, a fixture in the LGBT+ New Orleans community, is running for a seat in District "B" on the Orleans Parish Democratic Executive Committee (OPDEC). Early voting is now open. Election day is July 11.
The OPDEC holds general responsibility for local Democratic Party affairs, reports to State and National Committees, endorses local candidates, builds party infrastructure, and engages in fundraising
Gomez describes himself as "left-wing because I'm fighting for a more joyful and connected world. While I haven't always been a "Democrat," and have abundant qualms with my fellow Democrats, I do believe that the party's progressive ideals are the best compass for a better future. They're simply my team, and conveniently, Democrats have a large presence in New Orleans. I try not to take myself too seriously, but I'm lucky to have grown up around politics. Few people have the patience for silly games. National news seems geared to selling national media and local politics, intentionally and by accident, has its own mazes and foxholes. Since fools rush in where angels fear to tread, the best way I know to learn more about something is by participating in it. Please vote for me so I can report to you my discoveries found through holding public office."
For more information, visit https://ryanrepresents.com/running-for-office/
Gay Carnival at the Historic New Orleans Collection
Prospect 4: The Lotus in Spite of the Swamp

redpajama_set_name: RedPajamaCommonCrawl


text:
June was the driest in Cornwall for more than 40 years
This summer has been one of the best for many years in Cornwall
Debora Aru
Anita Merritt
11:42, 11 AUG 2018
It has been confirmed that June was the driest in Cornwall for more than 40 years.
Data from the Environment Agency (EA) shows the last time the region had less rain during the month was in 1975.
Millie and Jessica from Stoke-on-Trent make the most of their last day of holiday in St Ives by floating around on their inflatable doughnuts at Porthmeor (Image: Greg Martin)
There was an average of just 14 millimetres of rainfall across Devon and Cornwall in June.
It is just 21 per cent, or less than a quarter, of what would normally be expected.
The rain that did fall during June was sporadic and fell at the beginning of the month, in the middle, and on June 30, the EA said.
Today's Cornwall weather hour by hour - and a look ahead
River water flow ranged from 'normal' to 'notably low' during the month, with flows dropping, responding to the mid-month rain, and then dropping again.
Groundwater levels also dropped as a result of the dry spell.
The amount of water in reservoirs fell from 94 per cent to 83 per cent during June across Devon and Cornwall.
For much of England and Wales, this June ranked among the five driest since records began in 1910.
Power cuts in Cornwall leave homes with no electricity all night
The driest June ever was in the 1920s when just three millimetres of rain fell in some parts of the country.
The EA said there was currently no cause for concern as most rivers and groundwater levels were at normal levels before the start of June.
Paul Hickey, deputy director of the EA, said: "A natural reduction in river flows and groundwater at this time of year is to be expected and water companies plan for warm months.
"There are no water use restrictions in place, however, it is always helpful to follow water company advice and use water wisely.
"At this time of the year, the Environment Agency is always ready to respond to pressure on rivers caused by low flows and we continue to monitor the situation."
Cornwall's most Cornish traditions
Helston Flora Day
Mazey Day
May Fair celebrations
Things to do in Cornwall before you die
June this year was also one of the UK's warmest Junes since 1910, and the fourth sunniest behind 1975, 1957 and 1940.
The Met Office has said the position and strength of the jet stream, otherwise known as the air currants in the atmosphere, has played a major part in the hot, settled weather the year.
Global warming could also be a reason why the weather is becoming more extreme.
CrimeThief breaks through shop roof and smashes up cash machine
£2,000 had been put in the machine earlier that day


My goal is to make waxing as comfortable as possible while producing the smoothest results. For that reason I do not employ a "speed waxing" method, which tends to cause more discomfort and leaves behind hair. Waxing is not pain free, but the technique that I use will cause less trauma on the skin and leave you smooth and clean for a longer period of time.
Hair growth should be between a 1/4 inch - 1/2 inch long. Any shorter than that the wax will not be able to grab sufficiently enough and you will be left with hairs. If your hair is longer than a 1/2 inch I will trim it during the appointment. Please do not attempt to trim it yourself or it may end up being too short for me to wax.
Tanning can cause skin sensitivity, tanning before getting waxed can make your skin inflamed or scabby if you get waxed too soon. Because waxing exfoliates, tanning shortly after your treatment can cause burns and skin pigmentation.
To get the best results you should exfoliate the area the day before your appointment in the bath or shower using a loofah, body scrub or exfoliating mitt, this will remove any dead skin cells and lift the hairs ready for waxing.
On the day of your treatment avoid applying any body lotion to the area as this could prevent the wax from attaching to the hairs.
Shaving and hair removal creams stimulate the hair growth making it come back quicker, thicker and darker and will knock the "hair growth cycle" out of sync, so please don't be tempted to use these in between appointments – be patient and it will really pay off.
Brazilian waxing re-scheduled within 4-6 weeks of initial appointment is $10.00 less. See "Brazilian Maintenance" for online booking.
To prevent ingrown hairs, after your skin has calmed down, gently exfoliate the skin 2-3 times a week in the bath or shower using a loofah, body scrub or exfoliating mitt. Moisturizer used regularly keeps the skin soft and will prevent the hairs from breaking during a waxing treatment.
It is ok to get waxed during your period (a clean tampon is a must). Be aware that the increased hormones women have during their menstrual cycle may make the bikini area more sensitive. If you have any questions please feel free to contact me.
Waxing is contraindicated if using Accutane, Retinoids, and Blood Thinner medications.


text:
Published: 11th May 2020
Defeating COVID: How the Indian economy can bounce back to shape after the lockdown ends
Is FDI the way to go or should we be printing money? Which are the sectors that need our attention? We spoke to economists who found solutions to some of the major dilemmas India is in right now
Prajanma Das
Edex Live
India had started the lockdown earlier than most countries and some studies even dubbed it the strictest lockdown. But we might not have managed it too well (Pic: PTI)
The Indian economy was not doing well even before the Coronavirus pandemic and an impending economic crisis was already knocking on our doors. We all agree that India needs to get back on its feet but the way forward is a debate that has been on for quite some time. While the Modi government has made a case for attracting more investment, economists like Nobel laureate Abhijit Banerjee said that the government should concentrate on providing cash transfers to the bottom 60 per cent of the population to revive the economy.
Moody's Investors Service on May 8 said it has estimated India's GDP growth will hit 'zero' in FY21, and pointed to a wide fiscal deficit, high government debt, weak social and physical infrastructure, and a fragile financial sector as the reasons. While bouncing back to normal is not possible in one shot, economists agree that the way ahead is creating demand by putting money in people's hands and simultaneously starting the supply chain. "The pandemic has hit both the supply and the demand side. The supply side was hit when the factories stopped working and the demand because people have either lost jobs or suffered pay cuts in both the unorganised and the organised sector," said Dr Anamitra Roy Chowdhury, Assistant Professor at the Centre for Informal Sector and Labour Studies, School of Social Sciences, JNU. "What started with the labourers losing their livelihood has not stopped there — people have lost jobs in the media, private sector employees have suffered pay cuts and the government has also said that it might not pay the dearness allowance going forward. The longer the lockdown is extended the more these problems will intensify," he added.
India had started the lockdown earlier than most countries and some studies even dubbed it the strictest lockdown. But we might not have managed it too well. "There is a narrative that is coming up quite often which is lives versus livelihood. It should rather be lives and livelihood. We have seen an example across the world that it is possible," said Dr Partha Chatterjee a Professor of Economics at the Shiv Nadar University. "There will be major structural changes. We will be rethinking the whole process. The consumer's behaviour will also change. While we might not get back to what we knew as normal a few months back we will get to a steady-state that we will call the new normal. There is no question that the government needs to be involved in a big way in this makeover — they have to think about every detail from industries to services to agriculture and within that the geographic distributions. We also have to think about the humanitarian side of it because everyone has been impacted," he added.
While the government has said, time and again, that they will provide support for the marginalised sections of the society, there has been criticism that the support is not enough. Speaking at a webinar, Former RBI Governor Duvvuri Subbarao said that the government announced the fiscal support package of 0.8 per cent of the GDP which is insufficient. "It was announced on March 26. It looks even lesser now. In fact, the government needs to spend more. The first item of expenditure is to enlarge and expand the livelihood support," he said. "The government needs to cover more households, give more per household and give for much longer per household. That is the first challenge on the government expenditure," he added.
The consumption reshuffle
If we look at the Indian data before the COVID crisis, the consumption of transportation would have increased four times and that of food would have doubled in the next decade, said Dr PG Babu, Director of the Madras Institute of Development Studies. "It would have surpassed even China in these two factors. But now things will of course change — we are cutting down on transport and there is a general fear factor even though the official numbers are less than a lot of other countries. If that persists, it will definitely change our consumption of goods and services. Our everyday consumption has a big element of a social aspect to it. A large part of that consumption can be given up. This might lead to huge economic losses," he said. "If people are scared to come back to work that too will have detrimental effects. The migrant labourers had not received proper help from the government and this might lead to a lack of trust among them. This, in turn, can affect their decision to come back to work. If they do not come back, that will drive the wage rates up and the consequently increase the cost of production," he added.
Economists have time and again suggested a 'stimulus package' that the government should come up with to help the people and the economy to get back on their feet. But how should it be delivered is the big question. One prescription for all won't work, said Dr Chatterjee. "Even something like a universal income or a direct transfer won't help if it is the only approach. Look at the migrants — we do not even know where they are or if they have access to bank accounts even if they have them? In the very little financial package announced the government had allocated a sun for the workers but who has got it? How was it disbursed? The details are not there," he said. "Immediately, the government needs to figure out how to strengthen the already resistant Public Distribution System (PDS). The network is strong and is spread all over the country. We can make it universal. There is not to lot to worry about people taking advantage of this to misuse the system. The next are the small and medium businesses. While it is not easy to reach them because a lot of them are not registered, the government can offer loans without interest or with a low rate of interest for them to start their businesses again. It would be probably easier to reach them through the banks and give them access to funds," Dr Chatterjee added.
Providing aid at this point not only has economic repercussions but should be done on humanitarian grounds, said Dr Roy Chowdhury. "We need to provide people with financial aid immediately. How to finance this can be varied. The government can come up with a surcharge on certain items — which they already have — print money or even come up with government bonds that can finance this aid," he said.
Solving unemployment
But can we trust that the government will be able to provide for the poor of this country? Economist Dr Amit Bhaduri not only believes that the government cannot, at this point, arrange for monetary aid for the workers, he believes that cash transfers might not be the way to go. "I also do not believe in cash transfers. If the government cannot arrange for the workers to go back home how are they going to guarantee a minimum wage for them?" he asked and suggested, "As far as urban unemployment is concerned, one important thing that has not been talked about is to at least to go from one shift to double shifts. This will immediately double the number of jobs. Without purchasing power, the economy cannot pick up neither will it prosper just by giving money to the Adanis and Ambanis," said Dr Bhaduri.
While the rural areas have lot more employment generation schemes, it is time the urban areas might need that too. Will an unemployment guarantee scheme work in the urban areas as well? "Something like this might work. Except there is a big difference — the urban governance in India is not as streamlined as the rural governance or the Panchayat system. It's a lot more complicated and thus managing this will be more difficult. We do probably need an MGNREGA kind of a scheme but the government needs to sit down and figure out how to implement that," said Dr Chatterjee.
Get to the mint
Another aspect that comes up is funding these many schemes might not be possible for the government right now. Dr Bhaduri suggested that the government should print notes to fill in the gap and since we have enough stock of food grains for at least three to four months and this will not lead to a situation where we have more money but fewer goods — there is no fear of huge inflation soon. "The first thing they can do is monetise their deficits. Rather than borrowing from the market they can do deficit financing and take to printing notes provided they spend it on employment guarantee and decentralising rural areas and so on," he added.
While there might not be inflation looming over us but there are other challenges to printing money, pointed out Dr Chatterjee. "The trick is to ensure that the government financers will be back in the market within a reasonable amount of time. Otherwise, there can be a run in the country in terms of the money going up, exchange rates falling to abysmal levels etc. Right now no one would mind the government spending more if they have a reasonable plan to get back on track soon. But where is that plan?" asked the professor.
Setting priorities
Now might also be the best time to provide financial aid or the 'stimulus package', feels Dr Babu. "Now that the government has allowed shops to open up we would see more demand if they have money in their hands. When everything was closed, giving money to people might not have helped as they would not have anything to buy. But this is certainly the time to start putting some many in people's hands," he said. "The government should also spend money in sectors which were predicted to grow. For example, infrastructure like roads and highways. If the government invested there, it would have a huge backward linkage. Maybe this is the time to invest more in health as well. Education too is a sector that would benefit from increased government spending. These are all public goods that the government can spend on and they have proven to have growth effects as well. If we are setting priorities, it is in these sectors," Dr Babu added.
To attract or not to attract FDI
The Indian government has recently harped on the benefits of attracting foreign investment more than anything. But is FDI our way out of the economic rut that we are in right now? "FDI will not make any difference to the country. It's only lobbies which talk about FDI going up or down," said Dr Bhaduri. Economists have criticised the government's affinity towards FDI and said that this cannot be the way out of the crisis. "FDI will not help us. Even before the crisis, we were in a downslope for quite some time. I don't see any signs of an overnight change. Slogans like Make In India have remained slogans. We never put much content into that. If that plan did not work there is no reason why it will work now," added Dr Babu.
There are risks of investment as well and at a time like this, the risks have aggravated. "Why will an investor put money where there is not a market? There is no guarantee of a free flow of labour or input. Who would want to invest in a new place? Moreover, this will take a long time and we also need a market for the products that the FDI will generate. Do we have a market for that?" asked Dr Roy Chowdhury.
The government needs to analyse things like a business here, said Dr Chatterjee. "They need to think like a business. Figure out who the competitors are, their strengths versus our strengths. Why would some investor choose us? A good country to compare us with is Vietnam. The population is not negligible and the development stage there are in is in some ways similar to India's. The big difference is their school education is free and compulsory. They have also managed the crisis nicely. It is not because it is a non-democratic country but the same has happened in Taiwan and South Korea. It is more about the planning which we lack. I would like to see the plans the government has for us to use FDI to come out of this. But where is it?" asked Dr Chatterjee.
What then is the way forward?
India will have to come up with a phased plan to revive the economy that is now being predicted to contract in the recent future. While the first step can be providing a stimulus package and driving the supply side simultaneously, it cannot stop at that. India needs to revisit its priorities and invest more in sectors that can drive its growth in the times to come. While FDI is good for the long run, it cannot be the only weapon in the one pronged attack to this economic crisis, agree the experts. Printing money to finance the deficit is the way to go now and that will not cause any immediate inflation as we have stocks. We won't fall short on supply soon. The government is set to announce its second economic stimulus package this week and is predicted to offer support to MSMEs and workers along with some reforms.
Therein lies the answer to a complex question. Until then, there's going to be very little paisa vasool.
Economy Coronavirus COVID-19 FDI Stimulus


text:
Q: Extracting embeddings of categorical features back to original data frame in Python Suppose I have a dataframe with several numerical variables and 1 categorical variable with 10000 categories. I use a neural network with Keras to get a matrix of embeddings for the categorical variable. The embedding size is 50 so the matrix that Keras returns has dimension 10002 x 50.
The extra 2 rows are for unknown categories and the other one I don't know exactly - it's the only way Keras would work, i.e.,
model_i = keras.layers.Embedding(input_dim=num_categories+2, output_dim=embedding_size, input_length=1,
                            name=f'embedding_{cat_feature}')(input_i)

without the +2 it would not work.
So, I have a training set with ~12M rows and validation set with ~1M rows.
Now, the way I thought of reconstructing the embeddings was:

*

*having a reversed dictionary with numerical values (which were encoded before to represent the categories) as keys and the category names as values

*Add 50 NaN columns to the data frame

*for i in range(10002) (which is the number of categories + 2) look for the corresponding value of key i in the reversed dictionary and if it is in the dictionary, using pandas .loc, replace each row (in those 50 NaN columns) that correspond to the value of i (i.e., where the categorical variable is equal to the category name which i is encoded for) with the corresponding row vector from the 10002 x 50 matrix.

The problem with this solution is that it's highly inefficient.
A friend told me about another solution which consists of converting the categorical variable to a one-hot sparse matrix with dimensions 12M x 10000 (for the training set), and then use matrix multiplication with the embeddings matrix which should have dimensions 10000 x 50 thus getting a 12M x 50 matrix which I can then concatenate to my original data frame. The problems here are:

*

*It won't work on the validation set because the number of categories appearing there is or may be different than in training, so the dimensions do not match.

*Even when used on the training set, I have 10002 (=num_categories + 2) rows in the matrix Keras gives me, instead of 10000. And so again, the dimensions do not match.

Does anyone know a better way of doing this or can address the problems in this second approach?
My ultimate goal is having a data frame with all my variables minus the categorical variable and instead, having another 50 columns with the row vectors that represent the embeddings for that categorical variable.

A: So eventually I found a solution for the second method mentioned in my post. Using sparse matrices avoids the memory issues that might occur when attempting multiplication of matrices with large data (categories and/or observations).
I wrote this function which returns the original data frame with all the desired categorical variables' embedded vectors appended.
def get_embeddings(model: keras.models.Model, cat_vars: List[str], df: pd.DataFrame,
                   dict: Dict[str, Dict[str, int]]) -> pd.DataFrame:

    df_list: List[pd.DataFrame] = [df]

    for var_name in cat_vars:
        df_1vec: pd.DataFrame = df.loc[:, var_name]
        enc = OneHotEncoder()
        sparse_mat = enc.fit_transform(df_1vec.values.reshape(-1, 1))
        sparse_mat = sparse.csr_matrix(sparse_mat, dtype='uint8')

        orig_dict = dict[var_name]

        match_to_arr = np.empty(
            (sparse_mat.shape[1], model.get_layer(f'embedding_{var_name}').get_weights()[0].shape[1]))
        match_to_arr[:] = np.nan

        unknown_cat = model.get_layer(f'embedding_{var_name}').get_weights()[0].shape[0] - 1

        for i, col in enumerate(tqdm.tqdm(enc.categories_[0])):
            if col in orig_dict.keys():
                val = orig_dict[col]
                match_to_arr[i, :] = model.get_layer(f'embedding_{var_name}').get_weights()[0][val, :]
            else:
                match_to_arr[i, :] = (model.get_layer(f'embedding_{var_name}')
                                                .get_weights()[0][unknown_cat, :])

        a = sparse_mat.dot(match_to_arr)
        a = pd.DataFrame(a, columns=[f'{var_name}_{i}' for i in range(1, match_to_arr.shape[1] + 1)])
        df_list.append(a)

    df_final = pd.concat(df_list, axis=1)
    return df_final

dict is a dictionary of dictionaries, i.e., holding a dictionary for each categorical variable which I encoded beforehand with keys being the category names and the values integers. Note that each category was encoded with num_values + 1 with the last being reserved for unknown categories.
Basically what I am doing is asking for each category value if it is in the dictionary. If it is, I assign the corresponding row in a temporary array (so if this is the first category then the first row) to the corresponding row in the embedding matrix where the row number corresponds to the value for which the category name was encoded to.
If it is not in the dictionary I then assign to this row (this = ith row) the last row in the embedding matrix which corresponds to unknown categories.

A: this is what I introduced in the comments
df = pd.DataFrame({'int':np.random.uniform(0,1, 10),'cat':np.random.randint(0,333, 10)}) # cat are encoded

## define embedding model, you can also use multiple input source
inp = Input((1))
emb = Embedding(input_dim=10000+2, output_dim=50, name='embedding')(inp)
out = Dense(10)(emb)
model = Model(inp, out)
# model.compile(...)
# model.fit(...)

## get cat embeddings
extractor = Model(model.input, Flatten()(model.get_layer('embedding').output))
## concat embedding in the orgiginal df
df = pd.concat([df, pd.DataFrame(extractor.predict(df.cat.values))], axis=1)
df

redpajama_set_name: RedPajamaStackExchange


The LG G8 ThinQ is LG's latest flagship smartphone. It has some unusual features including Air Control. This feature allows you to control certain aspects of the device without actually touching the display. So how does the LG G8 ThinQ stack up against the other flagship smartphones including the Samsung Galaxy S10, iPhone XS and Huawei P30 Pro?


Sheffield United's hopes of earning automatic promotion have faltered of late but they have a good chance to get back on track when hosting Nottingham Forest.
The visitors look resigned to mid-table mediocrity following a run of three straight defeats and should be there for the taking at Bramall Lane.
We're going with 13/10 for a home win to nil for our opening Sheff Utd vs Nottingham Forest prediction.
United are three points behind second-placed Leeds, with four games to go, following back-to-back draws against Birmingham and Millwall.
The Blades led through Gary Madine's 51st-minute strike against the Lions at this venue but failed to press home their advantage and paid the price late on.
John Egan was sent off for a handball on the line and, while Ben Marshall missed the resulting penalty, Millwall found an equaliser through Jake Cooper's diving header deep in stoppage time.
"We never showed enough ambition to go on and score the second, which is uncharacteristic from our team," said Chris Wilder.
Wilder will encourage his players to be more positive if hitting the front again here, so 31/20 for the Blades to win by more than one clear goal stands out from the Sheff Utd vs Nottingham Forest odds.
Forest have been in the hunt for a play-off place for much of the season but those aims have pretty much evaporated this month.
Martin O'Neill's men were beaten 2-1 at Rotherham and 3-0 at Sheffield Wednesday, before going down 2-1 to Blackburn at the City Ground.
Following three months in charge, O'Neill says he has a clear idea of the work that needs to be done, after turning his thoughts to next term.
"There are a number of areas to address in the summer," said O'Neill. "The play-offs are a distance away and we cannot talk about that any more.
This looks a tough trip to make with such a mindset, though, so 25/4 for a 2-0 home win is added to our Sheff Utd vs Nottingham Forest betting tips.


text:
A Bomb in the Lasagna: Sympathy for "Prince of Darkness"
Will Standish / November 2, 2016
For one of John Carpenter's most financially successful films of his mythic 80s run of films, Prince of Darkness sure feels like a lost film. Sandwiched unfavorably in between the release of Carpenter favorites Big Trouble in Little China and They Live and picked apart by critics upon its initial release, Prince of Darkness rarely gets discussed with the same frequency that even Carpenter's second-stringers are (such as fellow "Apocalypse Trilogy" film In the Mouth of Madness). While it's decidedly not at the same quality level of the first entry in the Apocalypse Trilogy The Thing and lacks the following of most of Carpenter's other work from the era, Prince of Darkness does possess some master-class frights, a chilling atmosphere, and an intriguing mythos it sometimes doesn't know how to handle.
The plot: When an ancient chamber below a dilapidated California church is discovered by a priest (Donald Pleasence),a graduate research team under the tutelage of Professor Howard Birack (Victor Wong) is dispatched to investigate the site, and the strange glowing green canister within. The team soon learns that the canister holds the incorporeal form of the devil himself, and that he's something far stranger than they ever imagined. Taking possession of members of the research crew one by one, the Prince of Darkness sets about releasing something far more sinister back onto Earth, unless the ever-dwindling number of grad students and priests can stop him.
Right off the bat, the factors that contribute to Prince of Darkness's tepid reputation present themselves. The plot unfolds slowly, and is done so by characters that are largely unlikeable. Donald Pleasence and Victor Wong (one of two actors making a return from Big Trouble in Little China) are obvious bright-spots as Carpenter regulars bringing life to stock characters, but the team of grad student researchers don't leave much of an impression. It doesn't help matters that Jameson Parker's de facto leading man Brian Marsh is both unlikeable and uninteresting. Aside from creepily (and, alas, successfully) hitting on Lisa Blount's slightly more interesting co-lead Catherine, there's not a whole lot of interior life to this guy. Dennis Dun, the movie's second Big Trouble alum, makes for a more obvious lead, possessing an actual sense of humor and an iota more backstory (he was supposed to have a hot date instead of accidentally helping revive Satan), but instead serves as solid comic relief. This lack of charisma leads to faceless conversations filled with science-jargon inadequately anchoring the creepy imagery and uneasy atmosphere Carpenter otherwise builds. Here, it's fair to compare Prince of Darkness to The Thing, which anchored a similarly deliberate, jargon-packed beginning with some of Carpenter's best and most memorable characters. Luckily, Carpenter gets the ball rolling with frights early and doesn't let up.
Universal Pictures. I was not kidding.
Prince of Darkness combines elements of the zombie movie, possession movie, haunted house story, and most unexpectedly, a lot of Lovecraftian sci-fi. Carpenter peppers the film with unsettling perversions of religious iconography and the looming threat of a legion of the possessed homeless (led by Alice Cooper in a cameo, no less) before the devil lets loose and his victims start rotting into piles of insects. Carpenter crafts some great scares in Prince of Darkness, and as the ratio of unpossessed to possessed tips in the wrong direction, the film gets ever more claustrophobic and tense; the walls of the church pressing ever more upon the characters and their psyches. This atmosphere is aided and abetted by one of the director's signature electronic scores which measure among his best. Prince of Darkness is unique in its Lovecraft style in that the cosmic, perspective-shifting realization is reached at about the halfway point as opposed to towards the end, and the characters are tasked with trying to stem the tide (or at least delay the tide) of the coming apocalypse. The problem is that the short timeframe Prince of Darkness has to explain its complex mythology is that it does so inelegantly, making it hard to follow. Spoiler The devil (and Jesus) are a great deal older and from a great deal further away than we realized, says Prince of Darkness, and just as Jesus is the son of a benevolent god, the devil is the son of his powerful opposite number. End spoiler Carpenter undoubtedly came up with one of his coolest ideas in Prince of Darkness, but didn't have the right vehicle to fully realize it.
Universal Pictures Hello, Hooray!
While perhaps it's a grossly overindulged statement at this point, Prince of Darkness feels like it would work much better as a miniseries. The somewhat sprawling ensemble cast of scientists, scholars, and clergymen and the dense world-reshaping mythos Carpenter presents would be better suited by a format that gives characters and plot a little more room to breath. We don't have that miniseries, but we do have a too-often overlooked film. Prince of Darkness is Carpenter stretching out into more narratively complex work, and the result is fascinating and frequently scary. Fans of Carpenter would be doing themselves a favor to check out this flawed but compelling entry in the director's canon.
November 2, 2016 in A Bomb in the Lasagna, Movie Review. Tags: alice cooper, Big Trouble in Little China, In the Mouth of Madness, John Carpenter, The Thing, they live
A Bomb in the Lasagna: What to Watch When You're Stuck in a Blizzard
A Bomb in the Lasagna: Reassessing 'Friday the 13th (1980)'
← Second Breakfast Octoberween: A Comprehensive History of Scooby-Doo, Part 5
Second Breakfast: 'Green Room', Horrific Violence, and the Great Anton Yelchin →