pythonnet 3.0.5__tar.gz → 3.1.0rc0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/AUTHORS.md +1 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/Directory.Build.props +6 -5
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/PKG-INFO +7 -5
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/pyproject.toml +4 -6
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/pythonnet.egg-info/PKG-INFO +7 -5
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/pythonnet.egg-info/SOURCES.txt +2 -3
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/pythonnet.sln +1 -2
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/AssemblyManager.cs +5 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/ClassManager.cs +17 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Codecs/IterableDecoder.cs +55 -55
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Codecs/ListDecoder.cs +50 -50
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Codecs/SequenceDecoder.cs +48 -48
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/CollectionWrappers/ListWrapper.cs +3 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/CollectionWrappers/SequenceWrapper.cs +16 -7
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/MethodBinder.cs +5 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/PyIdentifier_.cs +3 -3
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/PyIdentifier_.tt +1 -1
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/TypeOffset.cs +15 -0
- pythonnet-3.1.0rc0/src/runtime/Native/TypeOffset314.cs +153 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Python.Runtime.csproj +1 -4
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonEngine.cs +1 -1
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Runtime.Delegates.cs +2 -1
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Runtime.cs +19 -24
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/RuntimeData.cs +3 -1
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/TypeManager.cs +5 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ArrayObject.cs +6 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ClassBase.cs +51 -12
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/Indexer.cs +2 -2
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ManagedTypes.cd +1 -1
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/MetaType.cs +43 -1
- pythonnet-3.1.0rc0/src/runtime/Util/PythonEnvironment.cs +188 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/ReflectionUtil.cs +7 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_indexer.py +36 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_mp_length.py +63 -63
- pythonnet-3.1.0rc0/version.txt +1 -0
- pythonnet-3.0.5/src/runtime/Native/TypeOffset37.cs +0 -136
- pythonnet-3.0.5/src/runtime/Native/TypeOffset38.cs +0 -138
- pythonnet-3.0.5/src/runtime/Native/TypeOffset39.cs +0 -138
- pythonnet-3.0.5/version.txt +0 -1
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/LICENSE +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/MANIFEST.in +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/README.rst +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/clr.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/pythonnet/__init__.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/pythonnet.egg-info/dependency_links.txt +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/pythonnet.egg-info/not-zip-safe +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/pythonnet.egg-info/requires.txt +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/pythonnet.egg-info/top_level.txt +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/setup.cfg +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/setup.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/pythonnet.snk +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Codecs/DecoderGroup.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Codecs/EncoderGroup.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Codecs/EnumPyIntCodec.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Codecs/IPyObjectDecoder.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Codecs/IPyObjectEncoder.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Codecs/PyObjectConversions.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Codecs/RawProxyEncoder.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Codecs/TupleCodecs.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/CollectionWrappers/IterableWrapper.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Converter.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/DefaultBaseTypeProvider.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/DelegateManager.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Exceptions.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Finalizer.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/IPythonBaseTypeProvider.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/ImportHook.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Interfaces.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/InternString.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/InternalPythonnetException.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Interop.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/InteropConfiguration.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Loader.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Mixins/CollectionMixinsProvider.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Mixins/collections.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/ABI.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/BorrowedReference.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/CustomMarshaler.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/GeneratedTypeOffsets.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/ITypeOffsets.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/LibDL.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/LibraryLoader.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/NativeCall.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/NativeFunc.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/NativeTypeSpec.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/NewReference.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/PyBufferInterface.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/PyCompilerFlags.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/PyGILState.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/PyInterpreterState.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/PyMemberFlags.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/PyMemberType.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/PyMethodFlags.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/PyThreadState.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/ReferenceExtensions.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/StolenReference.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/StrPtr.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/TypeOffset310.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/TypeOffset311.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/TypeOffset312.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Native/TypeOffset313.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Properties/AssemblyInfo.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Py.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PyExportAttribute.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonBaseTypeProviderGroup.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonException.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyBuffer.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyDict.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyFloat.IComparable.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyFloat.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyInt.IComparable.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyInt.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyIter.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyIterable.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyList.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyModule.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyNumber.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyObject.IConvertible.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PySequence.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyString.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyTuple.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/PyType.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/PythonTypes/TypeSpec.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/README.md +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Resources/clr.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Resources/interop.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/RuntimeState.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/CLRMappedItem.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/CLRWrapperCollection.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/ClassManagerState.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/ICLRObjectStorer.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/ImportHookState.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/MaybeMemberInfo.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/MaybeMethodBase.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/MaybeType.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/MetatypeState.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/NoopFormatter.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/PythonNetState.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/SharedObjectsState.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/TypeManagerState.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/StateSerialization/UnloadedClass.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ClassDerived.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ClassObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ClrModule.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ClrObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/DelegateObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/EventBinding.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/EventObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ExceptionClassObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ExtensionType.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/FieldObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/GenericType.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/InterfaceObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/Iterator.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ManagedType.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/MethodBinding.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/MethodObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ModuleFunctionObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ModuleObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ModulePropertyObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/MpLengthSlot.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/OperatorMethod.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/OverloadMapper.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/PropertyObject.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/ReflectedClrType.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Types/UnsafeReferenceWithRun.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/CodeGenerator.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/DebugUtil.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/Encodings.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/EventHandlerCollection.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/GenericUtil.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/InitOnly.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/NonCopyableAttribute.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/NullOnly.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/OpsHelper.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/ParameterHelper.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/PythonReferenceComparer.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/ReflectionPolyfills.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/src/runtime/Util/Util.cs +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_array.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_callback.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_class.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_clrmethod.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_codec.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_collection_mixins.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_constructors.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_conversion.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_delegate.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_docstring.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_engine.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_enum.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_event.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_exceptions.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_field.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_generic.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_import.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_interface.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_method.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_module.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_property.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_recursive_types.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_repr.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_subclass.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_sysargv.py +0 -0
- {pythonnet-3.0.5 → pythonnet-3.1.0rc0}/tests/test_thread.py +0 -0
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
- Peter Kese ([@pkese](https://github.com/pkese))
|
|
60
60
|
- Raphael Nestler ([@rnestler](https://github.com/rnestler))
|
|
61
61
|
- Rickard Holmberg ([@rickardraysearch](https://github.com/rickardraysearch))
|
|
62
|
+
- Roberto Pastor Muela ([@RobPasMue](https://github.com/RobPasMue))
|
|
62
63
|
- Sam Winstanley ([@swinstanley](https://github.com/swinstanley))
|
|
63
64
|
- Sean Freitag ([@cowboygneox](https://github.com/cowboygneox))
|
|
64
65
|
- Serge Weinstock ([@sweinst](https://github.com/sweinst))
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
<?xml version="1.0"?>
|
|
2
2
|
<Project>
|
|
3
3
|
<PropertyGroup>
|
|
4
|
-
<AssemblyCopyright>Copyright (c) 2006-
|
|
4
|
+
<AssemblyCopyright>Copyright (c) 2006-2025 The Contributors of the Python.NET Project</AssemblyCopyright>
|
|
5
5
|
<AssemblyCompany>pythonnet</AssemblyCompany>
|
|
6
6
|
<AssemblyProduct>Python.NET</AssemblyProduct>
|
|
7
|
-
<LangVersion>
|
|
7
|
+
<LangVersion>12.0</LangVersion>
|
|
8
8
|
<IsPackable>false</IsPackable>
|
|
9
9
|
<FullVersion>$([System.IO.File]::ReadAllText("$(MSBuildThisFileDirectory)version.txt").Trim())</FullVersion>
|
|
10
10
|
<VersionPrefix>$(FullVersion.Split('-', 2)[0])</VersionPrefix>
|
|
11
11
|
<VersionSuffix Condition="$(FullVersion.Contains('-'))">$(FullVersion.Split('-', 2)[1])</VersionSuffix>
|
|
12
|
+
<RepositoryRoot>$(MSBuildThisFileDirectory)</RepositoryRoot>
|
|
12
13
|
</PropertyGroup>
|
|
13
14
|
<ItemGroup>
|
|
14
15
|
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
|
15
|
-
<PackageReference Include="Microsoft.Net.Compilers.Toolset" Version="4.0
|
|
16
|
+
<PackageReference Include="Microsoft.Net.Compilers.Toolset" Version="4.12.0">
|
|
16
17
|
<PrivateAssets>all</PrivateAssets>
|
|
17
18
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
|
18
19
|
</PackageReference>
|
|
19
|
-
|
|
20
|
+
<!-- PackageReference Include="NonCopyableAnalyzer" Version="0.7.0">
|
|
20
21
|
<PrivateAssets>all</PrivateAssets>
|
|
21
22
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
|
22
|
-
</PackageReference
|
|
23
|
+
</PackageReference -->
|
|
23
24
|
</ItemGroup>
|
|
24
25
|
</Project>
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pythonnet
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.1.0rc0
|
|
4
4
|
Summary: .NET and Mono integration for Python
|
|
5
5
|
Author-email: "The Contributors of the Python.NET Project" <pythonnet@python.org>
|
|
6
|
-
License: MIT
|
|
6
|
+
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://pythonnet.github.io/
|
|
8
8
|
Project-URL: Sources, https://github.com/pythonnet/pythonnet
|
|
9
9
|
Classifier: Development Status :: 5 - Production/Stable
|
|
10
10
|
Classifier: Intended Audience :: Developers
|
|
11
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
12
11
|
Classifier: Programming Language :: C#
|
|
13
12
|
Classifier: Programming Language :: Python :: 3
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.7
|
|
@@ -21,9 +20,12 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
21
20
|
Classifier: Operating System :: Microsoft :: Windows
|
|
22
21
|
Classifier: Operating System :: POSIX :: Linux
|
|
23
22
|
Classifier: Operating System :: MacOS :: MacOS X
|
|
24
|
-
Requires-Python: <3.
|
|
23
|
+
Requires-Python: <3.15,>=3.10
|
|
25
24
|
Description-Content-Type: text/x-rst
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
License-File: AUTHORS.md
|
|
26
27
|
Requires-Dist: clr_loader<0.3.0,>=0.2.7
|
|
28
|
+
Dynamic: license-file
|
|
27
29
|
|
|
28
30
|
pythonnet - Python.NET
|
|
29
31
|
===========================
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["setuptools>=
|
|
2
|
+
requires = ["setuptools>=80"]
|
|
3
3
|
build-backend = "setuptools.build_meta"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pythonnet"
|
|
7
7
|
description = ".NET and Mono integration for Python"
|
|
8
|
-
license =
|
|
8
|
+
license = "MIT"
|
|
9
9
|
|
|
10
10
|
readme = "README.rst"
|
|
11
11
|
|
|
@@ -13,12 +13,11 @@ dependencies = [
|
|
|
13
13
|
"clr_loader>=0.2.7,<0.3.0"
|
|
14
14
|
]
|
|
15
15
|
|
|
16
|
-
requires-python = ">=3.
|
|
16
|
+
requires-python = ">=3.10, <3.15"
|
|
17
17
|
|
|
18
18
|
classifiers = [
|
|
19
19
|
"Development Status :: 5 - Production/Stable",
|
|
20
20
|
"Intended Audience :: Developers",
|
|
21
|
-
"License :: OSI Approved :: MIT License",
|
|
22
21
|
"Programming Language :: C#",
|
|
23
22
|
"Programming Language :: Python :: 3",
|
|
24
23
|
"Programming Language :: Python :: 3.7",
|
|
@@ -38,7 +37,7 @@ dynamic = ["version"]
|
|
|
38
37
|
[dependency-groups]
|
|
39
38
|
dev = [
|
|
40
39
|
"pytest >= 6",
|
|
41
|
-
"find_libpython >= 0.3
|
|
40
|
+
"find_libpython >= 0.3",
|
|
42
41
|
"numpy >=2 ; python_version >= '3.10'",
|
|
43
42
|
"numpy <2 ; python_version < '3.10'",
|
|
44
43
|
"psutil"
|
|
@@ -55,7 +54,6 @@ Sources = "https://github.com/pythonnet/pythonnet"
|
|
|
55
54
|
[tool.setuptools]
|
|
56
55
|
zip-safe = false
|
|
57
56
|
py-modules = ["clr"]
|
|
58
|
-
license-files = []
|
|
59
57
|
|
|
60
58
|
[tool.setuptools.dynamic.version]
|
|
61
59
|
file = "version.txt"
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pythonnet
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.1.0rc0
|
|
4
4
|
Summary: .NET and Mono integration for Python
|
|
5
5
|
Author-email: "The Contributors of the Python.NET Project" <pythonnet@python.org>
|
|
6
|
-
License: MIT
|
|
6
|
+
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://pythonnet.github.io/
|
|
8
8
|
Project-URL: Sources, https://github.com/pythonnet/pythonnet
|
|
9
9
|
Classifier: Development Status :: 5 - Production/Stable
|
|
10
10
|
Classifier: Intended Audience :: Developers
|
|
11
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
12
11
|
Classifier: Programming Language :: C#
|
|
13
12
|
Classifier: Programming Language :: Python :: 3
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.7
|
|
@@ -21,9 +20,12 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
21
20
|
Classifier: Operating System :: Microsoft :: Windows
|
|
22
21
|
Classifier: Operating System :: POSIX :: Linux
|
|
23
22
|
Classifier: Operating System :: MacOS :: MacOS X
|
|
24
|
-
Requires-Python: <3.
|
|
23
|
+
Requires-Python: <3.15,>=3.10
|
|
25
24
|
Description-Content-Type: text/x-rst
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
License-File: AUTHORS.md
|
|
26
27
|
Requires-Dist: clr_loader<0.3.0,>=0.2.7
|
|
28
|
+
Dynamic: license-file
|
|
27
29
|
|
|
28
30
|
pythonnet - Python.NET
|
|
29
31
|
===========================
|
|
@@ -88,9 +88,7 @@ src/runtime/Native/TypeOffset310.cs
|
|
|
88
88
|
src/runtime/Native/TypeOffset311.cs
|
|
89
89
|
src/runtime/Native/TypeOffset312.cs
|
|
90
90
|
src/runtime/Native/TypeOffset313.cs
|
|
91
|
-
src/runtime/Native/
|
|
92
|
-
src/runtime/Native/TypeOffset38.cs
|
|
93
|
-
src/runtime/Native/TypeOffset39.cs
|
|
91
|
+
src/runtime/Native/TypeOffset314.cs
|
|
94
92
|
src/runtime/Properties/AssemblyInfo.cs
|
|
95
93
|
src/runtime/PythonTypes/PyBuffer.cs
|
|
96
94
|
src/runtime/PythonTypes/PyDict.cs
|
|
@@ -167,6 +165,7 @@ src/runtime/Util/NonCopyableAttribute.cs
|
|
|
167
165
|
src/runtime/Util/NullOnly.cs
|
|
168
166
|
src/runtime/Util/OpsHelper.cs
|
|
169
167
|
src/runtime/Util/ParameterHelper.cs
|
|
168
|
+
src/runtime/Util/PythonEnvironment.cs
|
|
170
169
|
src/runtime/Util/PythonReferenceComparer.cs
|
|
171
170
|
src/runtime/Util/ReflectionPolyfills.cs
|
|
172
171
|
src/runtime/Util/ReflectionUtil.cs
|
|
@@ -8,8 +8,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Python.EmbeddingTest", "src
|
|
|
8
8
|
EndProject
|
|
9
9
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Python.Test", "src\testing\Python.Test.csproj", "{14EF9518-5BB7-4F83-8686-015BD2CC788E}"
|
|
10
10
|
EndProject
|
|
11
|
-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Python.PerformanceTests", "src\perf_tests\Python.PerformanceTests.csproj", "{4F2EA4A1-7ECA-48B5-8077-7A3C366F9931}"
|
|
12
|
-
EndProject
|
|
13
11
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Python.DomainReloadTests", "tests\domain_tests\Python.DomainReloadTests.csproj", "{F2FB6DA3-318E-4F30-9A1F-932C667E38C5}"
|
|
14
12
|
EndProject
|
|
15
13
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Repo", "Repo", "{441A0123-F4C6-4EE4-9AEE-315FD79BE2D5}"
|
|
@@ -20,6 +18,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Repo", "Repo", "{441A0123-F
|
|
|
20
18
|
LICENSE = LICENSE
|
|
21
19
|
README.rst = README.rst
|
|
22
20
|
version.txt = version.txt
|
|
21
|
+
shell.nix = shell.nix
|
|
23
22
|
EndProjectSection
|
|
24
23
|
EndProject
|
|
25
24
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CI", "CI", "{D301657F-5EAF-4534-B280-B858D651B2E5}"
|
|
@@ -123,6 +123,11 @@ namespace Python.Runtime
|
|
|
123
123
|
|
|
124
124
|
internal static AssemblyName? TryParseAssemblyName(string name)
|
|
125
125
|
{
|
|
126
|
+
// workaround for https://github.com/dotnet/runtime/issues/123951
|
|
127
|
+
if (name.IndexOfAny(new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }) >= 0)
|
|
128
|
+
{
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
126
131
|
try
|
|
127
132
|
{
|
|
128
133
|
return new AssemblyName(name);
|
|
@@ -213,6 +213,7 @@ namespace Python.Runtime
|
|
|
213
213
|
ClassInfo info = GetClassInfo(type, impl);
|
|
214
214
|
|
|
215
215
|
impl.indexer = info.indexer;
|
|
216
|
+
impl.del = info.del;
|
|
216
217
|
impl.richcompare.Clear();
|
|
217
218
|
|
|
218
219
|
|
|
@@ -538,6 +539,21 @@ namespace Python.Runtime
|
|
|
538
539
|
|
|
539
540
|
ob = new MethodObject(type, name, mlist);
|
|
540
541
|
ci.members[name] = ob.AllocObject();
|
|
542
|
+
if (name == nameof(IDictionary<int, int>.Remove)
|
|
543
|
+
&& mlist.Any(m => m.DeclaringType?.GetInterfaces()
|
|
544
|
+
.Any(i => i.TryGetGenericDefinition() == typeof(IDictionary<,>)) is true))
|
|
545
|
+
{
|
|
546
|
+
ci.del = new();
|
|
547
|
+
ci.del.AddRange(mlist.Where(m => !m.IsStatic));
|
|
548
|
+
}
|
|
549
|
+
else if (name == nameof(IList<int>.RemoveAt)
|
|
550
|
+
&& mlist.Any(m => m.DeclaringType?.GetInterfaces()
|
|
551
|
+
.Any(i => i.TryGetGenericDefinition() == typeof(IList<>)) is true))
|
|
552
|
+
{
|
|
553
|
+
ci.del = new();
|
|
554
|
+
ci.del.AddRange(mlist.Where(m => !m.IsStatic));
|
|
555
|
+
}
|
|
556
|
+
|
|
541
557
|
if (mlist.Any(OperatorMethod.IsOperatorMethod))
|
|
542
558
|
{
|
|
543
559
|
string pyName = OperatorMethod.GetPyMethodName(name);
|
|
@@ -581,6 +597,7 @@ namespace Python.Runtime
|
|
|
581
597
|
private class ClassInfo
|
|
582
598
|
{
|
|
583
599
|
public Indexer? indexer;
|
|
600
|
+
public MethodBinder? del;
|
|
584
601
|
public readonly Dictionary<string, PyObject> members = new();
|
|
585
602
|
|
|
586
603
|
internal ClassInfo()
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
using System;
|
|
2
|
-
using System.Collections.Generic;
|
|
3
|
-
|
|
4
|
-
namespace Python.Runtime.Codecs
|
|
5
|
-
{
|
|
6
|
-
public class IterableDecoder : IPyObjectDecoder
|
|
7
|
-
{
|
|
8
|
-
internal static bool IsIterable(Type targetType)
|
|
9
|
-
{
|
|
10
|
-
//if it is a plain IEnumerable, we can decode it using sequence protocol.
|
|
11
|
-
if (targetType == typeof(System.Collections.IEnumerable))
|
|
12
|
-
return true;
|
|
13
|
-
|
|
14
|
-
if (!targetType.IsGenericType)
|
|
15
|
-
return false;
|
|
16
|
-
|
|
17
|
-
return targetType.GetGenericTypeDefinition() == typeof(IEnumerable<>);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
internal static bool IsIterable(PyType objectType)
|
|
21
|
-
{
|
|
22
|
-
return objectType.HasAttr("__iter__");
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
public bool CanDecode(PyType objectType, Type targetType)
|
|
26
|
-
{
|
|
27
|
-
return IsIterable(objectType) && IsIterable(targetType);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public bool TryDecode<T>(PyObject pyObj, out T value)
|
|
31
|
-
{
|
|
32
|
-
//first see if T is a plan IEnumerable
|
|
33
|
-
if (typeof(T) == typeof(System.Collections.IEnumerable))
|
|
34
|
-
{
|
|
35
|
-
object enumerable = new CollectionWrappers.IterableWrapper<object>(pyObj);
|
|
36
|
-
value = (T)enumerable;
|
|
37
|
-
return true;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
var elementType = typeof(T).GetGenericArguments()[0];
|
|
41
|
-
var collectionType = typeof(CollectionWrappers.IterableWrapper<>).MakeGenericType(elementType);
|
|
42
|
-
|
|
43
|
-
var instance = Activator.CreateInstance(collectionType, new[] { pyObj });
|
|
44
|
-
value = (T)instance;
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
public static IterableDecoder Instance { get; } = new IterableDecoder();
|
|
49
|
-
|
|
50
|
-
public static void Register()
|
|
51
|
-
{
|
|
52
|
-
PyObjectConversions.RegisterDecoder(Instance);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
1
|
+
using System;
|
|
2
|
+
using System.Collections.Generic;
|
|
3
|
+
|
|
4
|
+
namespace Python.Runtime.Codecs
|
|
5
|
+
{
|
|
6
|
+
public class IterableDecoder : IPyObjectDecoder
|
|
7
|
+
{
|
|
8
|
+
internal static bool IsIterable(Type targetType)
|
|
9
|
+
{
|
|
10
|
+
//if it is a plain IEnumerable, we can decode it using sequence protocol.
|
|
11
|
+
if (targetType == typeof(System.Collections.IEnumerable))
|
|
12
|
+
return true;
|
|
13
|
+
|
|
14
|
+
if (!targetType.IsGenericType)
|
|
15
|
+
return false;
|
|
16
|
+
|
|
17
|
+
return targetType.GetGenericTypeDefinition() == typeof(IEnumerable<>);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
internal static bool IsIterable(PyType objectType)
|
|
21
|
+
{
|
|
22
|
+
return objectType.HasAttr("__iter__");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public bool CanDecode(PyType objectType, Type targetType)
|
|
26
|
+
{
|
|
27
|
+
return IsIterable(objectType) && IsIterable(targetType);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public bool TryDecode<T>(PyObject pyObj, out T value)
|
|
31
|
+
{
|
|
32
|
+
//first see if T is a plan IEnumerable
|
|
33
|
+
if (typeof(T) == typeof(System.Collections.IEnumerable))
|
|
34
|
+
{
|
|
35
|
+
object enumerable = new CollectionWrappers.IterableWrapper<object>(pyObj);
|
|
36
|
+
value = (T)enumerable;
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
var elementType = typeof(T).GetGenericArguments()[0];
|
|
41
|
+
var collectionType = typeof(CollectionWrappers.IterableWrapper<>).MakeGenericType(elementType);
|
|
42
|
+
|
|
43
|
+
var instance = Activator.CreateInstance(collectionType, new[] { pyObj });
|
|
44
|
+
value = (T)instance;
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public static IterableDecoder Instance { get; } = new IterableDecoder();
|
|
49
|
+
|
|
50
|
+
public static void Register()
|
|
51
|
+
{
|
|
52
|
+
PyObjectConversions.RegisterDecoder(Instance);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
using System;
|
|
2
|
-
using System.Collections.Generic;
|
|
3
|
-
|
|
4
|
-
namespace Python.Runtime.Codecs
|
|
5
|
-
{
|
|
6
|
-
public class ListDecoder : IPyObjectDecoder
|
|
7
|
-
{
|
|
8
|
-
private static bool IsList(Type targetType)
|
|
9
|
-
{
|
|
10
|
-
if (!targetType.IsGenericType)
|
|
11
|
-
return false;
|
|
12
|
-
|
|
13
|
-
return targetType.GetGenericTypeDefinition() == typeof(IList<>);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
private static bool IsList(PyType objectType)
|
|
17
|
-
{
|
|
18
|
-
//TODO accept any python object that implements the sequence and list protocols
|
|
19
|
-
//must implement sequence protocol to fully implement list protocol
|
|
20
|
-
//if (!SequenceDecoder.IsSequence(objectType)) return false;
|
|
21
|
-
|
|
22
|
-
//returns wheter the type is a list.
|
|
23
|
-
return PythonReferenceComparer.Instance.Equals(objectType, Runtime.PyListType);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public bool CanDecode(PyType objectType, Type targetType)
|
|
27
|
-
{
|
|
28
|
-
return IsList(objectType) && IsList(targetType);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
public bool TryDecode<T>(PyObject pyObj, out T value)
|
|
32
|
-
{
|
|
33
|
-
if (pyObj == null) throw new ArgumentNullException(nameof(pyObj));
|
|
34
|
-
|
|
35
|
-
var elementType = typeof(T).GetGenericArguments()[0];
|
|
36
|
-
Type collectionType = typeof(CollectionWrappers.ListWrapper<>).MakeGenericType(elementType);
|
|
37
|
-
|
|
38
|
-
var instance = Activator.CreateInstance(collectionType, new[] { pyObj });
|
|
39
|
-
value = (T)instance;
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
public static ListDecoder Instance { get; } = new ListDecoder();
|
|
44
|
-
|
|
45
|
-
public static void Register()
|
|
46
|
-
{
|
|
47
|
-
PyObjectConversions.RegisterDecoder(Instance);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
1
|
+
using System;
|
|
2
|
+
using System.Collections.Generic;
|
|
3
|
+
|
|
4
|
+
namespace Python.Runtime.Codecs
|
|
5
|
+
{
|
|
6
|
+
public class ListDecoder : IPyObjectDecoder
|
|
7
|
+
{
|
|
8
|
+
private static bool IsList(Type targetType)
|
|
9
|
+
{
|
|
10
|
+
if (!targetType.IsGenericType)
|
|
11
|
+
return false;
|
|
12
|
+
|
|
13
|
+
return targetType.GetGenericTypeDefinition() == typeof(IList<>);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
private static bool IsList(PyType objectType)
|
|
17
|
+
{
|
|
18
|
+
//TODO accept any python object that implements the sequence and list protocols
|
|
19
|
+
//must implement sequence protocol to fully implement list protocol
|
|
20
|
+
//if (!SequenceDecoder.IsSequence(objectType)) return false;
|
|
21
|
+
|
|
22
|
+
//returns wheter the type is a list.
|
|
23
|
+
return PythonReferenceComparer.Instance.Equals(objectType, Runtime.PyListType);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public bool CanDecode(PyType objectType, Type targetType)
|
|
27
|
+
{
|
|
28
|
+
return IsList(objectType) && IsList(targetType);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public bool TryDecode<T>(PyObject pyObj, out T value)
|
|
32
|
+
{
|
|
33
|
+
if (pyObj == null) throw new ArgumentNullException(nameof(pyObj));
|
|
34
|
+
|
|
35
|
+
var elementType = typeof(T).GetGenericArguments()[0];
|
|
36
|
+
Type collectionType = typeof(CollectionWrappers.ListWrapper<>).MakeGenericType(elementType);
|
|
37
|
+
|
|
38
|
+
var instance = Activator.CreateInstance(collectionType, new[] { pyObj });
|
|
39
|
+
value = (T)instance;
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public static ListDecoder Instance { get; } = new ListDecoder();
|
|
44
|
+
|
|
45
|
+
public static void Register()
|
|
46
|
+
{
|
|
47
|
+
PyObjectConversions.RegisterDecoder(Instance);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
using System;
|
|
2
|
-
using System.Collections.Generic;
|
|
3
|
-
|
|
4
|
-
namespace Python.Runtime.Codecs
|
|
5
|
-
{
|
|
6
|
-
public class SequenceDecoder : IPyObjectDecoder
|
|
7
|
-
{
|
|
8
|
-
internal static bool IsSequence(Type targetType)
|
|
9
|
-
{
|
|
10
|
-
if (!targetType.IsGenericType)
|
|
11
|
-
return false;
|
|
12
|
-
|
|
13
|
-
return targetType.GetGenericTypeDefinition() == typeof(ICollection<>);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
internal static bool IsSequence(PyType objectType)
|
|
17
|
-
{
|
|
18
|
-
//must implement iterable protocol to fully implement sequence protocol
|
|
19
|
-
if (!IterableDecoder.IsIterable(objectType)) return false;
|
|
20
|
-
|
|
1
|
+
using System;
|
|
2
|
+
using System.Collections.Generic;
|
|
3
|
+
|
|
4
|
+
namespace Python.Runtime.Codecs
|
|
5
|
+
{
|
|
6
|
+
public class SequenceDecoder : IPyObjectDecoder
|
|
7
|
+
{
|
|
8
|
+
internal static bool IsSequence(Type targetType)
|
|
9
|
+
{
|
|
10
|
+
if (!targetType.IsGenericType)
|
|
11
|
+
return false;
|
|
12
|
+
|
|
13
|
+
return targetType.GetGenericTypeDefinition() == typeof(ICollection<>);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
internal static bool IsSequence(PyType objectType)
|
|
17
|
+
{
|
|
18
|
+
//must implement iterable protocol to fully implement sequence protocol
|
|
19
|
+
if (!IterableDecoder.IsIterable(objectType)) return false;
|
|
20
|
+
|
|
21
21
|
//returns wheter it implements the sequence protocol
|
|
22
22
|
//according to python doc this needs to exclude dict subclasses
|
|
23
23
|
//but I don't know how to look for that given the objectType
|
|
24
24
|
//rather than the instance.
|
|
25
|
-
return objectType.HasAttr("__getitem__");
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
public bool CanDecode(PyType objectType, Type targetType)
|
|
29
|
-
{
|
|
30
|
-
return IsSequence(objectType) && IsSequence(targetType);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
public bool TryDecode<T>(PyObject pyObj, out T value)
|
|
34
|
-
{
|
|
35
|
-
if (pyObj == null) throw new ArgumentNullException(nameof(pyObj));
|
|
36
|
-
|
|
37
|
-
var elementType = typeof(T).GetGenericArguments()[0];
|
|
38
|
-
Type collectionType = typeof(CollectionWrappers.SequenceWrapper<>).MakeGenericType(elementType);
|
|
39
|
-
|
|
40
|
-
var instance = Activator.CreateInstance(collectionType, new[] { pyObj });
|
|
41
|
-
value = (T)instance;
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
public static SequenceDecoder Instance { get; } = new SequenceDecoder();
|
|
46
|
-
|
|
47
|
-
public static void Register()
|
|
48
|
-
{
|
|
49
|
-
PyObjectConversions.RegisterDecoder(Instance);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
25
|
+
return objectType.HasAttr("__getitem__");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public bool CanDecode(PyType objectType, Type targetType)
|
|
29
|
+
{
|
|
30
|
+
return IsSequence(objectType) && IsSequence(targetType);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public bool TryDecode<T>(PyObject pyObj, out T value)
|
|
34
|
+
{
|
|
35
|
+
if (pyObj == null) throw new ArgumentNullException(nameof(pyObj));
|
|
36
|
+
|
|
37
|
+
var elementType = typeof(T).GetGenericArguments()[0];
|
|
38
|
+
Type collectionType = typeof(CollectionWrappers.SequenceWrapper<>).MakeGenericType(elementType);
|
|
39
|
+
|
|
40
|
+
var instance = Activator.CreateInstance(collectionType, new[] { pyObj });
|
|
41
|
+
value = (T)instance;
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public static SequenceDecoder Instance { get; } = new SequenceDecoder();
|
|
46
|
+
|
|
47
|
+
public static void Register()
|
|
48
|
+
{
|
|
49
|
+
PyObjectConversions.RegisterDecoder(Instance);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -14,12 +14,14 @@ namespace Python.Runtime.CollectionWrappers
|
|
|
14
14
|
{
|
|
15
15
|
get
|
|
16
16
|
{
|
|
17
|
+
using var _ = Py.GIL();
|
|
17
18
|
var item = Runtime.PyList_GetItem(pyObject, index);
|
|
18
19
|
var pyItem = new PyObject(item);
|
|
19
20
|
return pyItem.As<T>()!;
|
|
20
21
|
}
|
|
21
22
|
set
|
|
22
23
|
{
|
|
24
|
+
using var _ = Py.GIL();
|
|
23
25
|
var pyItem = value.ToPython();
|
|
24
26
|
var result = Runtime.PyList_SetItem(pyObject, index, new NewReference(pyItem).Steal());
|
|
25
27
|
if (result == -1)
|
|
@@ -37,6 +39,7 @@ namespace Python.Runtime.CollectionWrappers
|
|
|
37
39
|
if (IsReadOnly)
|
|
38
40
|
throw new InvalidOperationException("Collection is read-only");
|
|
39
41
|
|
|
42
|
+
using var _ = Py.GIL();
|
|
40
43
|
var pyItem = item.ToPython();
|
|
41
44
|
|
|
42
45
|
int result = Runtime.PyList_Insert(pyObject, index, pyItem);
|
|
@@ -14,10 +14,14 @@ namespace Python.Runtime.CollectionWrappers
|
|
|
14
14
|
{
|
|
15
15
|
get
|
|
16
16
|
{
|
|
17
|
-
|
|
18
|
-
if (size == -1)
|
|
17
|
+
nint size = -1;
|
|
19
18
|
{
|
|
20
|
-
|
|
19
|
+
using var _ = Py.GIL();
|
|
20
|
+
size = Runtime.PySequence_Size(pyObject.Reference);
|
|
21
|
+
if (size == -1)
|
|
22
|
+
{
|
|
23
|
+
Runtime.CheckExceptionOccurred();
|
|
24
|
+
}
|
|
21
25
|
}
|
|
22
26
|
|
|
23
27
|
return checked((int)size);
|
|
@@ -38,6 +42,7 @@ namespace Python.Runtime.CollectionWrappers
|
|
|
38
42
|
{
|
|
39
43
|
if (IsReadOnly)
|
|
40
44
|
throw new NotImplementedException();
|
|
45
|
+
using var _ = Py.GIL();
|
|
41
46
|
int result = Runtime.PySequence_DelSlice(pyObject, 0, Count);
|
|
42
47
|
if (result == -1)
|
|
43
48
|
{
|
|
@@ -77,12 +82,16 @@ namespace Python.Runtime.CollectionWrappers
|
|
|
77
82
|
if (index >= Count || index < 0)
|
|
78
83
|
return false;
|
|
79
84
|
|
|
80
|
-
int result = Runtime.PySequence_DelItem(pyObject, index);
|
|
81
85
|
|
|
82
|
-
|
|
83
|
-
|
|
86
|
+
{
|
|
87
|
+
using var _ = Py.GIL();
|
|
88
|
+
int result = Runtime.PySequence_DelItem(pyObject, index);
|
|
89
|
+
|
|
90
|
+
if (result == 0)
|
|
91
|
+
return true;
|
|
84
92
|
|
|
85
|
-
|
|
93
|
+
Runtime.CheckExceptionOccurred();
|
|
94
|
+
}
|
|
86
95
|
return false;
|
|
87
96
|
}
|
|
88
97
|
|
|
@@ -54,6 +54,11 @@ namespace Python.Runtime
|
|
|
54
54
|
list.Add(m);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
internal void AddRange(IEnumerable<MethodBase> methods)
|
|
58
|
+
{
|
|
59
|
+
list.AddRange(methods.Select(m => new MaybeMethodBase(m)));
|
|
60
|
+
}
|
|
61
|
+
|
|
57
62
|
/// <summary>
|
|
58
63
|
/// Given a sequence of MethodInfo and a sequence of types, return the
|
|
59
64
|
/// MethodInfo that matches the signature represented by those types.
|