Full Code of joaoventura/pybridge-ios for AI

master c29ddf3b4c1e cached
163 files
42.8 MB
234.0k tokens
454 symbols
1 requests
Download .txt
Showing preview only (895K chars total). Download the full file or copy to clipboard to get everything.
Repository: joaoventura/pybridge-ios
Branch: master
Commit: c29ddf3b4c1e
Files: 163
Total size: 42.8 MB

Directory structure:
gitextract_0pm91rqf/

├── .gitignore
├── PyApp/
│   ├── PyApp/
│   │   ├── AppDelegate.swift
│   │   ├── Assets.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   └── Contents.json
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── Info.plist
│   │   ├── PyApp-Bridging-Header.h
│   │   ├── ViewController.swift
│   │   ├── pybridge.c
│   │   ├── pybridge.h
│   │   └── pybridge.swift
│   └── PyApp.xcodeproj/
│       ├── project.pbxproj
│       └── project.xcworkspace/
│           ├── contents.xcworkspacedata
│           └── xcshareddata/
│               └── IDEWorkspaceChecks.plist
├── README.md
├── docs/
│   └── references.md
└── python-for-ios/
    └── dist/
        ├── lib/
        │   ├── libcrypto.a
        │   ├── libffi.a
        │   ├── libpython3.a
        │   └── libssl.a
        └── root/
            └── python3/
                ├── include/
                │   └── python3.8/
                │       ├── Python-ast.h
                │       ├── Python.h
                │       ├── abstract.h
                │       ├── asdl.h
                │       ├── ast.h
                │       ├── bitset.h
                │       ├── bltinmodule.h
                │       ├── boolobject.h
                │       ├── bytearrayobject.h
                │       ├── bytes_methods.h
                │       ├── bytesobject.h
                │       ├── cellobject.h
                │       ├── ceval.h
                │       ├── classobject.h
                │       ├── code.h
                │       ├── codecs.h
                │       ├── compile.h
                │       ├── complexobject.h
                │       ├── context.h
                │       ├── cpython/
                │       │   ├── abstract.h
                │       │   ├── dictobject.h
                │       │   ├── fileobject.h
                │       │   ├── initconfig.h
                │       │   ├── interpreteridobject.h
                │       │   ├── object.h
                │       │   ├── objimpl.h
                │       │   ├── pyerrors.h
                │       │   ├── pylifecycle.h
                │       │   ├── pymem.h
                │       │   ├── pystate.h
                │       │   ├── sysmodule.h
                │       │   ├── traceback.h
                │       │   ├── tupleobject.h
                │       │   └── unicodeobject.h
                │       ├── datetime.h
                │       ├── descrobject.h
                │       ├── dictobject.h
                │       ├── dtoa.h
                │       ├── dynamic_annotations.h
                │       ├── enumobject.h
                │       ├── errcode.h
                │       ├── eval.h
                │       ├── fileobject.h
                │       ├── fileutils.h
                │       ├── floatobject.h
                │       ├── frameobject.h
                │       ├── funcobject.h
                │       ├── genobject.h
                │       ├── graminit.h
                │       ├── grammar.h
                │       ├── import.h
                │       ├── internal/
                │       │   ├── pycore_accu.h
                │       │   ├── pycore_atomic.h
                │       │   ├── pycore_ceval.h
                │       │   ├── pycore_code.h
                │       │   ├── pycore_condvar.h
                │       │   ├── pycore_context.h
                │       │   ├── pycore_fileutils.h
                │       │   ├── pycore_getopt.h
                │       │   ├── pycore_gil.h
                │       │   ├── pycore_hamt.h
                │       │   ├── pycore_initconfig.h
                │       │   ├── pycore_object.h
                │       │   ├── pycore_pathconfig.h
                │       │   ├── pycore_pyerrors.h
                │       │   ├── pycore_pyhash.h
                │       │   ├── pycore_pylifecycle.h
                │       │   ├── pycore_pymem.h
                │       │   ├── pycore_pystate.h
                │       │   ├── pycore_traceback.h
                │       │   ├── pycore_tupleobject.h
                │       │   └── pycore_warnings.h
                │       ├── interpreteridobject.h
                │       ├── intrcheck.h
                │       ├── iterobject.h
                │       ├── listobject.h
                │       ├── longintrepr.h
                │       ├── longobject.h
                │       ├── marshal.h
                │       ├── memoryobject.h
                │       ├── methodobject.h
                │       ├── modsupport.h
                │       ├── moduleobject.h
                │       ├── namespaceobject.h
                │       ├── node.h
                │       ├── object.h
                │       ├── objimpl.h
                │       ├── odictobject.h
                │       ├── opcode.h
                │       ├── osdefs.h
                │       ├── osmodule.h
                │       ├── parsetok.h
                │       ├── patchlevel.h
                │       ├── picklebufobject.h
                │       ├── py_curses.h
                │       ├── pyarena.h
                │       ├── pycapsule.h
                │       ├── pyconfig.h
                │       ├── pyctype.h
                │       ├── pydebug.h
                │       ├── pydtrace.h
                │       ├── pyerrors.h
                │       ├── pyexpat.h
                │       ├── pyfpe.h
                │       ├── pyhash.h
                │       ├── pylifecycle.h
                │       ├── pymacconfig.h
                │       ├── pymacro.h
                │       ├── pymath.h
                │       ├── pymem.h
                │       ├── pyport.h
                │       ├── pystate.h
                │       ├── pystrcmp.h
                │       ├── pystrhex.h
                │       ├── pystrtod.h
                │       ├── pythonrun.h
                │       ├── pythread.h
                │       ├── pytime.h
                │       ├── rangeobject.h
                │       ├── setobject.h
                │       ├── sliceobject.h
                │       ├── structmember.h
                │       ├── structseq.h
                │       ├── symtable.h
                │       ├── sysmodule.h
                │       ├── token.h
                │       ├── traceback.h
                │       ├── tracemalloc.h
                │       ├── tupleobject.h
                │       ├── typeslots.h
                │       ├── ucnhash.h
                │       ├── unicodeobject.h
                │       ├── warnings.h
                │       └── weakrefobject.h
                └── lib/
                    ├── bootstrap.py
                    └── python3.8/
                        ├── config-3.8-darwin/
                        │   ├── Makefile
                        │   ├── Setup
                        │   ├── Setup.local
                        │   ├── config.c
                        │   └── python-config.py
                        └── site-packages/
                            ├── README.txt
                            └── _sqlite3/
                                └── __init__.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## User settings
xcuserdata/

## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout

## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3

## Obj-C/Swift specific
*.hmap

## App packaging
*.ipa
*.dSYM.zip
*.dSYM

## Playgrounds
timeline.xctimeline
playground.xcworkspace

# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
# *.xcodeproj
#
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
# .swiftpm

.build/

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build/

# Accio dependency management
Dependencies/
.accio/

# fastlane
#
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control

fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output

# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode

iOSInjectionProject/


================================================
FILE: PyApp/PyApp/AppDelegate.swift
================================================
//
//  AppDelegate.swift
//  PyApp
//
//  Created by João Ventura on 28/05/2020.
//  Copyright © 2020 Ventura. All rights reserved.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }


}



================================================
FILE: PyApp/PyApp/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "iphone",
      "size" : "20x20",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "size" : "20x20",
      "scale" : "3x"
    },
    {
      "idiom" : "iphone",
      "size" : "29x29",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "size" : "29x29",
      "scale" : "3x"
    },
    {
      "idiom" : "iphone",
      "size" : "40x40",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "size" : "40x40",
      "scale" : "3x"
    },
    {
      "idiom" : "iphone",
      "size" : "60x60",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "size" : "60x60",
      "scale" : "3x"
    },
    {
      "idiom" : "ipad",
      "size" : "20x20",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "20x20",
      "scale" : "2x"
    },
    {
      "idiom" : "ipad",
      "size" : "29x29",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "29x29",
      "scale" : "2x"
    },
    {
      "idiom" : "ipad",
      "size" : "40x40",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "40x40",
      "scale" : "2x"
    },
    {
      "idiom" : "ipad",
      "size" : "76x76",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "76x76",
      "scale" : "2x"
    },
    {
      "idiom" : "ipad",
      "size" : "83.5x83.5",
      "scale" : "2x"
    },
    {
      "idiom" : "ios-marketing",
      "size" : "1024x1024",
      "scale" : "1x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: PyApp/PyApp/Assets.xcassets/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: PyApp/PyApp/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="EHf-IW-A2E">
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="53" y="375"/>
        </scene>
    </scenes>
</document>


================================================
FILE: PyApp/PyApp/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
    <device id="retina4_0" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="PyApp" customModuleProvider="target" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8hp-Og-3KK">
                                <rect key="frame" x="16" y="274" width="288" height="21"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
                    </view>
                    <connections>
                        <outlet property="label" destination="8hp-Og-3KK" id="uem-N8-L0s"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="138.75" y="109.85915492957747"/>
        </scene>
    </scenes>
</document>


================================================
FILE: PyApp/PyApp/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>$(DEVELOPMENT_LANGUAGE)</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>UILaunchStoryboardName</key>
	<string>LaunchScreen</string>
	<key>UIMainStoryboardFile</key>
	<string>Main</string>
	<key>UIRequiredDeviceCapabilities</key>
	<array>
		<string>armv7</string>
	</array>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
	<key>UISupportedInterfaceOrientations~ipad</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
</dict>
</plist>


================================================
FILE: PyApp/PyApp/PyApp-Bridging-Header.h
================================================
//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "pybridge.h"


================================================
FILE: PyApp/PyApp/ViewController.swift
================================================
//
//  ViewController.swift
//  PyApp
//
//  Created by João Ventura on 28/05/2020.
//  Copyright © 2020 Ventura. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Start the python interpreter
        PyBridge.start(path: Bundle.main.resourcePath!)
        
        // Create dictionary
        var req : [String:Any] = [:]
        req["function"] = "greet"
        req["name"] = "Python 3.8"
        
        // Invoke function
        let result = PyBridge.call(req: req)
        
        // Set the label text
        label.text = result
        
        // Finalize the python interpreter
        PyBridge.stop()
    }
}



================================================
FILE: PyApp/PyApp/pybridge.c
================================================
#include <stdio.h>
#include <string.h>

#include "pybridge.h"
#include "Python.h"

void python_start(const char* resourcePath)
{
    printf("Initializing the Python interpreter\n");
    
    // Set python home
    wchar_t *resources = Py_DecodeLocale(resourcePath, NULL);
    Py_SetPythonHome(resources);
    
    // Set paths
    char paths[10000];
    snprintf(paths, sizeof(paths),
             "%s/lib/" \
             ":%s/lib/python38.zip" \
             ":%s/lib/python3.8/" \
             ":%s/lib/python3.8/site-packages",
             resourcePath, resourcePath, resourcePath, resourcePath);
    
    wchar_t *wchar_paths = Py_DecodeLocale(paths, NULL);
    Py_SetPath(wchar_paths);
    
    // Initialize
    Py_InitializeEx(0);
    
    // Bootstrap
    PyRun_SimpleString("import bootstrap");
    
    // Cleanup
    PyMem_RawFree(wchar_paths);
}

void python_end()
{
    printf("Finalizing the Python interpreter\n");
    Py_Finalize();
}

char* python_call(const char* payload)
{
    printf("Call into Python interpreter\n");
    
    // Import module
    PyObject* myModuleString = PyUnicode_FromString((char*) "bootstrap");
    PyObject* myModule = PyImport_Import(myModuleString);
    
    // Get reference to the router function
    PyObject* myFunction = PyObject_GetAttrString(myModule, (char*) "router");
    PyObject* args = PyTuple_Pack(1, PyUnicode_FromString(payload));
    
    // Call function and get the resulting string
    PyObject* myResult = PyObject_CallObject(myFunction, args);
    const char *myResultChar = PyUnicode_AsUTF8(myResult);
    
    // Cleanup
    Py_DECREF(myModuleString);
    Py_DECREF(myModule);
    Py_DECREF(myFunction);
    Py_DECREF(args);
    Py_DECREF(myResult);

    // Return result
    unsigned long len = strlen(myResultChar);
    const char *result = malloc(sizeof(char *) * len);
    snprintf(result, len+1, "%s", myResultChar);
    return strdup(result);
}


================================================
FILE: PyApp/PyApp/pybridge.h
================================================
#ifndef pybridge_h
#define pybridge_h

#include <stdio.h>

void python_start(const char* resourcePath);
void python_end(void);
char* python_call(const char* payload);

#endif /* pybridge_h */


================================================
FILE: PyApp/PyApp/pybridge.swift
================================================
//
//  pybridge.swift
//  PyApp
//

import Foundation

class PyBridge {
    
    class func start(path: String) {
        python_start(path)
    }
    
    class func stop() {
        python_end()
    }
    
    class func call(req: Dictionary<String, Any>) -> String {
        
        // Convert to string
        let reqString = try? String(data: JSONSerialization.data(withJSONObject: req), encoding: .utf8)!
        
        // Call the python interpreter
        let res = python_call(reqString)
        
        // Convert response to String and free the pointer
        let resString = String(cString: res!)
        free(UnsafeMutablePointer(res))
        
        // Response
        struct PyBridgeResponse: Codable {
            var status: String
            var result: String
        }
        
        // Convert to dictionary
        let resData = resString.data(using: .utf8)!
        let response = try! JSONDecoder().decode(PyBridgeResponse.self, from: resData)
        
        return response.result
    }
}


================================================
FILE: PyApp/PyApp.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 50;
	objects = {

/* Begin PBXBuildFile section */
		606574B724810A1200A36CE6 /* pybridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606574B624810A1200A36CE6 /* pybridge.swift */; };
		6088164E247FAB3F00861E80 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6088164D247FAB3F00861E80 /* AppDelegate.swift */; };
		60881650247FAB3F00861E80 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6088164F247FAB3F00861E80 /* ViewController.swift */; };
		60881653247FAB3F00861E80 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 60881651247FAB3F00861E80 /* Main.storyboard */; };
		60881655247FAB3F00861E80 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 60881654247FAB3F00861E80 /* Assets.xcassets */; };
		60881658247FAB3F00861E80 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 60881656247FAB3F00861E80 /* LaunchScreen.storyboard */; };
		60881662247FB25800861E80 /* pybridge.c in Sources */ = {isa = PBXBuildFile; fileRef = 60881661247FB25800861E80 /* pybridge.c */; };
		6088167E247FBE2200861E80 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6088167A247FBE2200861E80 /* libcrypto.a */; };
		6088167F247FBE2200861E80 /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6088167B247FBE2200861E80 /* libssl.a */; };
		60881680247FBE2200861E80 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6088167C247FBE2200861E80 /* libffi.a */; };
		60881681247FBE2200861E80 /* libpython3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6088167D247FBE2200861E80 /* libpython3.a */; };
		60881683247FBE2F00861E80 /* libz.1.2.8.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 60881682247FBE2F00861E80 /* libz.1.2.8.tbd */; };
		60881685247FC03300861E80 /* lib in Resources */ = {isa = PBXBuildFile; fileRef = 60881684247FC03300861E80 /* lib */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
		606574B624810A1200A36CE6 /* pybridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = pybridge.swift; sourceTree = "<group>"; };
		6088164A247FAB3F00861E80 /* PyApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PyApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
		6088164D247FAB3F00861E80 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
		6088164F247FAB3F00861E80 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
		60881652247FAB3F00861E80 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
		60881654247FAB3F00861E80 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
		60881657247FAB3F00861E80 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
		60881659247FAB3F00861E80 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		6088165F247FB25800861E80 /* PyApp-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PyApp-Bridging-Header.h"; sourceTree = "<group>"; };
		60881660247FB25800861E80 /* pybridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pybridge.h; sourceTree = "<group>"; };
		60881661247FB25800861E80 /* pybridge.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pybridge.c; sourceTree = "<group>"; };
		6088167A247FBE2200861E80 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "../python-for-ios/dist/lib/libcrypto.a"; sourceTree = "<group>"; };
		6088167B247FBE2200861E80 /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libssl.a; path = "../python-for-ios/dist/lib/libssl.a"; sourceTree = "<group>"; };
		6088167C247FBE2200861E80 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libffi.a; path = "../python-for-ios/dist/lib/libffi.a"; sourceTree = "<group>"; };
		6088167D247FBE2200861E80 /* libpython3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpython3.a; path = "../python-for-ios/dist/lib/libpython3.a"; sourceTree = "<group>"; };
		60881682247FBE2F00861E80 /* libz.1.2.8.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.1.2.8.tbd; path = usr/lib/libz.1.2.8.tbd; sourceTree = SDKROOT; };
		60881684247FC03300861E80 /* lib */ = {isa = PBXFileReference; lastKnownFileType = folder; name = lib; path = "../python-for-ios/dist/root/python3/lib"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		60881647247FAB3F00861E80 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				60881683247FBE2F00861E80 /* libz.1.2.8.tbd in Frameworks */,
				6088167E247FBE2200861E80 /* libcrypto.a in Frameworks */,
				6088167F247FBE2200861E80 /* libssl.a in Frameworks */,
				60881680247FBE2200861E80 /* libffi.a in Frameworks */,
				60881681247FBE2200861E80 /* libpython3.a in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		60881641247FAB3F00861E80 = {
			isa = PBXGroup;
			children = (
				60881684247FC03300861E80 /* lib */,
				6088164C247FAB3F00861E80 /* PyApp */,
				6088164B247FAB3F00861E80 /* Products */,
				60881679247FBE2200861E80 /* Frameworks */,
			);
			sourceTree = "<group>";
		};
		6088164B247FAB3F00861E80 /* Products */ = {
			isa = PBXGroup;
			children = (
				6088164A247FAB3F00861E80 /* PyApp.app */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		6088164C247FAB3F00861E80 /* PyApp */ = {
			isa = PBXGroup;
			children = (
				6088164D247FAB3F00861E80 /* AppDelegate.swift */,
				6088164F247FAB3F00861E80 /* ViewController.swift */,
				60881651247FAB3F00861E80 /* Main.storyboard */,
				60881654247FAB3F00861E80 /* Assets.xcassets */,
				60881656247FAB3F00861E80 /* LaunchScreen.storyboard */,
				60881659247FAB3F00861E80 /* Info.plist */,
				60881660247FB25800861E80 /* pybridge.h */,
				60881661247FB25800861E80 /* pybridge.c */,
				6088165F247FB25800861E80 /* PyApp-Bridging-Header.h */,
				606574B624810A1200A36CE6 /* pybridge.swift */,
			);
			path = PyApp;
			sourceTree = "<group>";
		};
		60881679247FBE2200861E80 /* Frameworks */ = {
			isa = PBXGroup;
			children = (
				60881682247FBE2F00861E80 /* libz.1.2.8.tbd */,
				6088167A247FBE2200861E80 /* libcrypto.a */,
				6088167C247FBE2200861E80 /* libffi.a */,
				6088167D247FBE2200861E80 /* libpython3.a */,
				6088167B247FBE2200861E80 /* libssl.a */,
			);
			name = Frameworks;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		60881649247FAB3F00861E80 /* PyApp */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 6088165C247FAB3F00861E80 /* Build configuration list for PBXNativeTarget "PyApp" */;
			buildPhases = (
				60881646247FAB3F00861E80 /* Sources */,
				60881647247FAB3F00861E80 /* Frameworks */,
				60881648247FAB3F00861E80 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = PyApp;
			productName = PyApp;
			productReference = 6088164A247FAB3F00861E80 /* PyApp.app */;
			productType = "com.apple.product-type.application";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		60881642247FAB3F00861E80 /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastSwiftUpdateCheck = 1030;
				LastUpgradeCheck = 1030;
				ORGANIZATIONNAME = Ventura;
				TargetAttributes = {
					60881649247FAB3F00861E80 = {
						CreatedOnToolsVersion = 10.3;
						LastSwiftMigration = 1030;
					};
				};
			};
			buildConfigurationList = 60881645247FAB3F00861E80 /* Build configuration list for PBXProject "PyApp" */;
			compatibilityVersion = "Xcode 9.3";
			developmentRegion = en;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = 60881641247FAB3F00861E80;
			productRefGroup = 6088164B247FAB3F00861E80 /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				60881649247FAB3F00861E80 /* PyApp */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		60881648247FAB3F00861E80 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				60881685247FC03300861E80 /* lib in Resources */,
				60881658247FAB3F00861E80 /* LaunchScreen.storyboard in Resources */,
				60881655247FAB3F00861E80 /* Assets.xcassets in Resources */,
				60881653247FAB3F00861E80 /* Main.storyboard in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		60881646247FAB3F00861E80 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				60881650247FAB3F00861E80 /* ViewController.swift in Sources */,
				60881662247FB25800861E80 /* pybridge.c in Sources */,
				6088164E247FAB3F00861E80 /* AppDelegate.swift in Sources */,
				606574B724810A1200A36CE6 /* pybridge.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXVariantGroup section */
		60881651247FAB3F00861E80 /* Main.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				60881652247FAB3F00861E80 /* Base */,
			);
			name = Main.storyboard;
			sourceTree = "<group>";
		};
		60881656247FAB3F00861E80 /* LaunchScreen.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				60881657247FAB3F00861E80 /* Base */,
			);
			name = LaunchScreen.storyboard;
			sourceTree = "<group>";
		};
/* End PBXVariantGroup section */

/* Begin XCBuildConfiguration section */
		6088165A247FAB3F00861E80 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_ENABLE_OBJC_WEAK = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				CODE_SIGN_IDENTITY = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = dwarf;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu11;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 12.4;
				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
				MTL_FAST_MATH = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
			};
			name = Debug;
		};
		6088165B247FAB3F00861E80 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_ENABLE_OBJC_WEAK = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				CODE_SIGN_IDENTITY = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu11;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 12.4;
				MTL_ENABLE_DEBUG_INFO = NO;
				MTL_FAST_MATH = YES;
				SDKROOT = iphoneos;
				SWIFT_COMPILATION_MODE = wholemodule;
				SWIFT_OPTIMIZATION_LEVEL = "-O";
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		6088165D247FAB3F00861E80 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CLANG_ENABLE_MODULES = YES;
				CODE_SIGN_STYLE = Automatic;
				DEVELOPMENT_TEAM = 3JZR7F3AMV;
				INFOPLIST_FILE = PyApp/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../python-for-ios/dist/lib";
				PRODUCT_BUNDLE_IDENTIFIER = com.jventura.PyApp;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_OBJC_BRIDGING_HEADER = "PyApp/PyApp-Bridging-Header.h";
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../python-for-ios/dist/root/python3/include/python3.8/**";
			};
			name = Debug;
		};
		6088165E247FAB3F00861E80 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CLANG_ENABLE_MODULES = YES;
				CODE_SIGN_STYLE = Automatic;
				DEVELOPMENT_TEAM = 3JZR7F3AMV;
				INFOPLIST_FILE = PyApp/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../python-for-ios/dist/lib";
				PRODUCT_BUNDLE_IDENTIFIER = com.jventura.PyApp;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_OBJC_BRIDGING_HEADER = "PyApp/PyApp-Bridging-Header.h";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../python-for-ios/dist/root/python3/include/python3.8/**";
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		60881645247FAB3F00861E80 /* Build configuration list for PBXProject "PyApp" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				6088165A247FAB3F00861E80 /* Debug */,
				6088165B247FAB3F00861E80 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		6088165C247FAB3F00861E80 /* Build configuration list for PBXNativeTarget "PyApp" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				6088165D247FAB3F00861E80 /* Debug */,
				6088165E247FAB3F00861E80 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 60881642247FAB3F00861E80 /* Project object */;
}


================================================
FILE: PyApp/PyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:PyApp.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: PyApp/PyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDEDidComputeMac32BitWarning</key>
	<true/>
</dict>
</plist>


================================================
FILE: README.md
================================================
# PyBridge-iOS

PyBridge is a C implementation that allows to use Python code in native iOS applications. It allows to send String or JSON messages to the Python interpreter without the need for any web frameworks. Instead of using web applications, you can reuse your Python backend code and implement truly native iOS applications.

Shameless plug: I do contract work, check out my website at http://joaoventura.net/ or buy my apps!


## Overview

This repository shows the source code of an empty Xcode Swift project with a Label. When the application starts, it starts the Python interpreter and calls a Python function that returns a greet message that is then set on the Label.

