code: def horizontal_combine(data_owners):
      data_iters = [
          data_owner.provide_data() for data_owner in data_owners
      ]
      while True:
          for index, data_iter in enumerate(data_iters):
              for i in range(data_owners[index].num_samples):
                  yield next(data_iter)
  
file_path: tf-encrypted/examples/application/joint-train/horizontal-training.py
imports: import argparse
  import sys
  import tf_encrypted
  from tf_encrypted.keras.datasets import *
  from tf_encrypted.player import DataOwner
  from tf_encrypted.protocol import ABY3
  from tf_encrypted.protocol import Pond
  from tf_encrypted.protocol import SecureNN
label_desc: Use image node_id 1 for calling a global function with example usage: horizontal_combine(data_owners) without return types