1. Objects behavior

1.1. Everything is reference

To provide a direct translation between the C++ API and Python, as well as to reduce the redundant memory allocation, all the objects (except Accessor and LinOp) in Cytnx are references, also in C++, just like in Python.

Let’s look at the following example. Consider the Tensor object in Cytnx

  • In Python:

1A = cytnx.Tensor([2,3])
2B = A
3
4print(B is A) # true
  • In C++:

1auto A = cytnx::Tensor({2, 3});
2auto B = A;
3
4cout << cytnx::is(B, A) << endl;

Output >>

True

Note

In Python, this is very straight forward. We implement the is clause in the Cytnx C++ API, such that C++ and Python can have exactly the same behavior. You can use is() to check if two objects are the same.

1.2. clone

In the case where a copy of an object is needed, you can use clone().

  • In Python:

1A = cytnx.Tensor([2,3]);
2B = A;
3C = A.clone();
4
5print(B is A)
6print(C is A)
  • In C++:

1auto A = cytnx::Tensor({2, 3});
2auto B = A;
3auto C = A.clone();
4
5cout << cytnx::is(B, A) << endl;
6cout << cytnx::is(C, A) << endl;

Output >>

True
False

Note

Here, we use Tensor as an example, but in general all the objects in Cytnx (except Accessor and LinOp) also follow the same behavior, and you can use is and clone as well.