<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def insert_ising_model(cur, nodelist, edgelist, linear, quadratic, offset, encoded_data=None):
 """Insert an Ising model into the cache. Args: cur (:class:`sqlite3.Cursor`):
 An sqlite3 cursor. This function is meant to be run within a :obj:`with` statement. nodelist (list):
 The nodes in the graph. edgelist (list):
 The edges in the graph. linear (dict):
 The linear bias associated with each node in nodelist. quadratic (dict):
 The quadratic bias associated with teach edge in edgelist. offset (float):
 The constant offset applied to the ising problem. encoded_data (dict, optional):
 If a dictionary is provided, it will be populated with the serialized data. This is useful for preventing encoding the same information many times. """

    if encoded_data is None:
        encoded_data = {}

    # insert graph and partially populate encoded_data with graph info
    insert_graph(cur, nodelist, edgelist, encoded_data=encoded_data)

    # need to encode the biases
    if 'linear_biases' not in encoded_data:
        encoded_data['linear_biases'] = _serialize_linear_biases(linear, nodelist)
    if 'quadratic_biases' not in encoded_data:
        encoded_data['quadratic_biases'] = _serialize_quadratic_biases(quadratic, edgelist)
    if 'offset' not in encoded_data:
        encoded_data['offset'] = offset
    if 'max_quadratic_bias' not in encoded_data:
        encoded_data['max_quadratic_bias'] = max(itervalues(quadratic))
    if 'min_quadratic_bias' not in encoded_data:
        encoded_data['min_quadratic_bias'] = min(itervalues(quadratic))
    if 'max_linear_bias' not in encoded_data:
        encoded_data['max_linear_bias'] = max(itervalues(linear))
    if 'min_linear_bias' not in encoded_data:
        encoded_data['min_linear_bias'] = min(itervalues(linear))

    insert = \
        """
        INSERT OR IGNORE INTO ising_model(
            linear_biases,
            quadratic_biases,
            offset,
            max_quadratic_bias,
            min_quadratic_bias,
            max_linear_bias,
            min_linear_bias,
            graph_id)
        SELECT
            :linear_biases,
            :quadratic_biases,
            :offset,
            :max_quadratic_bias,
            :min_quadratic_bias,
            :max_linear_bias,
            :min_linear_bias,
            graph.id
        FROM graph WHERE
            num_nodes = :num_nodes AND
            num_edges = :num_edges AND
            edges = :edges;
        """

    cur.execute(insert, encoded_data)