<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_emodulus(area_um, deform, medium="CellCarrier", channel_width=20.0, flow_rate=0.16, px_um=0.34, temperature=23.0, copy=True):
 """Compute apparent Young's modulus using a look-up table Parameters area_um: float or ndarray Apparent (2D image) area [µm²] of the event(s) deform: float or ndarray The deformation (1-circularity) of the event(s) medium: str or float The medium to compute the viscosity for. If a string in ["CellCarrier", "CellCarrier B"] is given, the viscosity will be computed. If a float is given, this value will be used as the viscosity in mPa*s. channel_width: float The channel width [µm] flow_rate: float Flow rate [µl/s] px_um: float The detector pixel size [µm] used for pixelation correction. Set to zero to disable. temperature: float or ndarray Temperature [°C] of the event(s) copy: bool Copy input arrays. If set to false, input arrays are overridden. Returns ------- elasticity: float or ndarray Apparent Young's modulus in kPa Notes ----- - The look-up table used was computed with finite elements methods according to :cite:`Mokbel2017`. - The computation of the Young's modulus takes into account corrections for the viscosity (medium, channel width, flow rate, and temperature) :cite:`Mietke2015` and corrections for pixelation of the area and the deformation which are computed from a (pixelated) image :cite:`Herold2017`. See Also -------- dclab.features.emodulus_viscosity.get_viscosity: compute viscosity for known media """

    # copy input arrays so we can use in-place calculations
    deform = np.array(deform, copy=copy, dtype=float)
    area_um = np.array(area_um, copy=copy, dtype=float)
    # Get lut data
    lut_path = resource_filename("dclab.features", "emodulus_lut.txt")
    with pathlib.Path(lut_path).open("rb") as lufd:
        lut = np.loadtxt(lufd)
    # These meta data are the simulation parameters of the lut
    lut_channel_width = 20.0
    lut_flow_rate = 0.04
    lut_visco = 15.0
    # Compute viscosity
    if isinstance(medium, (float, int)):
        visco = medium
    else:
        visco = get_viscosity(medium=medium, channel_width=channel_width,
                              flow_rate=flow_rate, temperature=temperature)
    # Corrections
    # We correct the lut, because it contains less points than
    # the event data. Furthermore, the lut could be cached
    # in the future, if this takes up a lot of time.
    convert(area_um=lut[:, 0],
            deform=lut[:, 1],
            emodulus=lut[:, 2],
            channel_width_in=lut_channel_width,
            channel_width_out=channel_width,
            flow_rate_in=lut_flow_rate,
            flow_rate_out=flow_rate,
            viscosity_in=lut_visco,
            viscosity_out=visco,
            inplace=True)

    if px_um:
        # Correct deformation for pixelation effect (subtract ddelt).
        ddelt = corrpix_deform_delta(area_um=area_um, px_um=px_um)
        deform -= ddelt

    # Normalize interpolation data such that the spacing for
    # area and deformation is about the same during interpolation.
    area_norm = lut[:, 0].max()
    normalize(lut[:, 0], area_norm)
    normalize(area_um, area_norm)

    defo_norm = lut[:, 1].max()
    normalize(lut[:, 1], defo_norm)
    normalize(deform, defo_norm)

    # Perform interpolation
    emod = spint.griddata((lut[:, 0], lut[:, 1]), lut[:, 2],
                          (area_um, deform),
                          method='linear')
    return emod