<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_ir_reciprocal_mesh(mesh, cell, is_shift=None, is_time_reversal=True, symprec=1e-5, is_dense=False):
 """Return k-points mesh and k-point map to the irreducible k-points. The symmetry is serched from the input cell. Parameters mesh : array_like Uniform sampling mesh numbers. dtype='intc', shape=(3,) cell : spglib cell tuple Crystal structure. is_shift : array_like, optional [0, 0, 0] gives Gamma center mesh and value 1 gives half mesh shift. Default is None which equals to [0, 0, 0]. dtype='intc', shape=(3,) is_time_reversal : bool, optional Whether time reversal symmetry is included or not. Default is True. symprec : float, optional Symmetry tolerance in distance. Default is 1e-5. is_dense : bool, optional grid_mapping_table is returned with dtype='uintp' if True. Otherwise its dtype='intc'. Default is False. Returns ------- grid_mapping_table : ndarray Grid point mapping table to ir-gird-points. dtype='intc' or 'uintp', shape=(prod(mesh),) grid_address : ndarray Address of all grid points. dtype='intc', shspe=(prod(mesh), 3) """

    _set_no_error()

    lattice, positions, numbers, _ = _expand_cell(cell)
    if lattice is None:
        return None

    if is_dense:
        dtype = 'uintp'
    else:
        dtype = 'intc'
    grid_mapping_table = np.zeros(np.prod(mesh), dtype=dtype)
    grid_address = np.zeros((np.prod(mesh), 3), dtype='intc')
    if is_shift is None:
        is_shift = [0, 0, 0]
    if spg.ir_reciprocal_mesh(
            grid_address,
            grid_mapping_table,
            np.array(mesh, dtype='intc'),
            np.array(is_shift, dtype='intc'),
            is_time_reversal * 1,
            lattice,
            positions,
            numbers,
            symprec) > 0:
        return grid_mapping_table, grid_address
    else:
        return None