main
 1from openai._utils import deepcopy_minimal
 2
 3
 4def assert_different_identities(obj1: object, obj2: object) -> None:
 5    assert obj1 == obj2
 6    assert id(obj1) != id(obj2)
 7
 8
 9def test_simple_dict() -> None:
10    obj1 = {"foo": "bar"}
11    obj2 = deepcopy_minimal(obj1)
12    assert_different_identities(obj1, obj2)
13
14
15def test_nested_dict() -> None:
16    obj1 = {"foo": {"bar": True}}
17    obj2 = deepcopy_minimal(obj1)
18    assert_different_identities(obj1, obj2)
19    assert_different_identities(obj1["foo"], obj2["foo"])
20
21
22def test_complex_nested_dict() -> None:
23    obj1 = {"foo": {"bar": [{"hello": "world"}]}}
24    obj2 = deepcopy_minimal(obj1)
25    assert_different_identities(obj1, obj2)
26    assert_different_identities(obj1["foo"], obj2["foo"])
27    assert_different_identities(obj1["foo"]["bar"], obj2["foo"]["bar"])
28    assert_different_identities(obj1["foo"]["bar"][0], obj2["foo"]["bar"][0])
29
30
31def test_simple_list() -> None:
32    obj1 = ["a", "b", "c"]
33    obj2 = deepcopy_minimal(obj1)
34    assert_different_identities(obj1, obj2)
35
36
37def test_nested_list() -> None:
38    obj1 = ["a", [1, 2, 3]]
39    obj2 = deepcopy_minimal(obj1)
40    assert_different_identities(obj1, obj2)
41    assert_different_identities(obj1[1], obj2[1])
42
43
44class MyObject: ...
45
46
47def test_ignores_other_types() -> None:
48    # custom classes
49    my_obj = MyObject()
50    obj1 = {"foo": my_obj}
51    obj2 = deepcopy_minimal(obj1)
52    assert_different_identities(obj1, obj2)
53    assert obj1["foo"] is my_obj
54
55    # tuples
56    obj3 = ("a", "b")
57    obj4 = deepcopy_minimal(obj3)
58    assert obj3 is obj4