National Cheng Kung UniversityLAiMM Laboratory

W15 / 2026-12-14 / 35 MIN / ENGLISH

A traceable bounded analysis request

Classroom formative practice. This does not add a weekly graded assignment. The exercise time is included in class practice, not added after the three-hour meeting.

Before you start

  1. Use a CPU runtime. Save a personal copy or open the downloaded notebook in Jupyter.
  2. Run the included complete walkthrough first. Read its setup, definitions, and checkpoints.
  3. Predict before running each exercise cell; then change only the requested factor.
  4. Keep your actual outputs, configuration, explanation, and limitation. Free tools are sufficient.

TASK 1 / PREDICT - RUN - EXPLAIN

Explain the standard-deviation convention

Calculate the mean and population/sample standard deviations for the readings. Explain ddof=1 without claiming it makes these measurements authentic.

  1. Write your prediction in the notebook response field before running.
  2. Run the starter cell below after the worked walkthrough.
  3. Make the requested controlled change and record the configuration.
  4. Explain the mechanism using the actual output, not an invented result.
readings_ex=np.array([3.1,3.2,3.0,3.6,3.4])
observations['task1']={'n':len(readings_ex),'mean':float(readings_ex.mean()),'population_sd':float(readings_ex.std(ddof=0)),'sample_sd':float(readings_ex.std(ddof=1)),'units':'synthetic units'}
print(observations['task1'])

Self-check: The mean is 3.26. Sample standard deviation uses denominator n-1; units must accompany the result.

TASK 2 / PREDICT - RUN - EXPLAIN

Hash a request including its units

Keep numerical readings fixed but change the declared unit string. Explain why the request identity changes.

  1. Write your prediction in the notebook response field before running.
  2. Run the starter cell below after the worked walkthrough.
  3. Make the requested controlled change and record the configuration.
  4. Explain the mechanism using the actual output, not an invented result.
request_a={'task':'summarize','units':'synthetic units','readings':readings_ex.tolist()}
request_b={**request_a,'units':'different declared units'}
digest_a=hashlib.sha256(json.dumps(request_a,sort_keys=True).encode()).hexdigest()
digest_b=hashlib.sha256(json.dumps(request_b,sort_keys=True).encode()).hexdigest()
observations['task2']={'request_a_sha256':digest_a,'request_b_sha256':digest_b,'same_request_identity':digest_a==digest_b}
print(observations['task2'])

Self-check: The hashes differ. Changing a unit label without converting measurements is not a scientifically valid unit conversion.

TASK 3 / PREDICT - RUN - EXPLAIN

Refuse malformed numeric data

Call the worked validator with a nonnumeric reading. Explain why an LLM-generated request must pass the same check.

  1. Write your prediction in the notebook response field before running.
  2. Run the starter cell below after the worked walkthrough.
  3. Make the requested controlled change and record the configuration.
  4. Explain the mechanism using the actual output, not an invented result.
try:
    malformed_result=summarize({'task':'summarize','units':'u','readings':['unknown',2]})
    observations['task3']={'rejected':False,'observed':malformed_result}
except ValueError as error:
    observations['task3']={'rejected':True,'reason':str(error)}
print(observations['task3'])

Self-check: The malformed request should be rejected. Record any unexpected behavior rather than presenting it as a passed check.

Completion checklist

The notebook marks incomplete response records as drafts. Completing the fields is not proof that an explanation is correct.

The guided walkthroughs were previously executed. The new exercise extension cells have not yet been execution-tested for this revision. Agent exercises are deterministic simulations; no paid model or consequential external action is used.