![App image](https://github.com/joaoventura/pybridge-ios/blob/master/docs/pybridge-ios.png)


## Running the project

Clone this project and open it on Xcode. All the libraries and python files are included.

Run the project and you should see a `Hello Python 3.8` message in the screen. You can also check the Xcode output to see some debug things.


## How it works?

I've documented all the process in the [references document](https://github.com/joaoventura/pybridge-ios/blob/master/docs/references.md). It shows how to compile a Python  3 distribution, how to include the libraries, and how everything works. 

It's mostly a document for myself, but you can use and learn from it!


================================================
FILE: docs/references.md
================================================
# References for creating PyBridge-iOS

This document contains the necessary steps to create an Xcode project from scratch and embedding the Python 3 interpreter. It's mostly to document what I've done as a beginner in the iOS stack.


## Empty Xcode project

Create an empty Xcode project (Single View Application) named PyApp.

Add a Label to the storyboard and connect it to ViewController.swift (use Ctrl and drag the label from the storyboard to ViewController.swift). Set the label's text in `viewDidLoad` to see something working (`label.text = "Hello World"`) and run it.

References
- https://github.com/joaoventura/pybridge-ios/commit/bdc1a2623c19c724ef475f26190645143d3262ba


## Interface with C code

The process to interface Swift with C code is quite simple. 

Over PyApp, right click, add a new C file and call it pybridge. This will create `pybridge.c` and `pybridge.h`. If it asks to create the Bridging header, do it as it will be necessary to export the C functions to swift. If not, just create an empty file called `PyApp-Bridging-Header.h` and `#import "pybridge.h"` inside it.

On `pybridge.c` write this function:

```
const char* greet(const char* name)
{
    char msg[200];
    snprintf(msg, sizeof msg, "Hello %s", name);
    printf("Will return: %s\n", msg);
    return strdup(msg);
}
```

On `pybridge.h` write the header:

```
const char* greet(const char* name);
```

And finally on `ViewController.swift`:

```
let msg = String(cString: greet("iPhone"))
label.text = msg
```

If everything works fine, you should see the label "Hello iPhone" in the simulator. You can now interface with C code from Swift.

References
- https://theswiftdev.com/how-to-call-c-code-from-swift/
- https://github.com/joaoventura/pybridge-ios/commit/8330b6e618c0fb13957fec29efb8eb7f05d7fcb0


## Compiling Python 3 for iOS

PyBridge-iOS uses the [kivy-ios](https://github.com/kivy/kivy-ios) toolchain to compile the Python static library (libpython3.a) and standard library modules.

Install the kivy-ios toolchain and run `toolchain build python3`. It will create a `build` and `dist` folder. The static libraries needed for the project are in `dist/lib`, the standard library is in `dist/root/python3/lib` and the include files (so that you can `#include "Python.h"` is in `dist/root/python3/include/python3.8`.

Copy `dist/lib` and `dist/root` for the root of your project (not inside the Xcode project!) to a folder called `python-for-ios`. You'll have `python-for-ios/dist/lib` and `python-for-ios/dist/root`.

References
- https://github.com/kivy/kivy-ios
- https://github.com/joaoventura/pybridge-ios/commit/6a06bb770d586a4def589b382d99a10318931b6f


## Include Python static libraries

Modify `pybridge.c` and include the following:

```
#include "Python.h"

void python()
{
    printf("Initializing the Python interpreter\n");
    Py_InitializeEx(0);
    Py_Finalize();
}
```

This will throw a lot of errors in Xcode, such that Xcode must be able to find `Python.h` and all the Python header files, and the static libraries we compiled in the previous step.

On Xcode, on the root of PyApp, select **Build Phases**. On `Link Binary with Libraries` add all the libraries in `python-for-ios/dist/lib` (use "Add Other"). Add also the local framework `libz.1.2.8.tbd` as Python needs some symbols declared there.

On **Build Settings**, on `Search Paths/User Header Search Paths`, add the location of the Python header files: `$(SRCROOT)/../python-for-ios/dist/root/python3/include/python3.8`. Set to find as "recursive".

Finally, still on **Build Settings**, on `Search Paths/Library Search Paths`, add the location of the libraries: `$(SRCROOT)/../python-for-ios/dist/lib`.

If everything is working as expected, the project will compile, although we are not calling the `python()` function.

References
- https://www.chilkatsoft.com/xcode-link-static-lib.asp
- https://www.accusoft.com/resources/blog/using-static-library-ios-app/
- https://github.com/joaoventura/pybridge-ios/commit/63359cbe28d0b7f305190226a624e48292dbe2a5


## Use the Python interpreter

On `ViewController.swift` call the Python function `python()`. It will show the following error in the Xcode output:

```
Initializing the Python interpreter
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
```

This happens because the python interpreter cannot find the standard library files. We must fix this in two steps: copy the standard library files to the device and setting the python path to find them.

**To copy standard library files**

On Xcode, on the root of PyApp, select **Build Phases** again, and on `Copy Bundle Resources` select the *lib* folder at `/python-for-ios/dist/root/python3/lib`. This will copy the files `python38.zip` (standard library python modules) and all the other files inside lib to the device.

**To set python path**

To set the python path, we must pass the location of the files to the C code. iOS has the concept of bundles. 

On `ViewController.swift`:

```
python(Bundle.main.resourcePath)
```

Update the arguments on `pybridge.c and pybridge.h` accordingly:

```
void python(const char* resourcePath)
```

Finally, and a big step here, include all the necessary code such that the Python interpreter finds the stdlib files.

```
void python(const char* resourcePath)
{
    printf("Initializing the Python interpreter\n");
    
    // Set python home
    wchar_t *resources = Py_DecodeLocale(resourcePath, NULL);
    Py_SetPythonHome(resources);
    
    // Set paths
    char paths[10000];
    snprintf(paths, sizeof(paths),
             "%s/lib/" \
             ":%s/lib/python38.zip" \
             ":%s/lib/python3.8/" \
             ":%s/lib/python3.8/site-packages",
             resourcePath, resourcePath, resourcePath, resourcePath);
    
    wchar_t *wchar_paths = Py_DecodeLocale(paths, NULL);
    Py_SetPath(wchar_paths);
    
    // Initialize
    Py_InitializeEx(0);
    
    // Run something
    PyRun_SimpleString("print('Hello from Python')");
    
    // Finalize
    Py_Finalize();
}
```

If everything works fine, you should see **Hello from Python** in the Xcode output.

References
- https://github.com/joaoventura/pybridge-ios/tree/7922308461956b77d250242bdf0cf5d48db111be


## PyBridge routing

Finally, implement the necessary functions to be able to call a function on the Python interpreter.

Resources
- https://github.com/joaoventura/pybridge-ios/commit/fe3b2aec50e3494a2b5171e27d923c4c97ccab36


================================================
FILE: python-for-ios/dist/lib/libpython3.a
================================================
[File too large to display: 41.9 MB]

================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/Python-ast.h
================================================
/* File automatically generated by Parser/asdl_c.py. */

#ifndef Py_PYTHON_AST_H
#define Py_PYTHON_AST_H
#ifdef __cplusplus
extern "C" {
#endif

#include "asdl.h"

#undef Yield   /* undefine macro conflicting with <winbase.h> */

typedef struct _mod *mod_ty;

typedef struct _stmt *stmt_ty;

typedef struct _expr *expr_ty;

typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5,
                             Param=6 } expr_context_ty;

typedef struct _slice *slice_ty;

typedef enum _boolop { And=1, Or=2 } boolop_ty;

typedef enum _operator { Add=1, Sub=2, Mult=3, MatMult=4, Div=5, Mod=6, Pow=7,
                         LShift=8, RShift=9, BitOr=10, BitXor=11, BitAnd=12,
                         FloorDiv=13 } operator_ty;

typedef enum _unaryop { Invert=1, Not=2, UAdd=3, USub=4 } unaryop_ty;

typedef enum _cmpop { Eq=1, NotEq=2, Lt=3, LtE=4, Gt=5, GtE=6, Is=7, IsNot=8,
                      In=9, NotIn=10 } cmpop_ty;

typedef struct _comprehension *comprehension_ty;

typedef struct _excepthandler *excepthandler_ty;

typedef struct _arguments *arguments_ty;

typedef struct _arg *arg_ty;

typedef struct _keyword *keyword_ty;

typedef struct _alias *alias_ty;

typedef struct _withitem *withitem_ty;

typedef struct _type_ignore *type_ignore_ty;


enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3,
                 FunctionType_kind=4, Suite_kind=5};
struct _mod {
    enum _mod_kind kind;
    union {
        struct {
            asdl_seq *body;
            asdl_seq *type_ignores;
        } Module;

        struct {
            asdl_seq *body;
        } Interactive;

        struct {
            expr_ty body;
        } Expression;

        struct {
            asdl_seq *argtypes;
            expr_ty returns;
        } FunctionType;

        struct {
            asdl_seq *body;
        } Suite;

    } v;
};

enum _stmt_kind {FunctionDef_kind=1, AsyncFunctionDef_kind=2, ClassDef_kind=3,
                  Return_kind=4, Delete_kind=5, Assign_kind=6,
                  AugAssign_kind=7, AnnAssign_kind=8, For_kind=9,
                  AsyncFor_kind=10, While_kind=11, If_kind=12, With_kind=13,
                  AsyncWith_kind=14, Raise_kind=15, Try_kind=16,
                  Assert_kind=17, Import_kind=18, ImportFrom_kind=19,
                  Global_kind=20, Nonlocal_kind=21, Expr_kind=22, Pass_kind=23,
                  Break_kind=24, Continue_kind=25};
struct _stmt {
    enum _stmt_kind kind;
    union {
        struct {
            identifier name;
            arguments_ty args;
            asdl_seq *body;
            asdl_seq *decorator_list;
            expr_ty returns;
            string type_comment;
        } FunctionDef;

        struct {
            identifier name;
            arguments_ty args;
            asdl_seq *body;
            asdl_seq *decorator_list;
            expr_ty returns;
            string type_comment;
        } AsyncFunctionDef;

        struct {
            identifier name;
            asdl_seq *bases;
            asdl_seq *keywords;
            asdl_seq *body;
            asdl_seq *decorator_list;
        } ClassDef;

        struct {
            expr_ty value;
        } Return;

        struct {
            asdl_seq *targets;
        } Delete;

        struct {
            asdl_seq *targets;
            expr_ty value;
            string type_comment;
        } Assign;

        struct {
            expr_ty target;
            operator_ty op;
            expr_ty value;
        } AugAssign;

        struct {
            expr_ty target;
            expr_ty annotation;
            expr_ty value;
            int simple;
        } AnnAssign;

        struct {
            expr_ty target;
            expr_ty iter;
            asdl_seq *body;
            asdl_seq *orelse;
            string type_comment;
        } For;

        struct {
            expr_ty target;
            expr_ty iter;
            asdl_seq *body;
            asdl_seq *orelse;
            string type_comment;
        } AsyncFor;

        struct {
            expr_ty test;
            asdl_seq *body;
            asdl_seq *orelse;
        } While;

        struct {
            expr_ty test;
            asdl_seq *body;
            asdl_seq *orelse;
        } If;

        struct {
            asdl_seq *items;
            asdl_seq *body;
            string type_comment;
        } With;

        struct {
            asdl_seq *items;
            asdl_seq *body;
            string type_comment;
        } AsyncWith;

        struct {
            expr_ty exc;
            expr_ty cause;
        } Raise;

        struct {
            asdl_seq *body;
            asdl_seq *handlers;
            asdl_seq *orelse;
            asdl_seq *finalbody;
        } Try;

        struct {
            expr_ty test;
            expr_ty msg;
        } Assert;

        struct {
            asdl_seq *names;
        } Import;

        struct {
            identifier module;
            asdl_seq *names;
            int level;
        } ImportFrom;

        struct {
            asdl_seq *names;
        } Global;

        struct {
            asdl_seq *names;
        } Nonlocal;

        struct {
            expr_ty value;
        } Expr;

    } v;
    int lineno;
    int col_offset;
    int end_lineno;
    int end_col_offset;
};

enum _expr_kind {BoolOp_kind=1, NamedExpr_kind=2, BinOp_kind=3, UnaryOp_kind=4,
                  Lambda_kind=5, IfExp_kind=6, Dict_kind=7, Set_kind=8,
                  ListComp_kind=9, SetComp_kind=10, DictComp_kind=11,
                  GeneratorExp_kind=12, Await_kind=13, Yield_kind=14,
                  YieldFrom_kind=15, Compare_kind=16, Call_kind=17,
                  FormattedValue_kind=18, JoinedStr_kind=19, Constant_kind=20,
                  Attribute_kind=21, Subscript_kind=22, Starred_kind=23,
                  Name_kind=24, List_kind=25, Tuple_kind=26};
struct _expr {
    enum _expr_kind kind;
    union {
        struct {
            boolop_ty op;
            asdl_seq *values;
        } BoolOp;

        struct {
            expr_ty target;
            expr_ty value;
        } NamedExpr;

        struct {
            expr_ty left;
            operator_ty op;
            expr_ty right;
        } BinOp;

        struct {
            unaryop_ty op;
            expr_ty operand;
        } UnaryOp;

        struct {
            arguments_ty args;
            expr_ty body;
        } Lambda;

        struct {
            expr_ty test;
            expr_ty body;
            expr_ty orelse;
        } IfExp;

        struct {
            asdl_seq *keys;
            asdl_seq *values;
        } Dict;

        struct {
            asdl_seq *elts;
        } Set;

        struct {
            expr_ty elt;
            asdl_seq *generators;
        } ListComp;

        struct {
            expr_ty elt;
            asdl_seq *generators;
        } SetComp;

        struct {
            expr_ty key;
            expr_ty value;
            asdl_seq *generators;
        } DictComp;

        struct {
            expr_ty elt;
            asdl_seq *generators;
        } GeneratorExp;

        struct {
            expr_ty value;
        } Await;

        struct {
            expr_ty value;
        } Yield;

        struct {
            expr_ty value;
        } YieldFrom;

        struct {
            expr_ty left;
            asdl_int_seq *ops;
            asdl_seq *comparators;
        } Compare;

        struct {
            expr_ty func;
            asdl_seq *args;
            asdl_seq *keywords;
        } Call;

        struct {
            expr_ty value;
            int conversion;
            expr_ty format_spec;
        } FormattedValue;

        struct {
            asdl_seq *values;
        } JoinedStr;

        struct {
            constant value;
            string kind;
        } Constant;

        struct {
            expr_ty value;
            identifier attr;
            expr_context_ty ctx;
        } Attribute;

        struct {
            expr_ty value;
            slice_ty slice;
            expr_context_ty ctx;
        } Subscript;

        struct {
            expr_ty value;
            expr_context_ty ctx;
        } Starred;

        struct {
            identifier id;
            expr_context_ty ctx;
        } Name;

        struct {
            asdl_seq *elts;
            expr_context_ty ctx;
        } List;

        struct {
            asdl_seq *elts;
            expr_context_ty ctx;
        } Tuple;

    } v;
    int lineno;
    int col_offset;
    int end_lineno;
    int end_col_offset;
};

enum _slice_kind {Slice_kind=1, ExtSlice_kind=2, Index_kind=3};
struct _slice {
    enum _slice_kind kind;
    union {
        struct {
            expr_ty lower;
            expr_ty upper;
            expr_ty step;
        } Slice;

        struct {
            asdl_seq *dims;
        } ExtSlice;

        struct {
            expr_ty value;
        } Index;

    } v;
};

struct _comprehension {
    expr_ty target;
    expr_ty iter;
    asdl_seq *ifs;
    int is_async;
};

enum _excepthandler_kind {ExceptHandler_kind=1};
struct _excepthandler {
    enum _excepthandler_kind kind;
    union {
        struct {
            expr_ty type;
            identifier name;
            asdl_seq *body;
        } ExceptHandler;

    } v;
    int lineno;
    int col_offset;
    int end_lineno;
    int end_col_offset;
};

struct _arguments {
    asdl_seq *posonlyargs;
    asdl_seq *args;
    arg_ty vararg;
    asdl_seq *kwonlyargs;
    asdl_seq *kw_defaults;
    arg_ty kwarg;
    asdl_seq *defaults;
};

struct _arg {
    identifier arg;
    expr_ty annotation;
    string type_comment;
    int lineno;
    int col_offset;
    int end_lineno;
    int end_col_offset;
};

struct _keyword {
    identifier arg;
    expr_ty value;
};

struct _alias {
    identifier name;
    identifier asname;
};

struct _withitem {
    expr_ty context_expr;
    expr_ty optional_vars;
};

enum _type_ignore_kind {TypeIgnore_kind=1};
struct _type_ignore {
    enum _type_ignore_kind kind;
    union {
        struct {
            int lineno;
            string tag;
        } TypeIgnore;

    } v;
};


// Note: these macros affect function definitions, not only call sites.
#define Module(a0, a1, a2) _Py_Module(a0, a1, a2)
mod_ty _Py_Module(asdl_seq * body, asdl_seq * type_ignores, PyArena *arena);
#define Interactive(a0, a1) _Py_Interactive(a0, a1)
mod_ty _Py_Interactive(asdl_seq * body, PyArena *arena);
#define Expression(a0, a1) _Py_Expression(a0, a1)
mod_ty _Py_Expression(expr_ty body, PyArena *arena);
#define FunctionType(a0, a1, a2) _Py_FunctionType(a0, a1, a2)
mod_ty _Py_FunctionType(asdl_seq * argtypes, expr_ty returns, PyArena *arena);
#define Suite(a0, a1) _Py_Suite(a0, a1)
mod_ty _Py_Suite(asdl_seq * body, PyArena *arena);
#define FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body,
                        asdl_seq * decorator_list, expr_ty returns, string
                        type_comment, int lineno, int col_offset, int
                        end_lineno, int end_col_offset, PyArena *arena);
#define AsyncFunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) _Py_AsyncFunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
stmt_ty _Py_AsyncFunctionDef(identifier name, arguments_ty args, asdl_seq *
                             body, asdl_seq * decorator_list, expr_ty returns,
                             string type_comment, int lineno, int col_offset,
                             int end_lineno, int end_col_offset, PyArena
                             *arena);
#define ClassDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) _Py_ClassDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)
stmt_ty _Py_ClassDef(identifier name, asdl_seq * bases, asdl_seq * keywords,
                     asdl_seq * body, asdl_seq * decorator_list, int lineno,
                     int col_offset, int end_lineno, int end_col_offset,
                     PyArena *arena);
#define Return(a0, a1, a2, a3, a4, a5) _Py_Return(a0, a1, a2, a3, a4, a5)
stmt_ty _Py_Return(expr_ty value, int lineno, int col_offset, int end_lineno,
                   int end_col_offset, PyArena *arena);
#define Delete(a0, a1, a2, a3, a4, a5) _Py_Delete(a0, a1, a2, a3, a4, a5)
stmt_ty _Py_Delete(asdl_seq * targets, int lineno, int col_offset, int
                   end_lineno, int end_col_offset, PyArena *arena);
#define Assign(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Assign(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_Assign(asdl_seq * targets, expr_ty value, string type_comment, int
                   lineno, int col_offset, int end_lineno, int end_col_offset,
                   PyArena *arena);
#define AugAssign(a0, a1, a2, a3, a4, a5, a6, a7) _Py_AugAssign(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_AugAssign(expr_ty target, operator_ty op, expr_ty value, int
                      lineno, int col_offset, int end_lineno, int
                      end_col_offset, PyArena *arena);
#define AnnAssign(a0, a1, a2, a3, a4, a5, a6, a7, a8) _Py_AnnAssign(a0, a1, a2, a3, a4, a5, a6, a7, a8)
stmt_ty _Py_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int
                      simple, int lineno, int col_offset, int end_lineno, int
                      end_col_offset, PyArena *arena);
#define For(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) _Py_For(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)
stmt_ty _Py_For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq *
                orelse, string type_comment, int lineno, int col_offset, int
                end_lineno, int end_col_offset, PyArena *arena);
#define AsyncFor(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) _Py_AsyncFor(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)
stmt_ty _Py_AsyncFor(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq *
                     orelse, string type_comment, int lineno, int col_offset,
                     int end_lineno, int end_col_offset, PyArena *arena);
#define While(a0, a1, a2, a3, a4, a5, a6, a7) _Py_While(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno,
                  int col_offset, int end_lineno, int end_col_offset, PyArena
                  *arena);
#define If(a0, a1, a2, a3, a4, a5, a6, a7) _Py_If(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno,
               int col_offset, int end_lineno, int end_col_offset, PyArena
               *arena);
#define With(a0, a1, a2, a3, a4, a5, a6, a7) _Py_With(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_With(asdl_seq * items, asdl_seq * body, string type_comment, int
                 lineno, int col_offset, int end_lineno, int end_col_offset,
                 PyArena *arena);
#define AsyncWith(a0, a1, a2, a3, a4, a5, a6, a7) _Py_AsyncWith(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_AsyncWith(asdl_seq * items, asdl_seq * body, string type_comment,
                      int lineno, int col_offset, int end_lineno, int
                      end_col_offset, PyArena *arena);
#define Raise(a0, a1, a2, a3, a4, a5, a6) _Py_Raise(a0, a1, a2, a3, a4, a5, a6)
stmt_ty _Py_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int
                  end_lineno, int end_col_offset, PyArena *arena);
#define Try(a0, a1, a2, a3, a4, a5, a6, a7, a8) _Py_Try(a0, a1, a2, a3, a4, a5, a6, a7, a8)
stmt_ty _Py_Try(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse,
                asdl_seq * finalbody, int lineno, int col_offset, int
                end_lineno, int end_col_offset, PyArena *arena);
#define Assert(a0, a1, a2, a3, a4, a5, a6) _Py_Assert(a0, a1, a2, a3, a4, a5, a6)
stmt_ty _Py_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int
                   end_lineno, int end_col_offset, PyArena *arena);
#define Import(a0, a1, a2, a3, a4, a5) _Py_Import(a0, a1, a2, a3, a4, a5)
stmt_ty _Py_Import(asdl_seq * names, int lineno, int col_offset, int
                   end_lineno, int end_col_offset, PyArena *arena);
#define ImportFrom(a0, a1, a2, a3, a4, a5, a6, a7) _Py_ImportFrom(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_ImportFrom(identifier module, asdl_seq * names, int level, int
                       lineno, int col_offset, int end_lineno, int
                       end_col_offset, PyArena *arena);
#define Global(a0, a1, a2, a3, a4, a5) _Py_Global(a0, a1, a2, a3, a4, a5)
stmt_ty _Py_Global(asdl_seq * names, int lineno, int col_offset, int
                   end_lineno, int end_col_offset, PyArena *arena);
#define Nonlocal(a0, a1, a2, a3, a4, a5) _Py_Nonlocal(a0, a1, a2, a3, a4, a5)
stmt_ty _Py_Nonlocal(asdl_seq * names, int lineno, int col_offset, int
                     end_lineno, int end_col_offset, PyArena *arena);
#define Expr(a0, a1, a2, a3, a4, a5) _Py_Expr(a0, a1, a2, a3, a4, a5)
stmt_ty _Py_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int
                 end_col_offset, PyArena *arena);
#define Pass(a0, a1, a2, a3, a4) _Py_Pass(a0, a1, a2, a3, a4)
stmt_ty _Py_Pass(int lineno, int col_offset, int end_lineno, int
                 end_col_offset, PyArena *arena);
#define Break(a0, a1, a2, a3, a4) _Py_Break(a0, a1, a2, a3, a4)
stmt_ty _Py_Break(int lineno, int col_offset, int end_lineno, int
                  end_col_offset, PyArena *arena);
#define Continue(a0, a1, a2, a3, a4) _Py_Continue(a0, a1, a2, a3, a4)
stmt_ty _Py_Continue(int lineno, int col_offset, int end_lineno, int
                     end_col_offset, PyArena *arena);
#define BoolOp(a0, a1, a2, a3, a4, a5, a6) _Py_BoolOp(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_BoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset,
                   int end_lineno, int end_col_offset, PyArena *arena);
#define NamedExpr(a0, a1, a2, a3, a4, a5, a6) _Py_NamedExpr(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_NamedExpr(expr_ty target, expr_ty value, int lineno, int
                      col_offset, int end_lineno, int end_col_offset, PyArena
                      *arena);
#define BinOp(a0, a1, a2, a3, a4, a5, a6, a7) _Py_BinOp(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int
                  col_offset, int end_lineno, int end_col_offset, PyArena
                  *arena);
#define UnaryOp(a0, a1, a2, a3, a4, a5, a6) _Py_UnaryOp(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset,
                    int end_lineno, int end_col_offset, PyArena *arena);
#define Lambda(a0, a1, a2, a3, a4, a5, a6) _Py_Lambda(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset,
                   int end_lineno, int end_col_offset, PyArena *arena);
#define IfExp(a0, a1, a2, a3, a4, a5, a6, a7) _Py_IfExp(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int
                  col_offset, int end_lineno, int end_col_offset, PyArena
                  *arena);
#define Dict(a0, a1, a2, a3, a4, a5, a6) _Py_Dict(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_Dict(asdl_seq * keys, asdl_seq * values, int lineno, int
                 col_offset, int end_lineno, int end_col_offset, PyArena
                 *arena);
#define Set(a0, a1, a2, a3, a4, a5) _Py_Set(a0, a1, a2, a3, a4, a5)
expr_ty _Py_Set(asdl_seq * elts, int lineno, int col_offset, int end_lineno,
                int end_col_offset, PyArena *arena);
#define ListComp(a0, a1, a2, a3, a4, a5, a6) _Py_ListComp(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_ListComp(expr_ty elt, asdl_seq * generators, int lineno, int
                     col_offset, int end_lineno, int end_col_offset, PyArena
                     *arena);
#define SetComp(a0, a1, a2, a3, a4, a5, a6) _Py_SetComp(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_SetComp(expr_ty elt, asdl_seq * generators, int lineno, int
                    col_offset, int end_lineno, int end_col_offset, PyArena
                    *arena);
#define DictComp(a0, a1, a2, a3, a4, a5, a6, a7) _Py_DictComp(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_DictComp(expr_ty key, expr_ty value, asdl_seq * generators, int
                     lineno, int col_offset, int end_lineno, int
                     end_col_offset, PyArena *arena);
#define GeneratorExp(a0, a1, a2, a3, a4, a5, a6) _Py_GeneratorExp(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int
                         col_offset, int end_lineno, int end_col_offset,
                         PyArena *arena);
#define Await(a0, a1, a2, a3, a4, a5) _Py_Await(a0, a1, a2, a3, a4, a5)
expr_ty _Py_Await(expr_ty value, int lineno, int col_offset, int end_lineno,
                  int end_col_offset, PyArena *arena);
#define Yield(a0, a1, a2, a3, a4, a5) _Py_Yield(a0, a1, a2, a3, a4, a5)
expr_ty _Py_Yield(expr_ty value, int lineno, int col_offset, int end_lineno,
                  int end_col_offset, PyArena *arena);
#define YieldFrom(a0, a1, a2, a3, a4, a5) _Py_YieldFrom(a0, a1, a2, a3, a4, a5)
expr_ty _Py_YieldFrom(expr_ty value, int lineno, int col_offset, int
                      end_lineno, int end_col_offset, PyArena *arena);
#define Compare(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Compare(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators,
                    int lineno, int col_offset, int end_lineno, int
                    end_col_offset, PyArena *arena);
#define Call(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Call(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, int
                 lineno, int col_offset, int end_lineno, int end_col_offset,
                 PyArena *arena);
#define FormattedValue(a0, a1, a2, a3, a4, a5, a6, a7) _Py_FormattedValue(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_FormattedValue(expr_ty value, int conversion, expr_ty format_spec,
                           int lineno, int col_offset, int end_lineno, int
                           end_col_offset, PyArena *arena);
#define JoinedStr(a0, a1, a2, a3, a4, a5) _Py_JoinedStr(a0, a1, a2, a3, a4, a5)
expr_ty _Py_JoinedStr(asdl_seq * values, int lineno, int col_offset, int
                      end_lineno, int end_col_offset, PyArena *arena);
#define Constant(a0, a1, a2, a3, a4, a5, a6) _Py_Constant(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_Constant(constant value, string kind, int lineno, int col_offset,
                     int end_lineno, int end_col_offset, PyArena *arena);
#define Attribute(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Attribute(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int
                      lineno, int col_offset, int end_lineno, int
                      end_col_offset, PyArena *arena);
#define Subscript(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Subscript(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int
                      lineno, int col_offset, int end_lineno, int
                      end_col_offset, PyArena *arena);
#define Starred(a0, a1, a2, a3, a4, a5, a6) _Py_Starred(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_Starred(expr_ty value, expr_context_ty ctx, int lineno, int
                    col_offset, int end_lineno, int end_col_offset, PyArena
                    *arena);
#define Name(a0, a1, a2, a3, a4, a5, a6) _Py_Name(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_Name(identifier id, expr_context_ty ctx, int lineno, int
                 col_offset, int end_lineno, int end_col_offset, PyArena
                 *arena);
#define List(a0, a1, a2, a3, a4, a5, a6) _Py_List(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_List(asdl_seq * elts, expr_context_ty ctx, int lineno, int
                 col_offset, int end_lineno, int end_col_offset, PyArena
                 *arena);
#define Tuple(a0, a1, a2, a3, a4, a5, a6) _Py_Tuple(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int
                  col_offset, int end_lineno, int end_col_offset, PyArena
                  *arena);
#define Slice(a0, a1, a2, a3) _Py_Slice(a0, a1, a2, a3)
slice_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena);
#define ExtSlice(a0, a1) _Py_ExtSlice(a0, a1)
slice_ty _Py_ExtSlice(asdl_seq * dims, PyArena *arena);
#define Index(a0, a1) _Py_Index(a0, a1)
slice_ty _Py_Index(expr_ty value, PyArena *arena);
#define comprehension(a0, a1, a2, a3, a4) _Py_comprehension(a0, a1, a2, a3, a4)
comprehension_ty _Py_comprehension(expr_ty target, expr_ty iter, asdl_seq *
                                   ifs, int is_async, PyArena *arena);
#define ExceptHandler(a0, a1, a2, a3, a4, a5, a6, a7) _Py_ExceptHandler(a0, a1, a2, a3, a4, a5, a6, a7)
excepthandler_ty _Py_ExceptHandler(expr_ty type, identifier name, asdl_seq *
                                   body, int lineno, int col_offset, int
                                   end_lineno, int end_col_offset, PyArena
                                   *arena);
#define arguments(a0, a1, a2, a3, a4, a5, a6, a7) _Py_arguments(a0, a1, a2, a3, a4, a5, a6, a7)
arguments_ty _Py_arguments(asdl_seq * posonlyargs, asdl_seq * args, arg_ty
                           vararg, asdl_seq * kwonlyargs, asdl_seq *
                           kw_defaults, arg_ty kwarg, asdl_seq * defaults,
                           PyArena *arena);
#define arg(a0, a1, a2, a3, a4, a5, a6, a7) _Py_arg(a0, a1, a2, a3, a4, a5, a6, a7)
arg_ty _Py_arg(identifier arg, expr_ty annotation, string type_comment, int
               lineno, int col_offset, int end_lineno, int end_col_offset,
               PyArena *arena);
#define keyword(a0, a1, a2) _Py_keyword(a0, a1, a2)
keyword_ty _Py_keyword(identifier arg, expr_ty value, PyArena *arena);
#define alias(a0, a1, a2) _Py_alias(a0, a1, a2)
alias_ty _Py_alias(identifier name, identifier asname, PyArena *arena);
#define withitem(a0, a1, a2) _Py_withitem(a0, a1, a2)
withitem_ty _Py_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena
                         *arena);
#define TypeIgnore(a0, a1, a2) _Py_TypeIgnore(a0, a1, a2)
type_ignore_ty _Py_TypeIgnore(int lineno, string tag, PyArena *arena);

PyObject* PyAST_mod2obj(mod_ty t);
mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);
int PyAST_Check(PyObject* obj);

#ifdef __cplusplus
}
#endif
#endif /* !Py_PYTHON_AST_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/Python.h
================================================
#ifndef Py_PYTHON_H
#define Py_PYTHON_H
/* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */

/* Include nearly all Python header files */

#include "patchlevel.h"
#include "pyconfig.h"
#include "pymacconfig.h"

#include <limits.h>

#ifndef UCHAR_MAX
#error "Something's broken.  UCHAR_MAX should be defined in limits.h."
#endif

#if UCHAR_MAX != 255
#error "Python's source code assumes C's unsigned char is an 8-bit type."
#endif

#if defined(__sgi) && !defined(_SGI_MP_SOURCE)
#define _SGI_MP_SOURCE
#endif

#include <stdio.h>
#ifndef NULL
#   error "Python.h requires that stdio.h define NULL."
#endif

#include <string.h>
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
#include <stdlib.h>
#ifndef MS_WINDOWS
#include <unistd.h>
#endif
#ifdef HAVE_CRYPT_H
#if defined(HAVE_CRYPT_R) && !defined(_GNU_SOURCE)
/* Required for glibc to expose the crypt_r() function prototype. */
#  define _GNU_SOURCE
#  define _Py_GNU_SOURCE_FOR_CRYPT
#endif
#include <crypt.h>
#ifdef _Py_GNU_SOURCE_FOR_CRYPT
/* Don't leak the _GNU_SOURCE define to other headers. */
#  undef _GNU_SOURCE
#  undef _Py_GNU_SOURCE_FOR_CRYPT
#endif
#endif

/* For size_t? */
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif

/* CAUTION:  Build setups should ensure that NDEBUG is defined on the
 * compiler command line when building Python in release mode; else
 * assert() calls won't be removed.
 */
#include <assert.h>

#include "pyport.h"
#include "pymacro.h"

/* A convenient way for code to know if clang's memory sanitizer is enabled. */
#if defined(__has_feature)
#  if __has_feature(memory_sanitizer)
#    if !defined(_Py_MEMORY_SANITIZER)
#      define _Py_MEMORY_SANITIZER
#    endif
#  endif
#endif

/* Debug-mode build with pymalloc implies PYMALLOC_DEBUG.
 *  PYMALLOC_DEBUG is in error if pymalloc is not in use.
 */
#if defined(Py_DEBUG) && defined(WITH_PYMALLOC) && !defined(PYMALLOC_DEBUG)
#define PYMALLOC_DEBUG
#endif
#if defined(PYMALLOC_DEBUG) && !defined(WITH_PYMALLOC)
#error "PYMALLOC_DEBUG requires WITH_PYMALLOC"
#endif
#include "pymath.h"
#include "pytime.h"
#include "pymem.h"

#include "object.h"
#include "objimpl.h"
#include "typeslots.h"
#include "pyhash.h"

#include "pydebug.h"

#include "bytearrayobject.h"
#include "bytesobject.h"
#include "unicodeobject.h"
#include "longobject.h"
#include "longintrepr.h"
#include "boolobject.h"
#include "floatobject.h"
#include "complexobject.h"
#include "rangeobject.h"
#include "memoryobject.h"
#include "tupleobject.h"
#include "listobject.h"
#include "dictobject.h"
#include "odictobject.h"
#include "enumobject.h"
#include "setobject.h"
#include "methodobject.h"
#include "moduleobject.h"
#include "funcobject.h"
#include "classobject.h"
#include "fileobject.h"
#include "pycapsule.h"
#include "traceback.h"
#include "sliceobject.h"
#include "cellobject.h"
#include "iterobject.h"
#include "genobject.h"
#include "descrobject.h"
#include "warnings.h"
#include "weakrefobject.h"
#include "structseq.h"
#include "namespaceobject.h"
#include "picklebufobject.h"

#include "codecs.h"
#include "pyerrors.h"

#include "cpython/initconfig.h"
#include "pystate.h"
#include "context.h"

#include "pyarena.h"
#include "modsupport.h"
#include "compile.h"
#include "pythonrun.h"
#include "pylifecycle.h"
#include "ceval.h"
#include "sysmodule.h"
#include "osmodule.h"
#include "intrcheck.h"
#include "import.h"

#include "abstract.h"
#include "bltinmodule.h"

#include "eval.h"

#include "pyctype.h"
#include "pystrtod.h"
#include "pystrcmp.h"
#include "dtoa.h"
#include "fileutils.h"
#include "pyfpe.h"
#include "tracemalloc.h"

#endif /* !Py_PYTHON_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/abstract.h
================================================
/* Abstract Object Interface (many thanks to Jim Fulton) */

#ifndef Py_ABSTRACTOBJECT_H
#define Py_ABSTRACTOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif

/* === Object Protocol ================================================== */

/* Implemented elsewhere:

   int PyObject_Print(PyObject *o, FILE *fp, int flags);

   Print an object 'o' on file 'fp'.  Returns -1 on error. The flags argument
   is used to enable certain printing options. The only option currently
   supported is Py_Print_RAW.

   (What should be said about Py_Print_RAW?). */


/* Implemented elsewhere:

   int PyObject_HasAttrString(PyObject *o, const char *attr_name);

   Returns 1 if object 'o' has the attribute attr_name, and 0 otherwise.

   This is equivalent to the Python expression: hasattr(o,attr_name).

   This function always succeeds. */


