India's season of scraps and fightbacks
1st Test v New Zealand, Kanpur
At the end of the second day of their first Test of the home season - and their 500th overall - India weren't exactly in trouble, but were being made to work extremely hard by a spirited New Zealand side. India had batted first and made a middling 318, and the visitors, in reply, were 152 for 1, with Tom Latham and Kane Williamson showing impressive technique and resolve against the spinners while putting on an unbroken 110 for the second wicket. A shower had brought day two to an early end, soon after a couple of frustrating moments for India - a catch had been disallowed when the ball had been found to hit the strap of KL Rahul's helmet during a juggled attempt to catch Latham at short leg, and an edge to the keeper from Williamson had gone undetected by the umpire.
Come day three, though, the spinners took immediate control.R Ashwin had Latham lbw in the fifth over of the morning, and then ripped a Murali-esque offbreak through Williamson's defences. In between, Ravindra Jadeja trapped Ross Taylor plumb. New Zealand had lost three wickets for 11 runs, and would never again get in an ascendant position in a match they would go on to lose by 197 runs.
2nd Test v New Zealand, Kolkata A relaid pitch gave the seamers more help than anyone might have expected before the match, and India, batting first, were in early trouble at 46 for 3 before Cheteshwar Pujara and Ajinkya Rahane rescued them with a 141-run third-wicket stand. That, and lower-order contributions led by an unbeaten half-century from Wriddhiman Saha, led India to a first-innings total of 316.
The match seemed over as a contest when a Bhuvneshwar Kumar five-for sent New Zealand crashing to 204 all out, but India were still not home and dry. Matt Henry and Trent Boult roared in again, and reduced India to 43 for 4 - effectively 155 for 4 - in no time. Virat Kohli, after three low scores at the start of the series, began restoring India's position with a flawless, conditions-defying 46, and half-centuries from Rohit Sharma and, once again, Saha helped set a target of 376. New Zealand only managed 197.
1st Test v England, Rajkot
England couldn't have imagined a better start to their five-Test tour of India. They won the toss, batted first, and posted 537 thanks to hundreds from Joe Root, Moeen Ali and Ben Stokes. The prolific second-wicket pair of M Vijay and Pujara led India's response with a double-century stand, before England struck back with five wickets for 84 runs. India were still trailing by 176 at this stage - they drew closer to England's total thanks largely to 70 from Ashwin, and eventually conceded a first-innings lead of only 49.
It seemed then as if only India could win, but England didn't agree; Alastair Cook and Haseeb Hameed put on 180 for the first wicket, and they declared to set India 310 in a minimum of 49 overs. With winning out of the question, India endured a genuine wobble, losing four wickets in 23.4 overs, before Kohli - with first Ashwin and then Jadeja for company - batted them to safety with an unbeaten 49.
v England, Mohali
England won their second toss of the series, and failed to capitalise, folding for 283 after a succession of careless shots. India, though, weren't about to make it easy for themselves. They were going along swimmingly at 148 for 2, and Pujara had just reached another half-century when he pulled Adil Rashid straight to deep midwicket. That led soon to 156 for 5 and then 204 for 6, and it looked to be anyone's game. But not for the first or last time in the season, India's lower order made match-turning contributions - Ashwin scored 72, Jadeja a career-best 90, and Jayant Yadav 55 - to give them a 134-run first-innings lead. From then on, England had no chance.
4th Test v England, Mumbai
Once again England won the toss, and this time, they put up a substantial first-innings total, 400, thanks to a century on debut from the opener Keaton Jennings and fifties from Moeen Ali and Jos Buttler. India's top order, yet again, responded magnificently. Vijay put on century stands with Pujara and then Kohli, and when he was dismissed on the third morning for 136, India were 262 for 3. That, however, quickly became 307 for 6 and then 364 for 7. With the pitch showing signs of breaking up, England might have imagined they would hold the upper hand if they could take the last three wickets quickly.
As if. Kohli was still in the middle, and he powered on to his third double-ton in successive Test series, and Jayant made a maiden hundred at the other end as the eighth-wicket pair added 241. India were eventually bowled out with a lead of 231, and that was more than enough for their spinners, led by Ashwin, to wrap up an innings win.
5th Test v England, Chennai
Another toss won, another 400-plus total. This time England made 477, led by a century from Moeen and half-centuries from Root, Liam Dawson and Rashid. India's response this time began with a 152-run opening stand between Rahul and Parthiv Patel, before the wickets of Parthiv, Pujara and Kohli left them 211 for 3. Rahane was out injured, and the man who had taken his place, Karun Nair, had only scored 4 and 13 in his two Test innings before this.
This time he would make a slightly bigger contribution. He added 161 with Rahul, who fell one short of a double-hundred, for the fourth wicket, and then simply went on and on. With Ashwin and Jadeja for company, Nair converted his maiden ton into a double, and then, with a flurry of sweeps, cuts and pulls against the spinners, a triple. India declared on 759 for 7, their biggest total ever. With just over a day left on a flat Chepauk pitch, it looked like England could get away with a draw to end their tour, but Ravindra Jadeja had other ideas - his 7 for 48 sent them crashing to defeat by an innings and 75 runs.
2nd Test v Australia, Bengaluru
India crashed to an unexpected defeat in the first Test, tumbling to 105 and 107 against Steve O'Keefe's left-arm spin on a square turner in Pune. When they were bowled out for 189 on the first day of the second Test, it looked as if the Border-Gavaskar Trophy might slip out of their grasp even before the halfway point of the series.
Then came a rousing, slow-burning fightback. India's four bowlers bowled with heart and discipline to take six wickets and only concede 197 on the second day, and Jadeja ran through the lower order on the third morning to restrict Australia's lead to 87. It was still a substantial lead on a pitch with decidedly unpredictable bounce, but half-centuries from Rahul, Pujara and Rahane - the latter two combining to produce the first wicketless session of the series - helped India erase it and set Australia 188. With Ashwin bagging a six-wicket haul and Umesh Yadav exploiting the low bounce to pick up key middle-order wickets, India wrapped up a thrilling 75-run win.
3rd Test v Australia, Ranchi
Winning the toss on a pitch that, belying its appearance, turned out to be slow and flat, Australia posted 451 thanks to centuries from Steven Smith and Glenn Maxwell. It might have been a bigger total if not for Umesh's reverse swing and Jadeja's relentless accuracy, but 451 was still 451. Australia's bowling attack, moreover, had two clever and accurate spinners, a tall fast bowler who would keep probing away in the fourth-stump channel, and another tall fast bowler who was quick, hostile, and capable of extracting bounce from the deadest surface. They would test India far more than England's bowlers had while defending similar totals in Mumbai and Chennai.
Australia's bowlers never let up on their discipline, and India had to work for every run. Vijay and Rahul added 91, and Vijay and Pujara 102, but each of Vijay, Kohli and Rahane were out playing attacking shots, before Josh Hazlewood and Pat Cummins prised out Nair and Ashwin with reverse swing and bounce. India were 328 for 6, still 123 behind, but still at the crease was Pujara, his defensive game refusing to show any cracks despite all that was going on around him. He was joined by Saha, and the two added 199, ensuring India could not lose the Test, and giving them a serious shot at victory. India declared with a lead of 152, took two wickets late on day four, and two more in the first session of day five, but Peter Handscomb and Shaun Marsh, spending 62.1 overs at the crease, ensured Australia would go into the final Test with the series level 1-1.
4th Test v Australia, Dharamsala
On a bouncy pitch that reminded them of home, Australia batted first and moved to 144 for 1. Smith continued in his otherworldly vein of form, and David Warner got among the runs for the first time in the series. India were without Kohli, their captain and most experienced batsman, and had replaced him with an extra bowler, a debutant left-arm wristspinner. That man, Kuldeep Yadav, turned the match, taking four wickets as Australia slumped to 300 all out.
This was still an Australian-style pitch, though, and their bowlers kept chipping away despite fifties from Rahul and Pujara. Lyon, extracting alarming bounce, threatened to run through India, leaving them at an uncertain 248 for 6 at the end of day two. Yet again, though, India's lower order would make a telling difference: Saha and Jadeja added 96 to give them a 32-run lead.
India would never relinquish their hold over the match thereafter. Umesh, bowling scarily fast, took three wickets, including those of both openers, as Australia collapsed to 137 all out. It left India a target of 106 to claim the hardest-fought series win of their season.
Karthik Krishnaswamy is a senior sub-editor at ESPNcricinfo