<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def create_fake_array_input(cls, dependency, readable_name, index=None):
 """Create fake Weld inputs to be used in future WeldObjects. Parameters dependency : str The Weld input name of the actual intermediate result, obtained from cache_intermediate_result. readable_name : str User-friendly string that will be used to generate a unique placeholder name. This placeholder will be seen in the WeldObject.context. index : tuple, optional If passed, it means the intermediate result dependency is in fact a struct/tuple, so this fake input shall be able to select the required array from the tuple. Note that it can work through multiple levels, i.e. passing (1, 0) would essentially select 2 from (1, (2, 3)). Returns ------- FakeWeldInput An instance representing the fake Weld input to be used when generating the WeldObjects relying on it. """

        assert dependency in Cache._intermediate_results
        assert isinstance(readable_name, str)

        name = Cache._generate_placeholder(readable_name)

        if index is None:
            fake_weld_input = _FakeArray(dependency, name)
        else:
            assert isinstance(index, tuple)
            fake_weld_input = _FakeStructMember(dependency, index, name)

        return fake_weld_input