code: def test_networks_with_complex_parallel_relations(self):
      input_layer = layers.Input((5, 5, 3))
      network = layers.join(
          layers.parallel(
              [
                  layers.Convolution((1, 1, 8)),
              ],
              [
                  layers.Convolution((1, 1, 4)),
                  layers.parallel(
                      layers.Convolution((1, 3, 2), padding="same"),
                      layers.Convolution((3, 1, 2), padding="same"),
                  ),
              ],
              [
                  layers.Convolution((1, 1, 8)),
                  layers.Convolution((3, 3, 4), padding="same"),
                  layers.parallel(
                      layers.Convolution((1, 3, 2), padding="same"),
                      layers.Convolution((3, 1, 2), padding="same"),
                  ),
              ],
              [
                  layers.MaxPooling(
                      (3, 3), padding="same", stride=(1, 1)
                  ),
                  layers.Convolution((1, 1, 8)),
              ],
          ),
          layers.Concatenate(),
      )
      self.assertShapesEqual(
          network.input_shape, [None, None, None, None]
      )
      self.assertShapesEqual(
          network.output_shape, (None, None, None, 24)
      )
  
      # Connect them at the end, because we need to make
      # sure tha parallel networks defined without input shapes
      network = layers.join(input_layer, network)
      self.assertShapesEqual(network.output_shape, (None, 5, 5, 24))
  
imports: import numpy
  from neupy import layers
  from neupy.utils import asfloat
  from neupy.exceptions import LayerConnectionError
  from base import BaseTestCase
label_desc: Use image node_id 2 for calling the DefinitionsTestCase obj's underlying member method code with example usage: obj.test_networks_with_complex_parallel_relations() without return types