সুইফট ফর টেনসরফ্লো পাইথন ইন্টারঅপারেবিলিটি সমর্থন করে।
আপনি সুইফট থেকে পাইথন মডিউল আমদানি করতে পারেন, পাইথন ফাংশন কল করতে পারেন এবং সুইফট এবং পাইথনের মধ্যে মানগুলি রূপান্তর করতে পারেন।
import PythonKit
print(Python.version)
3.6.9 (default, Oct 8 2020, 12:12:24) [GCC 8.4.0]
পাইথন সংস্করণ সেট করা হচ্ছে
ডিফল্টরূপে, আপনি যখন import Python
, তখন সুইফট ইনস্টল করা পাইথনের নতুন সংস্করণের জন্য সিস্টেম লাইব্রেরি পাথ অনুসন্ধান করে। একটি নির্দিষ্ট Python ইনস্টলেশন ব্যবহার করতে, ইনস্টলেশনের দ্বারা প্রদত্ত libpython
শেয়ার্ড লাইব্রেরিতে PYTHON_LIBRARY
এনভায়রনমেন্ট ভেরিয়েবল সেট করুন। যেমন:
export PYTHON_LIBRARY="~/anaconda3/lib/libpython3.7m.so"
পাইথন পরিবেশ এবং প্ল্যাটফর্ম জুড়ে সঠিক ফাইলের নাম আলাদা হবে।
বিকল্পভাবে, আপনি PYTHON_VERSION
এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন, যা সুইফটকে পাইথন সংস্করণের জন্য সিস্টেম লাইব্রেরি পাথ অনুসন্ধান করতে নির্দেশ দেয়। মনে রাখবেন যে PYTHON_LIBRARY
PYTHON_VERSION
এর চেয়ে অগ্রাধিকার নেয়।
কোডে, আপনি PythonLibrary.useVersion
ফাংশনকেও কল করতে পারেন, যা PYTHON_VERSION
সেট করার সমতুল্য।
// PythonLibrary.useVersion(2)
// PythonLibrary.useVersion(3, 7)
দ্রষ্টব্য: কোনো পাইথন কোড কল করার আগে আপনাকে import Python
ঠিক পরে PythonLibrary.useVersion
চালাতে হবে। এটি পাইথন সংস্করণগুলি গতিশীলভাবে স্যুইচ করতে ব্যবহার করা যাবে না।
পাইথন লাইব্রেরি লোড করার জন্য ডিবাগ আউটপুট দেখতে PYTHON_LOADER_LOGGING=1
সেট করুন।
বেসিক
সুইফটে, PythonObject
পাইথন থেকে একটি বস্তুর প্রতিনিধিত্ব করে। সমস্ত Python API ব্যবহার করে এবং PythonObject
দৃষ্টান্ত প্রদান করে।
সুইফটের মৌলিক প্রকারগুলি (যেমন সংখ্যা এবং অ্যারে) PythonObject
এ রূপান্তরযোগ্য। কিছু ক্ষেত্রে ( PythonConvertible
আর্গুমেন্ট গ্রহণের আক্ষরিক এবং ফাংশনগুলির জন্য), রূপান্তরটি অন্তর্নিহিতভাবে ঘটে। PythonObject
এ স্পষ্টভাবে একটি সুইফ্ট মান কাস্ট করতে, PythonObject
ইনিশিয়ালাইজার ব্যবহার করুন।
PythonObject
সাংখ্যিক ক্রিয়াকলাপ, সূচীকরণ এবং পুনরাবৃত্তি সহ অনেক স্ট্যান্ডার্ড অপারেশনকে সংজ্ঞায়িত করে।
// Convert standard Swift types to Python.
let pythonInt: PythonObject = 1
let pythonFloat: PythonObject = 3.0
let pythonString: PythonObject = "Hello Python!"
let pythonRange: PythonObject = PythonObject(5..<10)
let pythonArray: PythonObject = [1, 2, 3, 4]
let pythonDict: PythonObject = ["foo": [0], "bar": [1, 2, 3]]
// Perform standard operations on Python objects.
print(pythonInt + pythonFloat)
print(pythonString[0..<6])
print(pythonRange)
print(pythonArray[2])
print(pythonDict["bar"])
4.0 Hello slice(5, 10, None) 3 [1, 2, 3]
// Convert Python objects back to Swift.
let int = Int(pythonInt)!
let float = Float(pythonFloat)!
let string = String(pythonString)!
let range = Range<Int>(pythonRange)!
let array: [Int] = Array(pythonArray)!
let dict: [String: [Int]] = Dictionary(pythonDict)!
// Perform standard operations.
// Outputs are the same as Python!
print(Float(int) + float)
print(string.prefix(6))
print(range)
print(array[2])
print(dict["bar"]!)
4.0 Hello 5..<10 3 [1, 2, 3]
PythonObject
অনেক স্ট্যান্ডার্ড সুইফ্ট প্রোটোকলের সাথে সামঞ্জস্যকে সংজ্ঞায়িত করে:
-
Equatable
-
Comparable
-
Hashable
-
SignedNumeric
-
Strideable
-
MutableCollection
- সমস্ত
ExpressibleBy_Literal
প্রোটোকল
মনে রাখবেন যে এই কনফারমেন্সগুলি টাইপ-নিরাপদ নয়: আপনি যদি একটি বেমানান PythonObject
উদাহরণ থেকে প্রোটোকল কার্যকারিতা ব্যবহার করার চেষ্টা করেন তাহলে ক্র্যাশ ঘটবে।
let one: PythonObject = 1
print(one == one)
print(one < one)
print(one + one)
let array: PythonObject = [1, 2, 3]
for (i, x) in array.enumerated() {
print(i, x)
}
True False 2 0 1 1 2 2 3
টিপলগুলিকে পাইথন থেকে সুইফটে রূপান্তর করতে, আপনাকে অবশ্যই স্থিরভাবে টিপলের আরিটি জানতে হবে।
নিম্নলিখিত উদাহরণ পদ্ধতিগুলির মধ্যে একটি কল করুন:
-
PythonObject.tuple2
-
PythonObject.tuple3
-
PythonObject.tuple4
let pythonTuple = Python.tuple([1, 2, 3])
print(pythonTuple, Python.len(pythonTuple))
// Convert to Swift.
let tuple = pythonTuple.tuple3
print(tuple)
(1, 2, 3) 3 (1, 2, 3)
পাইথন বিল্টিনস
গ্লোবাল Python
ইন্টারফেসের মাধ্যমে পাইথন বিল্টইন অ্যাক্সেস করুন।
// `Python.builtins` is a dictionary of all Python builtins.
_ = Python.builtins
// Try some Python builtins.
print(Python.type(1))
print(Python.len([1, 2, 3]))
print(Python.sum([1, 2, 3]))
<class 'int'> 3 6
পাইথন মডিউল আমদানি করা হচ্ছে
একটি Python মডিউল আমদানি করতে Python.import
ব্যবহার করুন। এটি Python
import
কীওয়ার্ডের মতো কাজ করে।
let np = Python.import("numpy")
print(np)
let zeros = np.ones([2, 3])
print(zeros)
<module 'numpy' from '/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/numpy/__init__.py'> [[1. 1. 1.] [1. 1. 1.]]
নিরাপদ আমদানি সম্পাদন করতে থ্রোয়িং ফাংশন Python.attemptImport
ব্যবহার করুন।
let maybeModule = try? Python.attemptImport("nonexistent_module")
print(maybeModule)
nil
numpy.ndarray
দিয়ে রূপান্তর
নিম্নলিখিত সুইফট প্রকারগুলি numpy.ndarray
এবং থেকে রূপান্তর করা যেতে পারে:
-
Array<Element>
-
ShapedArray<Scalar>
-
Tensor<Scalar>
numpy.ndarray
এর dtype
Element
বা Scalar
জেনেরিক প্যারামিটারের সাথে সামঞ্জস্যপূর্ণ হলেই রূপান্তর সফল হয়।
Array
এর জন্য, numpy
থেকে রূপান্তর শুধুমাত্র তখনই সফল হয় যদি numpy.ndarray
1-D হয়।
import TensorFlow
let numpyArray = np.ones([4], dtype: np.float32)
print("Swift type:", type(of: numpyArray))
print("Python type:", Python.type(numpyArray))
print(numpyArray.shape)
Swift type: PythonObject Python type: <class 'numpy.ndarray'> (4,)
// Examples of converting `numpy.ndarray` to Swift types.
let array: [Float] = Array(numpy: numpyArray)!
let shapedArray = ShapedArray<Float>(numpy: numpyArray)!
let tensor = Tensor<Float>(numpy: numpyArray)!
// Examples of converting Swift types to `numpy.ndarray`.
print(array.makeNumpyArray())
print(shapedArray.makeNumpyArray())
print(tensor.makeNumpyArray())
// Examples with different dtypes.
let doubleArray: [Double] = Array(numpy: np.ones([3], dtype: np.float))!
let intTensor = Tensor<Int32>(numpy: np.ones([2, 3], dtype: np.int32))!
[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]
ছবি প্রদর্শন করা হচ্ছে
আপনি matplotlib
ব্যবহার করে ইন-লাইনে ছবি প্রদর্শন করতে পারেন, ঠিক পাইথন নোটবুকের মতো।
// This cell is here to display plots inside a Jupyter Notebook.
// Do not copy it into another environment.
%include "EnableIPythonDisplay.swift"
print(IPythonDisplay.shell.enable_matplotlib("inline"))
('inline', 'module://ipykernel.pylab.backend_inline')
let np = Python.import("numpy")
let plt = Python.import("matplotlib.pyplot")
let time = np.arange(0, 10, 0.01)
let amplitude = np.exp(-0.1 * time)
let position = amplitude * np.sin(3 * time)
plt.figure(figsize: [15, 10])
plt.plot(time, position)
plt.plot(time, amplitude)
plt.plot(time, -amplitude)
plt.xlabel("Time (s)")
plt.ylabel("Position (m)")
plt.title("Oscillations")
plt.show()
Use `print()` to show values.