code: def demo_line_xy() -> hip.Experiment:
      # DEMO_LINE_XY_BEGIN
      exp = hip.Experiment()
      exp.display_data(hip.Displays.XY).update(
          {
              "axis_x": "generation",
              "axis_y": "loss",
          }
      )
      for i in range(200):
          dp = hip.Datapoint(
              uid=str(i),
              values={
                  "generation": i,
                  "param": 10 ** random.uniform(-1, 1),
                  "loss": random.uniform(-5, 5),
              },
          )
          if i > 10:
              from_parent = random.choice(exp.datapoints[-10:])
              dp.from_uid = (
                  from_parent.uid
              )  # <-- Connect the parent to the child
              dp.values["loss"] += from_parent.values["loss"]  # type: ignore
              dp.values["param"] *= from_parent.values["param"]  # type: ignore
          exp.datapoints.append(dp)
      # DEMO_LINE_XY_END
      return exp
  
imports: import uuid
  import random
  import math
  import time
  import typing
  from .None import experiment
label_desc: Use image node_id 3 for calling a global function with example usage: demo_line_xy() and returns: exp