/* Implemented elsewhere:

   PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name);

   Retrieve an attributed named attr_name form object o.
   Returns the attribute value on success, or NULL on failure.

   This is the equivalent of the Python expression: o.attr_name. */


/* Implemented elsewhere:

   int PyObject_HasAttr(PyObject *o, PyObject *attr_name);

   Returns 1 if o has the attribute attr_name, and 0 otherwise.

   This is equivalent to the Python expression: hasattr(o,attr_name).

   This function always succeeds. */

/* Implemented elsewhere:

   PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name);

   Retrieve an attributed named 'attr_name' form object 'o'.
   Returns the attribute value on success, or NULL on failure.

   This is the equivalent of the Python expression: o.attr_name. */


/* Implemented elsewhere:

   int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v);

   Set the value of the attribute named attr_name, for object 'o',
   to the value 'v'. Raise an exception and return -1 on failure; return 0 on
   success.

   This is the equivalent of the Python statement o.attr_name=v. */


/* Implemented elsewhere:

   int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v);

   Set the value of the attribute named attr_name, for object 'o', to the value
   'v'. an exception and return -1 on failure; return 0 on success.

   This is the equivalent of the Python statement o.attr_name=v. */

/* Implemented as a macro:

   int PyObject_DelAttrString(PyObject *o, const char *attr_name);

   Delete attribute named attr_name, for object o. Returns
   -1 on failure.

   This is the equivalent of the Python statement: del o.attr_name. */
#define PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A), NULL)


/* Implemented as a macro:

   int PyObject_DelAttr(PyObject *o, PyObject *attr_name);

   Delete attribute named attr_name, for object o. Returns -1
   on failure.  This is the equivalent of the Python
   statement: del o.attr_name. */
#define  PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A), NULL)


/* Implemented elsewhere:

   PyObject *PyObject_Repr(PyObject *o);

   Compute the string representation of object 'o'.  Returns the
   string representation on success, NULL on failure.

   This is the equivalent of the Python expression: repr(o).

   Called by the repr() built-in function. */


/* Implemented elsewhere:

   PyObject *PyObject_Str(PyObject *o);

   Compute the string representation of object, o.  Returns the
   string representation on success, NULL on failure.

   This is the equivalent of the Python expression: str(o).

   Called by the str() and print() built-in functions. */


/* Declared elsewhere

   PyAPI_FUNC(int) PyCallable_Check(PyObject *o);

   Determine if the object, o, is callable.  Return 1 if the object is callable
   and 0 otherwise.

   This function always succeeds. */


#ifdef PY_SSIZE_T_CLEAN
#  define PyObject_CallFunction _PyObject_CallFunction_SizeT
#  define PyObject_CallMethod _PyObject_CallMethod_SizeT
#endif


/* Call a callable Python object 'callable' with arguments given by the
   tuple 'args' and keywords arguments given by the dictionary 'kwargs'.

   'args' must not be NULL, use an empty tuple if no arguments are
   needed. If no named arguments are needed, 'kwargs' can be NULL.

   This is the equivalent of the Python expression:
   callable(*args, **kwargs). */
PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable,
                                     PyObject *args, PyObject *kwargs);


/* Call a callable Python object 'callable', with arguments given by the
   tuple 'args'.  If no arguments are needed, then 'args' can be NULL.

   Returns the result of the call on success, or NULL on failure.

   This is the equivalent of the Python expression:
   callable(*args). */
PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable,
                                           PyObject *args);

/* Call a callable Python object, callable, with a variable number of C
   arguments. The C arguments are described using a mkvalue-style format
   string.

   The format may be NULL, indicating that no arguments are provided.

   Returns the result of the call on success, or NULL on failure.

   This is the equivalent of the Python expression:
   callable(arg1, arg2, ...). */
PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable,
                                             const char *format, ...);

/* Call the method named 'name' of object 'obj' with a variable number of
   C arguments.  The C arguments are described by a mkvalue format string.

   The format can be NULL, indicating that no arguments are provided.

   Returns the result of the call on success, or NULL on failure.

   This is the equivalent of the Python expression:
   obj.name(arg1, arg2, ...). */
PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj,
                                           const char *name,
                                           const char *format, ...);

PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable,
                                                    const char *format,
                                                    ...);

PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *obj,
                                                  const char *name,
                                                  const char *format,
                                                  ...);

/* Call a callable Python object 'callable' with a variable number of C
   arguments. The C arguments are provided as PyObject* values, terminated
   by a NULL.

   Returns the result of the call on success, or NULL on failure.

   This is the equivalent of the Python expression:
   callable(arg1, arg2, ...). */
PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
                                                    ...);

/* Call the method named 'name' of object 'obj' with a variable number of
   C arguments.  The C arguments are provided as PyObject* values, terminated
   by NULL.

   Returns the result of the call on success, or NULL on failure.

   This is the equivalent of the Python expression: obj.name(*args). */

PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(
    PyObject *obj,
    PyObject *name,
    ...);


/* Implemented elsewhere:

   Py_hash_t PyObject_Hash(PyObject *o);

   Compute and return the hash, hash_value, of an object, o.  On
   failure, return -1.

   This is the equivalent of the Python expression: hash(o). */


/* Implemented elsewhere:

   int PyObject_IsTrue(PyObject *o);

   Returns 1 if the object, o, is considered to be true, 0 if o is
   considered to be false and -1 on failure.

   This is equivalent to the Python expression: not not o. */


/* Implemented elsewhere:

   int PyObject_Not(PyObject *o);

   Returns 0 if the object, o, is considered to be true, 1 if o is
   considered to be false and -1 on failure.

   This is equivalent to the Python expression: not o. */


/* Get the type of an object.

   On success, returns a type object corresponding to the object type of object
   'o'. On failure, returns NULL.

   This is equivalent to the Python expression: type(o) */
PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o);


/* Return the size of object 'o'.  If the object 'o' provides both sequence and
   mapping protocols, the sequence size is returned.

   On error, -1 is returned.

   This is the equivalent to the Python expression: len(o) */
PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);


/* For DLL compatibility */
#undef PyObject_Length
PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
#define PyObject_Length PyObject_Size

/* Return element of 'o' corresponding to the object 'key'. Return NULL
  on failure.

  This is the equivalent of the Python expression: o[key] */
PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key);


/* Map the object 'key' to the value 'v' into 'o'.

   Raise an exception and return -1 on failure; return 0 on success.

   This is the equivalent of the Python statement: o[key]=v. */
PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);

/* Remove the mapping for the string 'key' from the object 'o'.
   Returns -1 on failure.

   This is equivalent to the Python statement: del o[key]. */
PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key);

/* Delete the mapping for the object 'key' from the object 'o'.
   Returns -1 on failure.

   This is the equivalent of the Python statement: del o[key]. */
PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);


/* === Old Buffer API ============================================ */

/* FIXME:  usage of these should all be replaced in Python itself
   but for backwards compatibility we will implement them.
   Their usage without a corresponding "unlock" mechanism
   may create issues (but they would already be there). */

/* Takes an arbitrary object which must support the (character, single segment)
   buffer interface and returns a pointer to a read-only memory location
   useable as character based input for subsequent processing.

   Return 0 on success.  buffer and buffer_len are only set in case no error
   occurs. Otherwise, -1 is returned and an exception set. */
Py_DEPRECATED(3.0)
PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
                                      const char **buffer,
                                      Py_ssize_t *buffer_len);

/* Checks whether an arbitrary object supports the (character, single segment)
   buffer interface.

   Returns 1 on success, 0 on failure. */
Py_DEPRECATED(3.0) PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj);

/* Same as PyObject_AsCharBuffer() except that this API expects (readable,
   single segment) buffer interface and returns a pointer to a read-only memory
   location which can contain arbitrary data.

   0 is returned on success.  buffer and buffer_len are only set in case no
   error occurs.  Otherwise, -1 is returned and an exception set. */
Py_DEPRECATED(3.0)
PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
                                      const void **buffer,
                                      Py_ssize_t *buffer_len);

/* Takes an arbitrary object which must support the (writable, single segment)
   buffer interface and returns a pointer to a writable memory location in
   buffer of size 'buffer_len'.

   Return 0 on success.  buffer and buffer_len are only set in case no error
   occurs. Otherwise, -1 is returned and an exception set. */
Py_DEPRECATED(3.0)
PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
                                       void **buffer,
                                       Py_ssize_t *buffer_len);


/* === New Buffer API ============================================ */

/* Takes an arbitrary object and returns the result of calling
   obj.__format__(format_spec). */
PyAPI_FUNC(PyObject *) PyObject_Format(PyObject *obj,
                                       PyObject *format_spec);


/* ==== Iterators ================================================ */

/* Takes an object and returns an iterator for it.
   This is typically a new iterator but if the argument is an iterator, this
   returns itself. */
PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);

/* Returns 1 if the object 'obj' provides iterator protocols, and 0 otherwise.

   This function always succeeds. */
PyAPI_FUNC(int) PyIter_Check(PyObject *);

/* Takes an iterator object and calls its tp_iternext slot,
   returning the next value.

   If the iterator is exhausted, this returns NULL without setting an
   exception.

   NULL with an exception means an error occurred. */
PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);


/* === Number Protocol ================================================== */

/* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise.

   This function always succeeds. */
PyAPI_FUNC(int) PyNumber_Check(PyObject *o);

/* Returns the result of adding o1 and o2, or NULL on failure.

   This is the equivalent of the Python expression: o1 + o2. */
PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);

/* Returns the result of subtracting o2 from o1, or NULL on failure.

   This is the equivalent of the Python expression: o1 - o2. */
PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);

/* Returns the result of multiplying o1 and o2, or NULL on failure.

   This is the equivalent of the Python expression: o1 * o2. */
PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);

#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
/* This is the equivalent of the Python expression: o1 @ o2. */
PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2);
#endif

/* Returns the result of dividing o1 by o2 giving an integral result,
   or NULL on failure.

   This is the equivalent of the Python expression: o1 // o2. */
PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);

/* Returns the result of dividing o1 by o2 giving a float result, or NULL on
   failure.

   This is the equivalent of the Python expression: o1 / o2. */
PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);

/* Returns the remainder of dividing o1 by o2, or NULL on failure.

   This is the equivalent of the Python expression: o1 % o2. */
PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);

/* See the built-in function divmod.

   Returns NULL on failure.

   This is the equivalent of the Python expression: divmod(o1, o2). */
PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);

/* See the built-in function pow. Returns NULL on failure.

   This is the equivalent of the Python expression: pow(o1, o2, o3),
   where o3 is optional. */
PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
                                      PyObject *o3);

/* Returns the negation of o on success, or NULL on failure.

 This is the equivalent of the Python expression: -o. */
PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);

/* Returns the positive of o on success, or NULL on failure.

   This is the equivalent of the Python expression: +o. */
PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);

/* Returns the absolute value of 'o', or NULL on failure.

   This is the equivalent of the Python expression: abs(o). */
PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);

/* Returns the bitwise negation of 'o' on success, or NULL on failure.

   This is the equivalent of the Python expression: ~o. */
PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);

/* Returns the result of left shifting o1 by o2 on success, or NULL on failure.

   This is the equivalent of the Python expression: o1 << o2. */
PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);

/* Returns the result of right shifting o1 by o2 on success, or NULL on
   failure.

   This is the equivalent of the Python expression: o1 >> o2. */
PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);

/* Returns the result of bitwise and of o1 and o2 on success, or NULL on
   failure.

   This is the equivalent of the Python expression: o1 & o2. */
PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);

/* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure.

   This is the equivalent of the Python expression: o1 ^ o2. */
PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);

/* Returns the result of bitwise or on o1 and o2 on success, or NULL on
   failure.

   This is the equivalent of the Python expression: o1 | o2. */
PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);

/* Returns 1 if obj is an index integer (has the nb_index slot of the
   tp_as_number structure filled in), and 0 otherwise. */
PyAPI_FUNC(int) PyIndex_Check(PyObject *);

/* Returns the object 'o' converted to a Python int, or NULL with an exception
   raised on failure. */
PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);

/* Returns the object 'o' converted to Py_ssize_t by going through
   PyNumber_Index() first.

   If an overflow error occurs while converting the int to Py_ssize_t, then the
   second argument 'exc' is the error-type to return.  If it is NULL, then the
   overflow error is cleared and the value is clipped. */
PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);

/* Returns the object 'o' converted to an integer object on success, or NULL
   on failure.

   This is the equivalent of the Python expression: int(o). */
PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);

/* Returns the object 'o' converted to a float object on success, or NULL
  on failure.

  This is the equivalent of the Python expression: float(o). */
PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);


/* --- In-place variants of (some of) the above number protocol functions -- */

/* Returns the result of adding o2 to o1, possibly in-place, or NULL
   on failure.

   This is the equivalent of the Python expression: o1 += o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);

/* Returns the result of subtracting o2 from o1, possibly in-place or
   NULL on failure.

   This is the equivalent of the Python expression: o1 -= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);

/* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on
   failure.

   This is the equivalent of the Python expression: o1 *= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);

#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
/* This is the equivalent of the Python expression: o1 @= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
#endif

/* Returns the result of dividing o1 by o2 giving an integral result, possibly
   in-place, or NULL on failure.

   This is the equivalent of the Python expression: o1 /= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
                                                   PyObject *o2);

/* Returns the result of dividing o1 by o2 giving a float result, possibly
   in-place, or null on failure.

   This is the equivalent of the Python expression: o1 /= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
                                                  PyObject *o2);

/* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on
   failure.

   This is the equivalent of the Python expression: o1 %= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);

/* Returns the result of raising o1 to the power of o2, possibly in-place,
   or NULL on failure.

   This is the equivalent of the Python expression: o1 **= o2,
   or o1 = pow(o1, o2, o3) if o3 is present. */
PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
                                             PyObject *o3);

/* Returns the result of left shifting o1 by o2, possibly in-place, or NULL
   on failure.

   This is the equivalent of the Python expression: o1 <<= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);

/* Returns the result of right shifting o1 by o2, possibly in-place or NULL
   on failure.

   This is the equivalent of the Python expression: o1 >>= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);

/* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL
   on failure.

   This is the equivalent of the Python expression: o1 &= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);

/* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL
   on failure.

   This is the equivalent of the Python expression: o1 ^= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);

/* Returns the result of bitwise or of o1 and o2, possibly in-place,
   or NULL on failure.

   This is the equivalent of the Python expression: o1 |= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);

/* Returns the integer n converted to a string with a base, with a base
   marker of 0b, 0o or 0x prefixed if applicable.

   If n is not an int object, it is converted with PyNumber_Index first. */
PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);


/* === Sequence protocol ================================================ */

/* Return 1 if the object provides sequence protocol, and zero
   otherwise.

   This function always succeeds. */
PyAPI_FUNC(int) PySequence_Check(PyObject *o);

/* Return the size of sequence object o, or -1 on failure. */
PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);

/* For DLL compatibility */
#undef PySequence_Length
PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
#define PySequence_Length PySequence_Size


/* Return the concatenation of o1 and o2 on success, and NULL on failure.

   This is the equivalent of the Python expression: o1 + o2. */
PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);

/* Return the result of repeating sequence object 'o' 'count' times,
  or NULL on failure.

  This is the equivalent of the Python expression: o * count. */
PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);

/* Return the ith element of o, or NULL on failure.

   This is the equivalent of the Python expression: o[i]. */
PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);

/* Return the slice of sequence object o between i1 and i2, or NULL on failure.

   This is the equivalent of the Python expression: o[i1:i2]. */
PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);

/* Assign object 'v' to the ith element of the sequence 'o'. Raise an exception
   and return -1 on failure; return 0 on success.

   This is the equivalent of the Python statement o[i] = v. */
PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);

/* Delete the 'i'-th element of the sequence 'v'. Returns -1 on failure.

   This is the equivalent of the Python statement: del o[i]. */
PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);

/* Assign the sequence object 'v' to the slice in sequence object 'o',
   from 'i1' to 'i2'. Returns -1 on failure.

   This is the equivalent of the Python statement: o[i1:i2] = v. */
PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
                                    PyObject *v);

/* Delete the slice in sequence object 'o' from 'i1' to 'i2'.
   Returns -1 on failure.

   This is the equivalent of the Python statement: del o[i1:i2]. */
PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);

/* Returns the sequence 'o' as a tuple on success, and NULL on failure.

   This is equivalent to the Python expression: tuple(o). */
PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);

/* Returns the sequence 'o' as a list on success, and NULL on failure.
   This is equivalent to the Python expression: list(o) */
PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);

/* Return the sequence 'o' as a list, unless it's already a tuple or list.

   Use PySequence_Fast_GET_ITEM to access the members of this list, and
   PySequence_Fast_GET_SIZE to get its length.

   Returns NULL on failure.  If the object does not support iteration, raises a
   TypeError exception with 'm' as the message text. */
PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);

/* Return the size of the sequence 'o', assuming that 'o' was returned by
   PySequence_Fast and is not NULL. */
#define PySequence_Fast_GET_SIZE(o) \
    (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))

/* Return the 'i'-th element of the sequence 'o', assuming that o was returned
   by PySequence_Fast, and that i is within bounds. */
#define PySequence_Fast_GET_ITEM(o, i)\
     (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))

/* Return a pointer to the underlying item array for
   an object retured by PySequence_Fast */
#define PySequence_Fast_ITEMS(sf) \
    (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
                      : ((PyTupleObject *)(sf))->ob_item)

/* Return the number of occurrences on value on 'o', that is, return
   the number of keys for which o[key] == value.

   On failure, return -1.  This is equivalent to the Python expression:
   o.count(value). */
PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);

/* Return 1 if 'ob' is in the sequence 'seq'; 0 if 'ob' is not in the sequence
   'seq'; -1 on error.

   Use __contains__ if possible, else _PySequence_IterSearch(). */
PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);

/* For DLL-level backwards compatibility */
#undef PySequence_In
/* Determine if the sequence 'o' contains 'value'. If an item in 'o' is equal
   to 'value', return 1, otherwise return 0. On error, return -1.

   This is equivalent to the Python expression: value in o. */
PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);

/* For source-level backwards compatibility */
#define PySequence_In PySequence_Contains


/* Return the first index for which o[i] == value.
   On error, return -1.

   This is equivalent to the Python expression: o.index(value). */
PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);


/* --- In-place versions of some of the above Sequence functions --- */

/* Append sequence 'o2' to sequence 'o1', in-place when possible. Return the
   resulting object, which could be 'o1', or NULL on failure.

  This is the equivalent of the Python expression: o1 += o2. */
PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);

/* Repeat sequence 'o' by 'count', in-place when possible. Return the resulting
   object, which could be 'o', or NULL on failure.

   This is the equivalent of the Python expression: o1 *= count.  */
PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);


/* === Mapping protocol ================================================= */

/* Return 1 if the object provides mapping protocol, and 0 otherwise.

   This function always succeeds. */
PyAPI_FUNC(int) PyMapping_Check(PyObject *o);

/* Returns the number of keys in mapping object 'o' on success, and -1 on
  failure. This is equivalent to the Python expression: len(o). */
PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);

/* For DLL compatibility */
#undef PyMapping_Length
PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
#define PyMapping_Length PyMapping_Size


/* Implemented as a macro:

   int PyMapping_DelItemString(PyObject *o, const char *key);

   Remove the mapping for the string 'key' from the mapping 'o'. Returns -1 on
   failure.

   This is equivalent to the Python statement: del o[key]. */
#define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))

/* Implemented as a macro:

   int PyMapping_DelItem(PyObject *o, PyObject *key);

   Remove the mapping for the object 'key' from the mapping object 'o'.
   Returns -1 on failure.

   This is equivalent to the Python statement: del o[key]. */
#define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))

/* On success, return 1 if the mapping object 'o' has the key 'key',
   and 0 otherwise.

   This is equivalent to the Python expression: key in o.

   This function always succeeds. */
PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key);

/* Return 1 if the mapping object has the key 'key', and 0 otherwise.

   This is equivalent to the Python expression: key in o.

   This function always succeeds. */
PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);

/* On success, return a list or tuple of the keys in mapping object 'o'.
   On failure, return NULL. */
PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o);

/* On success, return a list or tuple of the values in mapping object 'o'.
   On failure, return NULL. */
PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o);

/* On success, return a list or tuple of the items in mapping object 'o',
   where each item is a tuple containing a key-value pair. On failure, return
   NULL. */
PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o);

/* Return element of 'o' corresponding to the string 'key' or NULL on failure.

   This is the equivalent of the Python expression: o[key]. */
PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o,
                                               const char *key);

/* Map the string 'key' to the value 'v' in the mapping 'o'.
   Returns -1 on failure.

   This is the equivalent of the Python statement: o[key]=v. */
PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key,
                                        PyObject *value);

/* isinstance(object, typeorclass) */
PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);

/* issubclass(object, typeorclass) */
PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);

#ifndef Py_LIMITED_API
#  define Py_CPYTHON_ABSTRACTOBJECT_H
#  include  "cpython/abstract.h"
#  undef Py_CPYTHON_ABSTRACTOBJECT_H
#endif

#ifdef __cplusplus
}
#endif
#endif /* Py_ABSTRACTOBJECT_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/asdl.h
================================================
#ifndef Py_ASDL_H
#define Py_ASDL_H

typedef PyObject * identifier;
typedef PyObject * string;
typedef PyObject * bytes;
typedef PyObject * object;
typedef PyObject * singleton;
typedef PyObject * constant;

/* It would be nice if the code generated by asdl_c.py was completely
   independent of Python, but it is a goal the requires too much work
   at this stage.  So, for example, I'll represent identifiers as
   interned Python strings.
*/

/* XXX A sequence should be typed so that its use can be typechecked. */

typedef struct {
    Py_ssize_t size;
    void *elements[1];
} asdl_seq;

typedef struct {
    Py_ssize_t size;
    int elements[1];
} asdl_int_seq;

asdl_seq *_Py_asdl_seq_new(Py_ssize_t size, PyArena *arena);
asdl_int_seq *_Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena);

#define asdl_seq_GET(S, I) (S)->elements[(I)]
#define asdl_seq_LEN(S) ((S) == NULL ? 0 : (S)->size)
#ifdef Py_DEBUG
#define asdl_seq_SET(S, I, V) \
    do { \
        Py_ssize_t _asdl_i = (I); \
        assert((S) != NULL); \
        assert(0 <= _asdl_i && _asdl_i < (S)->size); \
        (S)->elements[_asdl_i] = (V); \
    } while (0)
#else
#define asdl_seq_SET(S, I, V) (S)->elements[I] = (V)
#endif

#endif /* !Py_ASDL_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/ast.h
================================================
#ifndef Py_AST_H
#define Py_AST_H
#ifdef __cplusplus
extern "C" {
#endif

#include "Python-ast.h"   /* mod_ty */
#include "node.h"         /* node */

PyAPI_FUNC(int) PyAST_Validate(mod_ty);
PyAPI_FUNC(mod_ty) PyAST_FromNode(
    const node *n,
    PyCompilerFlags *flags,
    const char *filename,       /* decoded from the filesystem encoding */
    PyArena *arena);
PyAPI_FUNC(mod_ty) PyAST_FromNodeObject(
    const node *n,
    PyCompilerFlags *flags,
    PyObject *filename,
    PyArena *arena);

#ifndef Py_LIMITED_API

/* _PyAST_ExprAsUnicode is defined in ast_unparse.c */
PyAPI_FUNC(PyObject *) _PyAST_ExprAsUnicode(expr_ty);

/* Return the borrowed reference to the first literal string in the
   sequence of statemnts or NULL if it doesn't start from a literal string.
   Doesn't set exception. */
PyAPI_FUNC(PyObject *) _PyAST_GetDocString(asdl_seq *);

#endif /* !Py_LIMITED_API */

#ifdef __cplusplus
}
#endif
#endif /* !Py_AST_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/bitset.h
================================================

#ifndef Py_BITSET_H
#define Py_BITSET_H
#ifdef __cplusplus
extern "C" {
#endif

/* Bitset interface */

#define BYTE            char
typedef BYTE *bitset;

#define testbit(ss, ibit) (((ss)[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0)

#define BITSPERBYTE     (8*sizeof(BYTE))
#define BIT2BYTE(ibit)  ((ibit) / BITSPERBYTE)
#define BIT2SHIFT(ibit) ((ibit) % BITSPERBYTE)
#define BIT2MASK(ibit)  (1 << BIT2SHIFT(ibit))

#ifdef __cplusplus
}
#endif
#endif /* !Py_BITSET_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/bltinmodule.h
================================================
#ifndef Py_BLTINMODULE_H
#define Py_BLTINMODULE_H
#ifdef __cplusplus
extern "C" {
#endif

PyAPI_DATA(PyTypeObject) PyFilter_Type;
PyAPI_DATA(PyTypeObject) PyMap_Type;
PyAPI_DATA(PyTypeObject) PyZip_Type;

#ifdef __cplusplus
}
#endif
#endif /* !Py_BLTINMODULE_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/boolobject.h
================================================
/* Boolean object interface */

#ifndef Py_BOOLOBJECT_H
#define Py_BOOLOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif


PyAPI_DATA(PyTypeObject) PyBool_Type;

#define PyBool_Check(x) (Py_TYPE(x) == &PyBool_Type)

/* Py_False and Py_True are the only two bools in existence.
Don't forget to apply Py_INCREF() when returning either!!! */

/* Don't use these directly */
PyAPI_DATA(struct _longobject) _Py_FalseStruct, _Py_TrueStruct;

/* Use these macros */
#define Py_False ((PyObject *) &_Py_FalseStruct)
#define Py_True ((PyObject *) &_Py_TrueStruct)

/* Macros for returning Py_True or Py_False, respectively */
#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False

/* Function to return a bool from a C long */
PyAPI_FUNC(PyObject *) PyBool_FromLong(long);

#ifdef __cplusplus
}
#endif
#endif /* !Py_BOOLOBJECT_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/bytearrayobject.h
================================================
/* ByteArray object interface */

#ifndef Py_BYTEARRAYOBJECT_H
#define Py_BYTEARRAYOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif

#include <stdarg.h>

/* Type PyByteArrayObject represents a mutable array of bytes.
 * The Python API is that of a sequence;
 * the bytes are mapped to ints in [0, 256).
 * Bytes are not characters; they may be used to encode characters.
 * The only way to go between bytes and str/unicode is via encoding
 * and decoding.
 * For the convenience of C programmers, the bytes type is considered
 * to contain a char pointer, not an unsigned char pointer.
 */

/* Object layout */
#ifndef Py_LIMITED_API
typedef struct {
    PyObject_VAR_HEAD
    Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */
    char *ob_bytes;      /* Physical backing buffer */
    char *ob_start;      /* Logical start inside ob_bytes */
    /* XXX(nnorwitz): should ob_exports be Py_ssize_t? */
    int ob_exports;      /* How many buffer exports */
} PyByteArrayObject;
#endif

/* Type object */
PyAPI_DATA(PyTypeObject) PyByteArray_Type;
PyAPI_DATA(PyTypeObject) PyByteArrayIter_Type;

/* Type check macros */
#define PyByteArray_Check(self) PyObject_TypeCheck(self, &PyByteArray_Type)
#define PyByteArray_CheckExact(self) (Py_TYPE(self) == &PyByteArray_Type)

/* Direct API functions */
PyAPI_FUNC(PyObject *) PyByteArray_FromObject(PyObject *);
PyAPI_FUNC(PyObject *) PyByteArray_Concat(PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) PyByteArray_FromStringAndSize(const char *, Py_ssize_t);
PyAPI_FUNC(Py_ssize_t) PyByteArray_Size(PyObject *);
PyAPI_FUNC(char *) PyByteArray_AsString(PyObject *);
PyAPI_FUNC(int) PyByteArray_Resize(PyObject *, Py_ssize_t);

/* Macros, trading safety for speed */
#ifndef Py_LIMITED_API
#define PyByteArray_AS_STRING(self) \
    (assert(PyByteArray_Check(self)), \
     Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string)
#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self))

PyAPI_DATA(char) _PyByteArray_empty_string[];
#endif

#ifdef __cplusplus
}
#endif
#endif /* !Py_BYTEARRAYOBJECT_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/bytes_methods.h
================================================
#ifndef Py_LIMITED_API
#ifndef Py_BYTES_CTYPE_H
#define Py_BYTES_CTYPE_H

/*
 * The internal implementation behind PyBytes (bytes) and PyByteArray (bytearray)
 * methods of the given names, they operate on ASCII byte strings.
 */
