@@ -0,0 +1,41 @@
1+diff --git a/apache_beam/runners/worker/operations.py b/apache_beam/runners/worker/operations.py
2+index 3464c5750c..5921c72b90 100644
3+--- a/apache_beam/runners/worker/operations.py
4++++ b/apache_beam/runners/worker/operations.py
5+@@ -69,18 +69,6 @@ if TYPE_CHECKING:
6+ from apache_beam.runners.worker.statesampler import StateSampler
7+ from apache_beam.transforms.userstate import TimerSpec
8+
9+-# Allow some "pure mode" declarations.
10+-try:
11+- import cython
12+-except ImportError:
13+-
14+- class FakeCython(object):
15+- @staticmethod
16+- def cast(type, value):
17+- return value
18+-
19+- globals()['cython'] = FakeCython()
20+-
21+ _globally_windowed_value = GlobalWindows.windowed_value(None)
22+ _global_window_type = type(_globally_windowed_value.windows[0])
23+
24+@@ -149,7 +137,7 @@ class ConsumerSet(Receiver):
25+ # type: (WindowedValue) -> None
26+ self.update_counters_start(windowed_value)
27+ for consumer in self.consumers:
28+- cython.cast(Operation, consumer).process(windowed_value)
29++ consumer.process(windowed_value)
30+ self.update_counters_finish()
31+
32+ def try_split(self, fraction_of_remainder):
33+@@ -345,7 +333,7 @@ class Operation(object):
34+
35+ def output(self, windowed_value, output_index=0):
36+ # type: (WindowedValue, int) -> None
37+- cython.cast(Receiver, self.receivers[output_index]).receive(windowed_value)
38++ self.receivers[output_index].receive(windowed_value)
39+
40+ def add_receiver(self, operation, output_index=0):
41+ # type: (Operation, int) -> None