Iran fires on 3 ships in Strait of Hormuz, talks stall



cargo ship sailing

Iran fired on three ships in the Strait of Hormuz and seized two of them on Wednesday, intensifying its assault on shipping in the key waterway. The attacks came a day after U.S. President Donald Trump extended a ceasefire while maintaining an American blockade of Iranian ports.

The standoff between the U.S. and Iran has effectively choked off nearly all exports through the strait — where 20 percent of the world’s traded oil passes in peacetime — with no end in sight. Iranian media said the paramilitary Revolutionary Guard was bringing the two ships to Iran, marking a further escalation.

The conflict has already sent gas prices skyrocketing far beyond the region and raised the cost of food and a wide array of other products. The price of Brent crude oil, the international standard, nosed over $100 per barrel, marking a 35 percent increase from prewar levels, but stock markets still appear to be shrugging it off.

The European Union energy commissioner, Dan Jørgensen, warned of lasting impact for consumers and businesses, likening it to other major energy crises over the last half-century. He said the disruption is costing Europe around 500 million euros ($600 million) each day.

Iran holds firm in apparent tit-for-tat with US

Iranian media said the MSC Francesca and the Epaminondas were being escorted to Iran. The U.S. had earlier seized two Iranian vessels as the ceasefire talks were due to take place in Pakistan.

Technomar, the management company behind the Liberian-registered Epaminondas, said it was “approached and fired upon by a manned gunboat” off the coast of Oman. It said the ship's bridge had been damaged.

A second cargo ship came under fire hours later, with no report of damage, though the vessel was then stopped in the water. No injuries to the crew of either vessel were reported. The MSC Francesca's owner could not be immediately reached for comment.

The Guard attacked a third ship, identified as the Euphoria, which had become “stranded” on the Iranian coast, Iranian media reported, without elaborating.

There have been more than 30 attacks on ships in the Mideast since the U.S. and Israel launched the war on Feb. 28 with a surprise attack on Iran. Before then, the strait was open for all traffic.

Vortexa, an analytics firm focusing on global energy and freight markets, said it has recorded 34 movements of sanctioned and Iranian-linked tankers in and out of the Persian Gulf in the week after the U.S. imposed its blockade on April 13.

The firm identified 19 outbound and 15 inbound movements. Six of the outbound movements were “confirmed laden with Iranian crude, representing about 10.7 million barrels,” it said in an email.

It was not immediately clear whether all those barrels reached markets overseas.

It's not clear when talks will restart

Iran’s ability to restrict traffic through the strait — which leads from the Persian Gulf to the open ocean — has proved a major strategic advantage

While the ceasefire means that American and Israeli airstrikes have stopped in Iran — and Tehran’s missiles no longer target Israel and the wider Middle East — the maritime standoff continues and could escalate further.

Without any diplomatic agreement, the attacks will likely deter ships from even attempting to pass through the waterway, further squeezing global energy supplies.

Mohammad Bagher Qalibaf, Iran’s parliament speaker who met with U.S. Vice President JD Vance in Pakistan earlier this month, said a complete ceasefire “only makes sense” if not violated by the blockade that is “taking the world’s economy hostage.”

“Reopening the Strait of Hormuz is impossible with such flagrant breach of the ceasefire,” he wrote on X.

Iranian Foreign Ministry spokesperson Esmail Baghaei told state TV that Iran has not decided whether to take part in a new round of negotiations with the U.S. scheduled for later this week. He accused the United States of a “disregard and lack of good faith” in the negotiations.

Mojtaba Ferdousi Pour, the head of the Iranian mission in Egypt, had earlier told The Associated Press that no delegation would go to Pakistan until the U.S. lifts its blockade.

In the Iranian capital, Tehran, many grappled with the uncertainty.

“We should know where we stand. Is it going to be a ceasefire, peace, or the war is going to continue?” said Mashallah Mohammad Sadegh, 59. “The way things currently are, one doesn’t know what to do.”

Another French peacekeeper dies after weekend attack in Lebanon

In southern Lebanon, three separate Israeli strikes killed at least five people and wounded others, according to local authorities. Israel denied carrying out one of the strikes and did not immediately comment on the others.

It came as Israeli and Lebanese ambassadors prepared for a new meeting in Washington on Thursday toward extending a fragile ceasefire between Israel and the Iran-backed Hezbollah that began on Friday.

An Israeli drone struck the village of Jabbour, killing one person and wounding two others, according to Lebanon's state-run National News Agency. Israel’s military denied that it had attacked the area.

Lebanon’s health ministry said two Israeli strikes on al-Tiri killed two people and injured one journalist, while Amal Khalil, a prominent journalist for daily Al-Akhbar, was missing as Israeli forces fired at an ambulance, preventing a team from searching for her.

Israel’s military alleged the individuals in the village violated the ceasefire and posed a risk to the troops safety. It denied it prevented rescue teams from reaching the area or that it targets journalists.

The Lebanese Health Ministry said a separate Israeli strike on the village of Yohmor killed two people and injured two others.

Hezbollah launched rockets at Israel from Lebanon days after the outbreak of the wider war, sparking heavy retaliatory strikes and an Israeli ground invasion. The 10-day ceasefire that started Friday between Israel and Lebanon has been marred by several Israeli strikes and Hezbollah claimed its first attack Tuesday.

Separately, French President Emmanuel Macron said a French peacekeeper who was wounded in an attack in Lebanon over the weekend had died of his wounds. Another French peacekeeper was killed in the attack on Saturday, in which the force came under small-arms fire in southern Lebanon.

Macron blamed the attack on Hezbollah, which denied involvement.