extern PyObject* _Py_bytes_isspace(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_isalpha(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_isalnum(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_isascii(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_isdigit(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_islower(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_isupper(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_istitle(const char *cptr, Py_ssize_t len);

/* These store their len sized answer in the given preallocated *result arg. */
extern void _Py_bytes_lower(char *result, const char *cptr, Py_ssize_t len);
extern void _Py_bytes_upper(char *result, const char *cptr, Py_ssize_t len);
extern void _Py_bytes_title(char *result, const char *s, Py_ssize_t len);
extern void _Py_bytes_capitalize(char *result, const char *s, Py_ssize_t len);
extern void _Py_bytes_swapcase(char *result, const char *s, Py_ssize_t len);

extern PyObject *_Py_bytes_find(const char *str, Py_ssize_t len, PyObject *args);
extern PyObject *_Py_bytes_index(const char *str, Py_ssize_t len, PyObject *args);
extern PyObject *_Py_bytes_rfind(const char *str, Py_ssize_t len, PyObject *args);
extern PyObject *_Py_bytes_rindex(const char *str, Py_ssize_t len, PyObject *args);
extern PyObject *_Py_bytes_count(const char *str, Py_ssize_t len, PyObject *args);
extern int _Py_bytes_contains(const char *str, Py_ssize_t len, PyObject *arg);
extern PyObject *_Py_bytes_startswith(const char *str, Py_ssize_t len, PyObject *args);
extern PyObject *_Py_bytes_endswith(const char *str, Py_ssize_t len, PyObject *args);

/* The maketrans() static method. */
extern PyObject* _Py_bytes_maketrans(Py_buffer *frm, Py_buffer *to);

/* Shared __doc__ strings. */
extern const char _Py_isspace__doc__[];
extern const char _Py_isalpha__doc__[];
extern const char _Py_isalnum__doc__[];
extern const char _Py_isascii__doc__[];
extern const char _Py_isdigit__doc__[];
extern const char _Py_islower__doc__[];
extern const char _Py_isupper__doc__[];
extern const char _Py_istitle__doc__[];
extern const char _Py_lower__doc__[];
extern const char _Py_upper__doc__[];
extern const char _Py_title__doc__[];
extern const char _Py_capitalize__doc__[];
extern const char _Py_swapcase__doc__[];
extern const char _Py_count__doc__[];
extern const char _Py_find__doc__[];
extern const char _Py_index__doc__[];
extern const char _Py_rfind__doc__[];
extern const char _Py_rindex__doc__[];
extern const char _Py_startswith__doc__[];
extern const char _Py_endswith__doc__[];
extern const char _Py_maketrans__doc__[];
extern const char _Py_expandtabs__doc__[];
extern const char _Py_ljust__doc__[];
extern const char _Py_rjust__doc__[];
extern const char _Py_center__doc__[];
extern const char _Py_zfill__doc__[];

/* this is needed because some docs are shared from the .o, not static */
#define PyDoc_STRVAR_shared(name,str) const char name[] = PyDoc_STR(str)

#endif /* !Py_BYTES_CTYPE_H */
#endif /* !Py_LIMITED_API */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/bytesobject.h
================================================

/* Bytes (String) object interface */

#ifndef Py_BYTESOBJECT_H
#define Py_BYTESOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif

#include <stdarg.h>

/*
Type PyBytesObject represents a character string.  An extra zero byte is
reserved at the end to ensure it is zero-terminated, but a size is
present so strings with null bytes in them can be represented.  This
is an immutable object type.

There are functions to create new string objects, to test
an object for string-ness, and to get the
string value.  The latter function returns a null pointer
if the object is not of the proper type.
There is a variant that takes an explicit size as well as a
variant that assumes a zero-terminated string.  Note that none of the
functions should be applied to nil objects.
*/

/* Caching the hash (ob_shash) saves recalculation of a string's hash value.
   This significantly speeds up dict lookups. */

#ifndef Py_LIMITED_API
typedef struct {
    PyObject_VAR_HEAD
    Py_hash_t ob_shash;
    char ob_sval[1];

    /* Invariants:
     *     ob_sval contains space for 'ob_size+1' elements.
     *     ob_sval[ob_size] == 0.
     *     ob_shash is the hash of the string or -1 if not computed yet.
     */
} PyBytesObject;
#endif

PyAPI_DATA(PyTypeObject) PyBytes_Type;
PyAPI_DATA(PyTypeObject) PyBytesIter_Type;

#define PyBytes_Check(op) \
                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
#define PyBytes_CheckExact(op) (Py_TYPE(op) == &PyBytes_Type)

PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *);
PyAPI_FUNC(PyObject *) PyBytes_FromObject(PyObject *);
PyAPI_FUNC(PyObject *) PyBytes_FromFormatV(const char*, va_list)
                                Py_GCC_ATTRIBUTE((format(printf, 1, 0)));
PyAPI_FUNC(PyObject *) PyBytes_FromFormat(const char*, ...)
                                Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
PyAPI_FUNC(Py_ssize_t) PyBytes_Size(PyObject *);
PyAPI_FUNC(char *) PyBytes_AsString(PyObject *);
PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int);
PyAPI_FUNC(void) PyBytes_Concat(PyObject **, PyObject *);
PyAPI_FUNC(void) PyBytes_ConcatAndDel(PyObject **, PyObject *);
#ifndef Py_LIMITED_API
PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t);
PyAPI_FUNC(PyObject*) _PyBytes_FormatEx(
    const char *format,
    Py_ssize_t format_len,
    PyObject *args,
    int use_bytearray);
PyAPI_FUNC(PyObject*) _PyBytes_FromHex(
    PyObject *string,
    int use_bytearray);
#endif
PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t,
                                            const char *, Py_ssize_t,
                                            const char *);
#ifndef Py_LIMITED_API
/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */
PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t,
                                             const char *, Py_ssize_t,
                                             const char *,
                                             const char **);
#endif

/* Macro, trading safety for speed */
#ifndef Py_LIMITED_API
#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \
                                (((PyBytesObject *)(op))->ob_sval))
#define PyBytes_GET_SIZE(op)  (assert(PyBytes_Check(op)),Py_SIZE(op))
#endif

/* _PyBytes_Join(sep, x) is like sep.join(x).  sep must be PyBytesObject*,
   x must be an iterable object. */
#ifndef Py_LIMITED_API
PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x);
#endif

/* Provides access to the internal data buffer and size of a string
   object or the default encoded version of a Unicode object. Passing
   NULL as *len parameter will force the string buffer to be
   0-terminated (passing a string with embedded NULL characters will
   cause an exception).  */
PyAPI_FUNC(int) PyBytes_AsStringAndSize(
    PyObject *obj,      /* string or Unicode object */
    char **s,           /* pointer to buffer variable */
    Py_ssize_t *len     /* pointer to length variable or NULL
                           (only possible for 0-terminated
                           strings) */
    );

/* Using the current locale, insert the thousands grouping
   into the string pointed to by buffer.  For the argument descriptions,
   see Objects/stringlib/localeutil.h */
#ifndef Py_LIMITED_API
PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGroupingLocale(char *buffer,
                                                   Py_ssize_t n_buffer,
                                                   char *digits,
                                                   Py_ssize_t n_digits,
                                                   Py_ssize_t min_width);

/* Using explicit passed-in values, insert the thousands grouping
   into the string pointed to by buffer.  For the argument descriptions,
   see Objects/stringlib/localeutil.h */
PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer,
                                                   Py_ssize_t n_buffer,
                                                   char *digits,
                                                   Py_ssize_t n_digits,
                                                   Py_ssize_t min_width,
                                                   const char *grouping,
                                                   const char *thousands_sep);
#endif

/* Flags used by string formatting */
#define F_LJUST (1<<0)
#define F_SIGN  (1<<1)
#define F_BLANK (1<<2)
#define F_ALT   (1<<3)
#define F_ZERO  (1<<4)

#ifndef Py_LIMITED_API
/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer".
   A _PyBytesWriter variable must be declared at the end of variables in a
   function to optimize the memory allocation on the stack. */
typedef struct {
    /* bytes, bytearray or NULL (when the small buffer is used) */
    PyObject *buffer;

    /* Number of allocated size. */
    Py_ssize_t allocated;

    /* Minimum number of allocated bytes,
       incremented by _PyBytesWriter_Prepare() */
    Py_ssize_t min_size;

    /* If non-zero, use a bytearray instead of a bytes object for buffer. */
    int use_bytearray;

    /* If non-zero, overallocate the buffer (default: 0).
       This flag must be zero if use_bytearray is non-zero. */
    int overallocate;

    /* Stack buffer */
    int use_small_buffer;
    char small_buffer[512];
} _PyBytesWriter;

/* Initialize a bytes writer

   By default, the overallocation is disabled. Set the overallocate attribute
   to control the allocation of the buffer. */
PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer);

/* Get the buffer content and reset the writer.
   Return a bytes object, or a bytearray object if use_bytearray is non-zero.
   Raise an exception and return NULL on error. */
PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer,
    void *str);

/* Deallocate memory of a writer (clear its internal buffer). */
PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer);

/* Allocate the buffer to write size bytes.
   Return the pointer to the beginning of buffer data.
   Raise an exception and return NULL on error. */
PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer,
    Py_ssize_t size);

/* Ensure that the buffer is large enough to write *size* bytes.
   Add size to the writer minimum size (min_size attribute).

   str is the current pointer inside the buffer.
   Return the updated current pointer inside the buffer.
   Raise an exception and return NULL on error. */
PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer,
    void *str,
    Py_ssize_t size);

/* Resize the buffer to make it larger.
   The new buffer may be larger than size bytes because of overallocation.
   Return the updated current pointer inside the buffer.
   Raise an exception and return NULL on error.

   Note: size must be greater than the number of allocated bytes in the writer.

   This function doesn't use the writer minimum size (min_size attribute).

   See also _PyBytesWriter_Prepare().
   */
PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer,
    void *str,
    Py_ssize_t size);

/* Write bytes.
   Raise an exception and return NULL on error. */
PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer,
    void *str,
    const void *bytes,
    Py_ssize_t size);
#endif   /* Py_LIMITED_API */

#ifdef __cplusplus
}
#endif
#endif /* !Py_BYTESOBJECT_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cellobject.h
================================================
/* Cell object interface */
#ifndef Py_LIMITED_API
#ifndef Py_CELLOBJECT_H
#define Py_CELLOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
    PyObject_HEAD
    PyObject *ob_ref;       /* Content of the cell or NULL when empty */
} PyCellObject;

PyAPI_DATA(PyTypeObject) PyCell_Type;

#define PyCell_Check(op) (Py_TYPE(op) == &PyCell_Type)

PyAPI_FUNC(PyObject *) PyCell_New(PyObject *);
PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *);
PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *);

#define PyCell_GET(op) (((PyCellObject *)(op))->ob_ref)
#define PyCell_SET(op, v) (((PyCellObject *)(op))->ob_ref = v)

#ifdef __cplusplus
}
#endif
#endif /* !Py_TUPLEOBJECT_H */
#endif /* Py_LIMITED_API */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/ceval.h
================================================
#ifndef Py_CEVAL_H
#define Py_CEVAL_H
#ifdef __cplusplus
extern "C" {
#endif


/* Interface to random parts in ceval.c */

/* PyEval_CallObjectWithKeywords(), PyEval_CallObject(), PyEval_CallFunction
 * and PyEval_CallMethod are kept for backward compatibility: PyObject_Call(),
 * PyObject_CallFunction() and PyObject_CallMethod() are recommended to call
 * a callable object.
 */

PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords(
    PyObject *callable,
    PyObject *args,
    PyObject *kwargs);

/* Inline this */
#define PyEval_CallObject(callable, arg) \
    PyEval_CallObjectWithKeywords(callable, arg, (PyObject *)NULL)

PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *callable,
                                           const char *format, ...);
PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj,
                                         const char *name,
                                         const char *format, ...);

#ifndef Py_LIMITED_API
PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(int new_depth);
PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void);
PyAPI_FUNC(void) _PyEval_SetAsyncGenFirstiter(PyObject *);
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void);
PyAPI_FUNC(void) _PyEval_SetAsyncGenFinalizer(PyObject *);
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void);
#endif

struct _frame; /* Avoid including frameobject.h */

PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void);
PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void);
PyAPI_FUNC(PyObject *) PyEval_GetLocals(void);
PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void);

#ifndef Py_LIMITED_API
/* Helper to look up a builtin object */
PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *);
/* Look at the current frame's (if any) code's co_flags, and turn on
   the corresponding compiler flags in cf->cf_flags.  Return 1 if any
   flag was set, else return 0. */
PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
#endif

PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg);
PyAPI_FUNC(int) Py_MakePendingCalls(void);

/* Protection against deeply nested recursive calls

   In Python 3.0, this protection has two levels:
   * normal anti-recursion protection is triggered when the recursion level
     exceeds the current recursion limit. It raises a RecursionError, and sets
     the "overflowed" flag in the thread state structure. This flag
     temporarily *disables* the normal protection; this allows cleanup code
     to potentially outgrow the recursion limit while processing the
     RecursionError.
   * "last chance" anti-recursion protection is triggered when the recursion
     level exceeds "current recursion limit + 50". By construction, this
     protection can only be triggered when the "overflowed" flag is set. It
     means the cleanup code has itself gone into an infinite loop, or the
     RecursionError has been mistakingly ignored. When this protection is
     triggered, the interpreter aborts with a Fatal Error.

   In addition, the "overflowed" flag is automatically reset when the
   recursion level drops below "current recursion limit - 50". This heuristic
   is meant to ensure that the normal anti-recursion protection doesn't get
   disabled too long.

   Please note: this scheme has its own limitations. See:
   http://mail.python.org/pipermail/python-dev/2008-August/082106.html
   for some observations.
*/
PyAPI_FUNC(void) Py_SetRecursionLimit(int);
PyAPI_FUNC(int) Py_GetRecursionLimit(void);

#define Py_EnterRecursiveCall(where)  \
            (_Py_MakeRecCheck(PyThreadState_GET()->recursion_depth) &&  \
             _Py_CheckRecursiveCall(where))
#define Py_LeaveRecursiveCall()                         \
    do{ if(_Py_MakeEndRecCheck(PyThreadState_GET()->recursion_depth))  \
      PyThreadState_GET()->overflowed = 0;  \
    } while(0)
PyAPI_FUNC(int) _Py_CheckRecursiveCall(const char *where);

/* Due to the macros in which it's used, _Py_CheckRecursionLimit is in
   the stable ABI.  It should be removed therefrom when possible.
*/
PyAPI_DATA(int) _Py_CheckRecursionLimit;

#ifdef USE_STACKCHECK
/* With USE_STACKCHECK, trigger stack checks in _Py_CheckRecursiveCall()
   on every 64th call to Py_EnterRecursiveCall.
*/
#  define _Py_MakeRecCheck(x)  \
    (++(x) > _Py_CheckRecursionLimit || \
     ++(PyThreadState_GET()->stackcheck_counter) > 64)
#else
#  define _Py_MakeRecCheck(x)  (++(x) > _Py_CheckRecursionLimit)
#endif

/* Compute the "lower-water mark" for a recursion limit. When
 * Py_LeaveRecursiveCall() is called with a recursion depth below this mark,
 * the overflowed flag is reset to 0. */
#define _Py_RecursionLimitLowerWaterMark(limit) \
    (((limit) > 200) \
        ? ((limit) - 50) \
        : (3 * ((limit) >> 2)))

#define _Py_MakeEndRecCheck(x) \
    (--(x) < _Py_RecursionLimitLowerWaterMark(_Py_CheckRecursionLimit))

#define Py_ALLOW_RECURSION \
  do { unsigned char _old = PyThreadState_GET()->recursion_critical;\
    PyThreadState_GET()->recursion_critical = 1;

#define Py_END_ALLOW_RECURSION \
    PyThreadState_GET()->recursion_critical = _old; \
  } while(0);

PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *);
PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *);

PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *);
PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc);
#ifndef Py_LIMITED_API
PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc);
#endif

/* Interface for threads.

   A module that plans to do a blocking system call (or something else
   that lasts a long time and doesn't touch Python data) can allow other
   threads to run as follows:

    ...preparations here...
    Py_BEGIN_ALLOW_THREADS
    ...blocking system call here...
    Py_END_ALLOW_THREADS
    ...interpret result here...

   The Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS pair expands to a
   {}-surrounded block.
   To leave the block in the middle (e.g., with return), you must insert
   a line containing Py_BLOCK_THREADS before the return, e.g.

    if (...premature_exit...) {
        Py_BLOCK_THREADS
        PyErr_SetFromErrno(PyExc_OSError);
        return NULL;
    }

   An alternative is:

    Py_BLOCK_THREADS
    if (...premature_exit...) {
        PyErr_SetFromErrno(PyExc_OSError);
        return NULL;
    }
    Py_UNBLOCK_THREADS

   For convenience, that the value of 'errno' is restored across
   Py_END_ALLOW_THREADS and Py_BLOCK_THREADS.

   WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND
   Py_END_ALLOW_THREADS!!!

   The function PyEval_InitThreads() should be called only from
   init_thread() in "_threadmodule.c".

   Note that not yet all candidates have been converted to use this
   mechanism!
*/

PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void);
PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *);

PyAPI_FUNC(int)  PyEval_ThreadsInitialized(void);
PyAPI_FUNC(void) PyEval_InitThreads(void);
Py_DEPRECATED(3.2) PyAPI_FUNC(void) PyEval_AcquireLock(void);
/* Py_DEPRECATED(3.2) */ PyAPI_FUNC(void) PyEval_ReleaseLock(void);
PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate);
PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate);

#ifndef Py_LIMITED_API
PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds);
PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void);
#endif

#ifndef Py_LIMITED_API
PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc);
#endif

#define Py_BEGIN_ALLOW_THREADS { \
                        PyThreadState *_save; \
                        _save = PyEval_SaveThread();
#define Py_BLOCK_THREADS        PyEval_RestoreThread(_save);
#define Py_UNBLOCK_THREADS      _save = PyEval_SaveThread();
#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
                 }

#ifndef Py_LIMITED_API
PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *);
#endif

/* Masks and values used by FORMAT_VALUE opcode. */
#define FVC_MASK      0x3
#define FVC_NONE      0x0
#define FVC_STR       0x1
#define FVC_REPR      0x2
#define FVC_ASCII     0x3
#define FVS_MASK      0x4
#define FVS_HAVE_SPEC 0x4

#ifdef __cplusplus
}
#endif
#endif /* !Py_CEVAL_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/classobject.h
================================================
/* Former class object interface -- now only bound methods are here  */

/* Revealing some structures (not for general use) */

#ifndef Py_LIMITED_API
#ifndef Py_CLASSOBJECT_H
#define Py_CLASSOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
    PyObject_HEAD
    PyObject *im_func;   /* The callable object implementing the method */
    PyObject *im_self;   /* The instance it is bound to */
    PyObject *im_weakreflist; /* List of weak references */
    vectorcallfunc vectorcall;
} PyMethodObject;

PyAPI_DATA(PyTypeObject) PyMethod_Type;

#define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type)

PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *);

PyAPI_FUNC(PyObject *) PyMethod_Function(PyObject *);
PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *);

/* Macros for direct access to these values. Type checks are *not*
   done, so use with care. */
#define PyMethod_GET_FUNCTION(meth) \
        (((PyMethodObject *)meth) -> im_func)
#define PyMethod_GET_SELF(meth) \
        (((PyMethodObject *)meth) -> im_self)

PyAPI_FUNC(int) PyMethod_ClearFreeList(void);

typedef struct {
    PyObject_HEAD
    PyObject *func;
} PyInstanceMethodObject;

PyAPI_DATA(PyTypeObject) PyInstanceMethod_Type;

#define PyInstanceMethod_Check(op) ((op)->ob_type == &PyInstanceMethod_Type)

PyAPI_FUNC(PyObject *) PyInstanceMethod_New(PyObject *);
PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *);

/* Macros for direct access to these values. Type checks are *not*
   done, so use with care. */
#define PyInstanceMethod_GET_FUNCTION(meth) \
        (((PyInstanceMethodObject *)meth) -> func)

#ifdef __cplusplus
}
#endif
#endif /* !Py_CLASSOBJECT_H */
#endif /* Py_LIMITED_API */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/code.h
================================================
/* Definitions for bytecode */

#ifndef Py_LIMITED_API
#ifndef Py_CODE_H
#define Py_CODE_H
#ifdef __cplusplus
extern "C" {
#endif

typedef uint16_t _Py_CODEUNIT;

#ifdef WORDS_BIGENDIAN
#  define _Py_OPCODE(word) ((word) >> 8)
#  define _Py_OPARG(word) ((word) & 255)
#else
#  define _Py_OPCODE(word) ((word) & 255)
#  define _Py_OPARG(word) ((word) >> 8)
#endif

typedef struct _PyOpcache _PyOpcache;

/* Bytecode object */
typedef struct {
    PyObject_HEAD
    int co_argcount;            /* #arguments, except *args */
    int co_posonlyargcount;     /* #positional only arguments */
    int co_kwonlyargcount;      /* #keyword only arguments */
    int co_nlocals;             /* #local variables */
    int co_stacksize;           /* #entries needed for evaluation stack */
    int co_flags;               /* CO_..., see below */
    int co_firstlineno;         /* first source line number */
    PyObject *co_code;          /* instruction opcodes */
    PyObject *co_consts;        /* list (constants used) */
    PyObject *co_names;         /* list of strings (names used) */
    PyObject *co_varnames;      /* tuple of strings (local variable names) */
    PyObject *co_freevars;      /* tuple of strings (free variable names) */
    PyObject *co_cellvars;      /* tuple of strings (cell variable names) */
    /* The rest aren't used in either hash or comparisons, except for co_name,
       used in both. This is done to preserve the name and line number
       for tracebacks and debuggers; otherwise, constant de-duplication
       would collapse identical functions/lambdas defined on different lines.
    */
    Py_ssize_t *co_cell2arg;    /* Maps cell vars which are arguments. */
    PyObject *co_filename;      /* unicode (where it was loaded from) */
    PyObject *co_name;          /* unicode (name, for reference) */
    PyObject *co_lnotab;        /* string (encoding addr<->lineno mapping) See
                                   Objects/lnotab_notes.txt for details. */
    void *co_zombieframe;       /* for optimization only (see frameobject.c) */
    PyObject *co_weakreflist;   /* to support weakrefs to code objects */
    /* Scratch space for extra data relating to the code object.
       Type is a void* to keep the format private in codeobject.c to force
       people to go through the proper APIs. */
    void *co_extra;

    /* Per opcodes just-in-time cache
     *
     * To reduce cache size, we use indirect mapping from opcode index to
     * cache object:
     *   cache = co_opcache[co_opcache_map[next_instr - first_instr] - 1]
     */

    // co_opcache_map is indexed by (next_instr - first_instr).
    //  * 0 means there is no cache for this opcode.
    //  * n > 0 means there is cache in co_opcache[n-1].
    unsigned char *co_opcache_map;
    _PyOpcache *co_opcache;
    int co_opcache_flag;  // used to determine when create a cache.
    unsigned char co_opcache_size;  // length of co_opcache.
} PyCodeObject;

/* Masks for co_flags above */
#define CO_OPTIMIZED    0x0001
#define CO_NEWLOCALS    0x0002
#define CO_VARARGS      0x0004
#define CO_VARKEYWORDS  0x0008
#define CO_NESTED       0x0010
#define CO_GENERATOR    0x0020
/* The CO_NOFREE flag is set if there are no free or cell variables.
   This information is redundant, but it allows a single flag test
   to determine whether there is any extra work to be done when the
   call frame it setup.
*/
#define CO_NOFREE       0x0040

/* The CO_COROUTINE flag is set for coroutine functions (defined with
   ``async def`` keywords) */
#define CO_COROUTINE            0x0080
#define CO_ITERABLE_COROUTINE   0x0100
#define CO_ASYNC_GENERATOR      0x0200

/* These are no longer used. */
#if 0
#define CO_GENERATOR_ALLOWED    0x1000
#endif
#define CO_FUTURE_DIVISION      0x2000
#define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */
#define CO_FUTURE_WITH_STATEMENT  0x8000
#define CO_FUTURE_PRINT_FUNCTION  0x10000
#define CO_FUTURE_UNICODE_LITERALS 0x20000

#define CO_FUTURE_BARRY_AS_BDFL  0x40000
#define CO_FUTURE_GENERATOR_STOP  0x80000
#define CO_FUTURE_ANNOTATIONS    0x100000

/* This value is found in the co_cell2arg array when the associated cell
   variable does not correspond to an argument. */
#define CO_CELL_NOT_AN_ARG (-1)

/* This should be defined if a future statement modifies the syntax.
   For example, when a keyword is added.
*/
#define PY_PARSER_REQUIRES_FUTURE_KEYWORD

#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */

PyAPI_DATA(PyTypeObject) PyCode_Type;

#define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type)
#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))

/* Public interface */
PyAPI_FUNC(PyCodeObject *) PyCode_New(
        int, int, int, int, int, PyObject *, PyObject *,
        PyObject *, PyObject *, PyObject *, PyObject *,
        PyObject *, PyObject *, int, PyObject *);

PyAPI_FUNC(PyCodeObject *) PyCode_NewWithPosOnlyArgs(
        int, int, int, int, int, int, PyObject *, PyObject *,
        PyObject *, PyObject *, PyObject *, PyObject *,
        PyObject *, PyObject *, int, PyObject *);
        /* same as struct above */

/* Creates a new empty code object with the specified source location. */
PyAPI_FUNC(PyCodeObject *)
PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno);

/* Return the line number associated with the specified bytecode index
   in this code object.  If you just need the line number of a frame,
   use PyFrame_GetLineNumber() instead. */
PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);

/* for internal use only */
typedef struct _addr_pair {
        int ap_lower;
        int ap_upper;
} PyAddrPair;

#ifndef Py_LIMITED_API
/* Update *bounds to describe the first and one-past-the-last instructions in the
   same line as lasti.  Return the number of that line.
*/
PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co,
                                        int lasti, PyAddrPair *bounds);

/* Create a comparable key used to compare constants taking in account the
 * object type. It is used to make sure types are not coerced (e.g., float and
 * complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms
 *
 * Return (type(obj), obj, ...): a tuple with variable size (at least 2 items)
 * depending on the type and the value. The type is the first item to not
 * compare bytes and str which can raise a BytesWarning exception. */
PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj);
#endif

PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
                                      PyObject *names, PyObject *lnotab);


#ifndef Py_LIMITED_API
PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index,
                                 void **extra);
PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index,
                                 void *extra);
#endif

#ifdef __cplusplus
}
#endif
#endif /* !Py_CODE_H */
#endif /* Py_LIMITED_API */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/codecs.h
================================================
#ifndef Py_CODECREGISTRY_H
#define Py_CODECREGISTRY_H
#ifdef __cplusplus
extern "C" {
#endif

/* ------------------------------------------------------------------------

   Python Codec Registry and support functions


Written by Marc-Andre Lemburg (mal@lemburg.com).

Copyright (c) Corporation for National Research Initiatives.

   ------------------------------------------------------------------------ */

/* Register a new codec search function.

   As side effect, this tries to load the encodings package, if not
   yet done, to make sure that it is always first in the list of
   search functions.

   The search_function's refcount is incremented by this function. */

PyAPI_FUNC(int) PyCodec_Register(
       PyObject *search_function
       );

/* Codec registry lookup API.

   Looks up the given encoding and returns a CodecInfo object with
   function attributes which implement the different aspects of
   processing the encoding.

   The encoding string is looked up converted to all lower-case
   characters. This makes encodings looked up through this mechanism
   effectively case-insensitive.

   If no codec is found, a KeyError is set and NULL returned.

   As side effect, this tries to load the encodings package, if not
   yet done. This is part of the lazy load strategy for the encodings
   package.

 */

#ifndef Py_LIMITED_API
PyAPI_FUNC(PyObject *) _PyCodec_Lookup(
       const char *encoding
       );

PyAPI_FUNC(int) _PyCodec_Forget(
       const char *encoding
       );
#endif

/* Codec registry encoding check API.

   Returns 1/0 depending on whether there is a registered codec for
   the given encoding.

*/

PyAPI_FUNC(int) PyCodec_KnownEncoding(
       const char *encoding
       );

/* Generic codec based encoding API.

   object is passed through the encoder function found for the given
   encoding using the error handling method defined by errors. errors
   may be NULL to use the default method defined for the codec.

   Raises a LookupError in case no encoder can be found.

 */

PyAPI_FUNC(PyObject *) PyCodec_Encode(
       PyObject *object,
       const char *encoding,
       const char *errors
       );

/* Generic codec based decoding API.

   object is passed through the decoder function found for the given
   encoding using the error handling method defined by errors. errors
   may be NULL to use the default method defined for the codec.

   Raises a LookupError in case no encoder can be found.

 */

PyAPI_FUNC(PyObject *) PyCodec_Decode(
       PyObject *object,
       const char *encoding,
       const char *errors
       );

#ifndef Py_LIMITED_API
/* Text codec specific encoding and decoding API.

   Checks the encoding against a list of codecs which do not
   implement a str<->bytes encoding before attempting the
   operation.

   Please note that these APIs are internal and should not
   be used in Python C extensions.

   XXX (ncoghlan): should we make these, or something like them, public
   in Python 3.5+?

 */
PyAPI_FUNC(PyObject *) _PyCodec_LookupTextEncoding(
       const char *encoding,
       const char *alternate_command
       );

PyAPI_FUNC(PyObject *) _PyCodec_EncodeText(
       PyObject *object,
       const char *encoding,
       const char *errors
       );

PyAPI_FUNC(PyObject *) _PyCodec_DecodeText(
       PyObject *object,
       const char *encoding,
       const char *errors
       );

/* These two aren't actually text encoding specific, but _io.TextIOWrapper
 * is the only current API consumer.
 */
PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalDecoder(
       PyObject *codec_info,
       const char *errors
       );

PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalEncoder(
       PyObject *codec_info,
       const char *errors
       );
#endif



/* --- Codec Lookup APIs --------------------------------------------------

   All APIs return a codec object with incremented refcount and are
   based on _PyCodec_Lookup().  The same comments w/r to the encoding
   name also apply to these APIs.

*/

/* Get an encoder function for the given encoding. */

PyAPI_FUNC(PyObject *) PyCodec_Encoder(
       const char *encoding
       );

/* Get a decoder function for the given encoding. */

PyAPI_FUNC(PyObject *) PyCodec_Decoder(
       const char *encoding
       );

/* Get an IncrementalEncoder object for the given encoding. */

PyAPI_FUNC(PyObject *) PyCodec_IncrementalEncoder(
       const char *encoding,
       const char *errors
       );

/* Get an IncrementalDecoder object function for the given encoding. */

PyAPI_FUNC(PyObject *) PyCodec_IncrementalDecoder(
       const char *encoding,
       const char *errors
       );

/* Get a StreamReader factory function for the given encoding. */

PyAPI_FUNC(PyObject *) PyCodec_StreamReader(
       const char *encoding,
       PyObject *stream,
       const char *errors
       );

/* Get a StreamWriter factory function for the given encoding. */

PyAPI_FUNC(PyObject *) PyCodec_StreamWriter(
       const char *encoding,
       PyObject *stream,
       const char *errors
       );

/* Unicode encoding error handling callback registry API */

/* Register the error handling callback function error under the given
   name. This function will be called by the codec when it encounters
   unencodable characters/undecodable bytes and doesn't know the
   callback name, when name is specified as the error parameter
   in the call to the encode/decode function.
   Return 0 on success, -1 on error */
PyAPI_FUNC(int) PyCodec_RegisterError(const char *name, PyObject *error);

/* Lookup the error handling callback function registered under the given
   name. As a special case NULL can be passed, in which case
   the error handling callback for "strict" will be returned. */
PyAPI_FUNC(PyObject *) PyCodec_LookupError(const char *name);

/* raise exc as an exception */
PyAPI_FUNC(PyObject *) PyCodec_StrictErrors(PyObject *exc);

/* ignore the unicode error, skipping the faulty input */
PyAPI_FUNC(PyObject *) PyCodec_IgnoreErrors(PyObject *exc);

/* replace the unicode encode error with ? or U+FFFD */
PyAPI_FUNC(PyObject *) PyCodec_ReplaceErrors(PyObject *exc);

/* replace the unicode encode error with XML character references */
PyAPI_FUNC(PyObject *) PyCodec_XMLCharRefReplaceErrors(PyObject *exc);

/* replace the unicode encode error with backslash escapes (\x, \u and \U) */
PyAPI_FUNC(PyObject *) PyCodec_BackslashReplaceErrors(PyObject *exc);

#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
/* replace the unicode encode error with backslash escapes (\N, \x, \u and \U) */
PyAPI_FUNC(PyObject *) PyCodec_NameReplaceErrors(PyObject *exc);
#endif

#ifndef Py_LIMITED_API
PyAPI_DATA(const char *) Py_hexdigits;
#endif

#ifdef __cplusplus
}
#endif
#endif /* !Py_CODECREGISTRY_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/compile.h
================================================
#ifndef Py_COMPILE_H
#define Py_COMPILE_H

