After Chris Joye's big short post yesterday, some readers wanted to know more about how to short Aussie house prices. There are a number of ways but note that this not investment advice.
The most obvious methods are to do what the MB Fund is doing. Get long government bonds and short the Australian dollar. Both of these will benefit if house prices keep falling. The former will see capital gains as the RBA is forced to cut. The latter for the same reason if you're holding either foreign assets or cash. The MB Fund also offers an ethical screen that knocks all exposure to Aussie housing out automatically.
If you're feeling more adventurous then the obvious place to go is the big banks. These can be shorted by borrowing their stock and selling it forward. Though this is complicated and expensive, not least because of the big dividends. You might also use futures or CFDs for the same end. My own view is that banks have plenty of downside left in them with current valuations at 12x forward ridiculous given the earnings and dividend risks.
The same argument can be applied to property services stocks like REA, DHG or GMA. These can be even more attractive than bank shorts given most have lousy dividends and high (often tech-like) valuations.
Then there are the building stocks which will are already getting smashed. Though you want to be careful to avoid those that have exposure to infrastructure.
There are also the LICs and REITS. These have been powering higher as bond yields fall. Most are exposed more to commercial than residential property. My own view is that these will also roll over in time as the economy sours, especially those exposed to retail space, which is already weakening.
I was surprised to find only one LIC specialising in mortgage bonds on the equity market: GCI. But it does appear to be deep into junior tranches of RMBS with only 3% AAA so it is a juicy shorting vehicle if you can borrow the stock. Then again, these kinds of highly illiquid firms tend to lock up when things turn south.
Finding actual mortgage bonds to short is more difficult, just it was in The Big Short. You need access to 'over the counter' (OTC) deal arrangements with somebody to take the other side of your bet. It's not for the retail investor.
More broadly, what all of these ideas suggest is how stupid the RBA has been to let the correction run unabated (not that it should stop it but certainly slow it). If RMBS downgrades or bank capital reaches a tipping point before monetary policy is eased then it will already be too late to stop the so-called "orderly"correction from turning into an outright crash as markets smell blood.
I note that during the GFC, shorting banks was banned for a while in Australia. I don't know how this would have affected shorts already in position or if only new shorts were banned. But still, this sort of regulatory risk worries me, knowing the powers that be do not love shorters. I am happy for now with option A (bonds plus USD plus a tshirt saying "I'm short your house" to wear to BBQs).
Yes, about that and slightly more on the 15 year bonds (+2.6%). Nice buffer to have, anyway, and they haven't even paid a coupon yet!
Interesting that I said this about Joye on MB, the day before his "shorting" post.
I also said: "…Personally I think a lot of Joye's behavior is explainable by complex psychology since he was the main author of the PM's Task Force Report on Housing Affordability in 2003. He absolutely nailed it; no-one since has produced anything of that level of clarity and comprehensiveness. It should have established him as one of the best policy advisors around. Impressive given how young he was.
John Howard rejected the report out of hand on the basis that the voters liked their house values going up, thanks.
Ahhhhh, that just sounds like me.
But they sure do b!tch about it on the way down.
What about long dated bonds in the us?Would you get upside as interest rates are lowered in America as well as currency upside?is there an etf on the asx that would allow access to such an investment?
Shorting Australian property is a guaranteed way to do your doe!
What about put options on banks (and some of the other real estate industry names you mentioned)? Better for the amateur investor than CFDs, all you can lose is the premium paid for the option itself.
So 2 years into the correction, with many indicators flashing we could be at or near the bottom in a standard cycle, there are retail investors who don't know what they are doing wanting to load up with short positions?
Maybe they'll get lucky and 'it is different this time' (end of a larger, structural cycle), but it sounds an awful lot like a contrarian indicator.
That's a timely warning that I completely endorse. Monetary and fiscal stimulus are coming.
That said, you will note I'm simply following CJs lead here and you're an arrogant toss pot.
Have a look at all the charts Leith does around transaction volumes, finance, price, etc. Where's the ticker on the y-axis now compared with past corrections over the past 20 years?
HnH – so, at the current Aussie govt bond rates, each 10 bps decline generates approx what capital gain – 100 bps (1%)?
Proofreaders – the relationship between yield and capital value is moderated by number of years left to maturity, you realise, yes?
Peachy – fully aware of duration aspect, but was just looking for ballpark figures for this baked-in gift that keeps on giving. Any feel, in absence of guidance from guru HnH?
The basic maths to translate ytm changes to capita value changes for bonds of various durations is out there and easily accessible on the internets, of course.
But you are looking at the slightly more advanced/complex issue of "duration", really.
I agree shorting stuff in an environment of unnatural policy acts and desperate powers-that-be could be pretty fraught.
But what indicators suggest we might be near bottom of the economic cycle? Serious question. Growth? Falling after a record long run. Unemployment? Record lows. ASX? Barely below 10-year highs.
I am talking property cycle indicators, see my comment above.
I'm not of the view this couldn't go a lot deeper, but the banks are already well down from their highs.
Doesn't seem like an ideal time to get short, especially if Labor gets in (likely) and gives investors 6 months to get into assets before NG/CGT changes + in conjunction with RBA rate cuts.
You did say "economic cycle".
As for property cycle – first question is how long since we've seen a normal property cycle in this country? Not since 1991 recession I'd suggest. As for indicators suggesting a bottom, which ones? Auction clearance rates and volumes worsening again. Credit crashing, increasingly fast. Prices accelerating downwards again after falls slowed (but didn't stop) earlier in the year. Sentiment worsening but still largely buoyant, no real panic.
Sounds to me like we're definitely over the top crest of the roller coaster and rolling fast but no further down than that. Nobody's even has their glasses fly off yet And the fat kid in the back row is only just starting to wonder if those two burgers and double thick shake were a good idea.
Not sure why all the investors have spent the last couple of years on the sidelines waiting for Labor to get in, but there you go.
Anyway, A2 has the truth of it, it's not just a property cycle playing out. Longterm debt cycle dynamics at play, R word etc etc.
Ok, correction, you said "standard cycle". Mea culpa.
"Standard cycle", with the context of it being in a sentence on home prices.
One of my macro views is that most people I know are seriously in debt and very little wriggle room, huge stress, marriage breakdowns etc. I see their lifestyles going backwards and if unemployment comes up they are stuffed. I'm not sure of the real data on this is, but most analysts are forecasting low growth and how that plays out here with large population growth (employment) it's hard to say, but shorting the AUD might be on the cards soon. Rather than shorting the AUD, look at ASX listed company that have lots of debt, falling revenue. Maybe rate cuts will help them, but not if the banks don't pass the cuts on what follows? I'm feeling less confident in any strategy now though, but it's something I've been looking at for 2019. Shorting the AUD IMO is a very tricky trade to get right…it might be correct, but outside forces always seem to put a floor under it. An outside event may make that floor drop though.
JosephS Vs Brenton: Brenton by a full head.
no not a good idea to go long CCP/CLH before the crash. After the crash yes.
They buy low quality debt/receiveables at a discount and the economic cycle revalues those books up or down.
Agreed. Increasing one's financial flexibility is the best course of action heading into a crash.
I have been unwinding my positions over the last 3 years or so. I still hold uranium stocks and I will keep holding them – their fundamentals are too good to ignore and my cost base is at or near the bottom. I also loaded up on tobacco giants after they crashed at the end of last year – their valuations were too good to ignore and they are USD denominated.
Before the recent purchase, my financial flexibility was at its highest in more than a decade. I still have enough ammo left at my disposal to strike when an opportunity presents itself.
There was some very creative use of CFD's in relation to banks in Ireland before and during the GFC ……led to one unfortunate billionaire taking a Euro 2.4Bn loss.
HVN for instance should do ok once Gov hands out the cash.
If you didnt purchase in the past, and currently sitting on a big deposit, then you are already short the property market. Dont over complicate it (or risk your deposit), just make more popcorn, sit back and relax.
Give me an FN break. Didn't Dave and Leith give you the thumbs up on Magrath when it listed. It was like watching a ship launch all fanfare and hoo hah at the dock and in the harbour. Sinking on the maiden voyage. Cyclical or structural monetary or fiscal they are going to to throw the the kitchen sink and the kids/oldies under the bus if they think that is what is required. Safest short at the moment is at the bar.


In science, Oxygen (O) is a highly electronegative element, and by mass is the third most abundant element in the universe and the most abundant element by mass in the Earth's crust.
Oxygen (O) is a member of the chalcogen group on the periodic table, and is a highly reactive nonmetallic period 2 element that readily forms compounds (oxides) with almost all other elements.
Diatomic Oxygen (O2) is a gas that constitutes 20.8% of the volume of air.
We have a shortness of breath when levels of O. drop into the teens. At below 7% O. we cease to exist.


Home › News › ISEA2014 CFP: Student Poster Deadline – 12 October 2014.
ISEA2014 CFP: Student Poster Deadline – 12 October 2014.
ISEA2014, 20th International Symposium on Electronic Art invites students to participate in a Poster Presentation coinciding with the academic conference, to be held from to 3-6 November, 2014 in Dubai, UAE, under the theme – LOCATION.
The Poster Presentation Session calls creative students to present a researched topic in the format of a poster. Under ISEA2014 theme of LOCATION, topics and projects can be based around art, science and technology. Students are to initially submit an Abstract that defines their undergraduate research topic. Presenting authors will have their posters displayed throughout the academic conference.
First drafts will be accepted through September 30. Decision will be made beginning of the October. Final Posters in PDF A1 size, print quality will be accepted through 12 October 2014.
To submit an abstract for a poster presentation, download and complete the Poster Presentation Abstract Submission Form. Download here.
In order to encourage participation, all poster abstract submissions that are relevant to the themes of ISEA2014 will be accepted.


text:
America Revealed
Today we face a climate of ever increasing misdirection by popular media. This site, along with others, aims to reveal the reality of America and the loss of fact inherent to the over riding theme of our current political and social confusion: Purposeful deception.
Who's Not Putting Americans Back to Work
by Bill Boyarsky
"The American people want action on jobs,
and the House is listening to
the American people."
~John Boener 12/02/2011
The Federal Reserve report on Americans' finances documents the terrible damage the Great Recession has inflicted on the nation, a toll that has been clear to its victims since the collapse began. The report's dry language doesn't begin to describe how bad things really are, and it stops short of blaming those who perpetuate the misery.
In pursuing this story since 2007, I and other journalists have seen foreclosed homes and visited unemployment offices, free food distributions, community health centers and mental health counselors. Former donors were now coming to free health clinics and food banks to get help themselves, an experience that will be forever remembered by their families. Lost homes, jobs and hopes are the legacy of this period.
The presidential campaign doesn't reflect the urgency the situation demands. Republican Mitt Romney has nothing to offer except blaming President Barack Obama and joining with House Republicans in opposing presidential initiatives. Obama has some solutions, but doesn't know how to sell them. The president had a chance last week when disappointing employment figures came out. Unfortunately at his news conference Friday, he reminded me of a bored university economics professor lecturing to an equally bored freshman class, not the nation's leader who is in real danger of losing his office.
The Federal Reserve survey reported on consumers' economic status from 2007, when the economy began to falter, to 2010, when the slow recovery began.
A family in the economic middle, between rich and poor, saw its net worth—the difference between gross assets and liabilities—drop almost 40 percent between 2007 and 2010. That brought the figure, the report said, "close to levels not seen since the 1992 survey."
The recession hit everybody. "Net worth decreased for all education groups," the report said. "Each of the four education groups experienced a very large decline ... ranging from a drop of 53.7 percent for the no-high-school-diploma group to a drop of 32.7 percent for the high-school-educated group." The declines were even lower for college graduates and those with some college. The net worth of people of color decreased more than that of whites.
As Obama talked about the weak economy at the news conference, he said the private sector was "doing fine." It was the public sector dragging things down. It was an unfortunate way to put it, but Obama actually had it right.
Ben Polak, chairman of the economics department at Yale, and Peter Schott, a Yale School of Management professor, wrote in The New York Times Economix blog that "recovery in the private sector has not been particularly slow by recent historical standards. ... But there is something historically different about this recession and its aftermath: In the past, local government employment has been almost recession-proof. This time it's not. Going back as long as the data have been collected (1955), with the one exception of the 1981 recession, local government employment continued to grow almost every month regardless of what the economy threw at it. But since the latest recession began, local government employment has fallen by 3 percent, and is still falling."
Part of the problem is local governments' practice, during the good years, of agreeing to overly generous retirement and health benefits. But the federal government has also failed to help local governments with aid to prevent more employee layoffs and financing for their public works projects.
Take, for example, a job-creating bill that has been stalled in the House by Republicans. The measure would finance transportation projects around the country. "Clearly, the indecision in passing a transportation reauthorization bill is having a terrible impact on the construction industry—28,000 construction jobs lost last month," said the author of the Senate-passed bill, Sen. Barbara Boxer, D-Calif.
Every day, I see what good such proposals do. Four blocks from my house in Los Angeles, workers are widening one of the nation's most jammed roads, Interstate 405. About a mile away, other workers are building the Expo commuter rail line, part of an expanding network. Without much media emphasis on the job aspect, these projects are already putting people to work in a county where unemployment is 11 percent, down during the Obama administration from a 2010 high of 13.4 percent. Many miles away, workers have started on the Gold Line commuter rail extension through the San Gabriel Valley, which business interests there say will create 2,630 construction jobs and 4,270 more in businesses related to the project. After watching the misery of the recession, it's heartening to see men and women working on the roads and rail lines.
These are being financed by a local sales tax. Boxer wants to permit the federal government to loan money to local authorities to speed up work on such transportation projects. In Los Angeles County, proceeds from the sales tax would repay the loans.
This is just one program. There are others, blocked by House Republicans and opposed by Romney. Although they are not mentioned in the Federal Reserve report, these recalcitrant legislators—whose only goal is to defeat Obama, even at the cost of average Americans' well-being—are the villains in this story.
I want to hear from you but any comment that advocates violence, illegal activity or that contains advertisements that do not promote activism or awareness, will be deleted.
America Revealed: Join us on Facebook
Educate and inform the whole mass of the people... They are the only sure reliance for the preservation of our liberty.
~Thomas Jefferson
AR Fascism Tracker: 14 points of Fascism
Former High DOD Official Warns Against Attacking I...
A New Standard for Oxymoronic Newspeak
Supreme Court: 'Obamacare' Constitutional
The American People Are Angry
Do We Have a Right to Internet Privacy or an Oblig...
Excluding Outsiders or Coming Together for The Com...
Oh Yes, The Poor
Supreme Court: More Elections for Sale
Obama's War on Democracy
New NSA docs contradict 9/11 claims
Monsanto Crop Bans by Courts Would Be Reversed in ...
Predictions in Chalmers Johnson Book About U.S. Co...
FBI Terror Plot: How the Government Is Destroying ...
Thousands March Silently to Protest NYPD Stop-and-...
The Sociopathic Party Prepares to Take Total Contr...
Rio+20 Earth summit: Scientists call for action on...
How Drones Help Al Qaeda
Seeds of Change: The Story of ACORN
War or Revolution Every 75 Years. It's Time Again....
America's Abusive Relationship with their Governme...
The Truth About Tar Sands
.Obama Increases Pakistan Drone Strikes as Relatio...
Resistance to NYPD's Stop-and-Frisk Comes to D.C. ...
It's One Person, One Vote, Not 1 Percent, One Vote...
The Lost and Forgotten Americans of 2012
"Wipe Israel Off Map" Statement Gross Distortion o...
Collapse At Hand
America's Rank Hypocrisy -- Why Is it Only an "Atr...
Florida Will Defy Order to Stop Purging Voter List...
America 2.0 : Taxation Without Representation
The Price Of Democracy
S. Paul Articles
9-11's Anniversary Only "Celebrates" America's Destruction
A Government by The Fascists for The Fascists
A Liberal's Perspective of The Tea Party
A Liberal's Awakening to the Reality of Obama Care
A New Year for the Great American Deception
After bin Laden: It is Time to Stop the War Machine
American Nationalism: Is Our Freedom Under Attack?
Americans are Reaching a Breaking Point
America's Illegal Immigration Debate Misses the Mark
America's Misconception of Freedom
America's New Slavery
An American Awakening
And The Hate Machine Rolls On: HHS, Obama and the Catholic Church
Beware the Rising Ire of a Forgotten Generation
Christmas in a Material World
Communists Are Taking Over Wall Street?
Defunding Education to Send America's Future Abroad
Genetically Modified Foods and the Monsanto Initiative
God has no place in Politics
God is a Weapon
Homeless in the Land of Milk and Honey
If America's future is to be secure, regressing to a religious state is not the answer
Independence Day: We Shall Overcome
Lost and Bewildered in America
Marching Toward the Death of the American Dream
Political Vitriol and Society's Fringe Element
Private Prisons and the American Police State
The Continuing Loss of Our Political Representation: Part I
The Death Panels That Aren't
The Environment: Corporate America's Sacrificial Lamb
The Hypocrisy of the Casey Anthony Trial
The Modern American Political Plague: 6 ways to protect against its destructive toll
The Secret to FOX News' Success
The State of the Union: Politics as Usual
The Unfortunate Reality of Bin Laden's Death
The War On Terror: How it is Affecting Politics and Society Today by S. Paul Forrest
They take our money for WAR
To Serve and Protect; America's Institutional Fallacy
Today's Austerity Measures Are Taking From Us, Our Once Great Dream
We the People Must Protect Our Liberty, No Matter the Cost
We the People Support Occupy Wall Street; Why Doesn't Congress?
When Democracy Silences the Voice of a People
Where Has Journalism Gone?
Where Our Heroes Have Gone
Will Our Nation Experience Another Kent State?
Activist Radio
The Bottom Up Radio Show
New Dissident Radio
Forward Blitz
Battle Line Radio Show
Why Iran assassination plot doesn't add up for Iran experts
by Scott Peterson , Staff writer Christian Science Monitor S. Paul Note: The U.S. has been trying to ramp up public support of military...
How Christian Fundamentalism Helped Empower the Top 1% to Exploit the 99%
by Frank Schaeffer Alternet As the Occupy Wall street movement spreads across the country and the world, we must bring attention to...
S. Paul Forrest Land of Milk and Honey , Sally Burton America was once called the Land of Milk and Honey. It was so named for the p...
The Rise of Dominionism - Remaking America as a Christian Nation
The Public Eye Magazine By Frederick Clarkson When Roy Moore, the Chief Justice of the Alabama State Supreme Court, installed a two-and-...
Are Scientists Confusing the Public About Global Warming?
Climate Central By Nicole Heller "Do you believe in global warming?" I assure you no one in the earth science community is asking that qu...
by S. Paul Forrest This article was originally written for an interview with New Dissident Radio 's Lakota Phillips on Brea...
Is There an American Caste System?
Sulekha.com Spaul note: I absolutely love to read articles from years past and think of the words in terms of today's societal situati...
A Dream Still Out Of Reach
by Eugene Robinson The Washington Post As the nation honors the Rev. Martin Luther King Jr. with a stirring new memorial on the National...
Utah's $1.5 billion cyber-security center under way
By Steve Fidel Deseret News CAMP WILLIAMS — Thursday's groundbreaking for a $1.5 billion National Security Agency data center is be...
S. Paul Forrest Activist Post Deception, manipulation, propaganda and profit: These words have become the basis of the American corporate a...
Newsvine - Get Smarter Here
New Parnas info TRANSCRIPT: 1/17/20, The Last Word w/ Lawrence O'Donnell -
Trump's Impeachment Trial Opens with an Interminable Rules Debate - The Senate began debating trial rules midday Tuesday. It was still going by Wednesday.
The New Mystery Virus In China Is 'Adapting And Mutating' And No Known Drug Works Against It - Global health officials are racing to contain the outbreak of a mysterious new coronavirus before it starts spreading wildly out of control all over the pl...
The Real Megxit Deal - he House of Windsor has agreed to allow the Queen's grandson, Harry, currently sixth in line to the throne, and his California-born wife, Meghan, to leave ...
The CIA's Global Propaganda Network – #PropagandaWatch - This week on the de-program James digs up an old New York Times report on the CIA's mighty wurlitzer, their global propaganda network that included hundre...
NY's 'Gray Lady' Tries to Undermine Sanders, Endorsing Both Democratic Women Presidential Candidates - By Laurie Dobson Too bad Kamala Harris couldn't make a go of her Presidential campaign, or the NYT would have gone triple threat, and made it a three-w...
Evangelical gangs in Rio de Janeiro wage 'holy war' on Afro-Brazilian faiths - The expression "evangelical drug trafficker" may sound incongruous, but in the Brazilian city of Rio de Janeiro, it's widespread. Charismatic Christianity ...
The Refreshment Center
ANNOUNCEMENT: TRC Has Moved to Wordpress, With A New Name - A message from TRC founder, Gabrielle Jones-Price Greetings to my long-time patrons and followers. The Refreshment Center's archives have been imported to ...
GLOBAL POLITICAL AWAKENING
5 Tips for Voters from a Non-Voter - I hope all who operate from a position of love will invest a few minutes to watch this beautiful expression of consciousness concerning true freedom as it...
Website is a success! - For those of you wondering, the Wordpress website went offline due to an overabundance of traffic. My web designer, who builds websites for a living, told...
Musings Of A Tired Soul
I Could Use this! - Information used in this blog is reproduced in accordance with Section 107 of title 17 of the Copyright Law of the United States relating to fair-use...
Dailycensored.com
http://kfor.com/2017/04/03/education-advocates-call-on-lawmakers-to-penalize-themselves/ - OKLAHOMA CITY – The April 1 deadline to fund education has come and gone for yet another year with no education budget from the legislature. House Bill 124...
Jim Hightower's News and Commentaries
Parsing the PR lies of Goldman Sachs - CorporateSpeak is an inane language that conveys seriousness without any sincerity. Consider this example from Goldman Sachs: "We are pleased to put thes...
Yelps from the Closet
PC - It's not the Intelligent Concept You'd Expect - As Popeye would say, 'That's all I can stands, I can't stands no more!' The point of no return is on the horizon and, in this case, the world is flat. Hum...
US's Saudi Oil Deal from Win-Win to Mega-Lose - By F. William Engdahl Who would've thought it would come to this? Certainly not the Obama Administration, and their brilliant geo-political think-tank neo-...
Say No To Corporate America
The "JADE" In Jade Helm 15 Is An A.I. SOFTWARE Program -
Deceived World
A System of Control - It's all around you. It tells you what to think, how to act, what you are allowed to do, how you may care for your family, how you may make a living, and ...
American Politik
A Huge Forced Dose of Reality for Conservatives - *Editor's Note: A quick post about the election. I haven't posted here much with Facebook to rant on and the immediacy that seems to provide but I got on b...
The Urban Liberal
It's The Little Things. - So, we all know the basics we're thankful for every year on Thanksgiving: family, friends, food, clothing, a roof over our heads, having a job. Absolutely....
TruthNexus
Earthjustice In The News | Earthjustice
Antemedius - Liberally Critical Thinking
This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. It is being made available in an effort to advance the understanding of environmental, political, human rights, economic, democracy, scientific, and social justice issues, and so on. It is believed that this constitutes a 'fair use' of any such copyrighted material as provided for in section 107 of the US Copyright Law. In accordance with Title 17 U.S.C. Section 107, the material on this site is distributed without profit to those who have expressed a prior interest in receiving the included information for research and educational purposes.
If you wish to use copyrighted material from this site for purposes of your own that go beyond 'fair use', you must obtain permission from the copyright owner.
If you have an original article that contributes to the theme of this blog, please send to
spaul@spaulforrest.com
This blog is for educational value only and neither represents nor advocates social or political dissension lest it be in a peaceful, intelligent manner through the legal rights granted to us by the U.S. Constitution.

redpajama_set_name: RedPajamaCommonCrawl


text:
April 27, 2021 May 4, 2021 Zackary Kephart
The Boom-or-Bust Jukebox – Week 17 (2021): (Yola, Graycie York, Brett Young, Ryan Hurd and Maren Morris, and Ingrid Andress)
The Boom-or-Bust Jukebox is a weekly series where I cover new entries to the top 40 of Billboard's Country Airplay chart, standalone singles, and a throwback tune. There's only two possible ratings – Boom, for the good stuff, and Bust, for the stuff best avoided.
This week is equally as loaded as last week with singles to review … which is both good and bad. At any rate, onward!
Yola, "Diamond Studded Shoes" (written by Natalie Hemby, Aaron Lee Tasjan, Yola, and Dan Auerbach)
I remember Yola's 2019 Walk Through Fire album being one of the most immediately likable listens of that year, so you can bet I'm excited for the follow-up in July, even if the pivot toward something more socially conscious might make for a sharp left turn compared to that debut's lighter material. Granted, half of the appeal with Yola's music is Yola herself, and while this is sharper and more focused than her previous material, it's as infectious and likable as anything else in her catalog. Content-wise, it's the sort of protest song that reminds me oddly of both Eric Church's "The Snake" and American Aquarium's "Lamentations" in framing the higher powers as the ones in the wrong and looking for a call of unity from the common people … which I like, even if I'd say this is less detailed than the latter track and only a little more so than the former. Of course, it's a hell of a lot catchier than either song, mostly because it's framed as a call to action and eschews the usual burned-out sentiments these sort of tracks default to in the approach. And while I've become burned-out on Dan Auerbach's sleepier Countrypolitan approach with nearly every act he's produced, I have no qualms with a shift toward a '70s soul-meets-country-pop approach here. With the strong, jangly, bouncy guitar groove and subtle hints of bass and organ supporting the low-end, this is a single with some real muscle behind it, and while I'm more interested in hearing how it supports the project as a whole, this is great on its own. Boom.
Graycie York, "Drag Me Down" (written by Graycie York)
OK, let's try this again. I took a stab at Graycie York's music a few weeks ago, and while I knew I was walking into a cover of "Texas Rain," it was a really damn good one. What I didn't realize until afterward was that I was around three months behind in covering it, so let's try again with something original and new, even if there's no announced project on the horizon yet. As it is, I like this. It's fairly standard for a breakup track, all things considered, but I like York as a singer, and she's doing a lot of heavy lifting in conveying the tired, frustrated expressions of the aftermath, especially knowing that her significant other's cheating speaks to deeper lingering issues that have likely existed for a while between them. I also enjoy that there's a deeper blend in the guitar mixing to amplify that tension – of the Texas artists I've heard adopt this sound lately, I like York's take on it better than most – even if gets a little too heavy at points and fights against her at times. Still, it's a solid pivot for her overall. I'm looking forward to hearing more.
We had three new chart entries this week, and I've already forgotten what they sound like.
No. 37 – Brett Young, "Not Yet" (written by Brett Young, Kelly Archer, and Justin Ebach)
One could make a case that Brett Young is emblematic of part of what's wrong with mainstream country music right now. He makes the sort of generic, faceless, inoffensive music meant to take up space on radio playlists and do little more, and while the chart history would have one think he's a legitimate superstar, in truth, he hasn't made any real waves since "In Case You Didn't Know" in 2017. He's just another male country singer, and this new single doesn't change that. Yes, the tones are a little breezier and brighter than average and carry a slight amount of energy in the electric guitars, but there's no rollicking groove or strong hook to support any of it, and it's all so watered down anyway that it hardly matters. It doesn't help that it's another mainstream country song that can't blend the percussion lines or decent piano work right … or Young, for that matter. He's a likable presence, but he's never been a great singer, and he's really stretching himself on the chorus and getting washed out in the cluttered mix for all his trouble. Granted, it's not like there's much to support in the actual content, the sort of late night romp that's been the focus of too many country songs over the past decade – without any distinguishing flavor here. And while Young tries to plea with his significant other that they've still got some time together before the sun comes up, the irony is that it's all just a waste of it anyway.
No. 38 – Ryan Hurd and Maren Morris, "Chasing After You" (written by Brinley Addington and Jerry Flowers)
I was really hoping I could skip this one, the sort of critic-bait single that receives undeserved hype simply for the artists involved, and, unsurprisingly, already has from your usual sources. Not that I'd exactly say Ryan Hurd is blazing his own trail without Maren Morris, but given that this is apparently his single featuring her, I'm not surprised that it's about as generic and faceless as anything else on country radio right now. Granted, the choice to sing about an on-again, off-again relationship is a bit strange for these two to sing as it is, and while I'd like to say there's enough lyrical detail to subvert expectations and lead to something interesting … yeah, that doesn't happen. There's no exploration of the deeper issues behind stringing things along or why they choose to do it, and this theme is too played-out to leave it open-ended and vague. And considering Morris only sings a short verse before returning to contributing harmony vocals, there's no chemistry in this duet when there should be. Couple that with your usual Nashville blend of reverb-soaked electric guitar pickups and blocky, overmixed, low-end synthetic elements, and you have an absolutely boring song. Dishonorable mention for this week's Bust.
No. 40 – Ingrid Andress, "Lady Like" (written by Sam Mackenzie Ellis, Derrick Adam Southerland, and Ingrid Andress)
Am I happy to see Ingrid Andress slightly rebound from "The Stranger"? Sure. But I'm not happy to see her do it with arguably the worst song off of her otherwise solid debut album. This is her playing directly into Maren Morris territory and doing it about as well as she does. But I don't buy a hell-raising sentiment coming from Andress, who thus far has carved out a unique niche in mainstream country music with her blend of country with lusher pop flourishes that damn-near lean into baroque pop. And that's true here, where even if the liquid piano is really well-blended against the faint brushes of pedal steel and banjo, it doesn't fit the sentiment whatsoever. It's the sort of self-gratuitous track that I never usually buy from an artist, where the details are purely there for a shock value that never materializes and never actually help frame an actual character. I hate to say it, especially when I dig her other material, but this is a Bust.
This is our last week exploring 1975 singles for our throwback section, meaning I'll be exploring a new year for May. It looks like we're ending with another song I've covered through my Pop Goes the Country series, the No. 4 single from this week in 1975.
B.J. Thomas – (Hey Won't You Play) Another Somebody Done Somebody Wrong Song (written by Larry Butler and Chips Moman)
Those who know this name likely know him for "Raindrops Keep Fallin' on My Head," but in truth, B.J. Thomas was an act that straddled the line between mainstream pop and country throughout his career. He broke through with a cover of Hank Williams' "I'm So Lonesome I Could Cry," and while mainstream pop success eventually came, it also led to years of addiction and divorce that led to this single with a fitting and very long title. As for the tune itself, it's one of those songs about songs that's not as fine-tuned as the best country songs in this regard, and I've always felt the production lacked greater teeth behind it. There's also a wonkiness to the vocal that feels a bit forced at times. Still, I generally like these sadsack songs about resorting to music to ease a heartache. It's just never been a personal favorite of mine.
B.J. Thomas
Graycie York
Ryan Hurd
Previous Album Reviews: Eric Church – 'Heart & Soul'
Next Album Review: Tracy Lawrence – 'Hindsight 2020, Vol. 1: Stairway to Heaven Highway to Hell'


text:
Q: Resetting In-Memory database between integration tests I've set up a project based on https://github.com/jasontaylordev/CleanArchitecture. But I'm having some troubles with writing my integration tests for the controllers, since the in-memory database does not reset between each test.Each test use a WebApplicationFactory in order to set up a test web server,
public class CustomWebApplicationFactory<TStartup> : WebApplicationFactory<TStartup> where TStartup : class
    {
        protected override void ConfigureWebHost(IWebHostBuilder builder)
        {
            builder.ConfigureServices(services =>
                {
                    // Remove the app's ApplicationDbContext registration.
                    var descriptor = services.SingleOrDefault(
                        d => d.ServiceType ==
                            typeof(DbContextOptions<ApplicationDbContext>));

                    if (descriptor != null)
                    {
                        services.Remove(descriptor);
                    }

                    // Add a database context using an in-memory
                    // database for testing.
                    services.AddDbContext<ApplicationDbContext>(options =>
                    {
                        options.UseInMemoryDatabase("InMemoryDbForTesting");
                    });

                    // Register test services
                    services.AddScoped<ICurrentUserService, TestCurrentUserService>();
                    services.AddScoped<IDateTime, TestDateTimeService>();
                    services.AddScoped<IIdentityService, TestIdentityService>();

                    // Build the service provider
                    var sp = services.BuildServiceProvider();

                    // Create a scope to obtain a reference to the database
                    // context (ApplicationDbContext).
                    using (var scope = sp.CreateScope())
                    {
                        var scopedServices = scope.ServiceProvider;
                        var context = scopedServices.GetRequiredService<ApplicationDbContext>();
                        var logger = scopedServices.GetRequiredService<ILogger<CustomWebApplicationFactory<TStartup>>>();

                        // Ensure the database is created.
                        context.Database.EnsureCreated();

                        try
                        {
                            // Seed the database with test data.
                            SeedSampleData(context);
                        }
                        catch (Exception ex)
                        {
                            logger.LogError(ex, "An error occurred seeding the database with test messages. Error: {Message}", ex.Message);
                        }
                    }
                })
                .UseEnvironment("Test");
        }
    ...

Where the following create test:
namespace CleanArchitecture.WebUI.IntegrationTests.Controllers.TodoItems
{
    public class Create : IClassFixture<CustomWebApplicationFactory<Startup>>
    {
        private readonly CustomWebApplicationFactory<Startup> _factory;

        public Create(CustomWebApplicationFactory<Startup> factory)
        {
            _factory = factory;
        }

        [Fact]
        public async Task GivenValidCreateTodoItemCommand_ReturnsSuccessCode()
        {
            var client = await _factory.GetAuthenticatedClientAsync();

            var command = new CreateTodoItemCommand
            {
                Title = "Do yet another thing."
            };

            var content = IntegrationTestHelper.GetRequestContent(command);

            var response = await client.PostAsync($"/api/todoitems", content);

            response.EnsureSuccessStatusCode();
        }
    ...

And the following read test:
namespace CleanArchitecture.WebUI.IntegrationTests.Controllers.TodoItems
{
    public class Read: IClassFixture<CustomWebApplicationFactory<Startup>>
    {
        private readonly CustomWebApplicationFactory<Startup> _factory;

        public Read(CustomWebApplicationFactory<Startup> factory)
        {
            _factory = factory;
        }

        [Fact]
        public async Task ShouldRetriveAllTodos()
        {
            var client = await _factory.GetAuthenticatedClientAsync();

            var response = await client.GetAsync($"/api/todoitems");

            var todos = Deserialize(response);
            todos.Count().Should().Be(1); //but is 2 because database is shared between read and create test class.
        }

The problem is that the in-memory database is not reset between each test. I've tried generating a different name for the in-memory database using Guid.New.ToString, but then the tests don't find the seeded database data, and by putting the tests in the same XUnit collection, to no avail.
Any good ideas how to make the tests not share database?

A: What worked for me was to generate a DBName for each WebApplicationFactory instance, and I instantiate one of them for each test. So the test looks like this:
[Fact]
public void Test()
{
  // Arrange
  var appFactory = new WebApplicationFactory();
  // ...

  // Act
  // ...

  // Assert
  // ...
}

And the WebApplicationFactory:
    public class TestWebApplicationFactory : WebApplicationFactory<Startup>
    {
        private readonly string _dbName = Guid.NewGuid().ToString();

        protected override void ConfigureWebHost(IWebHostBuilder builder)
        {
            base.ConfigureWebHost(builder);
            builder.ConfigureServices(services =>
            {
                services.AddDbContext<DbContext>(options =>
                {
                    // This is what makes a unique in-memory database per instance of TestWebApplicationFactory
                    options.UseInMemoryDatabase(_dbName);
                });
            });
        }
    }

A: // add first

context.Database.EnsureDeleted();

context.Database.EnsureCreated();

A: We isolate the test from each other in the following way when we create the DbContext:
private static DbContextOptions<ApplicationDbContext> CreateDbContextOptions()
{
    return new DbContextOptionsBuilder<ApplicationDbContext>()
        //Database with same name gets reused, so let's isolate the tests from each other...
        .UseInMemoryDatabase(Guid.NewGuid().ToString())
        .Options;
}

In the test class:
using (var context = new ApplicationDbContext(DbContextTestHelper.CreateDbContextOptions())
{
    //arrange data in context

    var testee = new XY(context);

    //do test

    //do asserts
}

redpajama_set_name: RedPajamaStackExchange


After years of non-communication or miscommunication, the United States and Iran are in direct dialogue over Iran's nuclear program. This is a great beginning, but will the engagement lead to a settlement? There are the idealists who see the deal all but done, the defeatists who see no chance for a breakthrough, and the realists who see the development as a historic opportunity that is constrained by serious challenges on both sides.
More significantly, there are the supporters and the detractors. While the latter remain dominant in both sides, they are increasingly becoming defensive given their lack of a better alternative to a diplomatic solution to the protracted conflict. The fact is, more western sanctions and threats of force have resulted in more Iranian centrifuges and enriched uranium at progressively higher grades. The detractors have indeed disserved themselves by standing against diplomacy.


text:
Historical Reprints Religion LEGENDS OF THE JEWS Volume 2
LEGENDS OF THE JEWS Volume 2
Catalog # SKU1274
Author Name Louis Ginzberg
BIBLE TIMES AND CHARACTERS
FROM JOSEPH TO THE EXODUS
My efforts have been directed to bringing together as full as possible a collection of Jewish legends that deal with Biblical personages and events. The sources of those legends and explanations of some of them will be given
Jacob was not exempt from the lot that falls to the share of all the pious. Whenever they expect to enjoy life in tranquillity, Satan hinders them. He appears before God, and says: "Is it not enough that the future world is set apart for the pious? What right have they to enjoy this world, besides?" After the many hardships and conflicts that had beset the path of Jacob, he thought he would be at rest at last, and then came the loss of Joseph and inflicted the keenest suffering.
Verily, few and evil had been the days of the years of Jacob's pilgrimage, for the time spent outside of the Holy Land had seemed joyless to him. Only the portion of his life passed in the land of his fathers, during which he was occupied with making proselytes, in accordance with the example set him by Abraham and Isaac, did he consider worth while having lived, and this happy time was of short duration. When Joseph was snatched away, but eight years had elapsed since his return to his father's house.
And yet it was only for the sake of Joseph that Jacob had been willing to undergo all the troubles and the adversity connected with his sojourn in the house of Laban. Indeed, Jacob's blessing in having his quiver full of children was due to the merits of Joseph, and likewise the dividing of the Red Sea and of the Jordan for the Israelites was the reward for his son's piety. For among the sons of Jacob Joseph was the one that resembled his father most closely in appearance, and, also, he was the one to whom Jacob transmitted the instruction and knowledge he had received from his teachers Shem and Eber.
The whole course of the son's life is but a repetition of the father's. As the mother of Jacob remained childless for a long time after her marriage, so also the mother of Joseph. As Rebekah had undergone severe suffering in giving birth to Jacob, so Rachel in giving birth to Joseph. As Jacob's mother bore two sons, so also Joseph's mother. Like Jacob, Joseph was born circumcised. As the father was a shepherd, so the son. As the father served for the sake of a woman, so the son served under a woman. Like the father, the son appropriated his older brother's birthright.
The father was hated by his brother, and the son was hated by his brethren. The father was the favorite son as compared with his brother, so was the son as compared with his brethren. Both the father and the son lived in the land of the stranger. The father became a servant to a master, also the son. The master whom the father served was blessed by God, so was the master whom the son served. The father and the son were both accompanied by angels, and both married their wives outside of the Holy Land. The father and the son were both blessed with wealth. Great things were announced to the father in a dream, so also to the son. As the father went to Egypt and put an end to famine, so the son. As the father exacted the promise from his sons to bury him in the Holy Land, so also the son. The father died in Egypt, there died also the son. The body of the father was embalmed, also the body of the son. As the father's remains were carried to the Holy Land for interment, so also the remains of the son. Jacob the father provided for the sustenance of his son Joseph during a period of seventeen years, so Joseph the son provided for his father Jacob during a period of seventeen years.
Until he was seventeen years old, Joseph frequented the Bet ha-Midrash, and he became so learned that he could impart to his brethren the Halakot he had heard from his father, and in this way he may be regarded as their teacher. He did not stop at formal instruction, he also tried to give them good counsel, and he became the favorite of the sons of the handmaids, who would kiss and embrace him.
295 + pages - 8 x 5 inches SoftCover
View Expanded Large view of Cover
Book of Tephi (larger print comb-bound)
Secret in the Bible
Doctor from Lhasa
Re-Inheriting the Earth


text:
Do Shut Up (Number 345346534)
Bobby Charlton today :
"I think it [the shortage of strikers in the England World Cup squad] is one of the problems with having so many foreign players in the Premier League nowadays. We can't put restrictions on foreign players as such, but it would be good to have some sort of system in place. Perhaps making sure there are three home-grown players in every team would improve things."
Which would mean restricting the number of foreign players to eight ? As such ? Or am I missing something ?
That's Nice For You
Gaining The Advantage
Big Sigh Of Relief
I Prefer Extortion - The X Makes It Sound Sexy
Phoenix From The Flames


I need to be honest when I say that I hadn't heard of the Grand Ole Opry before I went to Nashville. It was something that came up a few times in conversations prior to my trip, but I was still fairly in the dark about it.
To put it in fairly simple, potentially blasphemous terms - the Grand Ole Opry is the Vatican City of country music. And the Ryman Auditorium is Sistine Chapel.
In more accurate terms, the Grand Ole Opry began as a country music radio show in 1925. A lot has changed since then - venues, members, even country music itself. But the show is still broadcast live every week.
What did strike me is the story of two women, both of whom had an integral part to play in the story of the Grand Ole Opry.
In 1920, the Ryman Auditorium hired Lula C. Naff as general manager. As I walked through the timeline displayed in the venue, it became very clear that Lula was a feisty powerhouse, who kept the troubled Ryman in the black for five decades, and ran the place with an iron fist.
In those times, it would have been unheard of for a woman to undertake this role. To avoid the sexism she would have undoubtedly encountered, Lula referred to herself in all correspondence under the name LC Naff. By the time she met those she'd been doing business with, the fact that she was a woman could not undermine the fact that she was getting the job done.
I just love the idea of a guy meeting her for the first time, and realising that LC was Lula. Had this ever been an issue, I would have loved to have seen her reaction.
Regardless of her gender, the management style and success of Naff was legendary, and her influence and power still lives on in the Ryman.
A bronze statue of Minnie Pearl is one of the first things you see upon entering the Ryman. With her Sunday best on and a price tag poking out of her hat, Minnie graced the stage of the Opry for over fifty years. Something of a 'hillbilly comedian', Minnie would gently poke fun at Southern culture, her family members, and mostly herself. Each performance would begin with a raucous "Hoooowdeee!" to which the audience members would echo their response.
It scared the life out of me when a person watching a clip at the Ryman loudly did the same.
She was played by Sarah Cannon, a philanthropic Tennessee native who played two major roles in Nashville. With her generally 'hilllbilly' act yet respected place within the society of Nashville, she bridged the gap between country and elite society, at a time when the gap was fairly substantial.
Perhaps most importantly, she played an enormous role in cancer research. After recovering from breast cancer, she became a spokeswoman for the local centre where she was treated, as well as setting up the Minnie Pearl Cancer Foundation. Just prior to her death, the centre became the Sarah Cannon Research Institute, and the role she played in awareness and the early detection of cancer is immeasurable.


text:
Jonathan Stewart back at Panthers practice after missing Week 1
Published: Sep 12, 2012 at 12:20 PM
CHARLOTTE, N.C. -- Carolina Panthers running Jonathan Stewart returned to practice after missing the season opener with a sprained right ankle.
Rapoport: Week 2 game rankings
Week 2 offers a bevy of highly enticing matchups, and Ian Rapoport is here to rank them. Which game claims No. 1? More ...
Stewart says he's "making progress" in rehab and is "optimistic" he'll play Sunday in Carolina's home opener Sunday against the New Orleans Saints.
The Panthers can certainly use Stewart's help in the running game after tying a franchise-low with 10 yards rushing in a 16-10 loss to the Tampa Bay Buccaneers.
Stewart, who received a five-year contract extension this summer, sprained his right ankle in Carolina's third preseason game and was questionable leading into the season opener.
However, coach Ron Rivera erred on the side of caution and kept Stewart out of action. Stewart says there was no way he could have played. It was the first game Stewart has missed during his four NFL seasons.
Tennessee man convicted in murder of C.J. Beathard's brother
A Tennessee man was convicted Thursday in the stabbing deaths of two college students, including Jacksonville Jaguars quarterback C.J. Beathard's brother, outside a Nashville bar in 2019.
Cardinals star CB Patrick Peterson set to play out contract
Arizona Cardinals cornerback Patrick Peterson is set to play out the final year of his contract, but things could get interesting for the eight-time Pro Bowler after this season.
Bears, Saints loomed under the radar in pursuit of Tom Brady
It seems the Bucs and Chargers weren't the only teams interested in acquiring Tom Brady this offseason. NFL Network Insider Ian Rapoport sheds additional light on the courting of the star QB, who also drew interest from the Bears and Saints.
49ers to split $1 million among 9 groups in fight for equality
Jim Trotter reveals the details of the 49ers' decision to split $1 million in grants among nine organizations to further the movement for social justice.
Howard Mudd, former All-Pro OL and longtime NFL assistant coach, passes away at 78
Howard Mudd, a former NFL lineman who coached in the league for 38 seasons, passed away Wednesday, his family announced. Mudd was surrounded by family after suffering multiple injuries from a motorcycle accident in late July. He was 78.
Maryland's Michael Locksley forms group for minority football coaches
Frustrated by the slow pace of minority hiring in college and professional football, Maryland's Michael Locksley has created the National Coalition of Minority Football Coaches. The nonprofit will seek to groom coaches of color for upward mobility.
Phil Krueger, first GM of the Buccaneers, passes away
Phil Krueger, who helped build a dominant defense as an assistant for 1967 national champion Southern California and later became part of the first coaching staff in Tampa Bay Buccaneers' history, has died. He was 90.
Panthers HC Matt Rhule considers kneeling during national anthem
Carolina Panthers coach Matt Rhule said he's considering kneeling alongside his players during the national anthem this season in support of the movement against racial injustice.
Miss State RB: I won't represent 'this State' until flag is changed
Mississippi State's Kylin Hill announced via social media on Monday that he will not be "representing this State" until the Mississippi state flag, which features the Confederate battle emblem, is changed.
Mike Gundy meets with OK State players, commits to changes
Oklahoma State's Chuba Hubbard expressed unity with head coach Mike Gundy in a video on Monday after threatening a boycott earlier in the day when he took exception to an OAN T-shirt worn by the coach.
Attorneys for Baker, Dunbar claim clients' innocence
The attorneys for New York Giants cornerback DeAndre Baker and Seattle Seahawks cornerback Quinton Dunbar have issued statements claiming the innocence of their clients following an arrest warrant issued on Thursday.
Owners to vote on resolution to incentivize minority HC, GM hires
The NFL will present a pair of resolutions to increase coaching and GM opportunities for minorities this coming Tuesday during the owners' virtual meeting, Jim Trotter reports.


text:
from functools import partial
import os

import numpy as np
from scipy import sparse, linalg, stats
from numpy.testing import (assert_equal, assert_array_equal,
                           assert_array_almost_equal, assert_allclose)
import pytest

from mne import (SourceEstimate, VolSourceEstimate, MixedSourceEstimate,
                 SourceSpaces)
from mne.parallel import _force_serial
from mne.stats import ttest_ind_no_p, combine_adjacency
from mne.stats.cluster_level import (permutation_cluster_test, f_oneway,
                                     permutation_cluster_1samp_test,
                                     spatio_temporal_cluster_test,
                                     spatio_temporal_cluster_1samp_test,
                                     ttest_1samp_no_p, summarize_clusters_stc)
from mne.utils import (catch_logging, check_version, requires_sklearn,
                       _record_warnings)

n_space = 50

def _get_conditions():
    noise_level = 20
    n_time_1 = 20
    n_time_2 = 13
    normfactor = np.hanning(20).sum()
    rng = np.random.RandomState(42)
    condition1_1d = rng.randn(n_time_1, n_space) * noise_level
    for c in condition1_1d:
        c[:] = np.convolve(c, np.hanning(20), mode="same") / normfactor

    condition2_1d = rng.randn(n_time_2, n_space) * noise_level
    for c in condition2_1d:
        c[:] = np.convolve(c, np.hanning(20), mode="same") / normfactor

    pseudoekp = 10 * np.hanning(25)[None, :]
    condition1_1d[:, 25:] += pseudoekp
    condition2_1d[:, 25:] -= pseudoekp

    condition1_2d = condition1_1d[:, :, np.newaxis]
    condition2_2d = condition2_1d[:, :, np.newaxis]
    return condition1_1d, condition2_1d, condition1_2d, condition2_2d

def test_thresholds(numba_conditional):
    """Test automatic threshold calculations."""
    # within subjects
    rng = np.random.RandomState(0)
    X = rng.randn(10, 1, 1) + 0.08
    want_thresh = -stats.t.ppf(0.025, len(X) - 1)
    assert 0.03 < stats.ttest_1samp(X[:, 0, 0], 0)[1] < 0.05
    my_fun = partial(ttest_1samp_no_p)
    with catch_logging() as log:
        with pytest.warns(RuntimeWarning, match='threshold is only valid'):
            out = permutation_cluster_1samp_test(
                X, stat_fun=my_fun, seed=0, verbose=True, out_type='mask')
    log = log.getvalue()
    assert str(want_thresh)[:6] in log
    assert len(out[1]) == 1  # 1 cluster
    assert_allclose(out[2], 0.033203, atol=1e-6)
    # between subjects
    Y = rng.randn(10, 1, 1)
    Z = rng.randn(10, 1, 1) - 0.7
    X = [X, Y, Z]
    want_thresh = stats.f.ppf(1. - 0.05, 2, sum(len(a) for a in X) - len(X))
    p = stats.f_oneway(*X)[1]
    assert 0.03 < p < 0.05
    my_fun = partial(f_oneway)  # just to make the check fail
    with catch_logging() as log:
        with pytest.warns(RuntimeWarning, match='threshold is only valid'):
            out = permutation_cluster_test(X, tail=1, stat_fun=my_fun,
                                           seed=0, verbose=True,
                                           out_type='mask')
    log = log.getvalue()
    assert str(want_thresh)[:6] in log
    assert len(out[1]) == 1  # 1 cluster
    assert_allclose(out[2], 0.041992, atol=1e-6)
    with pytest.warns(RuntimeWarning, match='Ignoring argument "tail"'):
        permutation_cluster_test(X, tail=0, out_type='mask')

    # nan handling in TFCE
    X = np.repeat(X[0], 2, axis=1)
    X[:, 1] = 0
    with pytest.warns(RuntimeWarning, match='invalid value'):  # NumPy
        out = permutation_cluster_1samp_test(
            X, seed=0, threshold=dict(start=0, step=0.1), out_type='mask')
    assert (out[2] < 0.05).any()
    assert not (out[2] < 0.05).all()
    X[:, 0] = 0
    with pytest.raises(RuntimeError, match='finite'):
        with np.errstate(invalid='ignore'):
            permutation_cluster_1samp_test(
                X, seed=0, threshold=dict(start=0, step=0.1),
                buffer_size=None, out_type='mask')

def test_cache_dir(tmp_path, numba_conditional):
    """Test use of cache dir."""
    tempdir = str(tmp_path)
    orig_dir = os.getenv('MNE_CACHE_DIR', None)
    orig_size = os.getenv('MNE_MEMMAP_MIN_SIZE', None)
    rng = np.random.RandomState(0)
    X = rng.randn(9, 2, 10)
    try:
        os.environ['MNE_MEMMAP_MIN_SIZE'] = '1K'
        os.environ['MNE_CACHE_DIR'] = tempdir
        # Fix error for #1507: in-place when memmapping
        with catch_logging() as log_file:
            permutation_cluster_1samp_test(
                X, buffer_size=None, n_jobs=2, n_permutations=1, seed=0,
                stat_fun=ttest_1samp_no_p, verbose=False, out_type='mask')
        assert 'independently' not in log_file.getvalue()
        # ensure that non-independence yields warning
        stat_fun = partial(ttest_1samp_no_p, sigma=1e-3)
        if check_version('numpy', '1.17'):
            random_state = np.random.default_rng(0)
        else:
            random_state = 0
        with pytest.warns(RuntimeWarning, match='independently'):
            permutation_cluster_1samp_test(
                X, buffer_size=10, n_jobs=2, n_permutations=1,
                seed=random_state, stat_fun=stat_fun, verbose=False,
                out_type='mask')
    finally:
        if orig_dir is not None:
            os.environ['MNE_CACHE_DIR'] = orig_dir
        else:
            del os.environ['MNE_CACHE_DIR']
        if orig_size is not None:
            os.environ['MNE_MEMMAP_MIN_SIZE'] = orig_size
        else:
            del os.environ['MNE_MEMMAP_MIN_SIZE']

def test_permutation_large_n_samples(numba_conditional):
    """Test that non-replacement works with large N."""
    X = np.random.RandomState(0).randn(72, 1) + 1
    for n_samples in (11, 72):
        tails = (0, 1) if n_samples <= 20 else (0,)
        for tail in tails:
            H0 = permutation_cluster_1samp_test(
                X[:n_samples], threshold=1e-4, tail=tail, out_type='mask')[-1]
            assert H0.shape == (1024,)
            assert len(np.unique(H0)) >= 1024 - (H0 == 0).sum()

def test_permutation_step_down_p(numba_conditional):
    """Test cluster level permutations with step_down_p."""
    rng = np.random.RandomState(0)
    # subjects, time points, spatial points
    X = rng.randn(9, 2, 10)
    # add some significant points
    X[:, 0:2, 0:2] += 2  # span two time points and two spatial points
    X[:, 1, 5:9] += 0.5  # span four time points with 4x smaller amplitude
    thresh = 2
    # make sure it works when we use ALL points in step-down
    t, clusters, p, H0 = \
        permutation_cluster_1samp_test(X, threshold=thresh,
                                       step_down_p=1.0, out_type='mask')
    # make sure using step-down will actually yield improvements sometimes
    t, clusters, p_old, H0 = \
        permutation_cluster_1samp_test(X, threshold=thresh,
                                       step_down_p=0.0, out_type='mask')
    assert_equal(np.sum(p_old < 0.05), 1)  # just spatial cluster
    p_min = np.min(p_old)
    assert_allclose(p_min, 0.003906, atol=1e-6)
    t, clusters, p_new, H0 = \
        permutation_cluster_1samp_test(X, threshold=thresh,
                                       step_down_p=0.05, out_type='mask')
    assert_equal(np.sum(p_new < 0.05), 2)  # time one rescued
    assert np.all(p_old >= p_new)
    p_next = p_new[(p_new > 0.004) & (p_new < 0.05)][0]
    assert_allclose(p_next, 0.015625, atol=1e-6)

def test_cluster_permutation_test(numba_conditional):
    """Test cluster level permutations tests."""
    condition1_1d, condition2_1d, condition1_2d, condition2_2d = \
        _get_conditions()
    for condition1, condition2 in zip((condition1_1d, condition1_2d),
                                      (condition2_1d, condition2_2d)):
        T_obs, clusters, cluster_p_values, hist = permutation_cluster_test(
            [condition1, condition2], n_permutations=100, tail=1, seed=1,
            buffer_size=None, out_type='mask')
        p_min = np.min(cluster_p_values)
        assert_equal(np.sum(cluster_p_values < 0.05), 1)
        assert_allclose(p_min, 0.01, atol=1e-6)

        # test with 2 jobs and buffer_size enabled
        buffer_size = condition1.shape[1] // 10
        T_obs, clusters, cluster_p_values_buff, hist =\
            permutation_cluster_test([condition1, condition2],
                                     n_permutations=100, tail=1, seed=1,
                                     n_jobs=2, buffer_size=buffer_size,
                                     out_type='mask')
        assert_array_equal(cluster_p_values, cluster_p_values_buff)

    def stat_fun(X, Y):
        return stats.f_oneway(X, Y)[0]

    with pytest.warns(RuntimeWarning, match='is only valid'):
        permutation_cluster_test([condition1, condition2], n_permutations=1,
                                 stat_fun=stat_fun, out_type='mask')

@pytest.mark.parametrize('stat_fun', [
    ttest_1samp_no_p,
    partial(ttest_1samp_no_p, sigma=1e-1)
])
def test_cluster_permutation_t_test(numba_conditional, stat_fun):
    """Test cluster level permutations T-test."""
    condition1_1d, condition2_1d, condition1_2d, condition2_2d = \
        _get_conditions()

    # use a very large sigma to make sure Ts are not independent
    for condition1, p in ((condition1_1d, 0.01),
                          (condition1_2d, 0.01)):
        # these are so significant we can get away with fewer perms
        T_obs, clusters, cluster_p_values, hist =\
            permutation_cluster_1samp_test(condition1, n_permutations=100,
                                           tail=0, seed=1, out_type='mask',
                                           buffer_size=None)
        assert_equal(np.sum(cluster_p_values < 0.05), 1)
        p_min = np.min(cluster_p_values)
        assert_allclose(p_min, p, atol=1e-6)

        T_obs_pos, c_1, cluster_p_values_pos, _ =\
            permutation_cluster_1samp_test(condition1, n_permutations=100,
                                           tail=1, threshold=1.67, seed=1,
                                           stat_fun=stat_fun, out_type='mask',
                                           buffer_size=None)

        T_obs_neg, _, cluster_p_values_neg, _ =\
            permutation_cluster_1samp_test(-condition1, n_permutations=100,
                                           tail=-1, threshold=-1.67,
                                           seed=1, stat_fun=stat_fun,
                                           buffer_size=None, out_type='mask')
        assert_array_equal(T_obs_pos, -T_obs_neg)
        assert_array_equal(cluster_p_values_pos < 0.05,
                           cluster_p_values_neg < 0.05)

        # test with 2 jobs and buffer_size enabled
        buffer_size = condition1.shape[1] // 10
        with _record_warnings():  # sometimes "independently"
            T_obs_neg_buff, _, cluster_p_values_neg_buff, _ = \
                permutation_cluster_1samp_test(
                    -condition1, n_permutations=100, tail=-1, out_type='mask',
                    threshold=-1.67, seed=1, n_jobs=2, stat_fun=stat_fun,
                    buffer_size=buffer_size)

        assert_array_equal(T_obs_neg, T_obs_neg_buff)
        assert_array_equal(cluster_p_values_neg, cluster_p_values_neg_buff)

        # Bad stat_fun
        with pytest.raises(TypeError, match='must be .* ndarray'):
            permutation_cluster_1samp_test(
                condition1, threshold=1, stat_fun=lambda x: None,
                out_type='mask')
        with pytest.raises(ValueError, match='not compatible'):
            permutation_cluster_1samp_test(
                condition1, threshold=1, stat_fun=lambda x: stat_fun(x)[:-1],
                out_type='mask')

@requires_sklearn
def test_cluster_permutation_with_adjacency(numba_conditional):
    """Test cluster level permutations with adjacency matrix."""
    from sklearn.feature_extraction.image import grid_to_graph
    condition1_1d, condition2_1d, condition1_2d, condition2_2d = \
        _get_conditions()

    n_pts = condition1_1d.shape[1]
    # we don't care about p-values in any of these, so do fewer permutations
    args = dict(seed=None, max_step=1, exclude=None, out_type='mask',
                step_down_p=0, t_power=1, threshold=1.67,
                check_disjoint=False, n_permutations=50)

    did_warn = False
    for X1d, X2d, func, spatio_temporal_func in \
            [(condition1_1d, condition1_2d,
              permutation_cluster_1samp_test,
              spatio_temporal_cluster_1samp_test),
             ([condition1_1d, condition2_1d],
              [condition1_2d, condition2_2d],
              permutation_cluster_test,
              spatio_temporal_cluster_test)]:
        out = func(X1d, **args)
        adjacency = grid_to_graph(1, n_pts)
        out_adjacency = func(X1d, adjacency=adjacency, **args)
        assert_array_equal(out[0], out_adjacency[0])
        for a, b in zip(out_adjacency[1], out[1]):
            assert_array_equal(out[0][a], out[0][b])
            assert np.all(a[b])

        # test spatio-temporal w/o time adjacency (repeat spatial pattern)
        adjacency_2 = sparse.coo_matrix(
            linalg.block_diag(adjacency.asfptype().todense(),
                              adjacency.asfptype().todense()))
        # nesting here is time then space:
        adjacency_2a = combine_adjacency(np.eye(2), adjacency)
        assert_array_equal(adjacency_2.toarray().astype(bool),
                           adjacency_2a.toarray().astype(bool))

        if isinstance(X1d, list):
            X1d_2 = [np.concatenate((x, x), axis=1) for x in X1d]
        else:
            X1d_2 = np.concatenate((X1d, X1d), axis=1)

        out_adjacency_2 = func(X1d_2, adjacency=adjacency_2, **args)
        # make sure we were operating on the same values
        split = len(out[0])
        assert_array_equal(out[0], out_adjacency_2[0][:split])
        assert_array_equal(out[0], out_adjacency_2[0][split:])

        # make sure we really got 2x the number of original clusters
        n_clust_orig = len(out[1])
        assert len(out_adjacency_2[1]) == 2 * n_clust_orig

        # Make sure that we got the old ones back
        data_1 = {np.sum(out[0][b[:n_pts]]) for b in out[1]}
        data_2 = {np.sum(out_adjacency_2[0][a]) for a in
                  out_adjacency_2[1][:]}
        assert len(data_1.intersection(data_2)) == len(data_1)

        # now use the other algorithm
        if isinstance(X1d, list):
            X1d_3 = [np.reshape(x, (-1, 2, n_space)) for x in X1d_2]
        else:
            X1d_3 = np.reshape(X1d_2, (-1, 2, n_space))

        out_adjacency_3 = spatio_temporal_func(
            X1d_3, n_permutations=50, adjacency=adjacency,
            max_step=0, threshold=1.67, check_disjoint=True)
        # make sure we were operating on the same values
        split = len(out[0])
        assert_array_equal(out[0], out_adjacency_3[0][0])
        assert_array_equal(out[0], out_adjacency_3[0][1])

        # make sure we really got 2x the number of original clusters
        assert len(out_adjacency_3[1]) == 2 * n_clust_orig

        # Make sure that we got the old ones back
        data_1 = {np.sum(out[0][b[:n_pts]]) for b in out[1]}
        data_2 = {np.sum(out_adjacency_3[0][a[0], a[1]]) for a in
                  out_adjacency_3[1]}
        assert len(data_1.intersection(data_2)) == len(data_1)

        # test new versus old method
        out_adjacency_4 = spatio_temporal_func(
            X1d_3, n_permutations=50, adjacency=adjacency,
            max_step=2, threshold=1.67)
        out_adjacency_5 = spatio_temporal_func(
            X1d_3, n_permutations=50, adjacency=adjacency,
            max_step=1, threshold=1.67)

        # clusters could be in a different order
        sums_4 = [np.sum(out_adjacency_4[0][a])
                  for a in out_adjacency_4[1]]
        sums_5 = [np.sum(out_adjacency_4[0][a])
                  for a in out_adjacency_5[1]]
        sums_4 = np.sort(sums_4)
        sums_5 = np.sort(sums_5)
        assert_array_almost_equal(sums_4, sums_5)

        if not _force_serial:
            pytest.raises(ValueError, spatio_temporal_func, X1d_3,
                          n_permutations=1, adjacency=adjacency,
                          max_step=1, threshold=1.67, n_jobs=-1000)

        # not enough TFCE params
        with pytest.raises(KeyError, match='threshold, if dict, must have'):
            spatio_temporal_func(
                X1d_3, adjacency=adjacency, threshold=dict(me='hello'))

        # too extreme a start threshold
        with _record_warnings() as w:
            spatio_temporal_func(X1d_3, adjacency=adjacency,
                                 threshold=dict(start=10, step=1))
        if not did_warn:
            assert len(w) == 1
            did_warn = True

        with pytest.raises(ValueError, match='threshold.*<= 0 for tail == -1'):
            spatio_temporal_func(
                X1d_3, adjacency=adjacency, tail=-1,
                threshold=dict(start=1, step=-1))
        with pytest.warns(RuntimeWarning, match='threshold.* is more extreme'):
            spatio_temporal_func(
                X1d_3, adjacency=adjacency, tail=1,
                threshold=dict(start=100, step=1))
        bad_con = adjacency.todense()
        with pytest.raises(ValueError, match='must be a SciPy sparse matrix'):
            spatio_temporal_func(
                X1d_3, n_permutations=50, adjacency=bad_con,
                max_step=1, threshold=1.67)
        bad_con = adjacency.tocsr()[:-1, :-1].tocoo()
        with pytest.raises(ValueError, match='adjacency.*the correct size'):
            spatio_temporal_func(
                X1d_3, n_permutations=50, adjacency=bad_con,
                max_step=1, threshold=1.67)
        with pytest.raises(TypeError, match='must be a'):
            spatio_temporal_func(
                X1d_3, adjacency=adjacency, threshold=[])
        with pytest.raises(ValueError, match='Invalid value for the \'tail\''):
            # sometimes ignoring tail
            with _record_warnings():
                spatio_temporal_func(
                    X1d_3, adjacency=adjacency, tail=2)

        # make sure it actually found a significant point
        out_adjacency_6 = spatio_temporal_func(
            X1d_3, n_permutations=50, adjacency=adjacency, max_step=1,
            threshold=dict(start=1, step=1))
        assert np.min(out_adjacency_6[2]) < 0.05

        with pytest.raises(ValueError, match='not compatible'):
            with pytest.warns(RuntimeWarning, match='No clusters'):
                spatio_temporal_func(
                    X1d_3, n_permutations=50, adjacency=adjacency,
                    threshold=1e-3, stat_fun=lambda *x: f_oneway(*x)[:-1],
                    buffer_size=None)

@pytest.mark.parametrize('threshold', [
    0.1,
    pytest.param(dict(start=0., step=0.5), id='TFCE'),
])
@pytest.mark.parametrize('kind', ('1samp', 'ind'))
def test_permutation_cluster_signs(threshold, kind):
    """Test cluster signs."""
    # difference between two conditions for 3 subjects x 2 vertices x 2 times
    X = np.array([[[-10, 5], [-2, -7]],
                  [[-4, 5], [-8, -0]],
                  [[-6, 3], [-4, -2]]], float)
    want_signs = np.sign(np.mean(X, axis=0))
    n_permutations = 1
    if kind == '1samp':
        func = permutation_cluster_1samp_test
        stat_fun = ttest_1samp_no_p
        use_X = X
    else:
        assert kind == 'ind'
        func = permutation_cluster_test
        stat_fun = ttest_ind_no_p
        use_X = [X, np.random.RandomState(0).randn(*X.shape) * 0.1]
    tobs, clu, clu_pvalues, _ = func(
        use_X, n_permutations=n_permutations, threshold=threshold, tail=0,
        stat_fun=stat_fun, out_type='mask')
    clu_signs = np.zeros(X.shape[1:])
    used = np.zeros(X.shape[1:])
    assert len(clu) == len(clu_pvalues)
    for c, p in zip(clu, clu_pvalues):
        assert not used[c].any()
        assert len(np.unique(np.sign(tobs[c]))) == 1
        clu_signs[c] = np.sign(tobs[c])[0]
        used[c] = True
    assert used.all()
    assert clu_signs.all()
    assert_array_equal(np.sign(tobs), want_signs)
    assert_array_equal(clu_signs, want_signs)

@requires_sklearn
def test_permutation_adjacency_equiv(numba_conditional):
    """Test cluster level permutations with and without adjacency."""
    from sklearn.feature_extraction.image import grid_to_graph
    rng = np.random.RandomState(0)
    # subjects, time points, spatial points
    n_time = 2
    n_space = 4
    X = rng.randn(6, n_time, n_space)
    # add some significant points
    X[:, :, 0:2] += 10  # span two time points and two spatial points
    X[:, 1, 3] += 20  # span one time point
    max_steps = [1, 1, 1, 2, 1]
    # This will run full algorithm in two ways, then the ST-algorithm in 2 ways
    # All of these should give the same results
    adjs = [None,
            grid_to_graph(n_time, n_space),
            grid_to_graph(1, n_space),
            grid_to_graph(1, n_space),
            None]
    stat_map = None
    thresholds = [2, 2, 2, 2, dict(start=0.01, step=1.0)]
    sig_counts = [2, 2, 2, 2, 5]
    stat_fun = partial(ttest_1samp_no_p, sigma=1e-3)

    cs = None
    ps = None
    for thresh, count, max_step, adj in zip(thresholds, sig_counts,
                                            max_steps, adjs):
        t, clusters, p, H0 = \
            permutation_cluster_1samp_test(
                X, threshold=thresh, adjacency=adj, n_jobs=2,
                max_step=max_step, stat_fun=stat_fun, seed=0, out_type='mask')
        # make sure our output datatype is correct
        assert isinstance(clusters[0], np.ndarray)
        assert clusters[0].dtype == bool
        assert_array_equal(clusters[0].shape, X.shape[1:])

        # make sure all comparisons were done; for TFCE, no perm
        # should come up empty
        inds = np.where(p < 0.05)[0]
        assert_equal(len(inds), count)
        assert_allclose(p[inds], 0.03125, atol=1e-6)
        if isinstance(thresh, dict):
            assert_equal(len(clusters), n_time * n_space)
            assert np.all(H0 != 0)
            continue
        this_cs = [clusters[ii] for ii in inds]
        this_ps = p[inds]
        this_stat_map = np.zeros((n_time, n_space), dtype=bool)
        for ci, c in enumerate(this_cs):
            if isinstance(c, tuple):
                this_c = np.zeros((n_time, n_space), bool)
                for x, y in zip(c[0], c[1]):
                    this_stat_map[x, y] = True
                    this_c[x, y] = True
                this_cs[ci] = this_c
                c = this_c
            this_stat_map[c] = True
        if cs is None:
            ps = this_ps
            cs = this_cs
        if stat_map is None:
            stat_map = this_stat_map
        assert_array_equal(ps, this_ps)
        assert len(cs) == len(this_cs)
        for c1, c2 in zip(cs, this_cs):
            assert_array_equal(c1, c2)
        assert_array_equal(stat_map, this_stat_map)

@requires_sklearn
def test_spatio_temporal_cluster_adjacency(numba_conditional):
    """Test spatio-temporal cluster permutations."""
    from sklearn.feature_extraction.image import grid_to_graph
    condition1_1d, condition2_1d, condition1_2d, condition2_2d = \
        _get_conditions()

    rng = np.random.RandomState(0)
    noise1_2d = rng.randn(condition1_2d.shape[0], condition1_2d.shape[1], 10)
    data1_2d = np.transpose(np.dstack((condition1_2d, noise1_2d)), [0, 2, 1])

    noise2_d2 = rng.randn(condition2_2d.shape[0], condition2_2d.shape[1], 10)
    data2_2d = np.transpose(np.dstack((condition2_2d, noise2_d2)), [0, 2, 1])

    adj = grid_to_graph(data1_2d.shape[-1], 1)

    threshold = dict(start=4.0, step=2)
    T_obs, clusters, p_values_adj, hist = \
        spatio_temporal_cluster_test([data1_2d, data2_2d], adjacency=adj,
                                     n_permutations=50, tail=1, seed=1,
                                     threshold=threshold, buffer_size=None)

    buffer_size = data1_2d.size // 10
    T_obs, clusters, p_values_no_adj, hist = \
        spatio_temporal_cluster_test([data1_2d, data2_2d],
                                     n_permutations=50, tail=1, seed=1,
                                     threshold=threshold, n_jobs=2,
                                     buffer_size=buffer_size)

    assert_equal(np.sum(p_values_adj < 0.05), np.sum(p_values_no_adj < 0.05))

    # make sure results are the same without buffer_size
    T_obs, clusters, p_values2, hist2 = \
        spatio_temporal_cluster_test([data1_2d, data2_2d],
                                     n_permutations=50, tail=1, seed=1,
                                     threshold=threshold, n_jobs=2,
                                     buffer_size=None)
    assert_array_equal(p_values_no_adj, p_values2)
    pytest.raises(ValueError, spatio_temporal_cluster_test,
                  [data1_2d, data2_2d], tail=1, threshold=-2.)
    pytest.raises(ValueError, spatio_temporal_cluster_test,
                  [data1_2d, data2_2d], tail=-1, threshold=2.)
    pytest.raises(ValueError, spatio_temporal_cluster_test,
                  [data1_2d, data2_2d], tail=0, threshold=-1)

def ttest_1samp(X):
    """Return T-values."""
    return stats.ttest_1samp(X, 0)[0]

@pytest.mark.parametrize('kind', ('surface', 'volume', 'mixed'))
def test_summarize_clusters(kind):
    """Test cluster summary stcs."""
    src_surf = SourceSpaces(
        [dict(vertno=np.arange(10242), type='surf') for _ in range(2)])
    assert src_surf.kind == 'surface'
    src_vol = SourceSpaces(
        [dict(vertno=np.arange(10), type='vol')])
    assert src_vol.kind == 'volume'
    if kind == 'surface':
        src = src_surf
        klass = SourceEstimate
    elif kind == 'volume':
        src = src_vol
        klass = VolSourceEstimate
    else:
        assert kind == 'mixed'
        src = src_surf + src_vol
        klass = MixedSourceEstimate
    n_vertices = sum(len(s['vertno']) for s in src)
    clu = (np.random.random([1, n_vertices]),
           [(np.array([0]), np.array([0, 2, 4]))],
           np.array([0.02, 0.1]),
           np.array([12, -14, 30]))
    kwargs = dict()
    if kind == 'volume':
        with pytest.raises(ValueError, match='did not match'):
            summarize_clusters_stc(clu)
        assert len(src) == 1
        kwargs['vertices'] = [src[0]['vertno']]
    elif kind == 'mixed':
        kwargs['vertices'] = src
    stc_sum = summarize_clusters_stc(clu, **kwargs)
    assert isinstance(stc_sum, klass)
    assert stc_sum.data.shape[1] == 2
    clu[2][0] = 0.3
    with pytest.raises(RuntimeError, match='No significant'):
        summarize_clusters_stc(clu, **kwargs)

def test_permutation_test_H0(numba_conditional):
    """Test that H0 is populated properly during testing."""
    rng = np.random.RandomState(0)
    data = rng.rand(7, 10, 1) - 0.5
    with pytest.warns(RuntimeWarning, match='No clusters found'):
        t, clust, p, h0 = spatio_temporal_cluster_1samp_test(
            data, threshold=100, n_permutations=1024, seed=rng)
    assert_equal(len(h0), 0)

    for n_permutations in (1024, 65, 64, 63):
        t, clust, p, h0 = spatio_temporal_cluster_1samp_test(
            data, threshold=0.1, n_permutations=n_permutations, seed=rng)
        assert_equal(len(h0), min(n_permutations, 64))
        assert isinstance(clust[0], tuple)  # sets of indices
    for tail, thresh in zip((-1, 0, 1), (-0.1, 0.1, 0.1)):
        t, clust, p, h0 = spatio_temporal_cluster_1samp_test(
            data, threshold=thresh, seed=rng, tail=tail, out_type='mask')
        assert isinstance(clust[0], np.ndarray)  # bool mask
        # same as "128 if tail else 64"
        assert_equal(len(h0), 2 ** (7 - (tail == 0)))  # exact test

def test_tfce_thresholds(numba_conditional):
    """Test TFCE thresholds."""
    rng = np.random.RandomState(0)
    data = rng.randn(7, 10, 1) - 0.5

    # if tail==-1, step must also be negative
    with pytest.raises(ValueError, match='must be < 0 for tail == -1'):
        permutation_cluster_1samp_test(
            data, tail=-1, out_type='mask', threshold=dict(start=0, step=0.1))
    # this works (smoke test)
    permutation_cluster_1samp_test(data, tail=-1, out_type='mask',
                                   threshold=dict(start=0, step=-0.1))

    # thresholds must be monotonically increasing
    with pytest.raises(ValueError, match='must be monotonically increasing'):
        permutation_cluster_1samp_test(
            data, tail=1, out_type='mask', threshold=dict(start=1, step=-0.5))

    # Should work with 2D data too
    permutation_cluster_1samp_test(X=data[..., 0],
                                   threshold=dict(start=0, step=0.2))

# 1D gives slices, 2D+ gives boolean masks
@pytest.mark.parametrize('shape', ((11,), (11, 3), (11, 1, 2)))
@pytest.mark.parametrize('out_type', ('mask', 'indices'))
@pytest.mark.parametrize('adjacency', (None, 'sparse'))
def test_output_equiv(shape, out_type, adjacency):
    """Test equivalence of output types."""
    rng = np.random.RandomState(0)
    n_subjects = 10
    data = rng.randn(n_subjects, *shape)
    data -= data.mean(axis=0, keepdims=True)
    data[:, 2:4] += 2
    data[:, 6:9] += 2
    want_mask = np.zeros(shape, int)
    want_mask[2:4] = 1
    want_mask[6:9] = 2
    if adjacency is not None:
        assert adjacency == 'sparse'
        adjacency = combine_adjacency(*shape)
    clusters = permutation_cluster_1samp_test(
        X=data, n_permutations=1, adjacency=adjacency, out_type=out_type)[1]
    got_mask = np.zeros_like(want_mask)
    for n, clu in enumerate(clusters, 1):
        if out_type == 'mask':
            if len(shape) == 1 and adjacency is None:
                assert isinstance(clu, tuple)
                assert len(clu) == 1
                assert isinstance(clu[0], slice)
            else:
                assert isinstance(clu, np.ndarray)
                assert clu.dtype == bool
                assert clu.shape == shape
            got_mask[clu] = n
        else:
            assert isinstance(clu, tuple)
            for c in clu:
                assert isinstance(c, np.ndarray)
                assert c.dtype.kind == 'i'
            assert out_type == 'indices'
            got_mask[np.ix_(*clu)] = n
    assert_array_equal(got_mask, want_mask)

redpajama_set_name: RedPajamaGithub


Now, hit Windows Key + R, type regedit, and press OK. When the Registry Editor opens, press CTRL + F, then search for HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdate. If it doesn't find the registry entry, try and locate it manually. Sometimes the Registry Editor search loses its way, but the entry is there.
Another handy bluescreen error code tool is Nirsoft's BlueScreenView. It helps you better understand the error codes so you can isolate issues much faster!


text:
Love Lock Down Kanye West
Editing was done by Nick Allix. During the song's choruses, African tribe members appear, beating on djembe drums to the rhythm of song. He is trying to make her see there is no end to that. He loves her so much, but ultimately all he can get back is friendship. He wants there to be more to their relationship, but she's keeping any strong feelings that she might have for him locked up inside.
SongMeanings is a place for discussion and discovery. He wants to cut all ties and leave, but he just can't bear to leave her - so he stays.
The man has a family that is more important to him than anything else, but he has allowed himself to fall in love with another woman. Log in now to tell us what you think this song means. Select singles in the Format field.
Possibly a break up note, he knows this girl is truly in love with him as well, he doesn't want her wasting the best years of her life waiting for him, living only half a life with him. British Phonographic Industry. Perhaps an adulterous love. International Dance Music Awards. You lose, you lose Im not sure what this verse means, it feels important i just dont understand it.
Now stuck in this funky limbo, he sings about how his heart tears both ways. Select Gold in the Certification field. Nielsen Business Media, Inc. The person probably means to the world to you but because things are so bad, you can't love the person the way you want to. Now keep your love locked down Your love locked down Now keep your love locked down You lose.
Kanye West - Love Lockdown Lyrics
It's totally different and not like him, and it's fresh and new. From Wikipedia, the free encyclopedia. Or hide your feelings from the world? Hi there How did derive this feeling? Billboard Hot and has since sold over three million copies in the United States.
To me this song is about a forbidden love. We do not have any tags for Love Lockdown lyrics.
So you hide your emotions from your friends and set a secret code for that person so you can still think about them, but no one else will know. No Replies Log in to reply. He cant live in both worlds any more. He is haunted worse by it now that before. Log in now to add this track to your mixtape!
List of awards and nominations received by Kanye West. The track was written by West who co-produced it with Jeff Bhasker. After announcing it as the album's first single, West posted free copies of the song on his blog for fans to download. What does this song mean to you?
He basically gives up on ever trying to be more than a friend, but he can't help think that she loses whenever she tries to get with someone else, mario fighting games because no one can love her like he can. Love Lockdown song meanings.
It is like he is re-inventing his sound and personally, I love it! Is it better to be in a rocky relationship with the perfect person?
You know it's best for you to move on, so you lockdown your emotions so you can try to get over this person. All though he felt something for the girl, he didnt feel he was being true as he knew deep down inside he would never give his family up for her. And on the idea of Kanye's new sound, honestly, I like it.
Nielsen Business Media Inc. When he is off in the danger zone, with his forbidden lover, he asks himself how many times it took before he got through? Don't play with fire, dont open yourself up to that. Recording Industry Association of America. If you don't hide your emotions, then you'll lose yourself.
Interspersed throughout the video are visuals of what appears to be a spacecraft. Nice one, couldn't have said it better myself. It also debuted at thirty-eight in Italy and thirty-nine in Sweden. It's kind of like he's saying that it's over because he can't deal with being the only one who seems to care about it anymore.
Music techno remix
Gangs of boomtown game
Dx toolbox
Songs of raincoat free download
Youtubeer for mobile free download
Artwork to free download
Led zeppelin all albums
Samadhi hindi movie songs free download
Cubase dj software free download
Online family games no free download
Shabdkosh dictionary english to hindi full version
Dsi for r4i
Tiki torch slot machine free download
Kadhalil vizhunthen mp3 free download