Since the war started, at least 3,375 people have been killed in Iran, according to authorities. More than 2,290 people have been killed in Lebanon, 23 people have died in Israel and more than a dozen have died in Gulf Arab states. Fifteen Israeli soldiers in Lebanon and 13 U.S. service members have been killed.



Source link

Leave a Reply

Subscribe to Our Newsletter

Get our latest articles delivered straight to your inbox. No spam, we promise.

Recent Reviews


Python Generators – Table of Content

Generators

The main purpose of a generator is to help us in creating our own iterators. It is a special type of function that returns an iterable set.The iterators that we create with the generator are referred to as lazy iterators. The contents of lazy iterators will not be stored in memory.If you want to iterate through large files, data streams, CSV files, etc., generators will be a good choice.Generators are introduced in PEP 255 and they are available since python 2.2 version.

How to create generator functions

Let us create a sample generator. Create a new file in any text editor and copy the below code.

def sample():

a = ["Hello", "Welcome"]

yield a

for i in sample():

print("This is a sample generator")

In this code, the sample() is the generator function name. Yield is used to return items to the caller. Unlike return in normal function, you won’t exit the function here. Once a generator is defined, it is called similar to a normal function. But the execution gets paused when it encounters a yield keyword.

Save the file with script.py as the name. Open command prompt, navigate to the script file location path, and execute the below command.

python script.py

You should be able to see an output that says ‘This is a sample generator’ on the command prompt. Let us look at one more example that returns squared root numbers to the range of numbers defined.

def Squared_numbers(num):

for num in range(num):

yield num**2

for i in Squared_numbers(5):

print(i)

This program calls Squared_numbers generator with 5 as a range. The generator will iterate from 0 and yields the square root of 5 numbers. The output for this program will be as follows.

0

1

4

9

16

Importance of yield statements in generators

Yield controls the flow of a generator function. When we call a generator expression or a generator function, we will get an iterator in return. This is nothing but a generator. 

We have to assign the generator to a variable and then use it. When we call a generator function, it only gets executed until it encounters a yield statement. The yielded value is sent back to the caller. 

  Become a python Certified professional  by learning this HKR Python Training !

Python Training Certification

  • Master Your Craft
  • Lifetime LMS & Faculty Access
  • 24/7 online expert support
  • Real-world & Project Based Learning

Creating a generator object with generator expressions

Generator expressions are similar to list comprehensions. They help us to create a generator object with minimal code. We can create generator objects that do not hold the entire object in memory before iteration. Let us create a list and a generator object and look at the difference between the two.

#Creating a list

numbers_list = [num for num in range(5)]

#Creating a generator object

numbers_generatorObject = (num for num in range(5))

#output

numbers_list

numbers_generatorObject

In the above code, we have created a list and a generator object for numbers. The syntax will be very much similar, but the difference will be the type of parentheses that we use. When you execute the above code, this will be the output.

[0, 1, 2, 3, 4]

at 0x7f776b77dd58>

You can observe here that the numbers_list is a list, so the numbers were printed on the command line. Whereas the numbers_generatorObject has got created as a generator object. You can also see the location at which the generator object is created.

Evaluating generator performance

As I mentioned before, generators optimize memory. Let’s consider the same example that we have taken above and increase numbers up to 150. Let us see how much size the list and generator objects take to hold the same numbers. Here is a small program that we can use to get the size.

import sys

#Creating a list

numbers_list = [num for num in range(150)]

print("The size of the list is", sys.getsizeof(numbers_list))

#Creating a generator object

numbers_generatorObject = (num for num in range(150))

print("The size of the generator is", sys.getsizeof(numbers_generatorObject))

The output for the above program will be as follows.

The size of the list is 1448

The size of the generator is 88

You can see that the list took 1448 bytes, whereas the generator object is only 88 bytes. You can observe a huge difference when you work with a larger dataset.

Acquire NLP certification by enrolling in the HKR NLP Training program in Hyderabad!

HKR Trainings Logo

Subscribe to our YouTube channel to get new updates..!

Advanced generator methods

Generators provide three special methods which were introduced in PEP 342 and is available since the python 2.5 version.

send() – It is a method used to send values to the generator iterators. The value specified in the send() method is used to continue with the next yield. If we do not pass any value to the send() method, it will be equivalent to the next() call. 

throw() – It is a method used to throw exceptions from the generator. We can add a throw() method when we might need to catch an exception. The value or exception specified in the throw() method will be sent to the caller.

close() – It is a method used to stop a generator. This will be really helpful when we want to stop a program when it goes into an infinity loop. 

Realted Article, List to String in Python !

Creating data pipelines with generators

When you have a huge dataset that needs processing, we can’t really do all the processing at a single place. To avoid this, we can create a pipeline. Each method in a pipeline receives an item, applies transformations on it, and returns the transformed item. This way, we can even change the order of transformations.

For example, if we want to process data in a CSV file, we have to read all the lines of data in the file. Identify the column names,split each row into a list of values,and filter out any unwanted data.Create dictionaries for the column names and lists.Apply the transformations that you want on the rows. All the created generators will function as a pipeline.

  Top 50 frequently asked Python interview Question and answers !

Python Training Certification

Weekday / Weekend Batches

Conclusion

As you have learned, generators simplify code. Generator expressions simplify code much further. They might be a little confusing at first. But when you put enough effort and practice them, you will get to understand them completely. Then you will know how easy it is to code in python with the help of generators.

Generators are especially useful when dealing with huge datasets.We can create pipelines and make the developer’s job easier.The calculations on data will be performed on-demand. We can use generators to simulate concurrency.Enjoy coding with python!

Related Articles:

1. Python Partial Functions

2. Python Split Method

3. Running Scripts in Python

4. Python List Length



Source link