#ifndef Py_LIMITED_API
#include "code.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Public interface */
struct _node; /* Declare the existence of this type */
PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *);
/* XXX (ncoghlan): Unprefixed type name in a public API! */

#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \
                   CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \
                   CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | \
                   CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)
#define PyCF_MASK_OBSOLETE (CO_NESTED)
#define PyCF_SOURCE_IS_UTF8  0x0100
#define PyCF_DONT_IMPLY_DEDENT 0x0200
#define PyCF_ONLY_AST 0x0400
#define PyCF_IGNORE_COOKIE 0x0800
#define PyCF_TYPE_COMMENTS 0x1000
#define PyCF_ALLOW_TOP_LEVEL_AWAIT 0x2000

#ifndef Py_LIMITED_API
typedef struct {
    int cf_flags;  /* bitmask of CO_xxx flags relevant to future */
    int cf_feature_version;  /* minor Python version (PyCF_ONLY_AST) */
} PyCompilerFlags;

#define _PyCompilerFlags_INIT \
    (PyCompilerFlags){.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION}
#endif

/* Future feature support */

typedef struct {
    int ff_features;      /* flags set by future statements */
    int ff_lineno;        /* line number of last future statement */
} PyFutureFeatures;

#define FUTURE_NESTED_SCOPES "nested_scopes"
#define FUTURE_GENERATORS "generators"
#define FUTURE_DIVISION "division"
#define FUTURE_ABSOLUTE_IMPORT "absolute_import"
#define FUTURE_WITH_STATEMENT "with_statement"
#define FUTURE_PRINT_FUNCTION "print_function"
#define FUTURE_UNICODE_LITERALS "unicode_literals"
#define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL"
#define FUTURE_GENERATOR_STOP "generator_stop"
#define FUTURE_ANNOTATIONS "annotations"

struct _mod; /* Declare the existence of this type */
#define PyAST_Compile(mod, s, f, ar) PyAST_CompileEx(mod, s, f, -1, ar)
PyAPI_FUNC(PyCodeObject *) PyAST_CompileEx(
    struct _mod *mod,
    const char *filename,       /* decoded from the filesystem encoding */
    PyCompilerFlags *flags,
    int optimize,
    PyArena *arena);
PyAPI_FUNC(PyCodeObject *) PyAST_CompileObject(
    struct _mod *mod,
    PyObject *filename,
    PyCompilerFlags *flags,
    int optimize,
    PyArena *arena);
PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(
    struct _mod * mod,
    const char *filename        /* decoded from the filesystem encoding */
    );
PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromASTObject(
    struct _mod * mod,
    PyObject *filename
    );

/* _Py_Mangle is defined in compile.c */
PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name);

#define PY_INVALID_STACK_EFFECT INT_MAX
PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg);
PyAPI_FUNC(int) PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump);

PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize);

#ifdef __cplusplus
}
#endif

#endif /* !Py_LIMITED_API */

/* These definitions must match corresponding definitions in graminit.h. */
#define Py_single_input 256
#define Py_file_input 257
#define Py_eval_input 258
#define Py_func_type_input 345

#endif /* !Py_COMPILE_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/complexobject.h
================================================
/* Complex number structure */

#ifndef Py_COMPLEXOBJECT_H
#define Py_COMPLEXOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif

#ifndef Py_LIMITED_API
typedef struct {
    double real;
    double imag;
} Py_complex;

/* Operations on complex numbers from complexmodule.c */

PyAPI_FUNC(Py_complex) _Py_c_sum(Py_complex, Py_complex);
PyAPI_FUNC(Py_complex) _Py_c_diff(Py_complex, Py_complex);
PyAPI_FUNC(Py_complex) _Py_c_neg(Py_complex);
PyAPI_FUNC(Py_complex) _Py_c_prod(Py_complex, Py_complex);
PyAPI_FUNC(Py_complex) _Py_c_quot(Py_complex, Py_complex);
PyAPI_FUNC(Py_complex) _Py_c_pow(Py_complex, Py_complex);
PyAPI_FUNC(double) _Py_c_abs(Py_complex);
#endif

/* Complex object interface */

/*
PyComplexObject represents a complex number with double-precision
real and imaginary parts.
*/
#ifndef Py_LIMITED_API
typedef struct {
    PyObject_HEAD
    Py_complex cval;
} PyComplexObject;
#endif

PyAPI_DATA(PyTypeObject) PyComplex_Type;

#define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type)
#define PyComplex_CheckExact(op) (Py_TYPE(op) == &PyComplex_Type)

#ifndef Py_LIMITED_API
PyAPI_FUNC(PyObject *) PyComplex_FromCComplex(Py_complex);
#endif
PyAPI_FUNC(PyObject *) PyComplex_FromDoubles(double real, double imag);

PyAPI_FUNC(double) PyComplex_RealAsDouble(PyObject *op);
PyAPI_FUNC(double) PyComplex_ImagAsDouble(PyObject *op);
#ifndef Py_LIMITED_API
PyAPI_FUNC(Py_complex) PyComplex_AsCComplex(PyObject *op);
#endif

/* Format the object based on the format_spec, as defined in PEP 3101
   (Advanced String Formatting). */
#ifndef Py_LIMITED_API
PyAPI_FUNC(int) _PyComplex_FormatAdvancedWriter(
    _PyUnicodeWriter *writer,
    PyObject *obj,
    PyObject *format_spec,
    Py_ssize_t start,
    Py_ssize_t end);
#endif

#ifdef __cplusplus
}
#endif
#endif /* !Py_COMPLEXOBJECT_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/context.h
================================================
#ifndef Py_CONTEXT_H
#define Py_CONTEXT_H
#ifdef __cplusplus
extern "C" {
#endif

#ifndef Py_LIMITED_API


PyAPI_DATA(PyTypeObject) PyContext_Type;
typedef struct _pycontextobject PyContext;

PyAPI_DATA(PyTypeObject) PyContextVar_Type;
typedef struct _pycontextvarobject PyContextVar;

PyAPI_DATA(PyTypeObject) PyContextToken_Type;
typedef struct _pycontexttokenobject PyContextToken;


#define PyContext_CheckExact(o) (Py_TYPE(o) == &PyContext_Type)
#define PyContextVar_CheckExact(o) (Py_TYPE(o) == &PyContextVar_Type)
#define PyContextToken_CheckExact(o) (Py_TYPE(o) == &PyContextToken_Type)


PyAPI_FUNC(PyObject *) PyContext_New(void);
PyAPI_FUNC(PyObject *) PyContext_Copy(PyObject *);
PyAPI_FUNC(PyObject *) PyContext_CopyCurrent(void);

PyAPI_FUNC(int) PyContext_Enter(PyObject *);
PyAPI_FUNC(int) PyContext_Exit(PyObject *);


/* Create a new context variable.

   default_value can be NULL.
*/
PyAPI_FUNC(PyObject *) PyContextVar_New(
    const char *name, PyObject *default_value);


/* Get a value for the variable.

   Returns -1 if an error occurred during lookup.

   Returns 0 if value either was or was not found.

   If value was found, *value will point to it.
   If not, it will point to:

   - default_value, if not NULL;
   - the default value of "var", if not NULL;
   - NULL.

   '*value' will be a new ref, if not NULL.
*/
PyAPI_FUNC(int) PyContextVar_Get(
    PyObject *var, PyObject *default_value, PyObject **value);


/* Set a new value for the variable.
   Returns NULL if an error occurs.
*/
PyAPI_FUNC(PyObject *) PyContextVar_Set(PyObject *var, PyObject *value);


/* Reset a variable to its previous value.
   Returns 0 on success, -1 on error.
*/
PyAPI_FUNC(int) PyContextVar_Reset(PyObject *var, PyObject *token);


/* This method is exposed only for CPython tests. Don not use it. */
PyAPI_FUNC(PyObject *) _PyContext_NewHamtForTests(void);


PyAPI_FUNC(int) PyContext_ClearFreeList(void);


#endif /* !Py_LIMITED_API */

#ifdef __cplusplus
}
#endif
#endif /* !Py_CONTEXT_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/abstract.h
================================================
#ifndef Py_CPYTHON_ABSTRACTOBJECT_H
#  error "this header file must not be included directly"
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* === Object Protocol ================================================== */

#ifdef PY_SSIZE_T_CLEAN
#  define _PyObject_CallMethodId _PyObject_CallMethodId_SizeT
#endif

/* Convert keyword arguments from the FASTCALL (stack: C array, kwnames: tuple)
   format to a Python dictionary ("kwargs" dict).

   The type of kwnames keys is not checked. The final function getting
   arguments is responsible to check if all keys are strings, for example using
   PyArg_ParseTupleAndKeywords() or PyArg_ValidateKeywordArguments().

   Duplicate keys are merged using the last value. If duplicate keys must raise
   an exception, the caller is responsible to implement an explicit keys on
   kwnames. */
PyAPI_FUNC(PyObject *) _PyStack_AsDict(
    PyObject *const *values,
    PyObject *kwnames);

/* Convert (args, nargs, kwargs: dict) into a (stack, nargs, kwnames: tuple).

   Return 0 on success, raise an exception and return -1 on error.

   Write the new stack into *p_stack. If *p_stack is differen than args, it
   must be released by PyMem_Free().

   The stack uses borrowed references.

   The type of keyword keys is not checked, these checks should be done
   later (ex: _PyArg_ParseStackAndKeywords). */
PyAPI_FUNC(int) _PyStack_UnpackDict(
    PyObject *const *args,
    Py_ssize_t nargs,
    PyObject *kwargs,
    PyObject *const **p_stack,
    PyObject **p_kwnames);

/* Suggested size (number of positional arguments) for arrays of PyObject*
   allocated on a C stack to avoid allocating memory on the heap memory. Such
   array is used to pass positional arguments to call functions of the
   _PyObject_Vectorcall() family.

   The size is chosen to not abuse the C stack and so limit the risk of stack
   overflow. The size is also chosen to allow using the small stack for most
   function calls of the Python standard library. On 64-bit CPU, it allocates
   40 bytes on the stack. */
#define _PY_FASTCALL_SMALL_STACK 5

PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *callable,
                                               PyObject *result,
                                               const char *where);

/* === Vectorcall protocol (PEP 590) ============================= */

/* Call callable using tp_call. Arguments are like _PyObject_Vectorcall()
   or _PyObject_FastCallDict() (both forms are supported),
   except that nargs is plainly the number of arguments without flags. */
PyAPI_FUNC(PyObject *) _PyObject_MakeTpCall(
    PyObject *callable,
    PyObject *const *args, Py_ssize_t nargs,
    PyObject *keywords);

#define PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1))

static inline Py_ssize_t
PyVectorcall_NARGS(size_t n)
{
    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
}

static inline vectorcallfunc
_PyVectorcall_Function(PyObject *callable)
{
    PyTypeObject *tp = Py_TYPE(callable);
    Py_ssize_t offset = tp->tp_vectorcall_offset;
    vectorcallfunc *ptr;
    if (!PyType_HasFeature(tp, _Py_TPFLAGS_HAVE_VECTORCALL)) {
        return NULL;
    }
    assert(PyCallable_Check(callable));
    assert(offset > 0);
    ptr = (vectorcallfunc*)(((char *)callable) + offset);
    return *ptr;
}

/* Call the callable object 'callable' with the "vectorcall" calling
   convention.

   args is a C array for positional arguments.

   nargsf is the number of positional arguments plus optionally the flag
   PY_VECTORCALL_ARGUMENTS_OFFSET which means that the caller is allowed to
   modify args[-1].

   kwnames is a tuple of keyword names. The values of the keyword arguments
   are stored in "args" after the positional arguments (note that the number
   of keyword arguments does not change nargsf). kwnames can also be NULL if
   there are no keyword arguments.

   keywords must only contains str strings (no subclass), and all keys must
   be unique.

   Return the result on success. Raise an exception and return NULL on
   error. */
static inline PyObject *
_PyObject_Vectorcall(PyObject *callable, PyObject *const *args,
                     size_t nargsf, PyObject *kwnames)
{
    PyObject *res;
    vectorcallfunc func;
    assert(kwnames == NULL || PyTuple_Check(kwnames));
    assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
    func = _PyVectorcall_Function(callable);
    if (func == NULL) {
        Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
        return _PyObject_MakeTpCall(callable, args, nargs, kwnames);
    }
    res = func(callable, args, nargsf, kwnames);
    return _Py_CheckFunctionResult(callable, res, NULL);
}

/* Same as _PyObject_Vectorcall except that keyword arguments are passed as
   dict, which may be NULL if there are no keyword arguments. */
PyAPI_FUNC(PyObject *) _PyObject_FastCallDict(
    PyObject *callable,
    PyObject *const *args,
    size_t nargsf,
    PyObject *kwargs);

/* Call "callable" (which must support vectorcall) with positional arguments
   "tuple" and keyword arguments "dict". "dict" may also be NULL */
PyAPI_FUNC(PyObject *) PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *dict);

/* Same as _PyObject_Vectorcall except without keyword arguments */
static inline PyObject *
_PyObject_FastCall(PyObject *func, PyObject *const *args, Py_ssize_t nargs)
{
    return _PyObject_Vectorcall(func, args, (size_t)nargs, NULL);
}

/* Call a callable without any arguments */
static inline PyObject *
_PyObject_CallNoArg(PyObject *func) {
    return _PyObject_Vectorcall(func, NULL, 0, NULL);
}

PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend(
    PyObject *callable,
    PyObject *obj,
    PyObject *args,
    PyObject *kwargs);

PyAPI_FUNC(PyObject *) _PyObject_FastCall_Prepend(
    PyObject *callable,
    PyObject *obj,
    PyObject *const *args,
    Py_ssize_t nargs);

/* Like PyObject_CallMethod(), but expect a _Py_Identifier*
   as the method name. */
PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *obj,
                                              _Py_Identifier *name,
                                              const char *format, ...);

PyAPI_FUNC(PyObject *) _PyObject_CallMethodId_SizeT(PyObject *obj,
                                                    _Py_Identifier *name,
                                                    const char *format,
                                                    ...);

PyAPI_FUNC(PyObject *) _PyObject_CallMethodIdObjArgs(
    PyObject *obj,
    struct _Py_Identifier *name,
    ...);

PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o);

/* Guess the size of object 'o' using len(o) or o.__length_hint__().
   If neither of those return a non-negative value, then return the default
   value.  If one of the calls fails, this function returns -1. */
PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t);

/* === New Buffer API ============================================ */

/* Return 1 if the getbuffer function is available, otherwise return 0. */
#define PyObject_CheckBuffer(obj) \
    (((obj)->ob_type->tp_as_buffer != NULL) &&  \
     ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL))

/* This is a C-API version of the getbuffer function call.  It checks
   to make sure object has the required function pointer and issues the
   call.

   Returns -1 and raises an error on failure and returns 0 on success. */
PyAPI_FUNC(int) PyObject_GetBuffer(PyObject *obj, Py_buffer *view,
                                   int flags);

/* Get the memory area pointed to by the indices for the buffer given.
   Note that view->ndim is the assumed size of indices. */
PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices);

/* Return the implied itemsize of the data-format area from a
   struct-style description. */
PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *);

/* Implementation in memoryobject.c */
PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view,
                                      Py_ssize_t len, char order);

PyAPI_FUNC(int) PyBuffer_FromContiguous(Py_buffer *view, void *buf,
                                        Py_ssize_t len, char order);

/* Copy len bytes of data from the contiguous chunk of memory
   pointed to by buf into the buffer exported by obj.  Return
   0 on success and return -1 and raise a PyBuffer_Error on
   error (i.e. the object does not have a buffer interface or
   it is not working).

   If fort is 'F', then if the object is multi-dimensional,
   then the data will be copied into the array in
   Fortran-style (first dimension varies the fastest).  If
   fort is 'C', then the data will be copied into the array
   in C-style (last dimension varies the fastest).  If fort
   is 'A', then it does not matter and the copy will be made
   in whatever way is more efficient. */
PyAPI_FUNC(int) PyObject_CopyData(PyObject *dest, PyObject *src);

/* Copy the data from the src buffer to the buffer of destination. */
PyAPI_FUNC(int) PyBuffer_IsContiguous(const Py_buffer *view, char fort);

/*Fill the strides array with byte-strides of a contiguous
  (Fortran-style if fort is 'F' or C-style otherwise)
  array of the given shape with the given number of bytes
  per element. */
PyAPI_FUNC(void) PyBuffer_FillContiguousStrides(int ndims,
                                               Py_ssize_t *shape,
                                               Py_ssize_t *strides,
                                               int itemsize,
                                               char fort);

/* Fills in a buffer-info structure correctly for an exporter
   that can only share a contiguous chunk of memory of
   "unsigned bytes" of the given length.

   Returns 0 on success and -1 (with raising an error) on error. */
PyAPI_FUNC(int) PyBuffer_FillInfo(Py_buffer *view, PyObject *o, void *buf,
                                  Py_ssize_t len, int readonly,
                                  int flags);

/* Releases a Py_buffer obtained from getbuffer ParseTuple's "s*". */
PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view);

/* ==== Iterators ================================================ */

#define PyIter_Check(obj) \
    ((obj)->ob_type->tp_iternext != NULL && \
     (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented)

/* === Number Protocol ================================================== */

#define PyIndex_Check(obj)                              \
    ((obj)->ob_type->tp_as_number != NULL &&            \
     (obj)->ob_type->tp_as_number->nb_index != NULL)

/* === Sequence protocol ================================================ */

/* Assume tp_as_sequence and sq_item exist and that 'i' does not
   need to be corrected for a negative index. */
#define PySequence_ITEM(o, i)\
    ( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) )

#define PY_ITERSEARCH_COUNT    1
#define PY_ITERSEARCH_INDEX    2
#define PY_ITERSEARCH_CONTAINS 3

/* Iterate over seq.

   Result depends on the operation:

   PY_ITERSEARCH_COUNT:  return # of times obj appears in seq; -1 if
     error.
   PY_ITERSEARCH_INDEX:  return 0-based index of first occurrence of
     obj in seq; set ValueError and return -1 if none found;
     also return -1 on error.
   PY_ITERSEARCH_CONTAINS:  return 1 if obj in seq, else 0; -1 on
     error. */
PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq,
                                              PyObject *obj, int operation);

/* === Mapping protocol ================================================= */

PyAPI_FUNC(int) _PyObject_RealIsInstance(PyObject *inst, PyObject *cls);

PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls);

PyAPI_FUNC(char *const *) _PySequence_BytesToCharpArray(PyObject* self);

PyAPI_FUNC(void) _Py_FreeCharPArray(char *const array[]);

/* For internal use by buffer API functions */
PyAPI_FUNC(void) _Py_add_one_to_index_F(int nd, Py_ssize_t *index,
                                        const Py_ssize_t *shape);
PyAPI_FUNC(void) _Py_add_one_to_index_C(int nd, Py_ssize_t *index,
                                        const Py_ssize_t *shape);

/* Convert Python int to Py_ssize_t. Do nothing if the argument is None. */
PyAPI_FUNC(int) _Py_convert_optional_to_ssize_t(PyObject *, void *);

#ifdef __cplusplus
}
#endif


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/dictobject.h
================================================
#ifndef Py_CPYTHON_DICTOBJECT_H
#  error "this header file must not be included directly"
#endif

#ifdef __cplusplus
extern "C" {
#endif

typedef struct _dictkeysobject PyDictKeysObject;

/* The ma_values pointer is NULL for a combined table
 * or points to an array of PyObject* for a split table
 */
typedef struct {
    PyObject_HEAD

    /* Number of items in the dictionary */
    Py_ssize_t ma_used;

    /* Dictionary version: globally unique, value change each time
       the dictionary is modified */
    uint64_t ma_version_tag;

    PyDictKeysObject *ma_keys;

    /* If ma_values is NULL, the table is "combined": keys and values
       are stored in ma_keys.

       If ma_values is not NULL, the table is splitted:
       keys are stored in ma_keys and values are stored in ma_values */
    PyObject **ma_values;
} PyDictObject;

PyAPI_FUNC(PyObject *) _PyDict_GetItem_KnownHash(PyObject *mp, PyObject *key,
                                       Py_hash_t hash);
PyAPI_FUNC(PyObject *) _PyDict_GetItemIdWithError(PyObject *dp,
                                                  struct _Py_Identifier *key);
PyAPI_FUNC(PyObject *) _PyDict_GetItemStringWithError(PyObject *, const char *);
PyAPI_FUNC(PyObject *) PyDict_SetDefault(
    PyObject *mp, PyObject *key, PyObject *defaultobj);
PyAPI_FUNC(int) _PyDict_SetItem_KnownHash(PyObject *mp, PyObject *key,
                                          PyObject *item, Py_hash_t hash);
PyAPI_FUNC(int) _PyDict_DelItem_KnownHash(PyObject *mp, PyObject *key,
                                          Py_hash_t hash);
PyAPI_FUNC(int) _PyDict_DelItemIf(PyObject *mp, PyObject *key,
                                  int (*predicate)(PyObject *value));
PyDictKeysObject *_PyDict_NewKeysForClass(void);
PyAPI_FUNC(PyObject *) PyObject_GenericGetDict(PyObject *, void *);
PyAPI_FUNC(int) _PyDict_Next(
    PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value, Py_hash_t *hash);

/* Get the number of items of a dictionary. */
#define PyDict_GET_SIZE(mp)  (assert(PyDict_Check(mp)),((PyDictObject *)mp)->ma_used)
PyAPI_FUNC(int) _PyDict_Contains(PyObject *mp, PyObject *key, Py_hash_t hash);
PyAPI_FUNC(PyObject *) _PyDict_NewPresized(Py_ssize_t minused);
PyAPI_FUNC(void) _PyDict_MaybeUntrack(PyObject *mp);
PyAPI_FUNC(int) _PyDict_HasOnlyStringKeys(PyObject *mp);
Py_ssize_t _PyDict_KeysSize(PyDictKeysObject *keys);
PyAPI_FUNC(Py_ssize_t) _PyDict_SizeOf(PyDictObject *);
PyAPI_FUNC(PyObject *) _PyDict_Pop(PyObject *, PyObject *, PyObject *);
PyObject *_PyDict_Pop_KnownHash(PyObject *, PyObject *, Py_hash_t, PyObject *);
PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *);
#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)

PyAPI_FUNC(int) PyDict_ClearFreeList(void);

/* Like PyDict_Merge, but override can be 0, 1 or 2.  If override is 0,
   the first occurrence of a key wins, if override is 1, the last occurrence
   of a key wins, if override is 2, a KeyError with conflicting key as
   argument is raised.
*/
PyAPI_FUNC(int) _PyDict_MergeEx(PyObject *mp, PyObject *other, int override);
PyAPI_FUNC(PyObject *) _PyDict_GetItemId(PyObject *dp, struct _Py_Identifier *key);
PyAPI_FUNC(int) _PyDict_SetItemId(PyObject *dp, struct _Py_Identifier *key, PyObject *item);

PyAPI_FUNC(int) _PyDict_DelItemId(PyObject *mp, struct _Py_Identifier *key);
PyAPI_FUNC(void) _PyDict_DebugMallocStats(FILE *out);

int _PyObjectDict_SetItem(PyTypeObject *tp, PyObject **dictptr, PyObject *name, PyObject *value);
PyObject *_PyDict_LoadGlobal(PyDictObject *, PyDictObject *, PyObject *);

/* _PyDictView */

typedef struct {
    PyObject_HEAD
    PyDictObject *dv_dict;
} _PyDictViewObject;

PyAPI_FUNC(PyObject *) _PyDictView_New(PyObject *, PyTypeObject *);
PyAPI_FUNC(PyObject *) _PyDictView_Intersect(PyObject* self, PyObject *other);

#ifdef __cplusplus
}
#endif


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/fileobject.h
================================================
#ifndef Py_CPYTHON_FILEOBJECT_H
#  error "this header file must not be included directly"
#endif

#ifdef __cplusplus
extern "C" {
#endif

PyAPI_FUNC(char *) Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *);

#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors;
#endif

#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
PyAPI_DATA(int) Py_UTF8Mode;
#endif

/* The std printer acts as a preliminary sys.stderr until the new io
   infrastructure is in place. */
PyAPI_FUNC(PyObject *) PyFile_NewStdPrinter(int);
PyAPI_DATA(PyTypeObject) PyStdPrinter_Type;

typedef PyObject * (*Py_OpenCodeHookFunction)(PyObject *, void *);

PyAPI_FUNC(PyObject *) PyFile_OpenCode(const char *utf8path);
PyAPI_FUNC(PyObject *) PyFile_OpenCodeObject(PyObject *path);
PyAPI_FUNC(int) PyFile_SetOpenCodeHook(Py_OpenCodeHookFunction hook, void *userData);

#ifdef __cplusplus
}
#endif


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/initconfig.h
================================================
#ifndef Py_PYCORECONFIG_H
#define Py_PYCORECONFIG_H
#ifndef Py_LIMITED_API
#ifdef __cplusplus
extern "C" {
#endif

/* --- PyStatus ----------------------------------------------- */

typedef struct {
    enum {
        _PyStatus_TYPE_OK=0,
        _PyStatus_TYPE_ERROR=1,
        _PyStatus_TYPE_EXIT=2
    } _type;
    const char *func;
    const char *err_msg;
    int exitcode;
} PyStatus;

PyAPI_FUNC(PyStatus) PyStatus_Ok(void);
PyAPI_FUNC(PyStatus) PyStatus_Error(const char *err_msg);
PyAPI_FUNC(PyStatus) PyStatus_NoMemory(void);
PyAPI_FUNC(PyStatus) PyStatus_Exit(int exitcode);
PyAPI_FUNC(int) PyStatus_IsError(PyStatus err);
PyAPI_FUNC(int) PyStatus_IsExit(PyStatus err);
PyAPI_FUNC(int) PyStatus_Exception(PyStatus err);

/* --- PyWideStringList ------------------------------------------------ */

typedef struct {
    /* If length is greater than zero, items must be non-NULL
       and all items strings must be non-NULL */
    Py_ssize_t length;
    wchar_t **items;
} PyWideStringList;

PyAPI_FUNC(PyStatus) PyWideStringList_Append(PyWideStringList *list,
    const wchar_t *item);
PyAPI_FUNC(PyStatus) PyWideStringList_Insert(PyWideStringList *list,
    Py_ssize_t index,
    const wchar_t *item);


/* --- PyPreConfig ----------------------------------------------- */

typedef struct {
    int _config_init;     /* _PyConfigInitEnum value */

    /* Parse Py_PreInitializeFromBytesArgs() arguments?
       See PyConfig.parse_argv */
    int parse_argv;

    /* If greater than 0, enable isolated mode: sys.path contains
       neither the script's directory nor the user's site-packages directory.

       Set to 1 by the -I command line option. If set to -1 (default), inherit
       Py_IsolatedFlag value. */
    int isolated;

    /* If greater than 0: use environment variables.
       Set to 0 by -E command line option. If set to -1 (default), it is
       set to !Py_IgnoreEnvironmentFlag. */
    int use_environment;

    /* Set the LC_CTYPE locale to the user preferred locale? If equals to 0,
       set coerce_c_locale and coerce_c_locale_warn to 0. */
    int configure_locale;

    /* Coerce the LC_CTYPE locale if it's equal to "C"? (PEP 538)

       Set to 0 by PYTHONCOERCECLOCALE=0. Set to 1 by PYTHONCOERCECLOCALE=1.
       Set to 2 if the user preferred LC_CTYPE locale is "C".

       If it is equal to 1, LC_CTYPE locale is read to decide if it should be
       coerced or not (ex: PYTHONCOERCECLOCALE=1). Internally, it is set to 2
       if the LC_CTYPE locale must be coerced.

       Disable by default (set to 0). Set it to -1 to let Python decide if it
       should be enabled or not. */
    int coerce_c_locale;

    /* Emit a warning if the LC_CTYPE locale is coerced?

       Set to 1 by PYTHONCOERCECLOCALE=warn.

       Disable by default (set to 0). Set it to -1 to let Python decide if it
       should be enabled or not. */
    int coerce_c_locale_warn;

#ifdef MS_WINDOWS
    /* If greater than 1, use the "mbcs" encoding instead of the UTF-8
       encoding for the filesystem encoding.

       Set to 1 if the PYTHONLEGACYWINDOWSFSENCODING environment variable is
       set to a non-empty string. If set to -1 (default), inherit
       Py_LegacyWindowsFSEncodingFlag value.

       See PEP 529 for more details. */
    int legacy_windows_fs_encoding;
#endif

    /* Enable UTF-8 mode? (PEP 540)

       Disabled by default (equals to 0).

       Set to 1 by "-X utf8" and "-X utf8=1" command line options.
       Set to 1 by PYTHONUTF8=1 environment variable.

       Set to 0 by "-X utf8=0" and PYTHONUTF8=0.

       If equals to -1, it is set to 1 if the LC_CTYPE locale is "C" or
       "POSIX", otherwise it is set to 0. Inherit Py_UTF8Mode value value. */
    int utf8_mode;

    int dev_mode;           /* Development mode. PYTHONDEVMODE, -X dev */

    /* Memory allocator: PYTHONMALLOC env var.
       See PyMemAllocatorName for valid values. */
    int allocator;
} PyPreConfig;

PyAPI_FUNC(void) PyPreConfig_InitPythonConfig(PyPreConfig *config);
PyAPI_FUNC(void) PyPreConfig_InitIsolatedConfig(PyPreConfig *config);


/* --- PyConfig ---------------------------------------------- */

typedef struct {
    int _config_init;     /* _PyConfigInitEnum value */

    int isolated;         /* Isolated mode? see PyPreConfig.isolated */
    int use_environment;  /* Use environment variables? see PyPreConfig.use_environment */
    int dev_mode;         /* Development mode? See PyPreConfig.dev_mode */

    /* Install signal handlers? Yes by default. */
    int install_signal_handlers;

    int use_hash_seed;      /* PYTHONHASHSEED=x */
    unsigned long hash_seed;

    /* Enable faulthandler?
       Set to 1 by -X faulthandler and PYTHONFAULTHANDLER. -1 means unset. */
    int faulthandler;

    /* Enable tracemalloc?
       Set by -X tracemalloc=N and PYTHONTRACEMALLOC. -1 means unset */
    int tracemalloc;

    int import_time;        /* PYTHONPROFILEIMPORTTIME, -X importtime */
    int show_ref_count;     /* -X showrefcount */
    int show_alloc_count;   /* -X showalloccount */
    int dump_refs;          /* PYTHONDUMPREFS */
    int malloc_stats;       /* PYTHONMALLOCSTATS */

    /* Python filesystem encoding and error handler:
       sys.getfilesystemencoding() and sys.getfilesystemencodeerrors().

       Default encoding and error handler:

       * if Py_SetStandardStreamEncoding() has been called: they have the
         highest priority;
       * PYTHONIOENCODING environment variable;
       * The UTF-8 Mode uses UTF-8/surrogateescape;
       * If Python forces the usage of the ASCII encoding (ex: C locale
         or POSIX locale on FreeBSD or HP-UX), use ASCII/surrogateescape;
       * locale encoding: ANSI code page on Windows, UTF-8 on Android and
         VxWorks, LC_CTYPE locale encoding on other platforms;
       * On Windows, "surrogateescape" error handler;
       * "surrogateescape" error handler if the LC_CTYPE locale is "C" or "POSIX";
       * "surrogateescape" error handler if the LC_CTYPE locale has been coerced
         (PEP 538);
       * "strict" error handler.

       Supported error handlers: "strict", "surrogateescape" and
       "surrogatepass". The surrogatepass error handler is only supported
       if Py_DecodeLocale() and Py_EncodeLocale() use directly the UTF-8 codec;
       it's only used on Windows.

       initfsencoding() updates the encoding to the Python codec name.
       For example, "ANSI_X3.4-1968" is replaced with "ascii".

       On Windows, sys._enablelegacywindowsfsencoding() sets the
       encoding/errors to mbcs/replace at runtime.


       See Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors.
       */
    wchar_t *filesystem_encoding;
    wchar_t *filesystem_errors;

    wchar_t *pycache_prefix;  /* PYTHONPYCACHEPREFIX, -X pycache_prefix=PATH */
    int parse_argv;           /* Parse argv command line arguments? */

    /* Command line arguments (sys.argv).

       Set parse_argv to 1 to parse argv as Python command line arguments
       and then strip Python arguments from argv.

       If argv is empty, an empty string is added to ensure that sys.argv
       always exists and is never empty. */
    PyWideStringList argv;

    /* Program name:

       - If Py_SetProgramName() was called, use its value.
       - On macOS, use PYTHONEXECUTABLE environment variable if set.
       - If WITH_NEXT_FRAMEWORK macro is defined, use __PYVENV_LAUNCHER__
         environment variable is set.
       - Use argv[0] if available and non-empty.
       - Use "python" on Windows, or "python3 on other platforms. */
    wchar_t *program_name;

    PyWideStringList xoptions;     /* Command line -X options */

    /* Warnings options: lowest to highest priority. warnings.filters
       is built in the reverse order (highest to lowest priority). */
    PyWideStringList warnoptions;

    /* If equal to zero, disable the import of the module site and the
       site-dependent manipulations of sys.path that it entails. Also disable
       these manipulations if site is explicitly imported later (call
       site.main() if you want them to be triggered).

       Set to 0 by the -S command line option. If set to -1 (default), it is
       set to !Py_NoSiteFlag. */
    int site_import;

    /* Bytes warnings:

       * If equal to 1, issue a warning when comparing bytes or bytearray with
         str or bytes with int.
       * If equal or greater to 2, issue an error.

       Incremented by the -b command line option. If set to -1 (default), inherit
       Py_BytesWarningFlag value. */
    int bytes_warning;

    /* If greater than 0, enable inspect: when a script is passed as first
       argument or the -c option is used, enter interactive mode after
       executing the script or the command, even when sys.stdin does not appear
       to be a terminal.

       Incremented by the -i command line option. Set to 1 if the PYTHONINSPECT
       environment variable is non-empty. If set to -1 (default), inherit
       Py_InspectFlag value. */
    int inspect;

    /* If greater than 0: enable the interactive mode (REPL).

       Incremented by the -i command line option. If set to -1 (default),
       inherit Py_InteractiveFlag value. */
    int interactive;

    /* Optimization level.

       Incremented by the -O command line option. Set by the PYTHONOPTIMIZE
       environment variable. If set to -1 (default), inherit Py_OptimizeFlag
       value. */
    int optimization_level;

    /* If greater than 0, enable the debug mode: turn on parser debugging
       output (for expert only, depending on compilation options).

       Incremented by the -d command line option. Set by the PYTHONDEBUG
       environment variable. If set to -1 (default), inherit Py_DebugFlag
       value. */
    int parser_debug;

    /* If equal to 0, Python won't try to write ``.pyc`` files on the
       import of source modules.

       Set to 0 by the -B command line option and the PYTHONDONTWRITEBYTECODE
       environment variable. If set to -1 (default), it is set to
       !Py_DontWriteBytecodeFlag. */
    int write_bytecode;

    /* If greater than 0, enable the verbose mode: print a message each time a
       module is initialized, showing the place (filename or built-in module)
       from which it is loaded.

       If greater or equal to 2, print a message for each file that is checked
       for when searching for a module. Also provides information on module
       cleanup at exit.

       Incremented by the -v option. Set by the PYTHONVERBOSE environment
       variable. If set to -1 (default), inherit Py_VerboseFlag value. */
    int verbose;

    /* If greater than 0, enable the quiet mode: Don't display the copyright
       and version messages even in interactive mode.

       Incremented by the -q option. If set to -1 (default), inherit
       Py_QuietFlag value. */
    int quiet;

   /* If greater than 0, don't add the user site-packages directory to
      sys.path.

      Set to 0 by the -s and -I command line options , and the PYTHONNOUSERSITE
      environment variable. If set to -1 (default), it is set to
      !Py_NoUserSiteDirectory. */
    int user_site_directory;

    /* If non-zero, configure C standard steams (stdio, stdout,
       stderr):

       - Set O_BINARY mode on Windows.
       - If buffered_stdio is equal to zero, make streams unbuffered.
         Otherwise, enable streams buffering if interactive is non-zero. */
    int configure_c_stdio;

    /* If equal to 0, enable unbuffered mode: force the stdout and stderr
       streams to be unbuffered.

       Set to 0 by the -u option. Set by the PYTHONUNBUFFERED environment
       variable.
       If set to -1 (default), it is set to !Py_UnbufferedStdioFlag. */
    int buffered_stdio;

    /* Encoding of sys.stdin, sys.stdout and sys.stderr.
       Value set from PYTHONIOENCODING environment variable and
       Py_SetStandardStreamEncoding() function.
       See also 'stdio_errors' attribute. */
    wchar_t *stdio_encoding;

    /* Error handler of sys.stdin and sys.stdout.
       Value set from PYTHONIOENCODING environment variable and
       Py_SetStandardStreamEncoding() function.
       See also 'stdio_encoding' attribute. */
    wchar_t *stdio_errors;

#ifdef MS_WINDOWS
    /* If greater than zero, use io.FileIO instead of WindowsConsoleIO for sys
       standard streams.

       Set to 1 if the PYTHONLEGACYWINDOWSSTDIO environment variable is set to
       a non-empty string. If set to -1 (default), inherit
       Py_LegacyWindowsStdioFlag value.

       See PEP 528 for more details. */
    int legacy_windows_stdio;
#endif

    /* Value of the --check-hash-based-pycs command line option:

       - "default" means the 'check_source' flag in hash-based pycs
         determines invalidation
       - "always" causes the interpreter to hash the source file for
         invalidation regardless of value of 'check_source' bit
       - "never" causes the interpreter to always assume hash-based pycs are
         valid

       The default value is "default".

       See PEP 552 "Deterministic pycs" for more details. */
    wchar_t *check_hash_pycs_mode;

    /* --- Path configuration inputs ------------ */

    /* If greater than 0, suppress _PyPathConfig_Calculate() warnings on Unix.
       The parameter has no effect on Windows.

       If set to -1 (default), inherit !Py_FrozenFlag value. */
    int pathconfig_warnings;

    wchar_t *pythonpath_env; /* PYTHONPATH environment variable */
    wchar_t *home;          /* PYTHONHOME environment variable,
                               see also Py_SetPythonHome(). */

    /* --- Path configuration outputs ----------- */

    int module_search_paths_set;  /* If non-zero, use module_search_paths */
    PyWideStringList module_search_paths;  /* sys.path paths. Computed if
                                       module_search_paths_set is equal
                                       to zero. */

    wchar_t *executable;        /* sys.executable */
    wchar_t *base_executable;   /* sys._base_executable */
    wchar_t *prefix;            /* sys.prefix */
    wchar_t *base_prefix;       /* sys.base_prefix */
    wchar_t *exec_prefix;       /* sys.exec_prefix */
    wchar_t *base_exec_prefix;  /* sys.base_exec_prefix */

    /* --- Parameter only used by Py_Main() ---------- */

    /* Skip the first line of the source ('run_filename' parameter), allowing use of non-Unix forms of
       "#!cmd".  This is intended for a DOS specific hack only.

       Set by the -x command line option. */
    int skip_source_first_line;

    wchar_t *run_command;   /* -c command line argument */
    wchar_t *run_module;    /* -m command line argument */
    wchar_t *run_filename;  /* Trailing command line argument without -c or -m */

    /* --- Private fields ---------------------------- */

    /* Install importlib? If set to 0, importlib is not initialized at all.
       Needed by freeze_importlib. */
    int _install_importlib;

    /* If equal to 0, stop Python initialization before the "main" phase */
    int _init_main;
} PyConfig;

PyAPI_FUNC(void) PyConfig_InitPythonConfig(PyConfig *config);
PyAPI_FUNC(void) PyConfig_InitIsolatedConfig(PyConfig *config);
PyAPI_FUNC(void) PyConfig_Clear(PyConfig *);
PyAPI_FUNC(PyStatus) PyConfig_SetString(
    PyConfig *config,
    wchar_t **config_str,
    const wchar_t *str);
PyAPI_FUNC(PyStatus) PyConfig_SetBytesString(
    PyConfig *config,
    wchar_t **config_str,
    const char *str);
PyAPI_FUNC(PyStatus) PyConfig_Read(PyConfig *config);
PyAPI_FUNC(PyStatus) PyConfig_SetBytesArgv(
    PyConfig *config,
    Py_ssize_t argc,
    char * const *argv);
PyAPI_FUNC(PyStatus) PyConfig_SetArgv(PyConfig *config,
    Py_ssize_t argc,
    wchar_t * const *argv);
PyAPI_FUNC(PyStatus) PyConfig_SetWideStringList(PyConfig *config,
    PyWideStringList *list,
    Py_ssize_t length, wchar_t **items);

#ifdef __cplusplus
}
#endif
#endif /* !Py_LIMITED_API */
#endif /* !Py_PYCORECONFIG_H */


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/interpreteridobject.h
================================================
#ifndef Py_CPYTHON_INTERPRETERIDOBJECT_H
#  error "this header file must not be included directly"
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* Interpreter ID Object */

PyAPI_DATA(PyTypeObject) _PyInterpreterID_Type;

PyAPI_FUNC(PyObject *) _PyInterpreterID_New(int64_t);
PyAPI_FUNC(PyObject *) _PyInterpreterState_GetIDObject(PyInterpreterState *);
PyAPI_FUNC(PyInterpreterState *) _PyInterpreterID_LookUp(PyObject *);

#ifdef __cplusplus
}
#endif


================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/object.h
================================================
#ifndef Py_CPYTHON_OBJECT_H
#  error "this header file must not be included directly"
#endif

#ifdef __cplusplus
extern "C" {
#endif

/********************* String Literals ****************************************/
/* This structure helps managing static strings. The basic usage goes like this:
   Instead of doing

       r = PyObject_CallMethod(o, "foo", "args", ...);

   do

       _Py_IDENTIFIER(foo);
       ...
       r = _PyObject_CallMethodId(o, &PyId_foo, "args", ...);

   PyId_foo is a static variable, either on block level or file level. On first
   usage, the string "foo" is interned, and the structures are linked. On interpreter
   shutdown, all strings are released (through _PyUnicode_ClearStaticStrings).

   Alternatively, _Py_static_string allows choosing the variable name.
   _PyUnicode_FromId returns a borrowed reference to the interned string.
   _PyObject_{Get,Set,Has}AttrId are __getattr__ versions using _Py_Identifier*.
*/
typedef struct _Py_Identifier {
    struct _Py_Identifier *next;
    const char* string;
    PyObject *object;
} _Py_Identifier;

#define _Py_static_string_init(value) { .next = NULL, .string = value, .object = NULL }
#define _Py_static_string(varname, value)  static _Py_Identifier varname = _Py_static_string_init(value)
#define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname)

/* buffer interface */
typedef struct bufferinfo {
    void *buf;
    PyObject *obj;        /* owned reference */
    Py_ssize_t len;
    Py_ssize_t itemsize;  /* This is Py_ssize_t so it can be
                             pointed to by strides in simple case.*/
    int readonly;
    int ndim;
    char *format;
    Py_ssize_t *shape;
    Py_ssize_t *strides;
    Py_ssize_t *suboffsets;
    void *internal;
} Py_buffer;

typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
typedef void (*releasebufferproc)(PyObject *, Py_buffer *);

typedef PyObject *(*vectorcallfunc)(PyObject *callable, PyObject *const *args,
                                    size_t nargsf, PyObject *kwnames);

/* Maximum number of dimensions */
#define PyBUF_MAX_NDIM 64

/* Flags for getting buffers */
#define PyBUF_SIMPLE 0
#define PyBUF_WRITABLE 0x0001
/*  we used to include an E, backwards compatible alias  */
#define PyBUF_WRITEABLE PyBUF_WRITABLE
#define PyBUF_FORMAT 0x0004
#define PyBUF_ND 0x0008
#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
#define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
#define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
#define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)

#define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE)
#define PyBUF_CONTIG_RO (PyBUF_ND)

#define PyBUF_STRIDED (PyBUF_STRIDES | PyBUF_WRITABLE)
#define PyBUF_STRIDED_RO (PyBUF_STRIDES)

#define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_WRITABLE | PyBUF_FORMAT)
#define PyBUF_RECORDS_RO (PyBUF_STRIDES | PyBUF_FORMAT)

#define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_WRITABLE | PyBUF_FORMAT)
#define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)


#define PyBUF_READ  0x100
#define PyBUF_WRITE 0x200
/* End buffer interface */


typedef struct {
    /* Number implementations must check *both*
       arguments for proper type and implement the necessary conversions
       in the slot functions themselves. */

    binaryfunc nb_add;
    binaryfunc nb_subtract;
    binaryfunc nb_multiply;
    binaryfunc nb_remainder;
    binaryfunc nb_divmod;
    ternaryfunc nb_power;
    unaryfunc nb_negative;
    unaryfunc nb_positive;
    unaryfunc nb_absolute;
    inquiry nb_bool;
    unaryfunc nb_invert;
    binaryfunc nb_lshift;
    binaryfunc nb_rshift;
    binaryfunc nb_and;
    binaryfunc nb_xor;
    binaryfunc nb_or;
    unaryfunc nb_int;
    void *nb_reserved;  /* the slot formerly known as nb_long */
    unaryfunc nb_float;

    binaryfunc nb_inplace_add;
    binaryfunc nb_inplace_subtract;
    binaryfunc nb_inplace_multiply;
    binaryfunc nb_inplace_remainder;
    ternaryfunc nb_inplace_power;
    binaryfunc nb_inplace_lshift;
    binaryfunc nb_inplace_rshift;
    binaryfunc nb_inplace_and;
    binaryfunc nb_inplace_xor;
    binaryfunc nb_inplace_or;

    binaryfunc nb_floor_divide;
    binaryfunc nb_true_divide;
    binaryfunc nb_inplace_floor_divide;
    binaryfunc nb_inplace_true_divide;

    unaryfunc nb_index;

    binaryfunc nb_matrix_multiply;
    binaryfunc nb_inplace_matrix_multiply;
} PyNumberMethods;

typedef struct {
    lenfunc sq_length;
    binaryfunc sq_concat;
    ssizeargfunc sq_repeat;
    ssizeargfunc sq_item;
    void *was_sq_slice;
    ssizeobjargproc sq_ass_item;
    void *was_sq_ass_slice;
    objobjproc sq_contains;

    binaryfunc sq_inplace_concat;
    ssizeargfunc sq_inplace_repeat;
} PySequenceMethods;

typedef struct {
    lenfunc mp_length;
    binaryfunc mp_subscript;
    objobjargproc mp_ass_subscript;
} PyMappingMethods;

typedef struct {
    unaryfunc am_await;
    unaryfunc am_aiter;
    unaryfunc am_anext;
} PyAsyncMethods;

typedef struct {
     getbufferproc bf_getbuffer;
     releasebufferproc bf_releasebuffer;
} PyBufferProcs;

/* Allow printfunc in the tp_vectorcall_offset slot for
 * backwards-compatibility */
typedef Py_ssize_t printfunc;

typedef struct _typeobject {
    PyObject_VAR_HEAD
    const char *tp_name; /* For printing, in format "<module>.<name>" */
    Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */

    /* Methods to implement standard operations */

    destructor tp_dealloc;
    Py_ssize_t tp_vectorcall_offset;
    getattrfunc tp_getattr;
    setattrfunc tp_setattr;
    PyAsyncMethods *tp_as_async; /* formerly known as tp_compare (Python 2)
                                    or tp_reserved (Python 3) */
    reprfunc tp_repr;

    /* Method suites for standard classes */

    PyNumberMethods *tp_as_number;
    PySequenceMethods *tp_as_sequence;
    PyMappingMethods *tp_as_mapping;

    /* More standard operations (here for binary compatibility) */

    hashfunc tp_hash;
    ternaryfunc tp_call;
    reprfunc tp_str;
    getattrofunc tp_getattro;
    setattrofunc tp_setattro;

    /* Functions to access object as input/output buffer */
    PyBufferProcs *tp_as_buffer;

    /* Flags to define presence of optional/expanded features */
    unsigned long tp_flags;

    const char *tp_doc; /* Documentation string */

    /* Assigned meaning in release 2.0 */
    /* call function for all accessible objects */
    traverseproc tp_traverse;

    /* delete references to contained objects */
    inquiry tp_clear;

    /* Assigned meaning in release 2.1 */
    /* rich comparisons */
    richcmpfunc tp_richcompare;

    /* weak reference enabler */
    Py_ssize_t tp_weaklistoffset;

    /* Iterators */
    getiterfunc tp_iter;
    iternextfunc tp_iternext;

    /* Attribute descriptor and subclassing stuff */
    struct PyMethodDef *tp_methods;
    struct PyMemberDef *tp_members;
    struct PyGetSetDef *tp_getset;
    struct _typeobject *tp_base;
    PyObject *tp_dict;
    descrgetfunc tp_descr_get;
    descrsetfunc tp_descr_set;
    Py_ssize_t tp_dictoffset;
    initproc tp_init;
    allocfunc tp_alloc;
    newfunc tp_new;
    freefunc tp_free; /* Low-level free-memory routine */
    inquiry tp_is_gc; /* For PyObject_IS_GC */
    PyObject *tp_bases;
    PyObject *tp_mro; /* method resolution order */
    PyObject *tp_cache;
    PyObject *tp_subclasses;
    PyObject *tp_weaklist;
    destructor tp_del;

    /* Type attribute cache version tag. Added in version 2.6 */
    unsigned int tp_version_tag;

    destructor tp_finalize;
    vectorcallfunc tp_vectorcall;

    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
    Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);

#ifdef COUNT_ALLOCS
    /* these must be last and never explicitly initialized */
    Py_ssize_t tp_allocs;
    Py_ssize_t tp_frees;
    Py_ssize_t tp_maxalloc;
    struct _typeobject *tp_prev;
    struct _typeobject *tp_next;
#endif
} PyTypeObject;

/* The *real* layout of a type object when allocated on the heap */
typedef struct _heaptypeobject {
    /* Note: there's a dependency on the order of these members
       in slotptr() in typeobject.c . */
    PyTypeObject ht_type;
    PyAsyncMethods as_async;
    PyNumberMethods as_number;
    PyMappingMethods as_mapping;
    PySequenceMethods as_sequence; /* as_sequence comes after as_mapping,
Download .txt
gitextract_0pm91rqf/

├── .gitignore
├── PyApp/
│   ├── PyApp/
│   │   ├── AppDelegate.swift
│   │   ├── Assets.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   └── Contents.json
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── Info.plist
│   │   ├── PyApp-Bridging-Header.h
│   │   ├── ViewController.swift
│   │   ├── pybridge.c
│   │   ├── pybridge.h
│   │   └── pybridge.swift
│   └── PyApp.xcodeproj/
│       ├── project.pbxproj
│       └── project.xcworkspace/
│           ├── contents.xcworkspacedata
│           └── xcshareddata/
│               └── IDEWorkspaceChecks.plist
├── README.md
├── docs/
│   └── references.md
└── python-for-ios/
    └── dist/
        ├── lib/
        │   ├── libcrypto.a
        │   ├── libffi.a
        │   ├── libpython3.a
        │   └── libssl.a
        └── root/
            └── python3/
                ├── include/
                │   └── python3.8/
                │       ├── Python-ast.h
                │       ├── Python.h
                │       ├── abstract.h
                │       ├── asdl.h
                │       ├── ast.h
                │       ├── bitset.h
                │       ├── bltinmodule.h
                │       ├── boolobject.h
                │       ├── bytearrayobject.h
                │       ├── bytes_methods.h
                │       ├── bytesobject.h
                │       ├── cellobject.h
                │       ├── ceval.h
                │       ├── classobject.h
                │       ├── code.h
                │       ├── codecs.h
                │       ├── compile.h
                │       ├── complexobject.h
                │       ├── context.h
                │       ├── cpython/
                │       │   ├── abstract.h
                │       │   ├── dictobject.h
                │       │   ├── fileobject.h
                │       │   ├── initconfig.h
                │       │   ├── interpreteridobject.h
                │       │   ├── object.h
                │       │   ├── objimpl.h
                │       │   ├── pyerrors.h
                │       │   ├── pylifecycle.h
                │       │   ├── pymem.h
                │       │   ├── pystate.h
                │       │   ├── sysmodule.h
                │       │   ├── traceback.h
                │       │   ├── tupleobject.h
                │       │   └── unicodeobject.h
                │       ├── datetime.h
                │       ├── descrobject.h
                │       ├── dictobject.h
                │       ├── dtoa.h
                │       ├── dynamic_annotations.h
                │       ├── enumobject.h
                │       ├── errcode.h
                │       ├── eval.h
                │       ├── fileobject.h
                │       ├── fileutils.h
                │       ├── floatobject.h
                │       ├── frameobject.h
                │       ├── funcobject.h
                │       ├── genobject.h
                │       ├── graminit.h
                │       ├── grammar.h
                │       ├── import.h
                │       ├── internal/
                │       │   ├── pycore_accu.h
                │       │   ├── pycore_atomic.h
                │       │   ├── pycore_ceval.h
                │       │   ├── pycore_code.h
                │       │   ├── pycore_condvar.h
                │       │   ├── pycore_context.h
                │       │   ├── pycore_fileutils.h
                │       │   ├── pycore_getopt.h
                │       │   ├── pycore_gil.h
                │       │   ├── pycore_hamt.h
                │       │   ├── pycore_initconfig.h
                │       │   ├── pycore_object.h
                │       │   ├── pycore_pathconfig.h
                │       │   ├── pycore_pyerrors.h
                │       │   ├── pycore_pyhash.h
                │       │   ├── pycore_pylifecycle.h
                │       │   ├── pycore_pymem.h
                │       │   ├── pycore_pystate.h
                │       │   ├── pycore_traceback.h
                │       │   ├── pycore_tupleobject.h
                │       │   └── pycore_warnings.h
                │       ├── interpreteridobject.h
                │       ├── intrcheck.h
                │       ├── iterobject.h
                │       ├── listobject.h
                │       ├── longintrepr.h
                │       ├── longobject.h
                │       ├── marshal.h
                │       ├── memoryobject.h
                │       ├── methodobject.h
                │       ├── modsupport.h
                │       ├── moduleobject.h
                │       ├── namespaceobject.h
                │       ├── node.h
                │       ├── object.h
                │       ├── objimpl.h
                │       ├── odictobject.h
                │       ├── opcode.h
                │       ├── osdefs.h
                │       ├── osmodule.h
                │       ├── parsetok.h
                │       ├── patchlevel.h
                │       ├── picklebufobject.h
                │       ├── py_curses.h
                │       ├── pyarena.h
                │       ├── pycapsule.h
                │       ├── pyconfig.h
                │       ├── pyctype.h
                │       ├── pydebug.h
                │       ├── pydtrace.h
                │       ├── pyerrors.h
                │       ├── pyexpat.h
                │       ├── pyfpe.h
                │       ├── pyhash.h
                │       ├── pylifecycle.h
                │       ├── pymacconfig.h
                │       ├── pymacro.h
                │       ├── pymath.h
                │       ├── pymem.h
                │       ├── pyport.h
                │       ├── pystate.h
                │       ├── pystrcmp.h
                │       ├── pystrhex.h
                │       ├── pystrtod.h
                │       ├── pythonrun.h
                │       ├── pythread.h
                │       ├── pytime.h
                │       ├── rangeobject.h
                │       ├── setobject.h
                │       ├── sliceobject.h
                │       ├── structmember.h
                │       ├── structseq.h
                │       ├── symtable.h
                │       ├── sysmodule.h
                │       ├── token.h
                │       ├── traceback.h
                │       ├── tracemalloc.h
                │       ├── tupleobject.h
                │       ├── typeslots.h
                │       ├── ucnhash.h
                │       ├── unicodeobject.h
                │       ├── warnings.h
                │       └── weakrefobject.h
                └── lib/
                    ├── bootstrap.py
                    └── python3.8/
                        ├── config-3.8-darwin/
                        │   ├── Makefile
                        │   ├── Setup
                        │   ├── Setup.local
                        │   ├── config.c
                        │   └── python-config.py
                        └── site-packages/
                            ├── README.txt
                            └── _sqlite3/
                                └── __init__.py
Download .txt
SYMBOL INDEX (454 symbols across 91 files)

FILE: PyApp/PyApp/pybridge.c
  function python_start (line 7) | void python_start(const char* resourcePath)
  function python_end (line 37) | void python_end()

FILE: python-for-ios/dist/root/python3/include/python3.8/Python-ast.h
  type _mod (line 13) | struct _mod
  type _stmt (line 15) | struct _stmt
  type _expr (line 17) | struct _expr
  type expr_context_ty (line 19) | typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5,
  type _slice (line 22) | struct _slice
  type boolop_ty (line 24) | typedef enum _boolop { And=1, Or=2 } boolop_ty;
  type operator_ty (line 26) | typedef enum _operator { Add=1, Sub=2, Mult=3, MatMult=4, Div=5, Mod=6, ...
  type unaryop_ty (line 30) | typedef enum _unaryop { Invert=1, Not=2, UAdd=3, USub=4 } unaryop_ty;
  type cmpop_ty (line 32) | typedef enum _cmpop { Eq=1, NotEq=2, Lt=3, LtE=4, Gt=5, GtE=6, Is=7, IsN...
  type _comprehension (line 35) | struct _comprehension
  type _excepthandler (line 37) | struct _excepthandler
  type _arguments (line 39) | struct _arguments
  type _arg (line 41) | struct _arg
  type _keyword (line 43) | struct _keyword
  type _alias (line 45) | struct _alias
  type _withitem (line 47) | struct _withitem
  type _type_ignore (line 49) | struct _type_ignore
  type _mod_kind (line 52) | enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3,
  type _mod (line 54) | struct _mod {
  type _stmt_kind (line 82) | enum _stmt_kind {FunctionDef_kind=1, AsyncFunctionDef_kind=2, ClassDef_k...
  type _stmt (line 90) | struct _stmt {
  type _expr_kind (line 232) | enum _expr_kind {BoolOp_kind=1, NamedExpr_kind=2, BinOp_kind=3, UnaryOp_...
  type _expr (line 240) | struct _expr {
  type _slice_kind (line 383) | enum _slice_kind {Slice_kind=1, ExtSlice_kind=2, Index_kind=3}
  type _slice (line 384) | struct _slice {
  type _comprehension (line 404) | struct _comprehension {
  type _excepthandler_kind (line 411) | enum _excepthandler_kind {ExceptHandler_kind=1}
  type _excepthandler (line 412) | struct _excepthandler {
  type _arguments (line 428) | struct _arguments {
  type _arg (line 438) | struct _arg {
  type _keyword (line 448) | struct _keyword {
  type _alias (line 453) | struct _alias {
  type _withitem (line 458) | struct _withitem {
  type _type_ignore_kind (line 463) | enum _type_ignore_kind {TypeIgnore_kind=1}
  type _type_ignore (line 464) | struct _type_ignore {

FILE: python-for-ios/dist/root/python3/include/python3.8/asdl.h
  type PyObject (line 4) | typedef PyObject * identifier;
  type PyObject (line 5) | typedef PyObject * string;
  type PyObject (line 6) | typedef PyObject * bytes;
  type PyObject (line 7) | typedef PyObject * object;
  type PyObject (line 8) | typedef PyObject * singleton;
  type PyObject (line 9) | typedef PyObject * constant;
  type asdl_seq (line 19) | typedef struct {
  type asdl_int_seq (line 24) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/bitset.h
  type BYTE (line 11) | typedef BYTE *bitset;

FILE: python-for-ios/dist/root/python3/include/python3.8/boolobject.h
  type _longobject (line 18) | struct _longobject

FILE: python-for-ios/dist/root/python3/include/python3.8/bytearrayobject.h
  type PyByteArrayObject (line 23) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/bytesobject.h
  type PyBytesObject (line 31) | typedef struct {
  type _PyBytesWriter (line 144) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/cellobject.h
  type PyCellObject (line 9) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/ceval.h
  type _frame (line 42) | struct _frame
  type _frame (line 47) | struct _frame
  type _frame (line 136) | struct _frame
  type _frame (line 137) | struct _frame
  type _frame (line 139) | struct _frame

FILE: python-for-ios/dist/root/python3/include/python3.8/classobject.h
  type PyMethodObject (line 12) | typedef struct {
  type PyInstanceMethodObject (line 38) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/code.h
  type _Py_CODEUNIT (line 10) | typedef uint16_t _Py_CODEUNIT;
  type _PyOpcache (line 20) | typedef struct _PyOpcache _PyOpcache;
  type PyCodeObject (line 23) | typedef struct {
  type PyAddrPair (line 143) | typedef struct _addr_pair {

FILE: python-for-ios/dist/root/python3/include/python3.8/compile.h
  type _node (line 12) | struct _node
  type _node (line 13) | struct _node
  type PyCompilerFlags (line 29) | typedef struct {
  type PyFutureFeatures (line 40) | typedef struct {
  type _mod (line 56) | struct _mod
  type _mod (line 59) | struct _mod
  type _mod (line 65) | struct _mod
  type _mod (line 71) | struct _mod
  type _mod (line 75) | struct _mod
  type _mod (line 86) | struct _mod

FILE: python-for-ios/dist/root/python3/include/python3.8/complexobject.h
  type Py_complex (line 10) | typedef struct {
  type PyComplexObject (line 33) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/context.h
  type PyContext (line 11) | typedef struct _pycontextobject PyContext;
  type PyContextVar (line 14) | typedef struct _pycontextvarobject PyContextVar;
  type PyContextToken (line 17) | typedef struct _pycontexttokenobject PyContextToken;

FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/abstract.h
  function Py_ssize_t (line 74) | static inline Py_ssize_t
  function vectorcallfunc (line 80) | static inline vectorcallfunc
  function PyObject (line 114) | static inline PyObject *
  function PyObject (line 144) | static inline PyObject *
  function PyObject (line 151) | static inline PyObject *
  type _Py_Identifier (line 181) | struct _Py_Identifier

FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/dictobject.h
  type PyDictKeysObject (line 9) | typedef struct _dictkeysobject PyDictKeysObject;
  type PyDictObject (line 14) | typedef struct {
  type _Py_Identifier (line 37) | struct _Py_Identifier
  type _Py_Identifier (line 73) | struct _Py_Identifier
  type _Py_Identifier (line 74) | struct _Py_Identifier
  type _Py_Identifier (line 76) | struct _Py_Identifier
  type _PyDictViewObject (line 84) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/fileobject.h
  type PyObject (line 24) | typedef PyObject * (*Py_OpenCodeHookFunction)(PyObject *, void *);

FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/initconfig.h
  type PyStatus (line 10) | typedef struct {
  type PyWideStringList (line 31) | typedef struct {
  type PyPreConfig (line 47) | typedef struct {
  type PyConfig (line 129) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/object.h
  type _Py_Identifier (line 29) | typedef struct _Py_Identifier {
  type Py_buffer (line 40) | typedef struct bufferinfo {
  type PyObject (line 58) | typedef PyObject *(*vectorcallfunc)(PyObject *callable, PyObject *const ...
  type PyNumberMethods (line 95) | typedef struct {
  type PySequenceMethods (line 142) | typedef struct {
  type PyMappingMethods (line 156) | typedef struct {
  type PyAsyncMethods (line 162) | typedef struct {
  type PyBufferProcs (line 168) | typedef struct {
  type Py_ssize_t (line 175) | typedef Py_ssize_t printfunc;
  type PyTypeObject (line 177) | typedef struct _typeobject {
  type PyHeapTypeObject (line 273) | typedef struct _heaptypeobject {
  type _Py_Identifier (line 303) | struct _Py_Identifier
  type _Py_Identifier (line 310) | struct _Py_Identifier
  type _Py_Identifier (line 311) | struct _Py_Identifier
  type _Py_Identifier (line 312) | struct _Py_Identifier
  type _Py_Identifier (line 323) | struct _Py_Identifier
  function _Py_Dealloc_inline (line 339) | static inline void _Py_Dealloc_inline(PyObject *op)

FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/objimpl.h
  type PyObjectArenaAllocator (line 18) | typedef struct {
  type PyGC_Head (line 46) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/pyerrors.h
  type PyBaseExceptionObject (line 17) | typedef struct {
  type PySyntaxErrorObject (line 21) | typedef struct {
  type PyImportErrorObject (line 31) | typedef struct {
  type PyUnicodeErrorObject (line 38) | typedef struct {
  type PySystemExitObject (line 47) | typedef struct {
  type PyOSErrorObject (line 52) | typedef struct {
  type PyStopIterationObject (line 64) | typedef struct {
  type PyOSErrorObject (line 70) | typedef PyOSErrorObject PyEnvironmentErrorObject;
  type PyOSErrorObject (line 72) | typedef PyOSErrorObject PyWindowsErrorObject;

FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/pymem.h
  type PyMemAllocatorDomain (line 29) | typedef enum {
  type PyMemAllocatorName (line 40) | typedef enum {
  type PyMemAllocatorEx (line 53) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/pystate.h
  type _frame (line 19) | struct _frame
  type _PyErr_StackItem (line 36) | typedef struct _err_stackitem {
  type _ts (line 51) | struct _ts {
  type PyModuleDef (line 150) | struct PyModuleDef
  type _frame (line 188) | struct _frame
  type _xid (line 192) | struct _xid
  type _PyCrossInterpreterData (line 197) | typedef struct _xid {
  type _xid (line 244) | struct _xid

FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/traceback.h
  type PyTracebackObject (line 9) | typedef struct _traceback {

FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/tupleobject.h
  type PyTupleObject (line 9) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/unicodeobject.h
  type wchar_t (line 14) | typedef wchar_t Py_UNICODE;
  type PyASCIIObject (line 88) | typedef struct {
  type PyCompactUnicodeObject (line 227) | typedef struct {
  type PyUnicodeObject (line 239) | typedef struct {
  type PyUnicode_Kind (line 320) | enum PyUnicode_Kind {
  type _PyUnicodeWriter (line 605) | typedef struct {
  type PyUnicode_Kind (line 668) | enum PyUnicode_Kind

FILE: python-for-ios/dist/root/python3/include/python3.8/datetime.h
  type PyDateTime_Delta (line 34) | typedef struct
  type PyDateTime_TZInfo (line 43) | typedef struct
  type _PyDateTime_BaseTZInfo (line 61) | typedef struct
  type _PyDateTime_BaseTime (line 76) | typedef struct
  type PyDateTime_Time (line 81) | typedef struct
  type PyDateTime_Date (line 94) | typedef struct
  type _PyDateTime_BaseDateTime (line 104) | typedef struct
  type PyDateTime_DateTime (line 109) | typedef struct
  type PyDateTime_CAPI (line 150) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/descrobject.h
  type PyObject (line 8) | typedef PyObject *(*getter)(PyObject *, void *);
  type PyGetSetDef (line 11) | typedef struct PyGetSetDef {
  type PyObject (line 20) | typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args,
  type PyObject (line 23) | typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args,
  type wrapperbase (line 26) | struct wrapperbase {
  type PyDescrObject (line 41) | typedef struct {
  type PyMethodDescrObject (line 53) | typedef struct {
  type PyMemberDescrObject (line 59) | typedef struct {
  type PyGetSetDescrObject (line 64) | typedef struct {
  type PyWrapperDescrObject (line 69) | typedef struct {
  type PyMemberDef (line 88) | struct PyMemberDef
  type PyMemberDef (line 90) | struct PyMemberDef
  type PyGetSetDef (line 92) | struct PyGetSetDef
  type wrapperbase (line 95) | struct wrapperbase

FILE: python-for-ios/dist/root/python3/include/python3.8/dynamic_annotations.h
  function T (line 473) | T _Py_ANNOTATE_UNPROTECTED_READ(const volatile T &x) {

FILE: python-for-ios/dist/root/python3/include/python3.8/fileutils.h
  type _Py_error_handler (line 23) | typedef enum {
  type _Py_stat_struct (line 71) | struct _Py_stat_struct {
  type _Py_stat_struct (line 95) | struct _Py_stat_struct
  type _Py_stat_struct (line 99) | struct _Py_stat_struct
  type stat (line 103) | struct stat

FILE: python-for-ios/dist/root/python3/include/python3.8/floatobject.h
  type PyFloatObject (line 15) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/frameobject.h
  type PyTryBlock (line 10) | typedef struct {
  type PyFrameObject (line 16) | typedef struct _frame {

FILE: python-for-ios/dist/root/python3/include/python3.8/funcobject.h
  type PyFunctionObject (line 21) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/genobject.h
  type _frame (line 13) | struct _frame
  type PyGenObject (line 33) | typedef struct {
  type _frame (line 43) | struct _frame
  type _frame (line 44) | struct _frame
  type PyCoroObject (line 54) | typedef struct {
  type _frame (line 66) | struct _frame
  type PyAsyncGenObject (line 71) | typedef struct {
  type _frame (line 92) | struct _frame

FILE: python-for-ios/dist/root/python3/include/python3.8/grammar.h
  type label (line 14) | typedef struct {
  type labellist (line 23) | typedef struct {
  type arc (line 30) | typedef struct {
  type state (line 37) | typedef struct {
  type dfa (line 50) | typedef struct {
  type grammar (line 60) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/import.h
  type _Py_Identifier (line 44) | struct _Py_Identifier
  type _inittab (line 118) | struct _inittab {
  type _inittab (line 122) | struct _inittab
  type _inittab (line 123) | struct _inittab
  type _frozen (line 134) | struct _frozen {
  type _frozen (line 143) | struct _frozen

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_accu.h
  type _PyAccu (line 24) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_atomic.h
  type _Py_memory_order (line 38) | typedef enum _Py_memory_order {
  type _Py_atomic_address (line 46) | typedef struct _Py_atomic_address {
  type _Py_atomic_int (line 50) | typedef struct _Py_atomic_int {
  type _Py_memory_order (line 69) | typedef enum _Py_memory_order {
  type _Py_atomic_address (line 77) | typedef struct _Py_atomic_address {
  type _Py_atomic_int (line 81) | typedef struct _Py_atomic_int {
  type _Py_memory_order (line 107) | typedef enum _Py_memory_order {
  type _Py_atomic_address (line 115) | typedef struct _Py_atomic_address {
  type _Py_atomic_int (line 119) | typedef struct _Py_atomic_int {
  function _Py_atomic_signal_fence (line 124) | static __inline__ void
  function _Py_atomic_thread_fence (line 131) | static __inline__ void
  function _Py_ANNOTATE_MEMORY_ORDER (line 139) | static __inline__ void
  type _Py_memory_order (line 243) | typedef enum _Py_memory_order {
  type _Py_atomic_address (line 251) | typedef struct _Py_atomic_address {
  type _Py_atomic_int (line 255) | typedef struct _Py_atomic_int {
  function _Py_atomic_load_64bit_impl (line 295) | inline intptr_t _Py_atomic_load_64bit_impl(volatile uintptr_t* value, in...
  function _Py_atomic_load_32bit_impl (line 333) | inline int _Py_atomic_load_32bit_impl(volatile int* value, int order) {
  type _Py_memory_order (line 379) | typedef enum _Py_memory_order {
  type _Py_atomic_address (line 387) | typedef struct _Py_atomic_address {
  type _Py_atomic_int (line 391) | typedef struct _Py_atomic_int {
  function _Py_atomic_load_64bit_impl (line 431) | inline intptr_t _Py_atomic_load_64bit_impl(volatile uintptr_t* value, in...
  function _Py_atomic_load_32bit_impl (line 469) | inline int _Py_atomic_load_32bit_impl(volatile int* value, int order) {
  type _Py_memory_order (line 516) | typedef enum _Py_memory_order {
  type _Py_atomic_address (line 524) | typedef struct _Py_atomic_address {
  type _Py_atomic_int (line 528) | typedef struct _Py_atomic_int {

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_ceval.h
  type _ceval_runtime_state (line 16) | struct _ceval_runtime_state
  type _ceval_runtime_state (line 18) | struct _ceval_runtime_state
  type _ceval_runtime_state (line 20) | struct _ceval_runtime_state
  type _ceval_runtime_state (line 23) | struct _ceval_runtime_state
  type _ceval_runtime_state (line 27) | struct _ceval_runtime_state

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_code.h
  type _PyOpcache_LoadGlobal (line 7) | typedef struct {
  type _PyOpcache (line 13) | struct _PyOpcache {

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_condvar.h
  type CRITICAL_SECTION (line 57) | typedef CRITICAL_SECTION PyMUTEX_T;
  type PyCOND_T (line 76) | typedef struct _PyCOND_T
  type SRWLOCK (line 87) | typedef SRWLOCK PyMUTEX_T;
  type CONDITION_VARIABLE (line 89) | typedef CONDITION_VARIABLE  PyCOND_T;

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_context.h
  type _pycontextobject (line 10) | struct _pycontextobject {
  type _pycontextvarobject (line 19) | struct _pycontextvarobject {
  type _pycontexttokenobject (line 30) | struct _pycontexttokenobject {

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_fileutils.h
  type lconv (line 47) | struct lconv

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_getopt.h
  type _PyOS_LongOption (line 14) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_gil.h
  type _gil_runtime_state (line 23) | struct _gil_runtime_state {

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_hamt.h
  type PyHamtNode (line 15) | typedef struct {
  type PyHamtObject (line 21) | typedef struct {
  type PyHamtIteratorState (line 41) | typedef struct {
  type PyHamtIterator (line 56) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_initconfig.h
  type _PyArgv (line 63) | typedef struct {
  type _PyPreCmdline (line 96) | typedef struct {
  type _PyConfigInitEnum (line 140) | typedef enum {

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_object.h
  function _PyObject_GC_TRACK_impl (line 27) | static inline void _PyObject_GC_TRACK_impl(const char *filename, int lin...
  function _PyObject_GC_UNTRACK_impl (line 59) | static inline void _PyObject_GC_UNTRACK_impl(const char *filename, int l...

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pathconfig.h
  type _PyPathConfig (line 11) | typedef struct _PyPathConfig {
  type _PyPathConfig (line 51) | struct _PyPathConfig

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pyerrors.h
  function PyObject (line 11) | static inline PyObject* _PyErr_Occurred(PyThreadState *tstate)

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pymem.h
  type gc_generation (line 97) | struct gc_generation {
  type gc_generation_stats (line 105) | struct gc_generation_stats {
  type _gc_runtime_state (line 114) | struct _gc_runtime_state {
  type _gc_runtime_state (line 148) | struct _gc_runtime_state
  function _PyMem_IsPtrFreed (line 182) | static inline int _PyMem_IsPtrFreed(void *ptr)

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pystate.h
  type _pending_calls (line 25) | struct _pending_calls {
  type _ceval_runtime_state (line 43) | struct _ceval_runtime_state {
  type PyObject (line 64) | typedef PyObject* (*_PyFrameEvalFunction)(struct _frame *, int);
  type _is (line 67) | struct _is {
  type _is (line 140) | struct _is
  type _is (line 142) | struct _is
  type _is (line 143) | struct _is
  type _is (line 144) | struct _is
  type _xidregitem (line 153) | struct _xidregitem
  type _xidregitem (line 155) | struct _xidregitem {
  type _Py_AuditHookEntry (line 163) | typedef struct _Py_AuditHookEntry {
  type _gilstate_runtime_state (line 171) | struct _gilstate_runtime_state {
  type _PyRuntimeState (line 195) | typedef struct pyruntimestate {
  type _gilstate_runtime_state (line 312) | struct _gilstate_runtime_state

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_traceback.h
  type _frame (line 91) | struct _frame

FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_warnings.h
  type _warnings_runtime_state (line 13) | struct _warnings_runtime_state {

FILE: python-for-ios/dist/root/python3/include/python3.8/listobject.h
  type PyListObject (line 23) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/longintrepr.h
  type digit (line 45) | typedef uint32_t digit;
  type sdigit (line 46) | typedef int32_t sdigit;
  type twodigits (line 47) | typedef uint64_t twodigits;
  type stwodigits (line 48) | typedef int64_t stwodigits;
  type digit (line 53) | typedef unsigned short digit;
  type sdigit (line 54) | typedef short sdigit;
  type twodigits (line 55) | typedef unsigned long twodigits;
  type stwodigits (line 56) | typedef long stwodigits;
  type _longobject (line 85) | struct _longobject {

FILE: python-for-ios/dist/root/python3/include/python3.8/longobject.h
  type PyLongObject (line 10) | typedef struct _longobject PyLongObject;

FILE: python-for-ios/dist/root/python3/include/python3.8/memoryobject.h
  type _PyManagedBufferObject (line 42) | typedef struct {
  type PyMemoryViewObject (line 57) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/methodobject.h
  type PyObject (line 18) | typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
  type PyObject (line 19) | typedef PyObject *(*_PyCFunctionFast) (PyObject *, PyObject *const *, Py...
  type PyObject (line 20) | typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *,
  type PyObject (line 22) | typedef PyObject *(*_PyCFunctionFastWithKeywords) (PyObject *,
  type PyObject (line 25) | typedef PyObject *(*PyNoArgsFunction)(PyObject *);
  type PyMethodDef (line 51) | struct PyMethodDef {
  type PyMethodDef (line 58) | typedef struct PyMethodDef PyMethodDef;
  type PyCFunctionObject (line 97) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/modsupport.h
  type _PyArg_Parser (line 89) | typedef struct _PyArg_Parser {
  type _PyArg_Parser (line 107) | struct _PyArg_Parser
  type _PyArg_Parser (line 117) | struct _PyArg_Parser
  type _PyArg_Parser (line 120) | struct _PyArg_Parser
  type _PyArg_Parser (line 124) | struct _PyArg_Parser
  type PyModuleDef (line 211) | struct PyModuleDef
  type PyModuleDef (line 214) | struct PyModuleDef

FILE: python-for-ios/dist/root/python3/include/python3.8/moduleobject.h
  type PyModuleDef (line 35) | struct PyModuleDef
  type PyModuleDef (line 40) | struct PyModuleDef
  type PyModuleDef_Base (line 44) | typedef struct PyModuleDef_Base {
  type PyModuleDef_Slot (line 61) | typedef struct PyModuleDef_Slot{
  type PyModuleDef (line 75) | typedef struct PyModuleDef{

FILE: python-for-ios/dist/root/python3/include/python3.8/node.h
  type node (line 10) | typedef struct _node {

FILE: python-for-ios/dist/root/python3/include/python3.8/object.h
  type PyObject (line 104) | typedef struct _object {
  type PyVarObject (line 113) | typedef struct {
  type PyObject (line 140) | typedef PyObject * (*unaryfunc)(PyObject *);
  type PyObject (line 141) | typedef PyObject * (*binaryfunc)(PyObject *, PyObject *);
  type PyObject (line 142) | typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *);
  type Py_ssize_t (line 144) | typedef Py_ssize_t (*lenfunc)(PyObject *);
  type PyObject (line 145) | typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t);
  type PyObject (line 146) | typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t);
  type PyObject (line 158) | typedef PyObject *(*getattrfunc)(PyObject *, char *);
  type PyObject (line 159) | typedef PyObject *(*getattrofunc)(PyObject *, PyObject *);
  type PyObject (line 162) | typedef PyObject *(*reprfunc)(PyObject *);
  type Py_hash_t (line 163) | typedef Py_hash_t (*hashfunc)(PyObject *);
  type PyObject (line 164) | typedef PyObject *(*richcmpfunc) (PyObject *, PyObject *, int);
  type PyObject (line 165) | typedef PyObject *(*getiterfunc) (PyObject *);
  type PyObject (line 166) | typedef PyObject *(*iternextfunc) (PyObject *);
  type PyObject (line 167) | typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *);
  type PyObject (line 170) | typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *);
  type PyObject (line 171) | typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t);
  type PyTypeObject (line 175) | typedef struct _typeobject PyTypeObject;
  type PyType_Slot (line 180) | typedef struct{
  type PyType_Spec (line 185) | typedef struct{
  type _typeobject (line 198) | struct _typeobject
  type _typeobject (line 202) | struct _typeobject
  type _typeobject (line 202) | struct _typeobject
  type _typeobject (line 206) | struct _typeobject
  type _typeobject (line 207) | struct _typeobject
  type _typeobject (line 208) | struct _typeobject
  type _typeobject (line 210) | struct _typeobject
  type _typeobject (line 216) | struct _typeobject
  type _typeobject (line 217) | struct _typeobject
  type _typeobject (line 218) | struct _typeobject
  type _typeobject (line 221) | struct _typeobject
  type _typeobject (line 409) | struct _typeobject
  type _typeobject (line 410) | struct _typeobject
  function _Py_NewReference (line 436) | static inline void _Py_NewReference(PyObject *op)
  function _Py_ForgetReference (line 446) | static inline void _Py_ForgetReference(PyObject *op)
  function _Py_INCREF (line 456) | static inline void _Py_INCREF(PyObject *op)
  function _Py_DECREF (line 464) | static inline void _Py_DECREF(const char *filename, int lineno,
  function _Py_XINCREF (line 529) | static inline void _Py_XINCREF(PyObject *op)
  function _Py_XDECREF (line 538) | static inline void _Py_XDECREF(PyObject *op)

FILE: python-for-ios/dist/root/python3/include/python3.8/objimpl.h
  function PyObject (line 136) | static inline PyObject*
  function PyVarObject (line 151) | static inline PyVarObject*

FILE: python-for-ios/dist/root/python3/include/python3.8/odictobject.h
  type PyODictObject (line 13) | typedef struct _odictobject PyODictObject;

FILE: python-for-ios/dist/root/python3/include/python3.8/opcode.h
  type cmp_op (line 139) | enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py...

FILE: python-for-ios/dist/root/python3/include/python3.8/parsetok.h
  type perrdetail (line 13) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/py_curses.h
  type PyCursesWindowObject (line 61) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/pyarena.h
  type PyArena (line 12) | typedef struct _arena PyArena;

FILE: python-for-ios/dist/root/python3/include/python3.8/pydtrace.h
  function PyDTrace_LINE (line 28) | static inline void PyDTrace_LINE(const char *arg0, const char *arg1, int...
  function PyDTrace_FUNCTION_ENTRY (line 29) | static inline void PyDTrace_FUNCTION_ENTRY(const char *arg0, const char ...
  function PyDTrace_FUNCTION_RETURN (line 30) | static inline void PyDTrace_FUNCTION_RETURN(const char *arg0, const char...
  function PyDTrace_GC_START (line 31) | static inline void PyDTrace_GC_START(int arg0) {}
  function PyDTrace_GC_DONE (line 32) | static inline void PyDTrace_GC_DONE(Py_ssize_t arg0) {}
  function PyDTrace_INSTANCE_NEW_START (line 33) | static inline void PyDTrace_INSTANCE_NEW_START(int arg0) {}
  function PyDTrace_INSTANCE_NEW_DONE (line 34) | static inline void PyDTrace_INSTANCE_NEW_DONE(int arg0) {}
  function PyDTrace_INSTANCE_DELETE_START (line 35) | static inline void PyDTrace_INSTANCE_DELETE_START(int arg0) {}
  function PyDTrace_INSTANCE_DELETE_DONE (line 36) | static inline void PyDTrace_INSTANCE_DELETE_DONE(int arg0) {}
  function PyDTrace_IMPORT_FIND_LOAD_START (line 37) | static inline void PyDTrace_IMPORT_FIND_LOAD_START(const char *arg0) {}
  function PyDTrace_IMPORT_FIND_LOAD_DONE (line 38) | static inline void PyDTrace_IMPORT_FIND_LOAD_DONE(const char *arg0, int ...
  function PyDTrace_AUDIT (line 39) | static inline void PyDTrace_AUDIT(const char *arg0, void *arg1) {}
  function PyDTrace_LINE_ENABLED (line 41) | static inline int PyDTrace_LINE_ENABLED(void) { return 0; }
  function PyDTrace_FUNCTION_ENTRY_ENABLED (line 42) | static inline int PyDTrace_FUNCTION_ENTRY_ENABLED(void) { return 0; }
  function PyDTrace_FUNCTION_RETURN_ENABLED (line 43) | static inline int PyDTrace_FUNCTION_RETURN_ENABLED(void) { return 0; }
  function PyDTrace_GC_START_ENABLED (line 44) | static inline int PyDTrace_GC_START_ENABLED(void) { return 0; }
  function PyDTrace_GC_DONE_ENABLED (line 45) | static inline int PyDTrace_GC_DONE_ENABLED(void) { return 0; }
  function PyDTrace_INSTANCE_NEW_START_ENABLED (line 46) | static inline int PyDTrace_INSTANCE_NEW_START_ENABLED(void) { return 0; }
  function PyDTrace_INSTANCE_NEW_DONE_ENABLED (line 47) | static inline int PyDTrace_INSTANCE_NEW_DONE_ENABLED(void) { return 0; }
  function PyDTrace_INSTANCE_DELETE_START_ENABLED (line 48) | static inline int PyDTrace_INSTANCE_DELETE_START_ENABLED(void) { return ...
  function PyDTrace_INSTANCE_DELETE_DONE_ENABLED (line 49) | static inline int PyDTrace_INSTANCE_DELETE_DONE_ENABLED(void) { return 0; }
  function PyDTrace_IMPORT_FIND_LOAD_START_ENABLED (line 50) | static inline int PyDTrace_IMPORT_FIND_LOAD_START_ENABLED(void) { return...
  function PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED (line 51) | static inline int PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED(void) { return ...
  function PyDTrace_AUDIT_ENABLED (line 52) | static inline int PyDTrace_AUDIT_ENABLED(void) { return 0; }

FILE: python-for-ios/dist/root/python3/include/python3.8/pyexpat.h
  type PyExpat_CAPI (line 9) | struct PyExpat_CAPI

FILE: python-for-ios/dist/root/python3/include/python3.8/pyhash.h
  type _Py_HashSecret_t (line 54) | typedef union {
  type PyHash_FuncDef (line 87) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/pymath.h
  function __icc_nan (line 167) | __declspec(noinline)

FILE: python-for-ios/dist/root/python3/include/python3.8/pymem.h
  type _PyTraceMalloc_Config (line 109) | struct _PyTraceMalloc_Config {
  type _PyTraceMalloc_Config (line 131) | struct _PyTraceMalloc_Config

FILE: python-for-ios/dist/root/python3/include/python3.8/pyport.h
  type Py_uintptr_t (line 97) | typedef uintptr_t       Py_uintptr_t;
  type Py_intptr_t (line 98) | typedef intptr_t        Py_intptr_t;
  type Py_ssize_t (line 105) | typedef ssize_t         Py_ssize_t;
  type Py_intptr_t (line 107) | typedef Py_intptr_t     Py_ssize_t;
  type Py_ssize_t (line 114) | typedef Py_ssize_t Py_hash_t;
  type Py_uhash_t (line 117) | typedef size_t Py_uhash_t;
  type Py_ssize_t (line 121) | typedef Py_ssize_t Py_ssize_clean_t;
  type Py_ssize_clean_t (line 123) | typedef int Py_ssize_clean_t;

FILE: python-for-ios/dist/root/python3/include/python3.8/pystate.h
  type _frame (line 18) | struct _frame
  type _ts (line 19) | struct _ts
  type _is (line 20) | struct _is
  type PyThreadState (line 23) | typedef struct _ts PyThreadState;
  type PyInterpreterState (line 25) | typedef struct _is PyInterpreterState;
  type PyModuleDef (line 45) | struct PyModuleDef
  type PyModuleDef (line 46) | struct PyModuleDef
  type PyModuleDef (line 48) | struct PyModuleDef
  type PyGILState_STATE (line 80) | typedef

FILE: python-for-ios/dist/root/python3/include/python3.8/pythonrun.h
  type _mod (line 35) | struct _mod
  type _mod (line 41) | struct _mod
  type _mod (line 47) | struct _mod
  type _mod (line 57) | struct _mod
  type _node (line 75) | struct _node
  type _node (line 78) | struct _node
  type _node (line 82) | struct _node
  type symtable (line 116) | struct symtable
  type symtable (line 128) | struct symtable
  type symtable (line 133) | struct symtable

FILE: python-for-ios/dist/root/python3/include/python3.8/pythread.h
  type PyLockStatus (line 14) | typedef enum PyLockStatus {
  type Py_tss_t (line 115) | typedef struct _Py_tss_t Py_tss_t;
  type _Py_tss_t (line 135) | struct _Py_tss_t {

FILE: python-for-ios/dist/root/python3/include/python3.8/pytime.h
  type _PyTime_t (line 19) | typedef int64_t _PyTime_t;
  type _PyTime_round_t (line 23) | typedef enum {
  type timeval (line 123) | struct timeval
  type timeval (line 130) | struct timeval
  type timeval (line 135) | struct timeval
  type timespec (line 153) | struct timespec
  type timespec (line 158) | struct timespec
  type _Py_clock_info_t (line 184) | typedef struct {
  type tm (line 218) | struct tm
  type tm (line 222) | struct tm

FILE: python-for-ios/dist/root/python3/include/python3.8/setobject.h
  type setentry (line 26) | typedef struct {
  type PySetObject (line 42) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/sliceobject.h
  type PySliceObject (line 22) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/structmember.h
  type PyMemberDef (line 18) | typedef struct PyMemberDef {
  type PyMemberDef (line 67) | struct PyMemberDef
  type PyMemberDef (line 68) | struct PyMemberDef

FILE: python-for-ios/dist/root/python3/include/python3.8/structseq.h
  type PyStructSequence_Field (line 10) | typedef struct PyStructSequence_Field {
  type PyStructSequence_Desc (line 15) | typedef struct PyStructSequence_Desc {
  type PyTupleObject (line 35) | typedef PyTupleObject PyStructSequence;

FILE: python-for-ios/dist/root/python3/include/python3.8/symtable.h
  type _Py_block_ty (line 14) | typedef enum _block_type { FunctionBlock, ClassBlock, ModuleBlock }
  type _symtable_entry (line 17) | struct _symtable_entry
  type symtable (line 19) | struct symtable {
  type PySTEntryObject (line 38) | typedef struct _symtable_entry {
  type symtable (line 76) | struct symtable
  type symtable (line 80) | struct symtable
  type symtable (line 84) | struct symtable
  type symtable (line 86) | struct symtable

FILE: python-for-ios/dist/root/python3/include/python3.8/traceback.h
  type _frame (line 7) | struct _frame
  type _frame (line 11) | struct _frame

FILE: python-for-ios/dist/root/python3/include/python3.8/ucnhash.h
  type _PyUnicode_Name_CAPI (line 13) | typedef struct {

FILE: python-for-ios/dist/root/python3/include/python3.8/unicodeobject.h
  type Py_UCS4 (line 102) | typedef uint32_t Py_UCS4;
  type Py_UCS2 (line 103) | typedef uint16_t Py_UCS2;
  type Py_UCS1 (line 104) | typedef uint8_t Py_UCS1;

FILE: python-for-ios/dist/root/python3/include/python3.8/weakrefobject.h
  type PyWeakReference (line 10) | typedef struct _PyWeakReference PyWeakReference;
  type _PyWeakReference (line 16) | struct _PyWeakReference {

FILE: python-for-ios/dist/root/python3/lib/bootstrap.py
  function router (line 15) | def router(args):
  function greet (line 39) | def greet(args):
  function add (line 44) | def add(args):
  function mul (line 49) | def mul(args):

FILE: python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/config.c
  type _inittab (line 108) | struct _inittab

FILE: python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/python-config.py
  function exit_with_usage (line 15) | def exit_with_usage(code=1):
Condensed preview — 163 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (905K chars).
[
  {
    "path": ".gitignore",
    "chars": 2171,
    "preview": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n"
  },
  {
    "path": "PyApp/PyApp/AppDelegate.swift",
    "chars": 2169,
    "preview": "//\n//  AppDelegate.swift\n//  PyApp\n//\n//  Created by João Ventura on 28/05/2020.\n//  Copyright © 2020 Ventura. All right"
  },
  {
    "path": "PyApp/PyApp/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1590,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "PyApp/PyApp/Assets.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "PyApp/PyApp/Base.lproj/LaunchScreen.storyboard",
    "chars": 1658,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "PyApp/PyApp/Base.lproj/Main.storyboard",
    "chars": 2895,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "PyApp/PyApp/Info.plist",
    "chars": 1463,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "PyApp/PyApp/PyApp-Bridging-Header.h",
    "chars": 125,
    "preview": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n#import \"pybridg"
  },
  {
    "path": "PyApp/PyApp/ViewController.swift",
    "chars": 779,
    "preview": "//\n//  ViewController.swift\n//  PyApp\n//\n//  Created by João Ventura on 28/05/2020.\n//  Copyright © 2020 Ventura. All ri"
  },
  {
    "path": "PyApp/PyApp/pybridge.c",
    "chars": 1924,
    "preview": "#include <stdio.h>\n#include <string.h>\n\n#include \"pybridge.h\"\n#include \"Python.h\"\n\nvoid python_start(const char* resourc"
  },
  {
    "path": "PyApp/PyApp/pybridge.h",
    "chars": 192,
    "preview": "#ifndef pybridge_h\n#define pybridge_h\n\n#include <stdio.h>\n\nvoid python_start(const char* resourcePath);\nvoid python_end("
  },
  {
    "path": "PyApp/PyApp/pybridge.swift",
    "chars": 1029,
    "preview": "//\n//  pybridge.swift\n//  PyApp\n//\n\nimport Foundation\n\nclass PyBridge {\n    \n    class func start(path: String) {\n      "
  },
  {
    "path": "PyApp/PyApp.xcodeproj/project.pbxproj",
    "chars": 17065,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "PyApp/PyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 150,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:PyApp.xcodeproj"
  },
  {
    "path": "PyApp/PyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "README.md",
    "chars": 1371,
    "preview": "# PyBridge-iOS\n\nPyBridge is a C implementation that allows to use Python code in native iOS applications. It allows to s"
  },
  {
    "path": "docs/references.md",
    "chars": 6575,
    "preview": "# References for creating PyBridge-iOS\n\nThis document contains the necessary steps to create an Xcode project from scrat"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/Python-ast.h",
    "chars": 26491,
    "preview": "/* File automatically generated by Parser/asdl_c.py. */\n\n#ifndef Py_PYTHON_AST_H\n#define Py_PYTHON_AST_H\n#ifdef __cplusp"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/Python.h",
    "chars": 3615,
    "preview": "#ifndef Py_PYTHON_H\n#define Py_PYTHON_H\n/* Since this is a \"meta-include\" file, no #ifdef __cplusplus / extern \"C\" { */\n"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/abstract.h",
    "chars": 30286,
    "preview": "/* Abstract Object Interface (many thanks to Jim Fulton) */\n\n#ifndef Py_ABSTRACTOBJECT_H\n#define Py_ABSTRACTOBJECT_H\n#if"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/asdl.h",
    "chars": 1229,
    "preview": "#ifndef Py_ASDL_H\n#define Py_ASDL_H\n\ntypedef PyObject * identifier;\ntypedef PyObject * string;\ntypedef PyObject * bytes;"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/ast.h",
    "chars": 948,
    "preview": "#ifndef Py_AST_H\n#define Py_AST_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"Python-ast.h\"   /* mod_ty */\n#includ"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/bitset.h",
    "chars": 468,
    "preview": "\n#ifndef Py_BITSET_H\n#define Py_BITSET_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Bitset interface */\n\n#define BYTE   "
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/bltinmodule.h",
    "chars": 264,
    "preview": "#ifndef Py_BLTINMODULE_H\n#define Py_BLTINMODULE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nPyAPI_DATA(PyTypeObject) PyFil"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/boolobject.h",
    "chars": 886,
    "preview": "/* Boolean object interface */\n\n#ifndef Py_BOOLOBJECT_H\n#define Py_BOOLOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/bytearrayobject.h",
    "chars": 2114,
    "preview": "/* ByteArray object interface */\n\n#ifndef Py_BYTEARRAYOBJECT_H\n#define Py_BYTEARRAYOBJECT_H\n#ifdef __cplusplus\nextern \"C"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/bytes_methods.h",
    "chars": 3301,
    "preview": "#ifndef Py_LIMITED_API\n#ifndef Py_BYTES_CTYPE_H\n#define Py_BYTES_CTYPE_H\n\n/*\n * The internal implementation behind PyByt"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/bytesobject.h",
    "chars": 8493,
    "preview": "\n/* Bytes (String) object interface */\n\n#ifndef Py_BYTESOBJECT_H\n#define Py_BYTESOBJECT_H\n#ifdef __cplusplus\nextern \"C\" "
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cellobject.h",
    "chars": 713,
    "preview": "/* Cell object interface */\n#ifndef Py_LIMITED_API\n#ifndef Py_CELLOBJECT_H\n#define Py_CELLOBJECT_H\n#ifdef __cplusplus\nex"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/ceval.h",
    "chars": 8366,
    "preview": "#ifndef Py_CEVAL_H\n#define Py_CEVAL_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Interface to random parts in ceval.c *"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/classobject.h",
    "chars": 1710,
    "preview": "/* Former class object interface -- now only bound methods are here  */\n\n/* Revealing some structures (not for general u"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/code.h",
    "chars": 6982,
    "preview": "/* Definitions for bytecode */\n\n#ifndef Py_LIMITED_API\n#ifndef Py_CODE_H\n#define Py_CODE_H\n#ifdef __cplusplus\nextern \"C\""
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/codecs.h",
    "chars": 6793,
    "preview": "#ifndef Py_CODECREGISTRY_H\n#define Py_CODECREGISTRY_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* -----------------------"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/compile.h",
    "chars": 3256,
    "preview": "#ifndef Py_COMPILE_H\n#define Py_COMPILE_H\n\n#ifndef Py_LIMITED_API\n#include \"code.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#en"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/complexobject.h",
    "chars": 1807,
    "preview": "/* Complex number structure */\n\n#ifndef Py_COMPLEXOBJECT_H\n#define Py_COMPLEXOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#e"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/context.h",
    "chars": 2014,
    "preview": "#ifndef Py_CONTEXT_H\n#define Py_CONTEXT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_LIMITED_API\n\n\nPyAPI_DATA(Py"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/abstract.h",
    "chars": 12295,
    "preview": "#ifndef Py_CPYTHON_ABSTRACTOBJECT_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/dictobject.h",
    "chars": 3845,
    "preview": "#ifndef Py_CPYTHON_DICTOBJECT_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\next"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/fileobject.h",
    "chars": 951,
    "preview": "#ifndef Py_CPYTHON_FILEOBJECT_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\next"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/initconfig.h",
    "chars": 16028,
    "preview": "#ifndef Py_PYCORECONFIG_H\n#define Py_PYCORECONFIG_H\n#ifndef Py_LIMITED_API\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* --"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/interpreteridobject.h",
    "chars": 456,
    "preview": "#ifndef Py_CPYTHON_INTERPRETERIDOBJECT_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplu"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/object.h",
    "chars": 15691,
    "preview": "#ifndef Py_CPYTHON_OBJECT_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nextern "
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/objimpl.h",
    "chars": 3600,
    "preview": "#ifndef Py_CPYTHON_OBJIMPL_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nextern"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/pyerrors.h",
    "chars": 4607,
    "preview": "#ifndef Py_CPYTHON_ERRORS_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nextern "
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/pylifecycle.h",
    "chars": 2263,
    "preview": "#ifndef Py_CPYTHON_PYLIFECYCLE_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nex"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/pymem.h",
    "chars": 3511,
    "preview": "#ifndef Py_CPYTHON_PYMEM_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nextern \""
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/pystate.h",
    "chars": 9743,
    "preview": "#ifndef Py_CPYTHON_PYSTATE_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nextern"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/sysmodule.h",
    "chars": 547,
    "preview": "#ifndef Py_CPYTHON_SYSMODULE_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nexte"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/traceback.h",
    "chars": 473,
    "preview": "#ifndef Py_CPYTHON_TRACEBACK_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nexte"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/tupleobject.h",
    "chars": 1036,
    "preview": "#ifndef Py_CPYTHON_TUPLEOBJECT_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nex"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/cpython/unicodeobject.h",
    "chars": 46299,
    "preview": "#ifndef Py_CPYTHON_UNICODEOBJECT_H\n#  error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\n"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/datetime.h",
    "chars": 9260,
    "preview": "/*  datetime.h\n */\n#ifndef Py_LIMITED_API\n#ifndef DATETIME_H\n#define DATETIME_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/descrobject.h",
    "chars": 3019,
    "preview": "/* Descriptors */\n#ifndef Py_DESCROBJECT_H\n#define Py_DESCROBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef PyOb"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/dictobject.h",
    "chars": 3716,
    "preview": "#ifndef Py_DICTOBJECT_H\n#define Py_DICTOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Dictionary object type -- map"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/dtoa.h",
    "chars": 458,
    "preview": "#ifndef Py_LIMITED_API\n#ifndef PY_NO_SHORT_FLOAT_REPR\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nPyAPI_FUNC(double) _Py_dg_"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/dynamic_annotations.h",
    "chars": 22469,
    "preview": "/* Copyright (c) 2008-2009, Google Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/enumobject.h",
    "chars": 253,
    "preview": "#ifndef Py_ENUMOBJECT_H\n#define Py_ENUMOBJECT_H\n\n/* Enumerate Object */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nPyAPI_D"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/errcode.h",
    "chars": 1695,
    "preview": "#ifndef Py_ERRCODE_H\n#define Py_ERRCODE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Error codes passed around between "
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/eval.h",
    "chars": 1209,
    "preview": "\n/* Interface to execute compiled code */\n\n#ifndef Py_EVAL_H\n#define Py_EVAL_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nP"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/fileobject.h",
    "chars": 1342,
    "preview": "/* File object interface (what's left of it -- see io.py) */\n\n#ifndef Py_FILEOBJECT_H\n#define Py_FILEOBJECT_H\n#ifdef __c"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/fileutils.h",
    "chars": 4352,
    "preview": "#ifndef Py_FILEUTILS_H\n#define Py_FILEUTILS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if !defined(Py_LIMITED_API) || Py"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/floatobject.h",
    "chars": 4794,
    "preview": "\n/* Float object interface */\n\n/*\nPyFloatObject represents a (double precision) floating point number.\n*/\n\n#ifndef Py_FL"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/frameobject.h",
    "chars": 3317,
    "preview": "/* Frame object interface */\n\n#ifndef Py_LIMITED_API\n#ifndef Py_FRAMEOBJECT_H\n#define Py_FRAMEOBJECT_H\n#ifdef __cplusplu"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/funcobject.h",
    "chars": 4200,
    "preview": "\n/* Function object interface */\n#ifndef Py_LIMITED_API\n#ifndef Py_FUNCOBJECT_H\n#define Py_FUNCOBJECT_H\n#ifdef __cpluspl"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/genobject.h",
    "chars": 3720,
    "preview": "\n/* Generator object interface */\n\n#ifndef Py_LIMITED_API\n#ifndef Py_GENOBJECT_H\n#define Py_GENOBJECT_H\n#ifdef __cpluspl"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/graminit.h",
    "chars": 2118,
    "preview": "/* Generated by Parser/pgen */\n\n#define single_input 256\n#define file_input 257\n#define eval_input 258\n#define decorator"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/grammar.h",
    "chars": 1821,
    "preview": "\n/* Grammar interface */\n\n#ifndef Py_GRAMMAR_H\n#define Py_GRAMMAR_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"bi"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/import.h",
    "chars": 4926,
    "preview": "\n/* Module definition and import interface */\n\n#ifndef Py_IMPORT_H\n#define Py_IMPORT_H\n#ifdef __cplusplus\nextern \"C\" {\n#"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_accu.h",
    "chars": 1126,
    "preview": "#ifndef Py_LIMITED_API\n#ifndef Py_INTERNAL_ACCU_H\n#define Py_INTERNAL_ACCU_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_atomic.h",
    "chars": 16944,
    "preview": "#ifndef Py_ATOMIC_H\n#define Py_ATOMIC_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_CORE\n#  error \"this hea"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_ceval.h",
    "chars": 966,
    "preview": "#ifndef Py_INTERNAL_CEVAL_H\n#define Py_INTERNAL_CEVAL_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_CORE\n# "
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_code.h",
    "chars": 542,
    "preview": "#ifndef Py_INTERNAL_CODE_H\n#define Py_INTERNAL_CODE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n \ntypedef struct {\n    PyOb"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_condvar.h",
    "chars": 2809,
    "preview": "#ifndef Py_INTERNAL_CONDVAR_H\n#define Py_INTERNAL_CONDVAR_H\n\n#ifndef Py_BUILD_CORE\n#  error \"this header requires Py_BUI"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_context.h",
    "chars": 779,
    "preview": "#ifndef Py_INTERNAL_CONTEXT_H\n#define Py_INTERNAL_CONTEXT_H\n\n#ifndef Py_BUILD_CORE\n#  error \"this header requires Py_BUI"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_fileutils.h",
    "chars": 1254,
    "preview": "#ifndef Py_INTERNAL_FILEUTILS_H\n#define Py_INTERNAL_FILEUTILS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_getopt.h",
    "chars": 490,
    "preview": "#ifndef Py_INTERNAL_PYGETOPT_H\n#define Py_INTERNAL_PYGETOPT_H\n\n#ifndef Py_BUILD_CORE\n#  error \"this header requires Py_B"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_gil.h",
    "chars": 1520,
    "preview": "#ifndef Py_INTERNAL_GIL_H\n#define Py_INTERNAL_GIL_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_CORE\n#  err"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_hamt.h",
    "chars": 3128,
    "preview": "#ifndef Py_INTERNAL_HAMT_H\n#define Py_INTERNAL_HAMT_H\n\n#ifndef Py_BUILD_CORE\n#  error \"this header requires Py_BUILD_COR"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_initconfig.h",
    "chars": 5168,
    "preview": "#ifndef Py_INTERNAL_CORECONFIG_H\n#define Py_INTERNAL_CORECONFIG_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUI"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_object.h",
    "chars": 2896,
    "preview": "#ifndef Py_INTERNAL_OBJECT_H\n#define Py_INTERNAL_OBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_CORE\n"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pathconfig.h",
    "chars": 2037,
    "preview": "#ifndef Py_INTERNAL_PATHCONFIG_H\n#define Py_INTERNAL_PATHCONFIG_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUI"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pyerrors.h",
    "chars": 1329,
    "preview": "#ifndef Py_INTERNAL_PYERRORS_H\n#define Py_INTERNAL_PYERRORS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_C"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pyhash.h",
    "chars": 206,
    "preview": "#ifndef Py_INTERNAL_HASH_H\n#define Py_INTERNAL_HASH_H\n\n#ifndef Py_BUILD_CORE\n#  error \"this header requires Py_BUILD_COR"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pylifecycle.h",
    "chars": 3758,
    "preview": "#ifndef Py_INTERNAL_LIFECYCLE_H\n#define Py_INTERNAL_LIFECYCLE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pymem.h",
    "chars": 8216,
    "preview": "#ifndef Py_INTERNAL_PYMEM_H\n#define Py_INTERNAL_PYMEM_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_CORE\n# "
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pystate.h",
    "chars": 9494,
    "preview": "#ifndef Py_INTERNAL_PYSTATE_H\n#define Py_INTERNAL_PYSTATE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_COR"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_traceback.h",
    "chars": 3076,
    "preview": "#ifndef Py_INTERNAL_TRACEBACK_H\n#define Py_INTERNAL_TRACEBACK_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_tupleobject.h",
    "chars": 418,
    "preview": "#ifndef Py_INTERNAL_TUPLEOBJECT_H\n#define Py_INTERNAL_TUPLEOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_B"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_warnings.h",
    "chars": 591,
    "preview": "#ifndef Py_INTERNAL_WARNINGS_H\n#define Py_INTERNAL_WARNINGS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_C"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/interpreteridobject.h",
    "chars": 334,
    "preview": "#ifndef Py_INTERPRETERIDOBJECT_H\n#define Py_INTERPRETERIDOBJECT_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_LI"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/intrcheck.h",
    "chars": 861,
    "preview": "\n#ifndef Py_INTRCHECK_H\n#define Py_INTRCHECK_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nPyAPI_FUNC(int) PyOS_InterruptOcc"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/iterobject.h",
    "chars": 567,
    "preview": "#ifndef Py_ITEROBJECT_H\n#define Py_ITEROBJECT_H\n/* Iterators (the basic kind, over a sequence) */\n#ifdef __cplusplus\next"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/listobject.h",
    "chars": 2927,
    "preview": "\n/* List object interface */\n\n/*\nAnother generally useful object type is a list of object pointers.\nThis is a mutable ty"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/longintrepr.h",
    "chars": 3799,
    "preview": "#ifndef Py_LIMITED_API\n#ifndef Py_LONGINTREPR_H\n#define Py_LONGINTREPR_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Thi"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/longobject.h",
    "chars": 9520,
    "preview": "#ifndef Py_LONGOBJECT_H\n#define Py_LONGOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Long (arbitrary precision) i"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/marshal.h",
    "chars": 803,
    "preview": "\n/* Interface for marshal.c */\n\n#ifndef Py_MARSHAL_H\n#define Py_MARSHAL_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#defin"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/memoryobject.h",
    "chars": 2765,
    "preview": "/* Memory view object. In Python this is available as \"memoryview\". */\n\n#ifndef Py_MEMORYOBJECT_H\n#define Py_MEMORYOBJEC"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/methodobject.h",
    "chars": 4406,
    "preview": "\n/* Method object interface */\n\n#ifndef Py_METHODOBJECT_H\n#define Py_METHODOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#end"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/modsupport.h",
    "chars": 9591,
    "preview": "\n#ifndef Py_MODSUPPORT_H\n#define Py_MODSUPPORT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Module support interface */\n"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/moduleobject.h",
    "chars": 2362,
    "preview": "\n/* Module object interface */\n\n#ifndef Py_MODULEOBJECT_H\n#define Py_MODULEOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#end"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/namespaceobject.h",
    "chars": 349,
    "preview": "\n/* simple namespace object interface */\n\n#ifndef NAMESPACEOBJECT_H\n#define NAMESPACEOBJECT_H\n#ifdef __cplusplus\nextern "
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/node.h",
    "chars": 1328,
    "preview": "\n/* Parse tree node interface */\n\n#ifndef Py_NODE_H\n#define Py_NODE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef st"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/object.h",
    "chars": 29600,
    "preview": "#ifndef Py_OBJECT_H\n#define Py_OBJECT_H\n\n#include \"pymem.h\"   /* _Py_tracemalloc_config */\n\n#ifdef __cplusplus\nextern \"C"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/objimpl.h",
    "chars": 10537,
    "preview": "/* The PyObject_ memory family:  high-level object memory interfaces.\n   See pymem.h for the low-level PyMem_ family.\n*/"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/odictobject.h",
    "chars": 1300,
    "preview": "#ifndef Py_ODICTOBJECT_H\n#define Py_ODICTOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* OrderedDict */\n/* This API"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/opcode.h",
    "chars": 5164,
    "preview": "/* Auto-generated by Tools/scripts/generate_opcode_h.py from Lib/opcode.py */\n#ifndef Py_OPCODE_H\n#define Py_OPCODE_H\n#i"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/osdefs.h",
    "chars": 737,
    "preview": "#ifndef Py_OSDEFS_H\n#define Py_OSDEFS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Operating system dependencies */\n\n#i"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/osmodule.h",
    "chars": 291,
    "preview": "\n/* os module interface */\n\n#ifndef Py_OSMODULE_H\n#define Py_OSMODULE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if !def"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/parsetok.h",
    "chars": 2958,
    "preview": "/* Parser-tokenizer link interface */\n\n#ifndef Py_LIMITED_API\n#ifndef Py_PARSETOK_H\n#define Py_PARSETOK_H\n#ifdef __cplus"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/patchlevel.h",
    "chars": 1297,
    "preview": "\n/* Python version identification scheme.\n\n   When the major or minor version changes, the VERSION variable in\n   config"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/picklebufobject.h",
    "chars": 847,
    "preview": "/* PickleBuffer object. This is built-in for ease of use from third-party\n * C extensions.\n */\n\n#ifndef Py_PICKLEBUFOBJE"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/py_curses.h",
    "chars": 2477,
    "preview": "\n#ifndef Py_CURSES_H\n#define Py_CURSES_H\n\n#ifdef __APPLE__\n/*\n** On Mac OS X 10.2 [n]curses.h and stdlib.h use different"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pyarena.h",
    "chars": 2744,
    "preview": "/* An arena-like memory interface for the compiler.\n */\n\n#ifndef Py_LIMITED_API\n#ifndef Py_PYARENA_H\n#define Py_PYARENA_"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pycapsule.h",
    "chars": 1726,
    "preview": "\n/* Capsule objects let you wrap a C \"void *\" pointer in a Python\n   object.  They're a way of passing data through the "
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pyconfig.h",
    "chars": 47437,
    "preview": "/* pyconfig.h.  Generated from pyconfig.h.in by configure.  */\n/* pyconfig.h.in.  Generated from configure.ac by autohea"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pyctype.h",
    "chars": 1320,
    "preview": "#ifndef Py_LIMITED_API\n#ifndef PYCTYPE_H\n#define PYCTYPE_H\n\n#define PY_CTF_LOWER  0x01\n#define PY_CTF_UPPER  0x02\n#defin"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pydebug.h",
    "chars": 1214,
    "preview": "#ifndef Py_LIMITED_API\n#ifndef Py_PYDEBUG_H\n#define Py_PYDEBUG_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* These global"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pydtrace.h",
    "chars": 2413,
    "preview": "/* Static DTrace probes interface */\n\n#ifndef Py_DTRACE_H\n#define Py_DTRACE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#i"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pyerrors.h",
    "chars": 12786,
    "preview": "#ifndef Py_ERRORS_H\n#define Py_ERRORS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Error handling definitions */\n\nPyAPI_"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pyexpat.h",
    "chars": 2450,
    "preview": "/* Stuff to export relevant 'expat' entry points from pyexpat to other\n * parser modules, such as cElementTree. */\n\n/* n"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pyfpe.h",
    "chars": 341,
    "preview": "#ifndef Py_PYFPE_H\n#define Py_PYFPE_H\n\n/* These macros used to do something when Python was built with --with-fpectl,\n *"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pyhash.h",
    "chars": 4140,
    "preview": "#ifndef Py_HASH_H\n\n#define Py_HASH_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Helpers for hash functions */\n#ifndef Py"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pylifecycle.h",
    "chars": 2081,
    "preview": "\n/* Interfaces to configure, query, create & destroy the Python runtime */\n\n#ifndef Py_PYLIFECYCLE_H\n#define Py_PYLIFECY"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pymacconfig.h",
    "chars": 2989,
    "preview": "#ifndef PYMACCONFIG_H\n#define PYMACCONFIG_H\n     /*\n      * This file moves some of the autoconf magic to compile-time\n "
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pymacro.h",
    "chars": 3778,
    "preview": "#ifndef Py_PYMACRO_H\n#define Py_PYMACRO_H\n\n/* Minimum value between x and y */\n#define Py_MIN(x, y) (((x) > (y)) ? (y) :"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pymath.h",
    "chars": 8312,
    "preview": "#ifndef Py_PYMATH_H\n#define Py_PYMATH_H\n\n#include \"pyconfig.h\" /* include for defines */\n\n/*****************************"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pymem.h",
    "chars": 5406,
    "preview": "/* The PyMem_ family:  low-level memory allocation interfaces.\n   See objimpl.h for the PyObject_ memory family.\n*/\n\n#if"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pyport.h",
    "chars": 30221,
    "preview": "#ifndef Py_PYPORT_H\n#define Py_PYPORT_H\n\n#include \"pyconfig.h\" /* include for defines */\n\n#include <inttypes.h>\n\n\n/* Def"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pystate.h",
    "chars": 4686,
    "preview": "/* Thread and interpreter state structures and their interfaces */\n\n\n#ifndef Py_PYSTATE_H\n#define Py_PYSTATE_H\n#ifdef __"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pystrcmp.h",
    "chars": 436,
    "preview": "#ifndef Py_STRCMP_H\n#define Py_STRCMP_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nPyAPI_FUNC(int) PyOS_mystrnicmp(const c"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pystrhex.h",
    "chars": 849,
    "preview": "#ifndef Py_STRHEX_H\n#define Py_STRHEX_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_LIMITED_API\n/* Returns a str"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pystrtod.h",
    "chars": 1483,
    "preview": "#ifndef Py_STRTOD_H\n#define Py_STRTOD_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\nPyAPI_FUNC(double) PyOS_string_to_doub"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pythonrun.h",
    "chars": 7645,
    "preview": "\n/* Interfaces to parse and execute pieces of python code */\n\n#ifndef Py_PYTHONRUN_H\n#define Py_PYTHONRUN_H\n#ifdef __cpl"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pythread.h",
    "chars": 5660,
    "preview": "\n#ifndef Py_PYTHREAD_H\n#define Py_PYTHREAD_H\n\ntypedef void *PyThread_type_lock;\ntypedef void *PyThread_type_sema;\n\n#ifde"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/pytime.h",
    "chars": 8926,
    "preview": "#ifndef Py_LIMITED_API\n#ifndef Py_PYTIME_H\n#define Py_PYTIME_H\n\n#include \"pyconfig.h\" /* include for defines */\n#include"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/rangeobject.h",
    "chars": 629,
    "preview": "\n/* Range object interface */\n\n#ifndef Py_RANGEOBJECT_H\n#define Py_RANGEOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/setobject.h",
    "chars": 3362,
    "preview": "/* Set object interface */\n\n#ifndef Py_SETOBJECT_H\n#define Py_SETOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifnde"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/sliceobject.h",
    "chars": 2517,
    "preview": "#ifndef Py_SLICEOBJECT_H\n#define Py_SLICEOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* The unique ellipsis object "
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/structmember.h",
    "chars": 2030,
    "preview": "#ifndef Py_STRUCTMEMBER_H\n#define Py_STRUCTMEMBER_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Interface to map C struc"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/structseq.h",
    "chars": 1377,
    "preview": "\n/* Named tuple object interface */\n\n#ifndef Py_STRUCTSEQ_H\n#define Py_STRUCTSEQ_H\n#ifdef __cplusplus\nextern \"C\" {\n#endi"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/symtable.h",
    "chars": 5308,
    "preview": "#ifndef Py_LIMITED_API\n#ifndef Py_SYMTABLE_H\n#define Py_SYMTABLE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"Pyt"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/sysmodule.h",
    "chars": 1242,
    "preview": "\n/* System module interface */\n\n#ifndef Py_SYSMODULE_H\n#define Py_SYSMODULE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nPy"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/token.h",
    "chars": 2429,
    "preview": "/* Auto-generated by Tools/scripts/generate_token.py */\n\n/* Token types */\n#ifndef Py_LIMITED_API\n#ifndef Py_TOKEN_H\n#de"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/traceback.h",
    "chars": 601,
    "preview": "#ifndef Py_TRACEBACK_H\n#define Py_TRACEBACK_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct _frame;\n\n/* Traceback inter"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/tracemalloc.h",
    "chars": 1114,
    "preview": "#ifndef Py_TRACEMALLOC_H\n#define Py_TRACEMALLOC_H\n\n#ifndef Py_LIMITED_API\n/* Track an allocated memory block in the trac"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/tupleobject.h",
    "chars": 1661,
    "preview": "/* Tuple object interface */\n\n#ifndef Py_TUPLEOBJECT_H\n#define Py_TUPLEOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/typeslots.h",
    "chars": 2253,
    "preview": "/* Do not renumber the file; these numbers are part of the stable ABI. */\n/* Disabled, see #10181 */\n#undef Py_bf_getbuf"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/ucnhash.h",
    "chars": 1056,
    "preview": "/* Unicode name database interface */\n#ifndef Py_LIMITED_API\n#ifndef Py_UCNHASH_H\n#define Py_UCNHASH_H\n#ifdef __cplusplu"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/unicodeobject.h",
    "chars": 35732,
    "preview": "#ifndef Py_UNICODEOBJECT_H\n#define Py_UNICODEOBJECT_H\n\n#include <stdarg.h>\n\n/*\n\nUnicode implementation based on original"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/warnings.h",
    "chars": 1776,
    "preview": "#ifndef Py_WARNINGS_H\n#define Py_WARNINGS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_LIMITED_API\nPyAPI_FUNC(Py"
  },
  {
    "path": "python-for-ios/dist/root/python3/include/python3.8/weakrefobject.h",
    "chars": 2866,
    "preview": "/* Weak references objects for Python. */\n\n#ifndef Py_WEAKREFOBJECT_H\n#define Py_WEAKREFOBJECT_H\n#ifdef __cplusplus\nexte"
  },
  {
    "path": "python-for-ios/dist/root/python3/lib/bootstrap.py",
    "chars": 1015,
    "preview": "\"\"\"\nThis file is executed when the Python interpreter is started.\nUse this file to configure all your necessary python c"
  },
  {
    "path": "python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/Makefile",
    "chars": 99152,
    "preview": "# Generated automatically from Makefile.pre by makesetup.\n# Top-level Makefile for Python\n#\n# As distributed, this file "
  },
  {
    "path": "python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/Setup",
    "chars": 14786,
    "preview": "# -*- makefile -*-\n# The file Setup is used by the makesetup script to construct the files\n# Makefile and config.c, from"
  },
  {
    "path": "python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/Setup.local",
    "chars": 3164,
    "preview": "#####################################################################\n# Static compilation instructions for all binary m"
  },
  {
    "path": "python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/config.c",
    "chars": 6802,
    "preview": "/* Generated automatically from ./Modules/config.c.in by makesetup. */\n/* -*- C -*- ************************************"
  },
  {
    "path": "python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/python-config.py",
    "chars": 2189,
    "preview": "#!/Users/jventura/Documents/Projectos/pybridge_ios/dist/root/python3/bin/python3.8\n# -*- python -*-\n\n# Keep this script "
  },
  {
    "path": "python-for-ios/dist/root/python3/lib/python3.8/site-packages/README.txt",
    "chars": 119,
    "preview": "This directory exists so that 3rd party packages can be installed\nhere.  Read the source for site.py for more details.\n"
  },
  {
    "path": "python-for-ios/dist/root/python3/lib/python3.8/site-packages/_sqlite3/__init__.py",
    "chars": 69,
    "preview": "__version__ = 'kivy-ios'\nfrom ._sqlite3 import *  # noqa: F401, F403\n"
  }
]

// ... and 4 more files (download for full content)

About this extraction

This page contains the full source code of the joaoventura/pybridge-ios GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 163 files (42.8 MB), approximately 234.0k tokens, and a symbol index with 454 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!