Copy disabled (too large)
Download .txt
Showing preview only (24,072K chars total). Download the full file to get everything.
Repository: kdrag0n/freqbench
Branch: master
Commit: 9eb16adcec15
Files: 1549
Total size: 22.7 MB
Directory structure:
gitextract_7njipo89/
├── .gitignore
├── LICENSE
├── README.md
├── anykernel/
│ ├── LICENSE
│ ├── META-INF/
│ │ └── com/
│ │ └── google/
│ │ └── android/
│ │ ├── update-binary
│ │ └── updater-script
│ ├── anykernel.sh
│ └── tools/
│ ├── ak3-core.sh
│ ├── busybox
│ └── magiskboot
├── bench.py
├── boot-v1/
│ ├── .gitignore
│ ├── pack.sh
│ ├── test.sh
│ └── unpack.sh
├── config.sh
├── dhcpd.conf
├── init.sh
├── mkbootimg.py
├── pack-img.sh
├── pack-zip.sh
├── packrd-gz.sh
├── postprocess/
│ ├── cross_cpu_cluster_graph.py
│ ├── cross_cpu_voltage_graph.py
│ ├── efficient_freqs.py
│ ├── filter_freqs.py
│ ├── idle_csv.py
│ ├── legacy_energy_model.py
│ ├── requirements.txt
│ ├── simplified_energy_model.py
│ ├── unified_cluster_col.py
│ └── unified_cluster_graph.py
├── rd/
│ ├── bin/
│ │ ├── bash
│ │ ├── busybox
│ │ ├── dmesg
│ │ ├── more
│ │ ├── mount
│ │ ├── mountpoint
│ │ └── umount
│ ├── dev/
│ │ └── null
│ ├── etc/
│ │ ├── alpine-release
│ │ ├── apk/
│ │ │ ├── arch
│ │ │ ├── keys/
│ │ │ │ ├── alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub
│ │ │ │ └── alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub
│ │ │ ├── repositories
│ │ │ └── world
│ │ ├── crontabs/
│ │ │ └── root
│ │ ├── dhcp/
│ │ │ └── dhcpd.conf.example
│ │ ├── dropbear/
│ │ │ └── dropbear_ecdsa_host_key
│ │ ├── fstab
│ │ ├── group
│ │ ├── group-
│ │ ├── hostname
│ │ ├── hosts
│ │ ├── inittab
│ │ ├── inputrc
│ │ ├── issue
│ │ ├── logrotate.d/
│ │ │ └── acpid
│ │ ├── modprobe.d/
│ │ │ ├── aliases.conf
│ │ │ ├── blacklist.conf
│ │ │ ├── i386.conf
│ │ │ └── kms.conf
│ │ ├── modules
│ │ ├── motd
│ │ ├── network/
│ │ │ └── if-up.d/
│ │ │ └── dad
│ │ ├── os-release
│ │ ├── passwd
│ │ ├── passwd-
│ │ ├── profile
│ │ ├── profile.d/
│ │ │ ├── color_prompt
│ │ │ └── locale
│ │ ├── protocols
│ │ ├── resolv.conf
│ │ ├── securetty
│ │ ├── services
│ │ ├── shadow
│ │ ├── shadow-
│ │ ├── shells
│ │ ├── sysctl.conf
│ │ ├── terminfo/
│ │ │ ├── a/
│ │ │ │ ├── alacritty
│ │ │ │ └── ansi
│ │ │ ├── d/
│ │ │ │ └── dumb
│ │ │ ├── g/
│ │ │ │ ├── gnome
│ │ │ │ └── gnome-256color
│ │ │ ├── k/
│ │ │ │ ├── kitty
│ │ │ │ ├── konsole
│ │ │ │ ├── konsole-256color
│ │ │ │ └── konsole-linux
│ │ │ ├── l/
│ │ │ │ └── linux
│ │ │ ├── p/
│ │ │ │ ├── putty
│ │ │ │ └── putty-256color
│ │ │ ├── r/
│ │ │ │ ├── rxvt
│ │ │ │ └── rxvt-256color
│ │ │ ├── s/
│ │ │ │ ├── screen
│ │ │ │ ├── screen-256color
│ │ │ │ ├── st-0.6
│ │ │ │ ├── st-0.7
│ │ │ │ ├── st-0.8
│ │ │ │ ├── st-16color
│ │ │ │ ├── st-256color
│ │ │ │ ├── st-direct
│ │ │ │ └── sun
│ │ │ ├── t/
│ │ │ │ ├── terminator
│ │ │ │ ├── terminology
│ │ │ │ ├── terminology-0.6.1
│ │ │ │ ├── terminology-1.0.0
│ │ │ │ ├── tmux
│ │ │ │ └── tmux-256color
│ │ │ ├── v/
│ │ │ │ ├── vt100
│ │ │ │ ├── vt102
│ │ │ │ ├── vt200
│ │ │ │ ├── vt220
│ │ │ │ ├── vt52
│ │ │ │ ├── vte
│ │ │ │ └── vte-256color
│ │ │ └── x/
│ │ │ ├── xterm
│ │ │ ├── xterm-256color
│ │ │ ├── xterm-color
│ │ │ ├── xterm-kitty
│ │ │ └── xterm-xfree86
│ │ └── udhcpd.conf
│ ├── lib/
│ │ ├── firmware/
│ │ │ └── .gitignore
│ │ ├── ld-musl-aarch64.so.1
│ │ ├── libblkid.so.1.1.0
│ │ ├── libfdisk.so.1.1.0
│ │ ├── libmount.so.1.1.0
│ │ ├── libpopt.so.0.0.0
│ │ ├── libsmartcols.so.1.1.0
│ │ ├── libuuid.so.1.3.0
│ │ └── libz.so.1.2.11
│ ├── root/
│ │ └── .config/
│ │ └── htop/
│ │ └── htoprc
│ ├── sbin/
│ │ ├── blkid
│ │ ├── fdisk
│ │ ├── findfs
│ │ ├── fsck
│ │ ├── fsfreeze
│ │ ├── ldconfig
│ │ ├── mkfs
│ │ ├── mkmntdirs
│ │ └── nologin
│ └── usr/
│ ├── bin/
│ │ ├── 2to3-3.8
│ │ ├── chrt
│ │ ├── colcrt
│ │ ├── coremark
│ │ ├── dropbearkey
│ │ ├── getopt
│ │ ├── hardlink
│ │ ├── hexdump
│ │ ├── htop
│ │ ├── ldd
│ │ ├── look
│ │ ├── lscpu
│ │ ├── mesg
│ │ ├── pydoc3.8
│ │ ├── python3.8
│ │ ├── qrtr-ns
│ │ ├── reboot_with_cmd
│ │ ├── rename
│ │ ├── renice
│ │ ├── rev
│ │ ├── setarch
│ │ ├── setsid
│ │ ├── ssl_client
│ │ ├── taskset
│ │ ├── ul
│ │ └── uuidgen
│ ├── lib/
│ │ ├── bash/
│ │ │ ├── basename
│ │ │ ├── dirname
│ │ │ ├── fdflags
│ │ │ ├── finfo
│ │ │ ├── head
│ │ │ ├── id
│ │ │ ├── ln
│ │ │ ├── logname
│ │ │ ├── mkdir
│ │ │ ├── mypid
│ │ │ ├── pathchk
│ │ │ ├── print
│ │ │ ├── printenv
│ │ │ ├── push
│ │ │ ├── realpath
│ │ │ ├── rmdir
│ │ │ ├── seq
│ │ │ ├── setpgid
│ │ │ ├── sleep
│ │ │ ├── strftime
│ │ │ ├── sync
│ │ │ ├── tee
│ │ │ ├── truefalse
│ │ │ ├── tty
│ │ │ ├── uname
│ │ │ ├── unlink
│ │ │ └── whoami
│ │ ├── libbz2.so.1.0.8
│ │ ├── libcap-ng.so.0.0.0
│ │ ├── libffi.so.7.1.0
│ │ ├── libformw.so.6.2
│ │ ├── libgcc_s.so.1
│ │ ├── libgdbm_compat.so.4.0.0
│ │ ├── liblzma.so.5.2.5
│ │ ├── libmenuw.so.6.2
│ │ ├── libncursesw.so.6.2
│ │ ├── libpanelw.so.6.2
│ │ ├── libpython3.8.so.1.0
│ │ ├── libreadline.so.8.0
│ │ ├── libstdc++.so.6.0.28
│ │ ├── libtls-standalone.so.1.0.0
│ │ └── python3.8/
│ │ ├── LICENSE.txt
│ │ ├── __future__.py
│ │ ├── __phello__.foo.py
│ │ ├── _bootlocale.py
│ │ ├── _collections_abc.py
│ │ ├── _compat_pickle.py
│ │ ├── _compression.py
│ │ ├── _dummy_thread.py
│ │ ├── _markupbase.py
│ │ ├── _osx_support.py
│ │ ├── _py_abc.py
│ │ ├── _pydecimal.py
│ │ ├── _pyio.py
│ │ ├── _sitebuiltins.py
│ │ ├── _strptime.py
│ │ ├── _sysconfigdata__linux_aarch64-linux-gnu.py
│ │ ├── _threading_local.py
│ │ ├── _weakrefset.py
│ │ ├── abc.py
│ │ ├── aifc.py
│ │ ├── antigravity.py
│ │ ├── argparse.py
│ │ ├── ast.py
│ │ ├── asynchat.py
│ │ ├── asyncore.py
│ │ ├── base64.py
│ │ ├── bdb.py
│ │ ├── binhex.py
│ │ ├── bisect.py
│ │ ├── bz2.py
│ │ ├── cProfile.py
│ │ ├── calendar.py
│ │ ├── cgi.py
│ │ ├── cgitb.py
│ │ ├── chunk.py
│ │ ├── cmd.py
│ │ ├── code.py
│ │ ├── codecs.py
│ │ ├── codeop.py
│ │ ├── collections/
│ │ │ ├── __init__.py
│ │ │ └── abc.py
│ │ ├── colorsys.py
│ │ ├── compileall.py
│ │ ├── configparser.py
│ │ ├── contextlib.py
│ │ ├── contextvars.py
│ │ ├── copy.py
│ │ ├── copyreg.py
│ │ ├── crypt.py
│ │ ├── csv.py
│ │ ├── curses/
│ │ │ ├── __init__.py
│ │ │ ├── ascii.py
│ │ │ ├── has_key.py
│ │ │ ├── panel.py
│ │ │ └── textpad.py
│ │ ├── dataclasses.py
│ │ ├── datetime.py
│ │ ├── dbm/
│ │ │ ├── __init__.py
│ │ │ ├── dumb.py
│ │ │ ├── gnu.py
│ │ │ └── ndbm.py
│ │ ├── decimal.py
│ │ ├── dis.py
│ │ ├── dummy_threading.py
│ │ ├── encodings/
│ │ │ ├── __init__.py
│ │ │ ├── aliases.py
│ │ │ ├── ascii.py
│ │ │ ├── base64_codec.py
│ │ │ ├── big5.py
│ │ │ ├── bz2_codec.py
│ │ │ ├── charmap.py
│ │ │ ├── gbk.py
│ │ │ ├── hex_codec.py
│ │ │ ├── hz.py
│ │ │ ├── idna.py
│ │ │ ├── iso8859_1.py
│ │ │ ├── latin_1.py
│ │ │ ├── mbcs.py
│ │ │ ├── oem.py
│ │ │ ├── quopri_codec.py
│ │ │ ├── raw_unicode_escape.py
│ │ │ ├── rot_13.py
│ │ │ ├── undefined.py
│ │ │ ├── unicode_escape.py
│ │ │ ├── utf_16.py
│ │ │ ├── utf_16_be.py
│ │ │ ├── utf_16_le.py
│ │ │ ├── utf_32.py
│ │ │ ├── utf_32_be.py
│ │ │ ├── utf_32_le.py
│ │ │ ├── utf_7.py
│ │ │ ├── utf_8.py
│ │ │ ├── utf_8_sig.py
│ │ │ ├── uu_codec.py
│ │ │ └── zlib_codec.py
│ │ ├── enum.py
│ │ ├── filecmp.py
│ │ ├── fileinput.py
│ │ ├── fnmatch.py
│ │ ├── formatter.py
│ │ ├── fractions.py
│ │ ├── ftplib.py
│ │ ├── functools.py
│ │ ├── genericpath.py
│ │ ├── getopt.py
│ │ ├── getpass.py
│ │ ├── gettext.py
│ │ ├── glob.py
│ │ ├── gzip.py
│ │ ├── hashlib.py
│ │ ├── heapq.py
│ │ ├── hmac.py
│ │ ├── imghdr.py
│ │ ├── imp.py
│ │ ├── importlib/
│ │ │ ├── __init__.py
│ │ │ ├── _bootstrap.py
│ │ │ ├── _bootstrap_external.py
│ │ │ ├── abc.py
│ │ │ ├── machinery.py
│ │ │ ├── metadata.py
│ │ │ ├── resources.py
│ │ │ └── util.py
│ │ ├── inspect.py
│ │ ├── io.py
│ │ ├── ipaddress.py
│ │ ├── json/
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ ├── encoder.py
│ │ │ ├── scanner.py
│ │ │ └── tool.py
│ │ ├── keyword.py
│ │ ├── linecache.py
│ │ ├── locale.py
│ │ ├── lzma.py
│ │ ├── mailcap.py
│ │ ├── mimetypes.py
│ │ ├── modulefinder.py
│ │ ├── netrc.py
│ │ ├── ntpath.py
│ │ ├── nturl2path.py
│ │ ├── numbers.py
│ │ ├── opcode.py
│ │ ├── operator.py
│ │ ├── optparse.py
│ │ ├── os.py
│ │ ├── pathlib.py
│ │ ├── pipes.py
│ │ ├── pkgutil.py
│ │ ├── platform.py
│ │ ├── plistlib.py
│ │ ├── poplib.py
│ │ ├── posixpath.py
│ │ ├── pprint.py
│ │ ├── profile.py
│ │ ├── pstats.py
│ │ ├── pty.py
│ │ ├── py_compile.py
│ │ ├── pyclbr.py
│ │ ├── queue.py
│ │ ├── quopri.py
│ │ ├── random.py
│ │ ├── re.py
│ │ ├── reprlib.py
│ │ ├── rlcompleter.py
│ │ ├── runpy.py
│ │ ├── sched.py
│ │ ├── secrets.py
│ │ ├── selectors.py
│ │ ├── shelve.py
│ │ ├── shlex.py
│ │ ├── shutil.py
│ │ ├── signal.py
│ │ ├── site-packages/
│ │ │ └── README.txt
│ │ ├── site.py
│ │ ├── smtpd.py
│ │ ├── sndhdr.py
│ │ ├── socket.py
│ │ ├── socketserver.py
│ │ ├── sqlite3/
│ │ │ ├── __init__.py
│ │ │ ├── dbapi2.py
│ │ │ └── dump.py
│ │ ├── sre_compile.py
│ │ ├── sre_constants.py
│ │ ├── sre_parse.py
│ │ ├── ssl.py
│ │ ├── stat.py
│ │ ├── statistics.py
│ │ ├── string.py
│ │ ├── stringprep.py
│ │ ├── struct.py
│ │ ├── subprocess.py
│ │ ├── sunau.py
│ │ ├── symbol.py
│ │ ├── symtable.py
│ │ ├── sysconfig.py
│ │ ├── tabnanny.py
│ │ ├── telnetlib.py
│ │ ├── tempfile.py
│ │ ├── textwrap.py
│ │ ├── this.py
│ │ ├── threading.py
│ │ ├── timeit.py
│ │ ├── token.py
│ │ ├── tokenize.py
│ │ ├── trace.py
│ │ ├── traceback.py
│ │ ├── tracemalloc.py
│ │ ├── tty.py
│ │ ├── types.py
│ │ ├── typing.py
│ │ ├── uu.py
│ │ ├── uuid.py
│ │ ├── warnings.py
│ │ ├── wave.py
│ │ ├── weakref.py
│ │ ├── webbrowser.py
│ │ ├── xdrlib.py
│ │ ├── zipapp.py
│ │ └── zipimport.py
│ ├── sbin/
│ │ ├── dhcpd
│ │ └── dropbear
│ └── share/
│ ├── applications/
│ │ └── htop.desktop
│ └── udhcpc/
│ └── default.script
├── reboot_with_cmd.c
├── results/
│ ├── README.md
│ ├── exynos5250/
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── voltages.txt
│ ├── exynos7880/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── exynos7904/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ └── total_trans
│ │ │ └── 6/
│ │ │ ├── time_in_state
│ │ │ └── total_trans
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── exynos9611/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 4/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── gs101/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── 4/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 6/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── gs201/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── 4/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 6/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── msm8917/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ └── 0/
│ │ │ ├── time_in_state
│ │ │ └── total_trans
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── msm8940/
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ └── total_trans
│ │ │ │ └── 4/
│ │ │ │ ├── time_in_state
│ │ │ │ └── total_trans
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── old/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ └── total_trans
│ │ │ └── 4/
│ │ │ ├── time_in_state
│ │ │ └── total_trans
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── msm8953/
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ └── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ └── total_trans
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── second/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ └── 0/
│ │ │ ├── time_in_state
│ │ │ └── total_trans
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── msm8996/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── msm8998/
│ │ ├── fts-irq-storm/
│ │ │ ├── cmdline.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ └── versions.txt
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── mt6768/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── mt6853t/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sdm439/
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── olive/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sdm630/
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── second/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sdm632/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ └── total_trans
│ │ │ └── 4/
│ │ │ ├── time_in_state
│ │ │ └── total_trans
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sdm636/
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ └── total_trans
│ │ │ │ └── 4/
│ │ │ │ ├── time_in_state
│ │ │ │ └── total_trans
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── second/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sdm660/
│ │ ├── fourth/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── second/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── third/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sdm670/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ └── total_trans
│ │ │ └── 6/
│ │ │ ├── time_in_state
│ │ │ └── total_trans
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sdm710/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ └── total_trans
│ │ │ └── 6/
│ │ │ ├── time_in_state
│ │ │ └── total_trans
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sdm712/
│ │ ├── RMX1921/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── RMX1971/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ └── total_trans
│ │ │ │ └── 6/
│ │ │ │ ├── time_in_state
│ │ │ │ └── total_trans
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ └── total_trans
│ │ │ │ └── 6/
│ │ │ │ ├── time_in_state
│ │ │ │ └── total_trans
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── second/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ └── total_trans
│ │ │ └── 6/
│ │ │ ├── time_in_state
│ │ │ └── total_trans
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sdm845/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sm6115/
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 4/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── second/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 4/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sm6125/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sm6150/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── dev.list
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sm6150ac/
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ ├── trans_table
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── new/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 6/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sm7125/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 6/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sm7150/
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 6/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── second/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 6/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── third/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 6/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sm7150ab/
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── sunfish/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 6/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sm7150ac/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 6/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sm7225/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 6/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── m23xq/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 6/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sm7250ab/
│ │ ├── 250kiter-headless/
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ └── run.log
│ │ ├── dyniter-headless/
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ └── run.log
│ │ ├── efficient_voltages.txt
│ │ ├── main/
│ │ │ ├── clusters_coremarks.csv
│ │ │ ├── clusters_power.csv
│ │ │ ├── idle.csv
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ └── run.log
│ │ ├── new/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ ├── 6/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 7/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ └── versions.txt
│ │ └── voltages.txt
│ ├── sm8150/
│ │ ├── eff_freqs.txt
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ ├── 4/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 7/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── eff_results.json
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ └── versions.txt
│ │ ├── new/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ ├── 4/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 7/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── voltages.txt
│ ├── sm8150ac/
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ └── versions.txt
│ │ ├── new/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ ├── 4/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 7/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── voltages.txt
│ ├── sm8250/
│ │ ├── k30s/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ ├── 4/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 7/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── voltages_k30su.txt
│ │ └── voltages_mi10tp.txt
│ ├── sm8250ac/
│ │ ├── cmdline.txt
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── sm8350/
│ │ ├── fifth/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ ├── 4/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 7/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── fourth/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ ├── 4/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 7/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── main/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ ├── 4/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 7/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── second/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ ├── 4/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 7/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── third/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── 4/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 7/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── t8103/
│ │ ├── asahi-cpufreq/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 4/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── asahi-cpufreq-max2988/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 4/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── asahi-cpufreq-single-pcore/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 4/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ ├── corellium-cpufreq/
│ │ │ ├── cmdline.txt
│ │ │ ├── cpufreq_stats/
│ │ │ │ ├── 0/
│ │ │ │ │ ├── time_in_state
│ │ │ │ │ ├── total_trans
│ │ │ │ │ └── trans_table
│ │ │ │ └── 4/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── cpuinfo.txt
│ │ │ ├── device.txt
│ │ │ ├── kernel.log
│ │ │ ├── post_bench_interrupts.txt
│ │ │ ├── pre_bench_interrupts.txt
│ │ │ ├── processes.txt
│ │ │ ├── results.csv
│ │ │ ├── results.json
│ │ │ ├── run.log
│ │ │ ├── uptime.txt
│ │ │ └── versions.txt
│ │ └── corellium-cpufreq-max2988/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 4/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ ├── zuma/
│ │ └── main/
│ │ ├── cmdline.txt
│ │ ├── cpufreq_stats/
│ │ │ ├── 0/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ ├── 4/
│ │ │ │ ├── time_in_state
│ │ │ │ ├── total_trans
│ │ │ │ └── trans_table
│ │ │ └── 8/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── cpuinfo.txt
│ │ ├── device.txt
│ │ ├── kernel.log
│ │ ├── post_bench_interrupts.txt
│ │ ├── pre_bench_interrupts.txt
│ │ ├── processes.txt
│ │ ├── results.csv
│ │ ├── results.json
│ │ ├── run.log
│ │ ├── uptime.txt
│ │ └── versions.txt
│ └── zumapro/
│ └── main/
│ ├── cmdline.txt
│ ├── cpufreq_stats/
│ │ ├── 0/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ ├── 4/
│ │ │ ├── time_in_state
│ │ │ ├── total_trans
│ │ │ └── trans_table
│ │ └── 7/
│ │ ├── time_in_state
│ │ ├── total_trans
│ │ └── trans_table
│ ├── cpuinfo.txt
│ ├── device.txt
│ ├── kernel.log
│ ├── post_bench_interrupts.txt
│ ├── pre_bench_interrupts.txt
│ ├── processes.txt
│ ├── results.csv
│ ├── results.json
│ ├── run.log
│ ├── uptime.txt
│ └── versions.txt
├── test-img.sh
└── usb.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.img
*.dtb
*.lz4
*.cpio
*.zip
*.pyc
rd/bench.py
rd/dhcpd.conf
rd/init
rd/usb.sh
rd/config.sh
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2020 Danny Lin <danny@kdrag0n.dev>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# freqbench

freqbench is a comprehensive CPU benchmark that benchmarks each CPU frequency step on each frequency scaling domain (e.g. ARM DynamIQ/big.LITTLE cluster). It is based on a minimal Alpine Linux userspace with the [EEMBC CoreMark](https://www.eembc.org/coremark/) workload and a Python benchmark coordinator.
Results include:
- Performance (CoreMark scores)
- Performance efficiency (CoreMarks per MHz)
- Power usage (in milliwatts)
- Energy usage (in millijoules and joules)
- Energy efficiency (ULPMark-CM scores: iterations per second per millijoule of energy used)
- Baseline power usage
- Time elapsed
- CPU frequency scaling stats during the benchmark (for validation)
- Diagnostic data (logs, kernel version, kernel command line, interrupts, processes)
- Raw power samples in machine-readable JSON format (for postprocessing)
## Why?
A benchmark like this can be useful for many reasons:
- Creating energy models for EAS (Energy-Aware Scheduling)
- Correcting inaccurate EAS energy models
- Analyzing performance and power trends
- Comparing efficiency across SoC and CPU generations
- Improving performance and battery life of mobile devices by utilizing the race-to-idle phenomenon with efficient frequencies
## Usage
It is possible to use freqbench with a stock kernel, but a custom kernel is **highly recommended** for accuracy. Stock OEM kernels are almost always missing features that the benchmark coordinator relies on for maximum accuracy. Custom kernel results are eligible for high accuracy classification, while stock kernel results are limited to low accuracy. Use a stock kernel at your own risk.
### Custom kernel (recommended)
Set the following kernel config options:
```bash
CONFIG_NO_HZ_FULL=y
CONFIG_CPU_FREQ_TIMES=n # may not exist
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_HZ_100=y
```
Example commit: [kirin_defconfig: Configure for freqbench](https://github.com/kdrag0n/proton_zf6/commit/59d24abf40dec)
If you have any commits that prevent userspace from controlling CPU affinities and utilization, frequencies, or anything of the sort, revert them for the benchmark to work properly. Here are some common examples of such commits in downstream kernels and their corresponding reverts:
- [Performance-critical IRQs and kthreads](https://github.com/kdrag0n/proton_kernel_wahoo/commit/29b315cd5f3a6)
- [Existing efficient frequency tables](https://github.com/kdrag0n/proton_kernel_wahoo/commit/9b98ee3fabd14)
- [Preventing userspace from setting minimum CPU frequencies](https://github.com/kdrag0n/proton_kernel_wahoo/commit/d9d2fe54e87f9)
- [Ratelimiting fuel gauge queries](https://github.com/kdrag0n/proton_kernel_wahoo/commit/87ac3f89c7392)
Example freqbench kernel adaptations:
- [Pixel 2, msm-4.4](https://github.com/kdrag0n/proton_kernel_wahoo/commits/alpine-fbench)
- [ZenFone 6, msm-4.14](https://github.com/kdrag0n/proton_zf6/commits/alpine-fbench-basic-example)
- [Pixel 5, msm-4.19](https://github.com/kdrag0n/proton_kernel_redbull/commits/alpine-fbench-basic-example) (this device uses boot image v3, so it follows the manual boot image guide below)
Compile and flash your new kernel. Note that Android will not work properly on this kernel, so make sure you take a backup of your old boot image to restore later.
If necessary, adjust the config parameters in `config.sh`. Most modern devices will not need any changes. Run `pack-zip.sh` and flash `freqbench-installer.zip`.
Unplug the device immediately, before the device starts booting. Do not try to wait for it to finish booting. Leaving the device plugged in will invalidate all power results.
Finally, wait until the device reboots itself. Do not touch the device, any of its buttons, or plug/unplug it during the test. It will be frozen on the bootloader splash screen; do not assume that it is broken. The benchmark is expected to take a long time; 1 hour is reasonable for a slower CPU.
Once the benchmark is done, retrieve the results from `/cache/freqbench` if your device has a cache partition, or `/persist/freqbench` otherwise (newer devices with A/B partitions don't have a cache partition).
If you are able to retrieve results, **please consider [contributing your results](#contributing-results)!** It's very helpful for me to see how well freqbench is working, and enables anyone to analyze results across different SoCs that they don't have.
If you have any problems, check the troubleshooting section before opening an issue.
### Manual boot image creation
Manually creating a new boot image with the kernel and ramdisk is only for advanced users. Use the AnyKernel3 installer unless you have good reason to do this.
Additional kernel config options:
```bash
CONFIG_CMDLINE="rcu_nocbs=0-7 isolcpus=1-7 nohz_full=1-7 loglevel=0 printk.devkmsg=on"
CONFIG_CMDLINE_EXTEND=y
```
If you don't have 8 CPU cores, adjust `0-7` to `0-<core count - 1>` and `1-7` to `1-<core count - 1>` where appropriate. Single-core CPUs are not supported. Be careful when adjusting the CPU sets as `rcu_nocbs` starts at CPU 0 while all other parameters start at CPU 1.
Create a boot image with your modified kernel and the freqbench ramdisk:
For boot image v0/v1 devices:
```bash
cd boot-v1
./unpack.sh path/to/normal/boot.img
./pack.sh
# New boot image will be created as new.img
```
For boot image v3 devices:
```bash
# Extract values from boot.img and update pack-img.sh accordingly
./pack-img.sh
# New boot image will be created as bench.img
```
After that, boot the modified image with `fastboot boot` if your device supports it, or flash it to the boot/recovery partition and boot that manually.
## Results
After the benchmark finishes, results can be found in `/cache/freqbench`, `/persist/freqbench`, or `/mnt/vendor/persist/freqbench`, in that order of preference. The first path that exists on your device will be used. Human-readable results, raw machine-readable JSON data, and diagnostic information are included for analysis.
If you got this far, please consider contributing your results to help freqbench evolve and gather data about different SoCs:
### Contributing results
If you run the benchmark on a SoC that is not [already included](https://github.com/kdrag0n/freqbench/tree/master/results), **please contribute your results!** It's very helpful for me to see how well freqbench is working, and enables anyone to analyze results across different SoCs that they don't have.
Contributing your results is easy:
1. [Fork this repository](https://github.com/kdrag0n/freqbench/)
2. Add your **entire results folder** (not just one file from it) to `results/socname/main`, replacing `socname` with the model name of your SoC in lowercase
3. [Open a pull request](https://github.com/kdrag0n/freqbench/compare)
If you don't know your SoC's model name, search the name of your SoC (e.g. [Snapdragon 855](https://www.qualcomm.com/products/snapdragon-855-mobile-platform)) and find the part number from the SoC manufacturer. You can also get it from your kernel source code and/or `device.txt` or `cpuinfo.txt` in the freqbench results. If you are still unsure, feel free to open an issue or guess the name.
Example names:
- `sm8150`
- `sm8150ac`
- `sm7250ab`
- `exynos8895`
- `mt6889`
Identifiable information such as the device serial number is automatically redacted by freqbench, so it should not be a problem.
Don't worry about getting something wrong; I would much rather have results submitted with mistakes than nothing at all.
## Post-processing
Several post-processing scripts, all written in Python and some using `matplotlib`, are available:
### Legacy energy model
Create a legacy EAS energy model for use with older kernels.
Optional argument after path to results: `key_type/value_type`
Key types:
- Frequency (default) - looks like `652800` or `2323200`
- Capacity - looks like `139` or `1024`
You must use the correct key type for your kernel. When in doubt, refer to your original energy model and check which one the numbers look more like.
In general, downstream Qualcomm kernels will use the following key types depending on version:
- 3.18: capacity
- 4.4: capacity
- 4.9: frequency
- 4.14: frequency
- 4.19: N/A (uses simplified energy model instead)
Modifying your kernel to switch from one to the other is left as an exercise for the reader.
Value types:
- Power (default)
- Energy (experimental, not recommended)
Do not change the value type unless you know what you're doing. The energy type only exists for testing purposes; do not expect it to work properly.
Once you have a full energy model generated, pick out the parts you need and incorporate them into your SoC device tree. In general, kernels 4.19 need `capacity-dmips-mhz`, while older kernels need `efficiency` when it comes to the contents of the CPU sections.
If you have an existing energy model that you want to use for idle and cluster costs, add it as an argument.
Example usage: `./legacy_energy_model.py results.json cap/power old_model.dtsi`
### Simplified energy model
Create a simplified EAS energy model for use with newer kernels.
Because voltages defined by the CPU frequency scaling driver cannot easily be accessed from userspace, you will need to provide them. Pass the voltage for each frequency step as an argument: `cpu#.khz=microvolts`
For Qualcomm SoCs on the msm-4.19 kernel, voltages can be obtained by booting the kernel (with or without freqbench doesn't matter, as long as you can get kernel logs) with [this commit](https://github.com/kdrag0n/proton_kernel_redbull/commit/8db0557716a4) and searching for lines containing `volt=` in the kernel log.
For msm-4.9 and msm-4.14, the process is the same but with [this commit](https://github.com/kdrag0n/proton_zf6/commit/f7cc2d654f1b9) and searching for `open_loop_voltage` instead.
Example usage: `./simplified_energy_model.py results.json 1.300000=580000 1.576000=580000 1.614400=580000 1.864000=644000 1.1075200=708000 1.1363200=788000 1.1516800=860000 1.1651200=888000 1.1804800=968000 6.652800=624000 6.940800=672000 6.1152000=704000 6.1478400=752000 6.1728000=820000 6.1900800=864000 6.2092800=916000 6.2208000=948000 7.806400=564000 7.1094400=624000 7.1401600=696000 7.1766400=776000 7.1996800=836000 7.2188800=888000 7.2304000=916000 7.2400000=940000`
### Efficient frequencies (experimental)
Derive a list of efficient frequencies for each cluster and create a new results.json with only those frequencies included.
Note that this script is **experimental** and may not produce optimal results. Manual tuning of the resulting frequency tables is recommended.
Example usage: `./efficient_freqs.py results.json eff_results.json`
### Filter frequencies
Create a new results.json with only the specified frequencies included.
Example usage: `./filter_freqs.py results.json filtered_results.json 1.1516800 1.1804800 6.1478400 6.1728000 6.2208000 7.1766400 7.2188800 7.2304000 7.2400000`
### Cross-CPU cluster graph

Graph a value for each cluster across different SoCs/CPUs.
Arguments:
- Add a SoC: `SoC-1:soc1/results.json`
- Specify the value to graph: `load/value` (load is idle/active)
- Set a flag: `+flagname` (soccolor, minscl)
Example usage: `./cross_cpu_cluster_graph.py 835:results/p2/main/results.json 855:results/zf6/main/results.json 855+:results/rog2/main/results.json 765G:results/p5/new-final/results.json active/power_mean +soccolor +minscl`
### Unified cluster graph

Graph a value for each cluster within the same SoC/CPU.
Example usage: `./unified_cluster_graph.py results.json coremark_score`
### Unified cluster column
Extract a value for each cluster within the same SoC/CPU and write the results into a CSV file.
Example usage: `./unified_cluster_csv.py results.json coremark_score cm_scores.csv`
## Troubleshooting
### Kernel panics on boot
If your kernel panics on boot, disable `CONFIG_CPU_FREQ_STAT`. If that causes the kernel to fail to compile, cherry-pick [cpufreq: Fix build with stats disabled](https://github.com/kdrag0n/proton_kernel_wahoo/commit/21e76d090e092).
### Results vary too much
Check kernel.log, pre- and post-bench interrupts, running processes, and cpufreq stats from the results directory to diagnose the issue.
### It's still running after an hour
If you have a slow CPU with a lot of frequency steps, this is not entirely unreasonable.
### I want to debug it while it's running
freqbench offers interactive debugging via SSH over virtual USB Ethernet; the device acts as a USB Ethernet adapter and exposes an SSH server on the internal network. This feature can be enabled with the `USB_DEBUG` option in `config.sh`. It is disabled by default to avoid unnecessary USB setup that may influence benchmark results, so keeping it enabled for a final benchmark run is not recommended.
`CONFIG_USB_CONFIGFS_RNDIS` must be enabled for this feature to work. If your kernel does not have or use configfs for USB configuration, it will not work regardless of whether you have the RNDIS function enabled.
Once it's enabled, connect your device to a computer over USB. You should see something like this in your kernel logs if you are running Linux:
```log
[7064379.627645] usb 7-3: new high-speed USB device number 114 using xhci_hcd
[7064379.772208] usb 7-3: New USB device found, idVendor=0b05, idProduct=4daf, bcdDevice= 4.14
[7064379.772210] usb 7-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[7064379.772211] usb 7-3: Product: Alpine GNU/Linux
[7064379.772211] usb 7-3: Manufacturer: Linux
[7064379.772212] usb 7-3: SerialNumber: ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@10.15.19.82
[7064379.818904] rndis_host 7-3:1.0 usb0: register 'rndis_host' at usb-0000:47:00.1-3, RNDIS device, da:34:ab:99:c5:81
[7064379.870018] rndis_host 7-3:1.0 enp71s0f1u3: renamed from usb0
```
Run the SSH command in the serial number field to open a shell to the device. The password is empty, so just press enter when asked to provide a password.
================================================
FILE: anykernel/LICENSE
================================================
## AnyKernel3 (AK3), and AnyKernel2/AnyKernel 2.0 (AK2) Scripts License:
AnyKernel (versions 2.0/2 and later) Android image modifying scripts.
Copyright (c) 2019 Chris Renshaw (osm0sis @ xda-developers),
and additional contributors per readily available commit history/credits.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the disclaimer
below) provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from this
software without specific prior written permission.
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY
THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
## Included Binary Licenses:
magiskboot, magiskpolicy (Magisk): GPLv3+
Magisk, including all git submodules are free software:
you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Per Section 6(d), official compiled binaries from unmodified source:
https://github.com/topjohnwu/Magisk
busybox: GPLv2
BusyBox is distributed under version 2 of the General Public
License. Version 2 is the only version of this license which this
version of BusyBox (or modified versions derived from this one) may
be distributed under.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
Per Section 3(b), self-compiled binary from modified source:
https://git.busybox.net/busybox/
https://github.com/osm0sis/android-busybox-ndk
(pre-patched source tree used to build available upon request)
## Optional Binary Licenses:
mkbootfs, mkbootimg: Apache License 2.0
mkmtkhdr: Apache License 2.0, implied (AOSP mkbootimg derived)
boot_signer*.jar: Apache License 2.0
Copyright (c) 2008 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Source not required, however, respective sources are provided:
https://github.com/osm0sis/mkbootfs
https://github.com/osm0sis/mkbootimg
https://github.com/osm0sis/mkmtkhdr
https://android.googlesource.com/platform/system/extras/+/master
flash_erase, nanddump, nandwrite (mtd-utils): GPLv2
dumpimage, mkimage (U-Boot): GPLv2+
mboot: GPLv2 (Intel mboot.py derived)
Copyright their respective authors, (linked below).
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
Per Section 3(b), self-compiled binaries from unmodified respective sources:
http://git.infradead.org/mtd-utils.git
https://gitlab.denx.de/u-boot/u-boot
https://github.com/osm0sis/mboot
futility: BSD 3-Clause License (Chromium OS)
unpackelf, elftool: BSD 3-Clause License, implied (Sony mkelf.py derived)
Copyright their respective authors, (linked below).
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Source not required, however, respective sources are provided:
https://github.com/osm0sis/futility
https://github.com/osm0sis/unpackelf
https://github.com/osm0sis/elftool
(https://github.com/sonyxperiadev/device-sony-lt26/tree/master/tools)
rkcrc: BSD 2-Clause License
Copyright (c) 2010, 2011 Fukaumi Naoki
Copyright (c) 2013 Ivo van Poorten
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Source not required, however, respective source is provided:
https://github.com/linux-rockchip/rkflashtool
## Additional Build Scripts for Listed Binaries (where used):
osm0sis' Odds and Ends Thread - Knowledge Base:
https://forum.xda-developers.com/showthread.php?p=53554719
================================================
FILE: anykernel/META-INF/com/google/android/update-binary
================================================
#!/sbin/sh
# AnyKernel3 Backend (DO NOT CHANGE)
# osm0sis @ xda-developers
OUTFD=/proc/self/fd/$2;
ZIPFILE="$3";
BOOTMODE=false;
ps | grep zygote | grep -v grep >/dev/null && BOOTMODE=true;
$BOOTMODE || ps -A 2>/dev/null | grep zygote | grep -v grep >/dev/null && BOOTMODE=true;
DIR=/sdcard;
$BOOTMODE || DIR=$(dirname "$ZIPFILE");
[ -d /postinstall/tmp ] && POSTINSTALL=/postinstall;
[ "$AKHOME" ] || AKHOME=$POSTINSTALL/tmp/anykernel;
[ "$ANDROID_ROOT" ] || ANDROID_ROOT=/system;
ui_print() {
until [ ! "$1" ]; do
echo "ui_print $1
ui_print" >> $OUTFD;
shift;
done;
}
ui_printfile() {
while IFS='' read -r line || $BB [[ -n "$line" ]]; do
ui_print "$line";
done < $1;
}
show_progress() { echo "progress $1 $2" >> $OUTFD; }
file_getprop() { $BB grep "^$2=" "$1" | $BB cut -d= -f2-; }
find_slot() {
local slot=$(getprop ro.boot.slot_suffix 2>/dev/null);
[ "$slot" ] || slot=$($BB grep -o 'androidboot.slot_suffix=.*$' /proc/cmdline | $BB cut -d\ -f1 | $BB cut -d= -f2);
if [ ! "$slot" ]; then
slot=$(getprop ro.boot.slot 2>/dev/null);
[ "$slot" ] || slot=$($BB grep -o 'androidboot.slot=.*$' /proc/cmdline | $BB cut -d\ -f1 | $BB cut -d= -f2);
[ "$slot" ] && slot=_$slot;
fi;
[ "$slot" ] && echo "$slot";
}
setup_mountpoint() {
[ -L $1 ] && $BB mv -f $1 ${1}_link;
if [ ! -d $1 ]; then
rm -f $1;
mkdir -p $1;
fi;
}
is_mounted() { $BB mount | $BB grep -q " $1 "; }
mount_apex() {
[ -d /system_root/system/apex ] || return 1;
local apex dest loop minorx num;
setup_mountpoint /apex;
minorx=1;
[ -e /dev/block/loop1 ] && minorx=$($BB ls -l /dev/block/loop1 | $BB awk '{ print $6 }');
num=0;
for apex in /system_root/system/apex/*; do
dest=/apex/$($BB basename $apex .apex);
[ "$dest" == /apex/com.android.runtime.release ] && dest=/apex/com.android.runtime;
$BB mkdir -p $dest;
case $apex in
*.apex)
$BB unzip -qo $apex apex_payload.img -d /apex;
$BB mv -f /apex/apex_payload.img $dest.img;
$BB mount -t ext4 -o ro,noatime $dest.img $dest 2>/dev/null;
if [ $? != 0 ]; then
while [ $num -lt 64 ]; do
loop=/dev/block/loop$num;
($BB mknod $loop b 7 $((num * minorx));
$BB losetup $loop $dest.img) 2>/dev/null;
num=$((num + 1));
$BB losetup $loop | $BB grep -q $dest.img && break;
done;
$BB mount -t ext4 -o ro,loop,noatime $loop $dest;
if [ $? != 0 ]; then
$BB losetup -d $loop 2>/dev/null;
fi;
fi;
;;
*) $BB mount -o bind $apex $dest;;
esac;
done;
export ANDROID_RUNTIME_ROOT=/apex/com.android.runtime;
export ANDROID_TZDATA_ROOT=/apex/com.android.tzdata;
export BOOTCLASSPATH=/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/android.test.base.jar:/system/framework/telephony-ext.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar;
}
umount_apex() {
[ -d /apex ] || return 1;
local dest loop;
for dest in $($BB find /apex -type d -mindepth 1 -maxdepth 1); do
if [ -f $dest.img ]; then
loop=$($BB mount | $BB grep $dest | $BB cut -d\ -f1);
fi;
($BB umount -l $dest;
$BB losetup -d $loop) 2>/dev/null;
done;
$BB rm -rf /apex 2>/dev/null;
unset ANDROID_RUNTIME_ROOT ANDROID_TZDATA_ROOT BOOTCLASSPATH;
}
mount_all() {
if ! is_mounted /cache; then
$BB mount /cache 2>/dev/null && UMOUNT_CACHE=1;
fi;
if ! is_mounted /data; then
$BB mount /data && UMOUNT_DATA=1;
fi;
($BB mount -o ro -t auto /vendor;
$BB mount -o ro -t auto /product;
$BB mount -o ro -t auto /persist) 2>/dev/null;
setup_mountpoint $ANDROID_ROOT;
if ! is_mounted $ANDROID_ROOT; then
$BB mount -o ro -t auto $ANDROID_ROOT 2>/dev/null;
fi;
case $ANDROID_ROOT in
/system_root) setup_mountpoint /system;;
/system)
if ! is_mounted /system && ! is_mounted /system_root; then
setup_mountpoint /system_root;
$BB mount -o ro -t auto /system_root;
elif [ -f /system/system/build.prop ]; then
setup_mountpoint /system_root;
$BB mount --move /system /system_root;
fi;
if [ $? != 0 ]; then
($BB umount /system;
$BB umount -l /system) 2>/dev/null;
if [ -d /dev/block/mapper ]; then
[ -e /dev/block/mapper/system ] || local slot=$(find_slot);
$BB mount -o ro -t auto /dev/block/mapper/vendor$slot /vendor;
$BB mount -o ro -t auto /dev/block/mapper/product$slot /product 2>/dev/null;
$BB mount -o ro -t auto /dev/block/mapper/system$slot /system_root;
else
[ -e /dev/block/bootdevice/by-name/system ] || local slot=$(find_slot);
($BB mount -o ro -t auto /dev/block/bootdevice/by-name/vendor$slot /vendor;
$BB mount -o ro -t auto /dev/block/bootdevice/by-name/product$slot /product;
$BB mount -o ro -t auto /dev/block/bootdevice/by-name/persist$slot /persist) 2>/dev/null;
$BB mount -o ro -t auto /dev/block/bootdevice/by-name/system$slot /system_root;
fi;
fi;
;;
esac;
if is_mounted /system_root; then
mount_apex;
if [ -f /system_root/build.prop ]; then
$BB mount -o bind /system_root /system;
else
$BB mount -o bind /system_root/system /system;
fi;
fi;
}
umount_all() {
local mount;
(if [ ! -d /postinstall/tmp ]; then
$BB umount /system;
$BB umount -l /system;
if [ -e /system_root ]; then
$BB umount /system_root;
$BB umount -l /system_root;
fi;
fi;
umount_apex;
umount /vendor; # busybox umount /vendor breaks recovery on some devices
umount -l /vendor;
for mount in /mnt/system /mnt/vendor /product /mnt/product /persist; do
$BB umount $mount;
$BB umount -l $mount;
done;
if [ "$UMOUNT_DATA" ]; then
$BB umount /data;
$BB umount -l /data;
fi;
if [ "$UMOUNT_CACHE" ]; then
$BB umount /cache;
$BB umount -l /cache;
fi) 2>/dev/null;
}
setup_env() {
$BOOTMODE && return 1;
$BB mount -o bind /dev/urandom /dev/random;
if [ -L /etc ]; then
setup_mountpoint /etc;
$BB cp -af /etc_link/* /etc;
$BB sed -i 's; / ; /system_root ;' /etc/fstab;
fi;
umount_all;
mount_all;
OLD_LD_PATH=$LD_LIBRARY_PATH;
OLD_LD_PRE=$LD_PRELOAD;
OLD_LD_CFG=$LD_CONFIG_FILE;
unset LD_LIBRARY_PATH LD_PRELOAD LD_CONFIG_FILE;
if [ ! "$(getprop 2>/dev/null)" ]; then
getprop() {
local propdir propfile propval;
for propdir in / /system_root /system /vendor /odm /product; do
for propfile in default.prop build.prop; do
if [ "$propval" ]; then
break 2;
else
propval="$(file_getprop $propdir/$propfile $1 2>/dev/null)";
fi;
done;
done;
if [ "$propval" ]; then
echo "$propval";
else
echo "";
fi;
}
elif [ ! "$(getprop ro.build.type 2>/dev/null)" ]; then
getprop() {
($(which getprop) | $BB grep "$1" | $BB cut -d[ -f3 | $BB cut -d] -f1) 2>/dev/null;
}
fi;
}
restore_env() {
$BOOTMODE && return 1;
local dir;
unset -f getprop;
[ "$OLD_LD_PATH" ] && export LD_LIBRARY_PATH=$OLD_LD_PATH;
[ "$OLD_LD_PRE" ] && export LD_PRELOAD=$OLD_LD_PRE;
[ "$OLD_LD_CFG" ] && export LD_CONFIG_FILE=$OLD_LD_CFG;
umount_all;
[ -L /etc_link ] && $BB rm -rf /etc/*;
(for dir in /apex /system /system_root /etc; do
if [ -L "${dir}_link" ]; then
rmdir $dir;
$BB mv -f ${dir}_link $dir;
fi;
done;
$BB umount -l /dev/random) 2>/dev/null;
}
debugging() {
case $(basename "$ZIPFILE" .zip) in
*-debugging)
ui_print " " "Creating debugging archive in $DIR...";
[ -f /tmp/recovery.log ] && local log=/tmp/recovery.log;
$BB tar -czf "$DIR/anykernel3-$(date +%Y-%m-%d_%H%M%S)-debug.tgz" $AKHOME $log;
;;
esac;
}
cleanup() {
cd $(dirname $AKHOME);
rm -rf $AKHOME;
}
abort() {
ui_print "$@";
debugging;
restore_env;
if [ ! -f anykernel.sh -o "$(file_getprop anykernel.sh do.cleanuponabort 2>/dev/null)" == 1 ]; then
cleanup;
fi;
exit 1;
}
do_devicecheck() {
[ "$(file_getprop anykernel.sh do.devicecheck)" == 1 ] || return 1;
local device devicename match product testname vendordevice vendorproduct;
ui_print "Checking device...";
device=$(getprop ro.product.device 2>/dev/null);
product=$(getprop ro.build.product 2>/dev/null);
vendordevice=$(getprop ro.product.vendor.device 2>/dev/null);
vendorproduct=$(getprop ro.vendor.product.device 2>/dev/null);
for testname in $(file_getprop anykernel.sh 'device.name.*'); do
for devicename in $device $product $vendordevice $vendorproduct; do
if [ "$devicename" == "$testname" ]; then
ui_print "$testname" " ";
match=1;
break 2;
fi;
done;
done;
if [ ! "$match" ]; then
abort " " "Unsupported device. Aborting...";
fi;
}
int2ver() {
if $BB [ "$1" -eq "$1" ] 2>/dev/null; then
echo "$1.0.0";
elif [ ! "$(echo "$1" | $BB cut -d. -f3)" ]; then
echo "$1.0";
else
echo "$1";
fi;
}
do_versioncheck() {
[ "$(file_getprop anykernel.sh supported.versions)" ] || return 1;
local android_ver hi_ver lo_ver parsed_ver supported supported_ver;
ui_print "Checking Android version...";
supported_ver=$(file_getprop anykernel.sh supported.versions | $BB tr -d '[:space:]');
android_ver=$(file_getprop /system/build.prop ro.build.version.release);
parsed_ver=$(int2ver $android_ver);
if echo $supported_ver | $BB grep -q '-'; then
lo_ver=$(int2ver "$(echo $supported_ver | $BB cut -d- -f1)");
hi_ver=$(int2ver "$(echo $supported_ver | $BB cut -d- -f2)");
if echo -e "$hi_ver\n$lo_ver\n$parsed_ver" | $BB sort -g | $BB grep -n "$parsed_ver" | $BB grep -q '^2:'; then
supported=1;
fi;
else
for ver in $(echo $supported_ver | $BB sed 's;,; ;g'); do
if [ "$(int2ver $ver)" == "$parsed_ver" ]; then
supported=1;
break;
fi;
done;
fi;
if [ "$supported" ]; then
ui_print "$android_ver" " ";
else
abort " " "Unsupported Android version. Aborting...";
fi;
}
do_levelcheck() {
[ "$(file_getprop anykernel.sh supported.patchlevels)" ] || return 1;
local android_lvl hi_lvl lo_lvl parsed_lvl supported_lvl;
ui_print "Checking Android security patch level...";
supported_lvl=$(file_getprop anykernel.sh supported.patchlevels | $BB grep -oE '[0-9]{4}-[0-9]{2}|-');
android_lvl=$(file_getprop /system/build.prop ro.build.version.security_patch);
parsed_lvl=$(echo $android_lvl | $BB grep -oE '[0-9]{4}-[0-9]{2}');
if echo $supported_lvl | $BB grep -q '^\-'; then
lo_lvl=0000-00;
hi_lvl=$(echo $supported_lvl | $BB awk '{ print $2 }');
elif echo $supported_lvl | $BB grep -q ' - '; then
lo_lvl=$(echo $supported_lvl | $BB awk '{ print $1 }');
hi_lvl=$(echo $supported_lvl | $BB awk '{ print $3 }');
elif echo $supported_lvl | $BB grep -q '\-$'; then
lo_lvl=$(echo $supported_lvl | $BB awk '{ print $1 }');
hi_lvl=9999-99;
fi;
if echo -e "$hi_lvl\n$lo_lvl\n$parsed_lvl" | $BB sort -g | $BB grep -n "$parsed_lvl" | $BB grep -q '^2:'; then
ui_print "$android_lvl" " ";
else
abort " " "Unsupported Android security patch level. Aborting...";
fi;
}
dump_moduleinfo() {
cat <<EOF > $1;
name=AK3 Helper Module
version=$($BB awk '{ print $3 }' $AKHOME/vertmp) $($BB grep -oE '#.[0-9]' $AKHOME/vertmp)
versionCode=1
author=AnyKernel3
description=$KERNEL_STRING
EOF
}
dump_moduleremover() {
cat <<'EOF' > $1;
#!/system/bin/sh
MODDIR=${0%/*};
if [ "$(cat /proc/version)" != "$(cat $MODDIR/version)" ]; then
rm -rf $MODDIR;
fi;
EOF
}
do_modules() {
[ "$(file_getprop anykernel.sh do.modules)" == 1 ] || return 1;
local block modcon moddir modtarget module slot umask;
if [ "$(file_getprop anykernel.sh do.systemless)" == 1 ]; then
cd $AKHOME/modules;
ui_print " " "Creating kernel helper Magisk module...";
if [ -d /data/adb/magisk -a -f $AKHOME/split_img/.magisk ]; then
umask=$(umask);
umask 022;
moddir=/data/adb/modules/ak3-helper;
rm -rf $moddir;
mkdir -p system $moddir;
($BB mv -f product system;
$BB mv -f vendor system) 2>/dev/null;
$BB cp -rLf * $moddir;
dump_moduleinfo $moddir/module.prop;
dump_moduleremover $moddir/post-fs-data.sh;
cp -f $AKHOME/vertmp $moddir/version;
umask $umask;
else
ui_print "Magisk installation not found. Skipped!";
fi;
else
cd $AKHOME/modules;
ui_print " " "Pushing modules...";
if [ -d /dev/block/mapper ]; then
for block in system vendor product; do
for slot in "" _a _b; do
$BB blockdev --setrw /dev/block/mapper/$block$slot 2>/dev/null;
done;
done;
fi;
if [ ! -d /postinstall/tmp ]; then
$BB mount -o rw,remount -t auto /system;
($BB mount -o rw,remount -t auto /vendor;
$BB mount -o rw,remount -t auto /product) 2>/dev/null;
fi;
for module in $(find . -name '*.ko'); do
modtarget=$POSTINSTALL$(echo $module | $BB cut -c2-);
if [ ! -e $modtarget ]; then
case $module in
*/vendor/*) modcon=vendor;;
*/product/*) modcon=product;;
*) modcon=system;;
esac;
fi;
if is_mounted $modtarget; then
$BB mount -o rw,remount -t auto $modtarget;
fi;
mkdir -p $(dirname $modtarget);
$BB cp -rLf $module $modtarget;
$BB chown 0:0 $modtarget;
$BB chmod 644 $modtarget;
if [ "$modcon" ]; then
chcon "u:object_r:${modcon}_file:s0" $modtarget;
fi;
if is_mounted $modtarget; then
$BB mount -o ro,remount -t auto $modtarget;
fi;
done;
if [ ! -d /postinstall/tmp ]; then
$BB mount -o ro,remount -t auto /system;
($BB mount -o ro,remount -t auto /vendor;
$BB mount -o ro,remount -t auto /product) 2>/dev/null;
fi;
fi;
cd $AKHOME;
}
show_progress 1.34 4;
ui_print " ";
cleanup;
mkdir -p $AKHOME/bin;
cd $AKHOME;
unzip -o "$ZIPFILE";
if [ $? != 0 -o ! "$(ls tools)" ]; then
abort "Unzip failed. Aborting...";
fi;
for ARCH32 in x86 arm; do
if [ -d $AKHOME/tools/$ARCH32 ]; then
BB=$AKHOME/tools/$ARCH32/busybox;
chmod 755 $BB;
$BB >/dev/null 2>&1;
if [ $? == 0 ]; then
$BB mv -f $AKHOME/tools/$ARCH32/* $AKHOME/tools;
break;
fi;
fi;
done;
BB=$AKHOME/tools/busybox;
chmod 755 $BB;
$BB chmod -R 755 tools bin;
$BB --install -s bin;
if [ $? != 0 -o -z "$(ls bin)" ]; then
abort "Busybox setup failed. Aborting...";
fi;
if [ -f banner ]; then
ui_printfile banner;
ui_print " " " ";
fi;
KERNEL_STRING="$(file_getprop anykernel.sh kernel.string)";
ui_print "$KERNEL_STRING";
if [ -f version ]; then
ui_print " ";
ui_printfile version;
ui_print " ";
fi;
ui_print " " "AnyKernel3 by osm0sis @ xda-developers" " " " ";
setup_env;
do_devicecheck;
do_versioncheck;
do_levelcheck;
ui_print "Installing...";
CORE=$($BB grep -oE 'ak.*core.sh' anykernel.sh);
[ -f tools/$CORE ] || $BB ln -s $AKHOME/tools/ak*-core.sh $AKHOME/tools/$CORE;
PATH="$AKHOME/bin:$PATH" home=$AKHOME $BB ash anykernel.sh $2;
if [ $? != 0 ]; then
abort;
fi;
do_modules;
debugging;
restore_env;
if [ "$(file_getprop anykernel.sh do.cleanup)" == 1 ]; then
cleanup;
fi;
ui_print " " " " "Done!";
================================================
FILE: anykernel/META-INF/com/google/android/updater-script
================================================
#FLASHAFTERUPDATEV2
# Dummy file; update-binary is a shell script.
================================================
FILE: anykernel/anykernel.sh
================================================
# AnyKernel3 Ramdisk Mod Script
# osm0sis @ xda-developers
## AnyKernel setup
# begin properties
properties() { '
kernel.string=freqbench - CPU benchmark by kdrag0n
do.devicecheck=0
do.modules=0
do.systemless=0
do.cleanup=1
do.cleanuponabort=0
supported.versions=
supported.patchlevels=
'; } # end properties
# shell variables
block=auto;
is_slot_device=auto;
ramdisk_compression=auto;
## AnyKernel methods (DO NOT CHANGE)
# import patching functions/variables - see for reference
. tools/ak3-core.sh;
## AnyKernel install
split_boot;
cores=$(grep '^processor' /proc/cpuinfo | wc -l)
all_cpus=0-$((cores - 1))
bench_cpus=1-$((cores - 1))
patch_cmdline rcu_nocbs rcu_nocbs=$all_cpus
patch_cmdline isolcpus isolcpus=$bench_cpus
patch_cmdline nohz_full nohz_full=$bench_cpus
patch_cmdline loglevel loglevel=0
patch_cmdline printk.devkmsg printk.devkmsg=on
patch_cmdline skip_initramfs ""
mv $home/rd-new.cpio.gz $home/ramdisk-new.cpio
flash_boot;
## end install
================================================
FILE: anykernel/tools/ak3-core.sh
================================================
### AnyKernel methods (DO NOT CHANGE)
## osm0sis @ xda-developers
OUTFD=$1;
# set up working directory variables
[ "$home" ] || home=$PWD;
bootimg=$home/boot.img;
bin=$home/tools;
patch=$home/patch;
ramdisk=$home/ramdisk;
split_img=$home/split_img;
### output/testing functions:
# ui_print "<text>" [...]
ui_print() {
until [ ! "$1" ]; do
echo "ui_print $1
ui_print" >> /proc/self/fd/$OUTFD;
shift;
done;
}
# abort ["<text>" [...]]
abort() {
ui_print " " "$@";
exit 1;
}
# contains <string> <substring>
contains() {
[ "${1#*$2}" != "$1" ];
}
# file_getprop <file> <property>
file_getprop() {
grep "^$2=" "$1" | cut -d= -f2-;
}
###
### file/directory attributes functions:
# set_perm <owner> <group> <mode> <file> [<file2> ...]
set_perm() {
local uid gid mod;
uid=$1; gid=$2; mod=$3;
shift 3;
chown $uid:$gid "$@" || chown $uid.$gid "$@";
chmod $mod "$@";
}
# set_perm_recursive <owner> <group> <dir_mode> <file_mode> <dir> [<dir2> ...]
set_perm_recursive() {
local uid gid dmod fmod;
uid=$1; gid=$2; dmod=$3; fmod=$4;
shift 4;
while [ "$1" ]; do
chown -R $uid:$gid "$1" || chown -R $uid.$gid "$1";
find "$1" -type d -exec chmod $dmod {} +;
find "$1" -type f -exec chmod $fmod {} +;
shift;
done;
}
###
### dump_boot functions:
# split_boot (dump and split image only)
split_boot() {
local dumpfail;
if [ ! -e "$(echo $block | cut -d\ -f1)" ]; then
abort "Invalid partition. Aborting...";
fi;
if [ "$(echo $block | grep ' ')" ]; then
block=$(echo $block | cut -d\ -f1);
customdd=$(echo $block | cut -d\ -f2-);
elif [ ! "$customdd" ]; then
local customdd="bs=1048576";
fi;
if [ -f "$bin/nanddump" ]; then
$bin/nanddump -f $bootimg $block;
else
dd if=$block of=$bootimg $customdd;
fi;
[ $? != 0 ] && dumpfail=1;
mkdir -p $split_img;
cd $split_img;
if [ -f "$bin/unpackelf" ] && $bin/unpackelf -i $bootimg -h -q 2>/dev/null; then
if [ -f "$bin/elftool" ]; then
mkdir elftool_out;
$bin/elftool unpack -i $bootimg -o elftool_out;
fi;
$bin/unpackelf -i $bootimg;
[ $? != 0 ] && dumpfail=1;
mv -f boot.img-zImage kernel.gz;
mv -f boot.img-ramdisk.cpio.gz ramdisk.cpio.gz;
mv -f boot.img-cmdline cmdline.txt 2>/dev/null;
if [ -f boot.img-dt -a ! -f "$bin/elftool" ]; then
case $(od -ta -An -N4 boot.img-dt | sed -e 's/ del//' -e 's/ //g') in
QCDT|ELF) mv -f boot.img-dt dt;;
*)
gzip -c kernel.gz > kernel.gz-dtb;
cat boot.img-dt >> kernel.gz-dtb;
rm -f boot.img-dt kernel.gz;
;;
esac;
fi;
elif [ -f "$bin/mboot" ]; then
$bin/mboot -u -f $bootimg;
elif [ -f "$bin/dumpimage" ]; then
dd bs=$(($(printf '%d\n' 0x$(hexdump -n 4 -s 12 -e '16/1 "%02x""\n"' $bootimg)) + 64)) count=1 conv=notrunc if=$bootimg of=boot-trimmed.img;
$bin/dumpimage -l boot-trimmed.img > header;
grep "Name:" header | cut -c15- > boot.img-name;
grep "Type:" header | cut -c15- | cut -d\ -f1 > boot.img-arch;
grep "Type:" header | cut -c15- | cut -d\ -f2 > boot.img-os;
grep "Type:" header | cut -c15- | cut -d\ -f3 | cut -d- -f1 > boot.img-type;
grep "Type:" header | cut -d\( -f2 | cut -d\) -f1 | cut -d\ -f1 | cut -d- -f1 > boot.img-comp;
grep "Address:" header | cut -c15- > boot.img-addr;
grep "Point:" header | cut -c15- > boot.img-ep;
$bin/dumpimage -p 0 -o kernel.gz boot-trimmed.img;
[ $? != 0 ] && dumpfail=1;
case $(cat boot.img-type) in
Multi) $bin/dumpimage -p 1 -o ramdisk.cpio.gz boot-trimmed.img;;
RAMDisk) mv -f kernel.gz ramdisk.cpio.gz;;
esac;
elif [ -f "$bin/rkcrc" ]; then
dd bs=4096 skip=8 iflag=skip_bytes conv=notrunc if=$bootimg of=ramdisk.cpio.gz;
else
$bin/magiskboot unpack -h $bootimg;
case $? in
1) dumpfail=1;;
2) touch chromeos;;
esac;
fi;
if [ $? != 0 -o "$dumpfail" ]; then
abort "Dumping/splitting image failed. Aborting...";
fi;
cd $home;
}
# unpack_ramdisk (extract ramdisk only)
unpack_ramdisk() {
local comp;
cd $split_img;
if [ -f ramdisk.cpio.gz ]; then
if [ -f "$bin/mkmtkhdr" ]; then
mv -f ramdisk.cpio.gz ramdisk.cpio.gz-mtk;
dd bs=512 skip=1 conv=notrunc if=ramdisk.cpio.gz-mtk of=ramdisk.cpio.gz;
fi;
mv -f ramdisk.cpio.gz ramdisk.cpio;
fi;
if [ -f ramdisk.cpio ]; then
comp=$($bin/magiskboot decompress ramdisk.cpio 2>&1 | grep -v 'raw' | sed -n 's;.*\[\(.*\)\];\1;p');
else
abort "No ramdisk found to unpack. Aborting...";
fi;
if [ "$comp" ]; then
mv -f ramdisk.cpio ramdisk.cpio.$comp;
$bin/magiskboot decompress ramdisk.cpio.$comp ramdisk.cpio;
if [ $? != 0 ]; then
echo "Attempting ramdisk unpack with busybox $comp..." >&2;
$comp -dc ramdisk.cpio.$comp > ramdisk.cpio;
fi;
fi;
[ -d $ramdisk ] && mv -f $ramdisk $home/rdtmp;
mkdir -p $ramdisk;
chmod 755 $ramdisk;
cd $ramdisk;
EXTRACT_UNSAFE_SYMLINKS=1 cpio -d -F $split_img/ramdisk.cpio -i;
if [ $? != 0 -o ! "$(ls)" ]; then
abort "Unpacking ramdisk failed. Aborting...";
fi;
if [ -d "$home/rdtmp" ]; then
cp -af $home/rdtmp/* .;
fi;
}
### dump_boot (dump and split image, then extract ramdisk)
dump_boot() {
split_boot;
unpack_ramdisk;
}
###
### write_boot functions:
# repack_ramdisk (repack ramdisk only)
repack_ramdisk() {
local comp packfail mtktype;
cd $home;
case $ramdisk_compression in
auto|"") comp=$(ls $split_img/ramdisk.cpio.* 2>/dev/null | grep -v 'mtk' | rev | cut -d. -f1 | rev);;
none|cpio) comp="";;
gz) comp=gzip;;
lzo) comp=lzop;;
bz2) comp=bzip2;;
lz4-l) comp=lz4_legacy;;
*) comp=$ramdisk_compression;;
esac;
if [ -f "$bin/mkbootfs" ]; then
$bin/mkbootfs $ramdisk > ramdisk-new.cpio;
else
cd $ramdisk;
find . | cpio -H newc -o > $home/ramdisk-new.cpio;
fi;
[ $? != 0 ] && packfail=1;
cd $home;
$bin/magiskboot cpio ramdisk-new.cpio test;
magisk_patched=$?;
[ $((magisk_patched & 3)) -eq 1 ] && $bin/magiskboot cpio ramdisk-new.cpio "extract .backup/.magisk $split_img/.magisk";
if [ "$comp" ]; then
$bin/magiskboot compress=$comp ramdisk-new.cpio;
if [ $? != 0 ]; then
echo "Attempting ramdisk repack with busybox $comp..." >&2;
$comp -9c ramdisk-new.cpio > ramdisk-new.cpio.$comp;
[ $? != 0 ] && packfail=1;
rm -f ramdisk-new.cpio;
fi;
fi;
if [ "$packfail" ]; then
abort "Repacking ramdisk failed. Aborting...";
fi;
if [ -f "$bin/mkmtkhdr" -a -f "$split_img/boot.img-base" ]; then
mtktype=$(od -ta -An -N8 -j8 $split_img/ramdisk.cpio.gz-mtk | sed -e 's/ nul//g' -e 's/ //g' | tr '[:upper:]' '[:lower:]');
case $mtktype in
rootfs|recovery) $bin/mkmtkhdr --$mtktype ramdisk-new.cpio*;;
esac;
fi;
}
# flash_boot (build, sign and write image only)
flash_boot() {
local varlist i kernel ramdisk fdt cmdline comp part0 part1 nocompflag signfail pk8 cert avbtype;
cd $split_img;
if [ -f "$bin/mkimage" ]; then
varlist="name arch os type comp addr ep";
elif [ -f "$bin/mkbootimg" -a -f "$bin/unpackelf" -a -f boot.img-base ]; then
mv -f cmdline.txt boot.img-cmdline 2>/dev/null;
varlist="cmdline base pagesize kernel_offset ramdisk_offset tags_offset";
fi;
for i in $varlist; do
if [ -f boot.img-$i ]; then
eval local $i=\"$(cat boot.img-$i)\";
fi;
done;
cd $home;
for i in zImage zImage-dtb Image Image-dtb Image.gz Image.gz-dtb Image.bz2 Image.bz2-dtb Image.lzo Image.lzo-dtb Image.lzma Image.lzma-dtb Image.xz Image.xz-dtb Image.lz4 Image.lz4-dtb Image.fit; do
if [ -f $i ]; then
kernel=$home/$i;
break;
fi;
done;
if [ "$kernel" ]; then
if [ -f "$bin/mkmtkhdr" -a -f "$split_img/boot.img-base" ]; then
$bin/mkmtkhdr --kernel $kernel;
kernel=$kernel-mtk;
fi;
elif [ "$(ls $split_img/kernel* 2>/dev/null)" ]; then
kernel=$(ls $split_img/kernel* | grep -v 'kernel_dtb' | tail -n1);
fi;
if [ "$(ls ramdisk-new.cpio* 2>/dev/null)" ]; then
ramdisk=$home/$(ls ramdisk-new.cpio* | tail -n1);
elif [ -f "$bin/mkmtkhdr" -a -f "$split_img/boot.img-base" ]; then
ramdisk=$split_img/ramdisk.cpio.gz-mtk;
else
ramdisk=$(ls $split_img/ramdisk.cpio* 2>/dev/null | tail -n1);
fi;
for fdt in dt recovery_dtbo dtb; do
for i in $home/$fdt $home/$fdt.img $split_img/$fdt; do
if [ -f $i ]; then
eval local $fdt=$i;
break;
fi;
done;
done;
cd $split_img;
if [ -f "$bin/mkimage" ]; then
[ "$comp" == "uncompressed" ] && comp=none;
part0=$kernel;
case $type in
Multi) part1=":$ramdisk";;
RAMDisk) part0=$ramdisk;;
esac;
$bin/mkimage -A $arch -O $os -T $type -C $comp -a $addr -e $ep -n "$name" -d $part0$part1 $home/boot-new.img;
elif [ -f "$bin/elftool" ]; then
[ "$dt" ] && dt="$dt,rpm";
[ -f cmdline.txt ] && cmdline="cmdline.txt@cmdline";
$bin/elftool pack -o $home/boot-new.img header=elftool_out/header $kernel $ramdisk,ramdisk $dt $cmdline;
elif [ -f "$bin/mboot" ]; then
cp -f $kernel kernel;
cp -f $ramdisk ramdisk.cpio.gz;
$bin/mboot -d $split_img -f $home/boot-new.img;
elif [ -f "$bin/rkcrc" ]; then
$bin/rkcrc -k $ramdisk $home/boot-new.img;
elif [ -f "$bin/mkbootimg" -a -f "$bin/unpackelf" -a -f boot.img-base ]; then
[ "$dt" ] && dt="--dt $dt";
$bin/mkbootimg --kernel $kernel --ramdisk $ramdisk --cmdline "$cmdline" --base $home --pagesize $pagesize --kernel_offset $kernel_offset --ramdisk_offset $ramdisk_offset --tags_offset "$tags_offset" $dt --output $home/boot-new.img;
else
[ "$kernel" ] && cp -f $kernel kernel;
[ "$ramdisk" ] && cp -f $ramdisk ramdisk.cpio;
[ "$dt" -a -f extra ] && cp -f $dt extra;
for i in dtb recovery_dtbo; do
[ "$(eval echo \$$i)" -a -f $i ] && cp -f $(eval echo \$$i) $i;
done;
case $kernel in
*Image*)
if [ ! "$magisk_patched" ]; then
$bin/magiskboot cpio ramdisk.cpio test;
magisk_patched=$?;
fi;
if [ $((magisk_patched & 3)) -eq 1 ]; then
ui_print " " "Magisk detected! Patching kernel so reflashing Magisk is not necessary...";
comp=$($bin/magiskboot decompress kernel 2>&1 | grep -v 'raw' | sed -n 's;.*\[\(.*\)\];\1;p');
($bin/magiskboot split $kernel || $bin/magiskboot decompress $kernel kernel) 2>/dev/null;
if [ $? != 0 -a "$comp" ]; then
echo "Attempting kernel unpack with busybox $comp..." >&2;
$comp -dc $kernel > kernel;
fi;
$bin/magiskboot hexpatch kernel 736B69705F696E697472616D667300 77616E745F696E697472616D667300;
if [ "$(file_getprop $home/anykernel.sh do.systemless)" == 1 ]; then
strings kernel | grep -E 'Linux version.*#' > $home/vertmp;
fi;
if [ "$comp" ]; then
$bin/magiskboot compress=$comp kernel kernel.$comp;
if [ $? != 0 ]; then
echo "Attempting kernel repack with busybox $comp..." >&2;
$comp -9c kernel > kernel.$comp;
fi;
mv -f kernel.$comp kernel;
fi;
[ ! -f .magisk ] && $bin/magiskboot cpio ramdisk.cpio "extract .backup/.magisk .magisk";
export $(cat .magisk);
[ $((magisk_patched & 8)) -ne 0 ] && export TWOSTAGEINIT=true;
for fdt in dtb extra kernel_dtb recovery_dtbo; do
[ -f $fdt ] && $bin/magiskboot dtb $fdt patch;
done;
else
case $kernel in
*-dtb) rm -f kernel_dtb;;
esac;
fi;
unset magisk_patched KEEPFORCEENCRYPT KEEPVERITY SHA1 TWOSTAGEINIT;
;;
esac;
case $ramdisk_compression in
none|cpio) nocompflag="-n";;
esac;
$bin/magiskboot repack $nocompflag $bootimg $home/boot-new.img;
fi;
if [ $? != 0 ]; then
abort "Repacking image failed. Aborting...";
fi;
cd $home;
if [ -f "$bin/futility" -a -d "$bin/chromeos" ]; then
if [ -f "$split_img/chromeos" ]; then
echo "Signing with CHROMEOS..." >&2;
$bin/futility vbutil_kernel --pack boot-new-signed.img --keyblock $bin/chromeos/kernel.keyblock --signprivate $bin/chromeos/kernel_data_key.vbprivk --version 1 --vmlinuz boot-new.img --bootloader $bin/chromeos/empty --config $bin/chromeos/empty --arch arm --flags 0x1;
fi;
[ $? != 0 ] && signfail=1;
fi;
if [ -f "$bin/boot_signer-dexed.jar" -a -d "$bin/avb" ]; then
pk8=$(ls $bin/avb/*.pk8);
cert=$(ls $bin/avb/*.x509.*);
case $block in
*recovery*|*SOS*) avbtype=recovery;;
*) avbtype=boot;;
esac;
if [ "$(/system/bin/dalvikvm -Xnoimage-dex2oat -cp $bin/boot_signer-dexed.jar com.android.verity.BootSignature -verify boot.img 2>&1 | grep VALID)" ]; then
echo "Signing with AVBv1..." >&2;
/system/bin/dalvikvm -Xnoimage-dex2oat -cp $bin/boot_signer-dexed.jar com.android.verity.BootSignature /$avbtype boot-new.img $pk8 $cert boot-new-signed.img;
fi;
fi;
if [ $? != 0 -o "$signfail" ]; then
abort "Signing image failed. Aborting...";
fi;
mv -f boot-new-signed.img boot-new.img 2>/dev/null;
if [ ! -f boot-new.img ]; then
abort "No repacked image found to flash. Aborting...";
elif [ "$(wc -c < boot-new.img)" -gt "$(wc -c < boot.img)" ]; then
abort "New image larger than boot partition. Aborting...";
fi;
blockdev --setrw $block 2>/dev/null;
if [ -f "$bin/flash_erase" -a -f "$bin/nandwrite" ]; then
$bin/flash_erase $block 0 0;
$bin/nandwrite -p $block boot-new.img;
elif [ "$customdd" ]; then
dd if=/dev/zero of=$block $customdd 2>/dev/null;
dd if=boot-new.img of=$block $customdd;
else
cat boot-new.img /dev/zero > $block 2>/dev/null || true;
fi;
if [ $? != 0 ]; then
abort "Flashing image failed. Aborting...";
fi;
}
# flash_dtbo (flash dtbo only)
flash_dtbo() {
local i dtbo dtboblock;
cd $home;
for i in dtbo dtbo.img; do
if [ -f $i ]; then
dtbo=$i;
break;
fi;
done;
if [ "$dtbo" ]; then
dtboblock=/dev/block/bootdevice/by-name/dtbo$slot;
if [ ! -e "$dtboblock" ]; then
abort "dtbo partition could not be found. Aborting...";
fi;
blockdev --setrw $dtboblock 2>/dev/null;
if [ -f "$bin/flash_erase" -a -f "$bin/nandwrite" ]; then
$bin/flash_erase $dtboblock 0 0;
$bin/nandwrite -p $dtboblock $dtbo;
elif [ "$customdd" ]; then
dd if=/dev/zero of=$dtboblock 2>/dev/null;
dd if=$dtbo of=$dtboblock;
else
cat $dtbo /dev/zero > $dtboblock 2>/dev/null || true;
fi;
if [ $? != 0 ]; then
abort "Flashing dtbo failed. Aborting...";
fi;
fi;
}
### write_boot (repack ramdisk then build, sign and write image and dtbo)
write_boot() {
repack_ramdisk;
flash_boot;
flash_dtbo;
}
###
### file editing functions:
# backup_file <file>
backup_file() { [ ! -f $1~ ] && cp -fp $1 $1~; }
# restore_file <file>
restore_file() { [ -f $1~ ] && cp -fp $1~ $1; rm -f $1~; }
# replace_string <file> <if search string> <original string> <replacement string> <scope>
replace_string() {
[ "$5" == "global" ] && local scope=g;
if ! grep -q "$2" $1; then
sed -i "s;${3};${4};${scope}" $1;
fi;
}
# replace_section <file> <begin search string> <end search string> <replacement string>
replace_section() {
local begin endstr last end;
begin=$(grep -n "$2" $1 | head -n1 | cut -d: -f1);
if [ "$begin" ]; then
if [ "$3" == " " -o ! "$3" ]; then
endstr='^[[:space:]]*$';
last=$(wc -l $1 | cut -d\ -f1);
else
endstr="$3";
fi;
for end in $(grep -n "$endstr" $1 | cut -d: -f1) $last; do
if [ "$end" ] && [ "$begin" -lt "$end" ]; then
sed -i "${begin},${end}d" $1;
[ "$end" == "$last" ] && echo >> $1;
sed -i "${begin}s;^;${4}\n;" $1;
break;
fi;
done;
fi;
}
# remove_section <file> <begin search string> <end search string>
remove_section() {
local begin endstr last end;
begin=$(grep -n "$2" $1 | head -n1 | cut -d: -f1);
if [ "$begin" ]; then
if [ "$3" == " " -o ! "$3" ]; then
endstr='^[[:space:]]*$';
last=$(wc -l $1 | cut -d\ -f1);
else
endstr="$3";
fi;
for end in $(grep -n "$endstr" $1 | cut -d: -f1) $last; do
if [ "$end" ] && [ "$begin" -lt "$end" ]; then
sed -i "${begin},${end}d" $1;
break;
fi;
done;
fi;
}
# insert_line <file> <if search string> <before|after> <line match string> <inserted line>
insert_line() {
local offset line;
if ! grep -q "$2" $1; then
case $3 in
before) offset=0;;
after) offset=1;;
esac;
line=$((`grep -n "$4" $1 | head -n1 | cut -d: -f1` + offset));
if [ -f $1 -a "$line" ] && [ "$(wc -l $1 | cut -d\ -f1)" -lt "$line" ]; then
echo "$5" >> $1;
else
sed -i "${line}s;^;${5}\n;" $1;
fi;
fi;
}
# replace_line <file> <line replace string> <replacement line> <scope>
replace_line() {
local lines line;
if grep -q "$2" $1; then
lines=$(grep -n "$2" $1 | cut -d: -f1 | sort -nr);
[ "$4" == "global" ] || lines=$(echo "$lines" | tail -n1);
for line in $lines; do
sed -i "${line}s;.*;${3};" $1;
done;
fi;
}
# remove_line <file> <line match string> <scope>
remove_line() {
local lines line;
if grep -q "$2" $1; then
lines=$(grep -n "$2" $1 | cut -d: -f1 | sort -nr);
[ "$3" == "global" ] || lines=$(echo "$lines" | tail -n1);
for line in $lines; do
sed -i "${line}d" $1;
done;
fi;
}
# prepend_file <file> <if search string> <patch file>
prepend_file() {
if ! grep -q "$2" $1; then
echo "$(cat $patch/$3 $1)" > $1;
fi;
}
# insert_file <file> <if search string> <before|after> <line match string> <patch file>
insert_file() {
local offset line;
if ! grep -q "$2" $1; then
case $3 in
before) offset=0;;
after) offset=1;;
esac;
line=$((`grep -n "$4" $1 | head -n1 | cut -d: -f1` + offset));
sed -i "${line}s;^;\n;" $1;
sed -i "$((line - 1))r $patch/$5" $1;
fi;
}
# append_file <file> <if search string> <patch file>
append_file() {
if ! grep -q "$2" $1; then
echo -ne "\n" >> $1;
cat $patch/$3 >> $1;
echo -ne "\n" >> $1;
fi;
}
# replace_file <file> <permissions> <patch file>
replace_file() {
cp -pf $patch/$3 $1;
chmod $2 $1;
}
# patch_fstab <fstab file> <mount match name> <fs match type> block|mount|fstype|options|flags <original string> <replacement string>
patch_fstab() {
local entry part newpart newentry;
entry=$(grep "$2" $1 | grep "$3");
if [ ! "$(echo "$entry" | grep "$6")" -o "$6" == " " -o ! "$6" ]; then
case $4 in
block) part=$(echo "$entry" | awk '{ print $1 }');;
mount) part=$(echo "$entry" | awk '{ print $2 }');;
fstype) part=$(echo "$entry" | awk '{ print $3 }');;
options) part=$(echo "$entry" | awk '{ print $4 }');;
flags) part=$(echo "$entry" | awk '{ print $5 }');;
esac;
newpart=$(echo "$part" | sed -e "s;${5};${6};" -e "s; ;;g" -e 's;,\{2,\};,;g' -e 's;,*$;;g' -e 's;^,;;g');
newentry=$(echo "$entry" | sed "s;${part};${newpart};");
sed -i "s;${entry};${newentry};" $1;
fi;
}
# patch_cmdline <cmdline entry name> <replacement string>
patch_cmdline() {
local cmdfile cmdtmp match;
if [ -f "$split_img/cmdline.txt" ]; then
cmdfile=$split_img/cmdline.txt;
else
cmdfile=$home/cmdtmp;
grep "^cmdline=" $split_img/header | cut -d= -f2- > $cmdfile;
fi;
if ! grep -q "$1" $cmdfile; then
cmdtmp=$(cat $cmdfile);
echo "$cmdtmp $2" > $cmdfile;
sed -i -e 's; *; ;g' -e 's;[ \t]*$;;' $cmdfile;
else
match=$(grep -o "$1.*$" $cmdfile | cut -d\ -f1);
sed -i -e "s;${match};${2};" -e 's; *; ;g' -e 's;[ \t]*$;;' $cmdfile;
fi;
if [ -f "$home/cmdtmp" ]; then
sed -i "s|^cmdline=.*|cmdline=$(cat $cmdfile)|" $split_img/header;
rm -f $cmdfile;
fi;
}
# patch_prop <prop file> <prop name> <new prop value>
patch_prop() {
if ! grep -q "^$2=" $1; then
echo -ne "\n$2=$3\n" >> $1;
else
local line=$(grep -n "^$2=" $1 | head -n1 | cut -d: -f1);
sed -i "${line}s;.*;${2}=${3};" $1;
fi;
}
# patch_ueventd <ueventd file> <device node> <permissions> <chown> <chgrp>
patch_ueventd() {
local file dev perm user group newentry line;
file=$1; dev=$2; perm=$3; user=$4;
shift 4;
group="$@";
newentry=$(printf "%-23s %-4s %-8s %s\n" "$dev" "$perm" "$user" "$group");
line=$(grep -n "$dev" $file | head -n1 | cut -d: -f1);
if [ "$line" ]; then
sed -i "${line}s;.*;${newentry};" $file;
else
echo -ne "\n$newentry\n" >> $file;
fi;
}
###
### configuration/setup functions:
# reset_ak [keep]
reset_ak() {
local current i;
current=$(dirname $home/*-files/current);
if [ -d "$current" ]; then
rm -rf $current/ramdisk;
for i in $bootimg boot-new.img; do
[ -e $i ] && cp -af $i $current;
done;
fi;
[ -d $split_img ] && rm -rf $ramdisk;
rm -rf $bootimg $split_img $home/*-new* $home/*-files/current;
if [ "$1" == "keep" ]; then
[ -d $home/rdtmp ] && mv -f $home/rdtmp $ramdisk;
else
rm -rf $patch $home/rdtmp;
fi;
setup_ak;
}
# setup_ak
setup_ak() {
local blockfiles parttype name part mtdmount mtdpart mtdname target;
# allow multi-partition ramdisk modifying configurations (using reset_ak)
if [ "$block" ] && [ ! -d "$ramdisk" -a ! -d "$patch" ]; then
blockfiles=$home/$(basename $block)-files;
if [ "$(ls $blockfiles 2>/dev/null)" ]; then
cp -af $blockfiles/* $home;
else
mkdir -p $blockfiles;
fi;
touch $blockfiles/current;
fi;
# slot detection enabled by is_slot_device=1 or auto (from anykernel.sh)
case $is_slot_device in
1|auto)
slot=$(getprop ro.boot.slot_suffix 2>/dev/null);
[ "$slot" ] || slot=$(grep -o 'androidboot.slot_suffix=.*$' /proc/cmdline | cut -d\ -f1 | cut -d= -f2);
if [ ! "$slot" ]; then
slot=$(getprop ro.boot.slot 2>/dev/null);
[ "$slot" ] || slot=$(grep -o 'androidboot.slot=.*$' /proc/cmdline | cut -d\ -f1 | cut -d= -f2);
[ "$slot" ] && slot=_$slot;
fi;
if [ "$slot" ]; then
if [ -d /postinstall/tmp -a ! "$slot_select" ]; then
slot_select=inactive;
fi;
case $slot_select in
inactive)
case $slot in
_a) slot=_b;;
_b) slot=_a;;
esac;
;;
esac;
fi;
if [ ! "$slot" -a "$is_slot_device" == 1 ]; then
abort "Unable to determine active boot slot. Aborting...";
fi;
;;
esac;
# target block partition detection enabled by block=boot recovery or auto (from anykernel.sh)
case $block in
auto|"") block=boot;;
esac;
case $block in
boot|recovery)
case $block in
boot) parttype="ramdisk boot BOOT LNX android_boot bootimg KERN-A kernel KERNEL";;
recovery) parttype="ramdisk_recovery recovery RECOVERY SOS android_recovery";;
esac;
for name in $parttype; do
for part in $name$slot $name; do
if [ "$(grep -w "$part" /proc/mtd 2> /dev/null)" ]; then
mtdmount=$(grep -w "$part" /proc/mtd);
mtdpart=$(echo $mtdmount | cut -d\" -f2);
if [ "$mtdpart" == "$part" ]; then
mtdname=$(echo $mtdmount | cut -d: -f1);
else
abort "Unable to determine mtd $block partition. Aborting...";
fi;
if [ -e /dev/mtd/$mtdname ]; then
target=/dev/mtd/$mtdname;
fi;
elif [ -e /dev/block/by-name/$part ]; then
target=/dev/block/by-name/$part;
elif [ -e /dev/block/bootdevice/by-name/$part ]; then
target=/dev/block/bootdevice/by-name/$part;
elif [ -e /dev/block/platform/*/by-name/$part ]; then
target=/dev/block/platform/*/by-name/$part;
elif [ -e /dev/block/platform/*/*/by-name/$part ]; then
target=/dev/block/platform/*/*/by-name/$part;
elif [ -e /dev/$part ]; then
target=/dev/$part;
fi;
[ "$target" ] && break 2;
done;
done;
if [ "$target" ]; then
block=$(ls $target 2>/dev/null);
else
abort "Unable to determine $block partition. Aborting...";
fi;
;;
*)
if [ "$slot" ]; then
[ -e "$block$slot" ] && block=$block$slot;
fi;
;;
esac;
if [ ! "$no_block_display" ]; then
ui_print "$block";
fi;
}
###
### end methods
setup_ak;
================================================
FILE: bench.py
================================================
#!/usr/bin/env python3
import os
import sys
import time
import subprocess
import gc
import statistics
import json
import threading
import re
import csv
# Need to avoid as much extra CPU usage as possible
gc.disable()
# sysfs power supply nodes for power sampling
POWER_SUPPLY = None
POWER_SUPPLY_NODES = [
# Qualcomm Battery Management System + fuel gauge: preferred when available for more info
"/sys/class/power_supply/bms",
# Most common
"/sys/class/power_supply/battery",
# Nexus 10
"/sys/class/power_supply/ds2784-fuelgauge",
]
# Some fuel gauges need current unit scaling
POWER_CURRENT_FACTOR = 1
POWER_CURRENT_NODES = [
# Exynos devices with Maxim PMICs report µA separately
"batt_current_ua_now",
# Standard µA node
"current_now",
]
# Full paths to final nodes
POWER_CURRENT_NODE = None
POWER_VOLTAGE_NODE = None
# Default power sampling intervals
POWER_SAMPLE_INTERVAL = 1000 # ms
POWER_SAMPLE_FG_DEFAULT_INTERVALS = {
# qgauge updates every 100 ms, but sampling also uses power, so do it conservatively
"qpnp,qg": 250,
# qpnp-fg-gen3/4 update every 1000 ms
"qpnp,fg": 1000,
# SM8350+ aDSP fuel gauge updates every 1000 ms
"qcom,pmic_glink": 1000,
}
# Needs to match init and cmdline
HOUSEKEEPING_CPU = 0
# cpu0 is for housekeeping, so we can't benchmark it
# Benchmark cpu1 instead, which is also in the little cluster
REPLACE_CPUS = {
HOUSEKEEPING_CPU: 1,
}
# How long to idle at each freq and measure power before benchmarking
FREQ_IDLE_TIME = 5 # sec
# To reduce chances of an array realloc + copy during benchmark runs
PREALLOC_SECONDS = 300 # seconds of power sampling
# CoreMark PERFORMANCE_RUN params with 300,000 iterations
COREMARK_ITERATIONS = 300000
COREMARK_PERFORMANCE_RUN = ["0x0", "0x0", "0x66", str(COREMARK_ITERATIONS), "7", "1", "2000"]
# Blank lines are for rounded corner & camera cutout protection
BANNER = """
__ _ _
/ _|_ __ ___ __ _| |__ ___ _ __ ___| |__
| |_| '__/ _ \/ _` | '_ \ / _ \ '_ \ / __| '_ \
| _| | | __/ (_| | |_) | __/ | | | (__| | | |
|_| |_| \___|\__, |_.__/ \___|_| |_|\___|_| |_|
|_|
CPU benchmark • by kdrag0n
------------------------------------------------
"""
SYS_CPU = "/sys/devices/system/cpu"
# "Constants" evaluated at runtime
for psy_node in POWER_SUPPLY_NODES:
if os.path.exists(psy_node):
POWER_SUPPLY = psy_node
break
POWER_VOLTAGE_NODE = f"{POWER_SUPPLY}/voltage_now"
for node in POWER_CURRENT_NODES:
path = f"{POWER_SUPPLY}/{node}"
if os.path.exists(path):
POWER_CURRENT_NODE = path
break
psy_name = os.readlink(POWER_SUPPLY)
for fg_string, interval in POWER_SAMPLE_FG_DEFAULT_INTERVALS.items():
if fg_string in psy_name:
POWER_SAMPLE_INTERVAL = interval
break
if len(sys.argv) > 1:
override_interval = int(sys.argv[1])
if override_interval > 0:
POWER_SAMPLE_INTERVAL = override_interval
# Calculate prealloc slots now that the interval is known
PREALLOC_SLOTS = int(PREALLOC_SECONDS / (POWER_SAMPLE_INTERVAL / 1000))
_stop_power_mon = False
_prealloc_samples = [-1] * PREALLOC_SLOTS
_power_samples = _prealloc_samples
def pr_debug(*args, **kwargs):
if __debug__:
kwargs["flush"] = True
print(*args, **kwargs)
def run_cmd(args):
pr_debug(f"Running command: {args}")
proc = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
pr_debug(f"Command exited with return code {proc.returncode}")
if proc.returncode == 0:
return proc.stdout
else:
raise ValueError(f"Subprocess {args} failed with exit code {proc.returncode}:\n{proc.stdout}")
def sample_power():
ma = int(read_file(POWER_CURRENT_NODE)) * POWER_CURRENT_FACTOR / 1000
mv = int(read_file(POWER_VOLTAGE_NODE)) / 1000
mw = ma * mv / 1000
return ma, mv, abs(mw)
def start_power_thread(sample_interval=POWER_SAMPLE_INTERVAL):
def _power_thread():
global _power_samples
sample_dest = _prealloc_samples
count = 0
while True:
# Sleep before first sample to avoid a low first reading
time.sleep(sample_interval / 1000)
# Check stop flag immediately after sleep to avoid a low last reading
if _stop_power_mon:
pr_debug("Stopping power monitor due to global stop flag")
break
current, voltage, power = sample_power()
pr_debug(f"Power: {power} mW\t(sample {count} from {current} mA * {voltage} mV)")
try:
sample_dest[count] = power
except IndexError:
pr_debug("Pre-allocated sample slots exhausted, falling back to dynamic allocation")
# If out of pre-allocated slots
sample_dest.append(power)
count += 1
if count < len(sample_dest):
pr_debug(f"Truncating to first {count} samples from pre-allocated array")
_power_samples = sample_dest[:count]
pr_debug("Starting power monitor thread")
thread = threading.Thread(target=_power_thread, daemon=True)
thread.start()
return thread
def stop_power_thread(thread):
global _stop_power_mon
pr_debug("Setting flag to stop power monitor")
_stop_power_mon = True
pr_debug("Waiting for power monitor to stop")
thread.join()
_stop_power_mon = False
return _power_samples
def write_cpu(cpu, node, content):
pr_debug(f"Writing CPU value: cpu{cpu}/{node} => {content}")
with open(f"{SYS_CPU}/cpu{cpu}/{node}", "w") as f:
f.write(content)
def read_file(node):
with open(node, "r") as f:
content = f.read().strip()
pr_debug(f"Reading file: {node} = {content}")
return content
def create_power_stats(time_ns, samples):
sec = time_ns / 1e9
power = statistics.mean(samples)
mj = power * sec
joules = mj / 1000
return {
"elapsed_sec": sec,
"elapsed_ns": time_ns,
"power_samples": samples,
"power_mean": power,
"energy_millijoules": mj,
"energy_joules": joules,
}
def get_cpu_freqs(cpu):
raw_freqs = read_file(f"{SYS_CPU}/cpu{cpu}/cpufreq/scaling_available_frequencies").split(" ")
boost_node = f"{SYS_CPU}/cpu{cpu}/cpufreq/scaling_boost_frequencies"
# Some devices have extra boost frequencies not in scaling_available_frequencies
if os.path.exists(boost_node):
raw_freqs += read_file(boost_node).split(" ")
# Need to sort because different platforms have different orders
freqs = sorted(set(int(freq) for freq in raw_freqs if freq))
return freqs
def init_cpus():
print("Frequency domains: ", end="", flush=True)
bench_cpus = []
for policy_dir in sorted(os.listdir(f"{SYS_CPU}/cpufreq")):
if policy_dir.startswith("policy"):
first_cpu = int(policy_dir[len("policy"):])
if first_cpu in REPLACE_CPUS:
first_cpu = REPLACE_CPUS[first_cpu]
print(f"cpu{first_cpu}", end=" ", flush=True)
bench_cpus.append(first_cpu)
else:
pr_debug(f"Unrecognized file/dir in cpufreq: {policy_dir}")
continue
print()
print("Offline CPUs: ", end="", flush=True)
cpu_count = len(re.findall(r'processor\s+:\s+\d+', read_file("/proc/cpuinfo")))
for cpu in range(cpu_count):
if cpu == HOUSEKEEPING_CPU:
continue
print(f"cpu{cpu}", end=" ", flush=True)
write_cpu(cpu, "online", "0")
print(flush=True)
pr_debug("Minimizing frequency of housekeeping CPU")
min_freq = min(get_cpu_freqs(HOUSEKEEPING_CPU))
pr_debug(f"Minimum frequency for {HOUSEKEEPING_CPU}: {min_freq} kHz")
write_cpu(HOUSEKEEPING_CPU, "cpufreq/scaling_governor", "userspace")
write_cpu(HOUSEKEEPING_CPU, "cpufreq/scaling_setspeed", str(min_freq))
pr_debug()
return bench_cpus, cpu_count
def check_charging(node, charging_value, charging_warned):
if os.path.exists(node):
psy_status = read_file(node)
pr_debug(f"Power supply status at {node}: {psy_status}")
if psy_status == charging_value and not charging_warned:
print()
print("=============== WARNING ===============")
print("Detected power supply in charging state!")
print("Power measurements will be invalid and benchmark results may be affected.")
print("Unplug the device and restart the benchmark for valid results.")
print("=============== WARNING ===============")
print()
return True
return charging_warned
def init_power():
global POWER_CURRENT_FACTOR
pr_debug(f"Using power supply: {POWER_SUPPLY}")
charging_warned = False
charging_warned = check_charging(f"{POWER_SUPPLY}/status", "Charging", charging_warned)
charging_warned = check_charging(f"/sys/class/power_supply/battery/status", "Charging", charging_warned)
charging_warned = check_charging(f"/sys/class/power_supply/usb/present", "1", charging_warned)
charging_warned = check_charging(f"/sys/class/power_supply/dc/present", "1", charging_warned)
# Some PMICs may give unstable readings at this point
pr_debug("Waiting for power usage to settle for initial current measurement")
time.sleep(5)
# Maxim PMICs used on Exynos devices report current in mA, not µA
ref_current = int(read_file(POWER_CURRENT_NODE))
# Assumption: will never be below 1 mA
if abs(ref_current) <= 1000:
POWER_CURRENT_FACTOR = 1000
pr_debug(f"Scaling current by {POWER_CURRENT_FACTOR}x (derived from initial sample: {ref_current})")
print(f"Sampling power every {POWER_SAMPLE_INTERVAL} ms")
pr_debug(f"Pre-allocated {PREALLOC_SLOTS} sample slots for {PREALLOC_SECONDS} seconds")
pr_debug(f"Power sample interval adjusted for power supply: {psy_name}")
print("Baseline power usage: ", end="", flush=True)
pr_debug("Waiting for power usage to settle")
time.sleep(15)
pr_debug()
pr_debug("Measuring base power usage with only housekeeping CPU")
# The power used for sampling might affect results here, so sample less often
thread = start_power_thread(sample_interval=POWER_SAMPLE_INTERVAL * 2)
time.sleep(60)
base_power_samples = stop_power_thread(thread)
base_power = statistics.median(base_power_samples)
print(f"{base_power:.0f} mW")
print()
return base_power, base_power_samples
def main():
bench_start_time = time.time()
print(BANNER)
pr_debug("Running in debug mode")
pr_debug("Initializing CPU states")
bench_cpus, cpu_count = init_cpus()
pr_debug("Initializing power measurements")
base_power, base_power_samples = init_power()
pr_debug("Starting benchmark")
pr_debug()
cpus_data = {}
for cpu in bench_cpus:
print()
print(f"===== CPU {cpu} =====")
cpu_data = {
"freqs": {}
}
cpus_data[cpu] = cpu_data
pr_debug("Onlining CPU")
write_cpu(cpu, "online", "1")
pr_debug("Setting governor")
write_cpu(cpu, "cpufreq/scaling_governor", "userspace")
pr_debug("Getting frequencies")
freqs = get_cpu_freqs(cpu)
print("Frequencies:", " ".join(str(int(freq / 1000)) for freq in freqs))
print()
# Some kernels may change the defaults
pr_debug("Setting frequency limits")
write_cpu(cpu, "cpufreq/scaling_min_freq", str(min(freqs)))
write_cpu(cpu, "cpufreq/scaling_max_freq", str(max(freqs)))
# Sometimes, reading back the limits immediately may give an incorrect result
pr_debug("Waiting for frequency limits to take effect")
time.sleep(1)
# Bail out if the kernel is clamping our values
pr_debug("Validating frequency limits")
real_min_freq = int(read_file(f"{SYS_CPU}/cpu{cpu}/cpufreq/scaling_min_freq"))
if real_min_freq != min(freqs):
raise ValueError(f"Minimum frequency setting {min(freqs)} rejected by kernel; got {real_min_freq}")
real_max_freq = int(read_file(f"{SYS_CPU}/cpu{cpu}/cpufreq/scaling_max_freq"))
if real_max_freq != max(freqs):
raise ValueError(f"Maximum frequency setting {max(freqs)} rejected by kernel; got {real_max_freq}")
for freq in freqs:
mhz = freq / 1000
print(f"{int(mhz):4d}: ", end="", flush=True)
write_cpu(cpu, "cpufreq/scaling_setspeed", str(freq))
pr_debug("Waiting for frequency to settle")
time.sleep(0.1)
pr_debug("Validating frequency")
real_freq = int(read_file(f"{SYS_CPU}/cpu{cpu}/cpufreq/scaling_cur_freq"))
if real_freq != freq:
raise ValueError(f"Frequency setting is {freq} but kernel is using {real_freq}")
pr_debug("Waiting for power usage to settle")
time.sleep(3)
pr_debug("Measuring idle power usage")
thread = start_power_thread()
time.sleep(FREQ_IDLE_TIME)
idle_power_samples = stop_power_thread(thread)
idle_power = statistics.mean(idle_power_samples)
idle_mj = idle_power * FREQ_IDLE_TIME
idle_joules = idle_mj / 1000
pr_debug(f"Idle: {idle_power:4.0f} mW {idle_joules:4.1f} J")
pr_debug("Running CoreMark...")
thread = start_power_thread()
start_time = time.time_ns()
cm_out = run_cmd(["taskset", "-c", f"{cpu}", "coremark", *COREMARK_PERFORMANCE_RUN])
end_time = time.time_ns()
power_samples = stop_power_thread(thread)
pr_debug(cm_out)
elapsed_sec = (end_time - start_time) / 1e9
# Extract score and iterations
match = re.search(r'CoreMark 1\.0 : ([0-9.]+?) / ', cm_out)
if not match.group(1):
if "Must execute for at least 10 secs" in cm_out:
raise ValueError("Benchmark ran too fast; increase COREMARK_ITERATIONS and try again")
else:
print(cm_out, file=sys.stderr)
raise ValueError("Failed to parse CoreMark output")
score = float(match.group(1))
match = re.search(r'Iterations\s+:\s+(\d+)', cm_out)
iters = float(match.group(1))
# Adjust for base power usage
power_samples = [sample - base_power for sample in power_samples]
# Calculate power values
power = statistics.mean(power_samples)
# CoreMarks/MHz as per EEMBC specs
cm_mhz = score / mhz
# mW * sec = mJ
mj = power * elapsed_sec
joules = mj / 1000
# ULPMark-CM score = iterations per millijoule
ulpmark_score = iters / mj
print(f"{score:5.0f} {cm_mhz:3.1f} C/MHz {power:4.0f} mW {joules:4.1f} J {ulpmark_score:4.1f} I/mJ {elapsed_sec:5.1f} s")
cpu_data["freqs"][freq] = {
"active": {
**create_power_stats(end_time - start_time, power_samples),
"coremark_score": score,
"coremarks_per_mhz": cm_mhz,
"ulpmark_cm_score": ulpmark_score
},
"idle": create_power_stats(int(FREQ_IDLE_TIME * 1e9), idle_power_samples),
}
# In case the CPU shares a freq domain with the housekeeping CPU, e.g. cpu1
pr_debug(f"Minimizing frequency of CPU: {min(freqs)} kHz")
write_cpu(cpu, "cpufreq/scaling_setspeed", str(min(freqs)))
pr_debug("Offlining CPU")
write_cpu(cpu, "online", "0")
print()
# Make the rest run faster
pr_debug("Maxing housekeeping CPU frequency")
max_hk_freq = max(get_cpu_freqs(HOUSEKEEPING_CPU))
write_cpu(HOUSEKEEPING_CPU, "cpufreq/scaling_setspeed", str(max_hk_freq))
# OK to GC beyond this point as all the benchmarking is done
pr_debug("Enabling Python GC")
gc.enable()
print()
print("Benchmark finished!")
bench_finish_time = time.time()
pr_debug("Writing JSON data")
data = {
"version": 1,
"total_elapsed_sec": bench_finish_time - bench_start_time,
"housekeeping": create_power_stats(int(5 * 1e9), base_power_samples),
"cpus": cpus_data,
"meta": {
"housekeeping_cpu": HOUSEKEEPING_CPU,
"power_sample_interval": POWER_SAMPLE_INTERVAL,
"cpu_count": cpu_count,
},
}
pr_debug("Writing JSON results")
results_json = json.dumps(data)
pr_debug(results_json)
with open("/tmp/results.json", "w+") as f:
f.write(results_json)
pr_debug("Writing CSV results")
with open("/tmp/results.csv", "w+") as f:
fields = [
"CPU",
"Frequency (kHz)",
"CoreMarks (iter/s)",
"CoreMarks/MHz",
"Power (mW)",
"Energy (J)",
"ULPMark-CM (iter/mJ)",
"Time (s)"
]
writer = csv.DictWriter(f, fieldnames=fields)
writer.writeheader()
for cpu, cpu_data in cpus_data.items():
for freq, freq_data in cpu_data["freqs"].items():
freq_data = freq_data["active"]
writer.writerow({
"CPU": cpu,
"Frequency (kHz)": freq,
"CoreMarks (iter/s)": freq_data["coremark_score"],
"CoreMarks/MHz": freq_data["coremarks_per_mhz"],
"Power (mW)": freq_data["power_mean"],
"Energy (J)": freq_data["energy_joules"],
"ULPMark-CM (iter/mJ)": freq_data["ulpmark_cm_score"],
"Time (s)": freq_data["elapsed_sec"],
})
if __name__ == "__main__":
main()
================================================
FILE: boot-v1/.gitignore
================================================
*.img
base
board
cmdline
dtb
dtb_offset
hashtype
header_version
kernel_offset
os_patch_level
os_version
pagesize
ramdisk.gz
ramdisk_offset
second_offset
tags_offset
zImage
================================================
FILE: boot-v1/pack.sh
================================================
#!/usr/bin/env sh
cd "$(dirname "$0")"
../packrd-gz.sh
cp ../rd-new.cpio.gz ramdisk.gz
mkbootimg \
--kernel zImage \
--ramdisk ramdisk.gz \
--cmdline "$(cat cmdline)" \
--board "$(cat board)" \
--base "$(cat base)" \
--pagesize "$(cat pagesize)" \
--kernel_offset "$(cat kernel_offset)" \
--ramdisk_offset "$(cat ramdisk_offset)" \
--second_offset "$(cat second_offset)" \
--tags_offset "$(cat tags_offset)" \
--os_version "$(cat os_version)" \
--os_patch_level "$(cat os_patch_level)" \
-o new.img
================================================
FILE: boot-v1/test.sh
================================================
#!/usr/bin/env sh
set -eufo pipefail
cd "$(dirname "$0")"
cp ~/code/android/devices/zf6/proton/out/arch/arm64/boot/Image.gz-dtb zImage
./pack.sh
adb reboot bootloader || true
fastboot boot new.img
================================================
FILE: boot-v1/unpack.sh
================================================
#!/usr/bin/env sh
cd "$(dirname "$0")"
unpackbootimg -i "$1"
rename "$1-" "" "$1-"*
================================================
FILE: config.sh
================================================
# Common config options for freqbench
# Whether to enable verbose debug logging during the benchmark
# DO NOT ENABLE for final benchmarking!
# The extra framebuffer memory copies caused by it will influence results.
DEBUG=false
# How often to sample power usage while benchmarking (in milliseconds)
# 0 = auto (default is based on fuel gauge)
POWER_SAMPLE_INTERVAL=0
# Whether to expose an SSH server for debugging over virtual USB Ethernet
# Do not enable for final benchmarking
USB_DEBUG=false
================================================
FILE: dhcpd.conf
================================================
option domain-name-servers 8.8.8.8, 8.8.4.4;
option subnet-mask 255.255.255.0;
subnet 10.15.19.0 netmask 255.255.255.0 {
range 10.15.19.100 10.15.19.254;
}
================================================
FILE: init.sh
================================================
#!/usr/bin/env bash
set -euo pipefail
# Populate PATH and other basic env
source /etc/profile
# For htop config
export HOME=/root
source /config.sh
# Must be in /persist or /tmp
# /persist will be mounted from the cache partition if it exists
OUT_DIR=/persist/freqbench
reboot_end() {
echo
echo "Rebooting in 5 seconds..."
# Rounded corner protection
echo
echo
sleep 5
# Wait for volume down keypress
#read -n1
# Wait for manual forced reboot
#sleep inf
reboot_with_cmd bootloader
}
saving_logs=false
on_exit() {
if ! $saving_logs; then
save_logs
fi
echo
echo
echo "ERROR!"
reboot_end
}
# Set trap before mounting in case devtmpfs fails
trap on_exit EXIT
# Mount essential pseudo-filesystems
mount -t tmpfs tmpfs /dev
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t tmpfs tmpfs /tmp
# Populate /dev without devtmpfs
mdev -s
# Log to kernel log if no console is present
if [[ ! -t 1 ]]; then
exec > /dev/kmsg 2>&1
fi
# Don't log anywhere
#exec > /dev/null 2>&1
find_part_by_name() {
pinfo="$(blkid -l --match-token "PARTLABEL=$1"; blkid -l --match-token "PARTLABEL=${1^^}")"
# Check for existence first
if [[ -z "$pinfo" ]]; then
return 1
fi
echo "$pinfo" | cut -d' ' -f1 | tr -d ':'
}
redact_arg() {
sed -E "s/$1=[^ ]+/$1=REDACTED/"
}
redact_args() {
redact_arg androidboot.serialno | \
redact_arg androidboot.wifimacaddr | \
redact_arg androidboot.btmacaddr | \
redact_arg androidboot.uid | \
redact_arg androidboot.ap_serial | \
redact_arg androidboot.cpuid | \
redact_arg LCD | \
redact_arg androidboot.id.jtag | \
redact_arg androidboot.em.did
}
# Add delay for error visibility
on_error() {
e=$?
sleep 5
return $e
}
save_logs() {
saving_logs=true
# Gather system info
# This is best-effort and does not strictly need to be present, so suppress errors here.
set +e
cat /proc/interrupts > /tmp/post_bench_interrupts.txt
cat /proc/cmdline | redact_args > /tmp/cmdline.txt
cat /proc/cpuinfo > /tmp/cpuinfo.txt
dmesg | redact_args > /tmp/kernel.log
uptime > /tmp/uptime.txt
ps -A > /tmp/processes.txt
echo "Kernel: $(cat /proc/version)" > /tmp/versions.txt
echo "Python: $(python3 --version)" >> /tmp/versions.txt
echo "Model: $(cat /sys/firmware/devicetree/base/model | tr '\0' ';')" > /tmp/device.txt
echo "Compatible: $(cat /sys/firmware/devicetree/base/compatible | tr '\0' ';')" >> /tmp/device.txt
mkdir /tmp/cpufreq_stats
for policy in /sys/devices/system/cpu/cpufreq/policy*
do
pol_dir="/tmp/cpufreq_stats/$(basename "$policy" | sed 's/policy//')"
mkdir "$pol_dir"
# Frequency domains with too many OPPs will fail here
cp "$policy/stats/"{time_in_state,total_trans,trans_table} "$pol_dir" 2> /dev/null || true
done
set -e
mkdir /persist
persist_part="$(find_part_by_name cache || find_part_by_name persist)"
# We write everything to tmpfs and copy it to persist afterwards because writing to UFS will use power
echo
mount -o noatime "$persist_part" /persist
echo "Writing logs and results to $OUT_DIR"
rm -fr "$OUT_DIR"
cp -r /tmp "$OUT_DIR"
umount /persist
sync
# Saving logs multiple times is fine as long as we don't try to recurse
saving_logs=false
}
try_write() {
{ echo "$2" > "$1"; } > /dev/null 2>&1 || true
}
# SSH debug over USB RNDIS
set +e
if $USB_DEBUG; then
source /usb.sh
fi
set -e
# Disable fbcon cursor blinking to reduce interference from its 1-second timer and memory ops
try_write /sys/devices/virtual/graphics/fbcon/cursor_blink 0
# Disable hung task detection
try_write /proc/sys/kernel/hung_task_timeout_secs 0
# Snapdragon: Enable cpuidle for more realistic conditions
try_write /sys/module/lpm_levels/parameters/sleep_disabled 0
try_write /sys/module/msm_pm/parameters/sleep_disabled 0
# Exynos: Disable Exynos auto-hotplug to allow manual CPU control
try_write /sys/power/cpuhotplug/enabled 0
try_write /sys/power/cpuhp/enabled 0
# Snapdragon: Decrease delay of qpnp_fg to 1000ms to get proper results
try_write /sys/module/qpnp_fg/parameters/sram_update_period_ms 1000
# Snapdragon: Initialize aDSP for power supply on newer SoCs
# On Snapdragon 888 (Qualcomm kernel 5.4) devices and newer, the DSP is
# responsible for power and charging, so we need to initialize it before we can
# read power usage from the fuel gauge.
if uname -r | grep -q '^5\.' && grep -q Qualcomm /proc/cpuinfo; then
# qrtr nameserver is required for DSP services to work properly
qrtr-ns &
echo "Booting DSP..."
echo -n 1 > /sys/kernel/boot_adsp/boot
sleep 3
if [[ "$(cat /sys/class/subsys/subsys_adsp/device/subsys*/state)" != "ONLINE" ]]; then
echo "Failed to boot aDSP!"
exit 1
fi
fi
cat /proc/interrupts > /tmp/pre_bench_interrupts.txt
py_args=()
if ! $DEBUG; then
py_args+=(-OO)
fi
py_args+=(/bench.py "$POWER_SAMPLE_INTERVAL")
time taskset 01 python3 "${py_args[@]}" 2>&1 | tee /tmp/run.log || on_error
save_logs
# To debug system load
#htop
reboot_end
================================================
FILE: mkbootimg.py
================================================
#!/usr/bin/env python
# Copyright 2015, The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import print_function
from argparse import ArgumentParser, FileType, Action
from hashlib import sha1
from os import fstat
import re
from struct import pack
BOOT_IMAGE_HEADER_V3_PAGESIZE = 4096
def filesize(f):
if f is None:
return 0
try:
return fstat(f.fileno()).st_size
except OSError:
return 0
def update_sha(sha, f):
if f:
sha.update(f.read())
f.seek(0)
sha.update(pack('I', filesize(f)))
else:
sha.update(pack('I', 0))
def pad_file(f, padding):
pad = (padding - (f.tell() & (padding - 1))) & (padding - 1)
f.write(pack(str(pad) + 'x'))
def get_number_of_pages(image_size, page_size):
"""calculates the number of pages required for the image"""
return (image_size + page_size - 1) / page_size
def get_recovery_dtbo_offset(args):
"""calculates the offset of recovery_dtbo image in the boot image"""
num_header_pages = 1 # header occupies a page
num_kernel_pages = get_number_of_pages(filesize(args.kernel), args.pagesize)
num_ramdisk_pages = get_number_of_pages(filesize(args.ramdisk), args.pagesize)
num_second_pages = get_number_of_pages(filesize(args.second), args.pagesize)
dtbo_offset = args.pagesize * (num_header_pages + num_kernel_pages +
num_ramdisk_pages + num_second_pages)
return dtbo_offset
def write_header_v3(args):
BOOT_IMAGE_HEADER_V3_SIZE = 1580
BOOT_MAGIC = 'ANDROID!'.encode()
args.output.write(pack('8s', BOOT_MAGIC))
args.output.write(pack(
'4I',
filesize(args.kernel), # kernel size in bytes
filesize(args.ramdisk), # ramdisk size in bytes
(args.os_version << 11) | args.os_patch_level, # os version and patch level
BOOT_IMAGE_HEADER_V3_SIZE))
args.output.write(pack('4I', 0, 0, 0, 0)) # reserved
args.output.write(pack('I', args.header_version)) # version of bootimage header
args.output.write(pack('1536s', args.cmdline.encode()))
pad_file(args.output, BOOT_IMAGE_HEADER_V3_PAGESIZE)
def write_vendor_boot_header(args):
VENDOR_BOOT_IMAGE_HEADER_V3_SIZE = 2112
BOOT_MAGIC = 'VNDRBOOT'.encode()
args.vendor_boot.write(pack('8s', BOOT_MAGIC))
args.vendor_boot.write(pack(
'5I',
args.header_version, # version of header
args.pagesize, # flash page size we assume
args.base + args.kernel_offset, # kernel physical load addr
args.base + args.ramdisk_offset, # ramdisk physical load addr
filesize(args.vendor_ramdisk))) # vendor ramdisk size in bytes
args.vendor_boot.write(pack('2048s', args.vendor_cmdline.encode()))
args.vendor_boot.write(pack('I', args.base + args.tags_offset)) # physical addr for kernel tags
args.vendor_boot.write(pack('16s', args.board.encode())) # asciiz product name
args.vendor_boot.write(pack('I', VENDOR_BOOT_IMAGE_HEADER_V3_SIZE)) # header size in bytes
if filesize(args.dtb) == 0:
raise ValueError("DTB image must not be empty.")
args.vendor_boot.write(pack('I', filesize(args.dtb))) # size in bytes
args.vendor_boot.write(pack('Q', args.base + args.dtb_offset)) # dtb physical load address
pad_file(args.vendor_boot, args.pagesize)
def write_header(args):
BOOT_IMAGE_HEADER_V1_SIZE = 1648
BOOT_IMAGE_HEADER_V2_SIZE = 1660
BOOT_MAGIC = 'ANDROID!'.encode()
if args.header_version > 3:
raise ValueError('Boot header version %d not supported' % args.header_version)
elif args.header_version == 3:
return write_header_v3(args)
args.output.write(pack('8s', BOOT_MAGIC))
final_ramdisk_offset = (args.base + args.ramdisk_offset) if filesize(args.ramdisk) > 0 else 0
final_second_offset = (args.base + args.second_offset) if filesize(args.second) > 0 else 0
args.output.write(pack(
'10I',
filesize(args.kernel), # size in bytes
args.base + args.kernel_offset, # physical load addr
filesize(args.ramdisk), # size in bytes
final_ramdisk_offset, # physical load addr
filesize(args.second), # size in bytes
final_second_offset, # physical load addr
args.base + args.tags_offset, # physical addr for kernel tags
args.pagesize, # flash page size we assume
args.header_version, # version of bootimage header
(args.os_version << 11) | args.os_patch_level)) # os version and patch level
args.output.write(pack('16s', args.board.encode())) # asciiz product name
args.output.write(pack('512s', args.cmdline[:512].encode()))
sha = sha1()
update_sha(sha, args.kernel)
update_sha(sha, args.ramdisk)
update_sha(sha, args.second)
if args.header_version > 0:
update_sha(sha, args.recovery_dtbo)
if args.header_version > 1:
update_sha(sha, args.dtb)
img_id = pack('32s', sha.digest())
args.output.write(img_id)
args.output.write(pack('1024s', args.cmdline[512:].encode()))
if args.header_version > 0:
args.output.write(pack('I', filesize(args.recovery_dtbo))) # size in bytes
if args.recovery_dtbo:
args.output.write(pack('Q', get_recovery_dtbo_offset(args))) # recovery dtbo offset
else:
args.output.write(pack('Q', 0)) # Will be set to 0 for devices without a recovery dtbo
# Populate boot image header size for header versions 1 and 2.
if args.header_version == 1:
args.output.write(pack('I', BOOT_IMAGE_HEADER_V1_SIZE))
elif args.header_version == 2:
args.output.write(pack('I', BOOT_IMAGE_HEADER_V2_SIZE))
if args.header_version > 1:
if filesize(args.dtb) == 0:
raise ValueError("DTB image must not be empty.")
args.output.write(pack('I', filesize(args.dtb))) # size in bytes
args.output.write(pack('Q', args.base + args.dtb_offset)) # dtb physical load address
pad_file(args.output, args.pagesize)
return img_id
class ValidateStrLenAction(Action):
def __init__(self, option_strings, dest, nargs=None, **kwargs):
if 'maxlen' not in kwargs:
raise ValueError('maxlen must be set')
self.maxlen = int(kwargs['maxlen'])
del kwargs['maxlen']
super(ValidateStrLenAction, self).__init__(option_strings, dest, **kwargs)
def __call__(self, parser, namespace, values, option_string=None):
if len(values) > self.maxlen:
raise ValueError(
'String argument too long: max {0:d}, got {1:d}'.format(self.maxlen, len(values)))
setattr(namespace, self.dest, values)
def write_padded_file(f_out, f_in, padding):
if f_in is None:
return
f_out.write(f_in.read())
pad_file(f_out, padding)
def parse_int(x):
return int(x, 0)
def parse_os_version(x):
match = re.search(r'^(\d{1,3})(?:\.(\d{1,3})(?:\.(\d{1,3}))?)?', x)
if match:
a = int(match.group(1))
b = c = 0
if match.lastindex >= 2:
b = int(match.group(2))
if match.lastindex == 3:
c = int(match.group(3))
# 7 bits allocated for each field
assert a < 128
assert b < 128
assert c < 128
return (a << 14) | (b << 7) | c
return 0
def parse_os_patch_level(x):
match = re.search(r'^(\d{4})-(\d{2})(?:-(\d{2}))?', x)
if match:
y = int(match.group(1)) - 2000
m = int(match.group(2))
# 7 bits allocated for the year, 4 bits for the month
assert 0 <= y < 128
assert 0 < m <= 12
return (y << 4) | m
return 0
def parse_cmdline():
parser = ArgumentParser()
parser.add_argument('--kernel', help='path to the kernel', type=FileType('rb'))
parser.add_argument('--ramdisk', help='path to the ramdisk', type=FileType('rb'))
parser.add_argument('--second', help='path to the 2nd bootloader', type=FileType('rb'))
parser.add_argument('--dtb', help='path to dtb', type=FileType('rb'))
recovery_dtbo_group = parser.add_mutually_exclusive_group()
recovery_dtbo_group.add_argument('--recovery_dtbo', help='path to the recovery DTBO',
type=FileType('rb'))
recovery_dtbo_group.add_argument('--recovery_acpio', help='path to the recovery ACPIO',
type=FileType('rb'), metavar='RECOVERY_ACPIO',
dest='recovery_dtbo')
parser.add_argument('--cmdline', help='extra arguments to be passed on the '
'kernel command line', default='', action=ValidateStrLenAction, maxlen=1536)
parser.add_argument('--vendor_cmdline',
help='kernel command line arguments contained in vendor boot',
default='', action=ValidateStrLenAction, maxlen=2048)
parser.add_argument('--base', help='base address', type=parse_int, default=0x10000000)
parser.add_argument('--kernel_offset', help='kernel offset', type=parse_int, default=0x00008000)
parser.add_argument('--ramdisk_offset', help='ramdisk offset', type=parse_int,
default=0x01000000)
parser.add_argument('--second_offset', help='2nd bootloader offset', type=parse_int,
default=0x00f00000)
parser.add_argument('--dtb_offset', help='dtb offset', type=parse_int, default=0x01f00000)
parser.add_argument('--os_version', help='operating system version', type=parse_os_version,
default=0)
parser.add_argument('--os_patch_level', help='operating system patch level',
type=parse_os_patch_level, default=0)
parser.add_argument('--tags_offset', help='tags offset', type=parse_int, default=0x00000100)
parser.add_argument('--board', help='board name', default='', action=ValidateStrLenAction,
maxlen=16)
parser.add_argument('--pagesize', help='page size', type=parse_int,
choices=[2**i for i in range(11, 15)], default=2048)
parser.add_argument('--id', help='print the image ID on standard output',
action='store_true')
parser.add_argument('--header_version', help='boot image header version', type=parse_int,
default=0)
parser.add_argument('-o', '--output', help='output file name', type=FileType('wb'))
parser.add_argument('--vendor_boot', help='vendor boot output file name', type=FileType('wb'))
parser.add_argument('--vendor_ramdisk', help='path to the vendor ramdisk', type=FileType('rb'))
return parser.parse_args()
def write_data(args, pagesize):
write_padded_file(args.output, args.kernel, pagesize)
write_padded_file(args.output, args.ramdisk, pagesize)
write_padded_file(args.output, args.second, pagesize)
if args.header_version > 0 and args.header_version < 3:
write_padded_file(args.output, args.recovery_dtbo, pagesize)
if args.header_version == 2:
write_padded_file(args.output, args.dtb, pagesize)
def write_vendor_boot_data(args):
write_padded_file(args.vendor_boot, args.vendor_ramdisk, args.pagesize)
write_padded_file(args.vendor_boot, args.dtb, args.pagesize)
def main():
args = parse_cmdline()
if args.vendor_boot is not None:
if args.header_version < 3:
raise ValueError('--vendor_boot not compatible with given header version')
if args.vendor_ramdisk is None:
raise ValueError('--vendor_ramdisk missing or invalid')
write_vendor_boot_header(args)
write_vendor_boot_data(args)
if args.output is not None:
if args.kernel is None:
raise ValueError('kernel must be supplied when creating a boot image')
if args.second is not None and args.header_version > 2:
raise ValueError('--second not compatible with given header version')
img_id = write_header(args)
if args.header_version > 2:
write_data(args, BOOT_IMAGE_HEADER_V3_PAGESIZE)
else:
write_data(args, args.pagesize)
if args.id and img_id is not None:
# Python 2's struct.pack returns a string, but py3 returns bytes.
if isinstance(img_id, str):
img_id = [ord(x) for x in img_id]
print('0x' + ''.join('{:02x}'.format(c) for c in img_id))
if __name__ == '__main__':
main()
================================================
FILE: pack-img.sh
================================================
#!/usr/bin/env bash
oldwd="$PWD"
cd "$(dirname "$0")"
./packrd-gz.sh
python mkbootimg.py \
--header_version 2 \
--os_version 11.0.0 \
--os_patch_level 2020-11 \
--ramdisk rd-new.cpio.gz \
--kernel alpine-Image.lz4 \
--dtb alpine-dt.dtb \
--cmdline 'console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 printk.devkmsg=on msm_rtb.filter=0x237 ehci-hcd.park=3 service_locator.enable=1 androidboot.memcg=1 cgroup.memory=nokmem lpm_levels.sleep_disabled=1 usbcore.autosuspend=7 androidboot.usbcontroller=a600000.dwc3 swiotlb=2048 androidboot.boot_devices=soc/1d84000.ufshc loop.max_part=7 snd_soc_cs35l41_i2c.async_probe=1 i2c_qcom_geni.async_probe=1 st21nfc.async_probe=1 spmi_pmic_arb.async_probe=1 ufs_qcom.async_probe=1 buildvariant=user' \
--kernel_offset 0x8000 \
--ramdisk_offset 0x1000000 \
--dtb_offset 0x1f00000 \
--tags_offset 0x100 \
--pagesize 4096 \
--output "$oldwd/${1:-bench.img}"
================================================
FILE: pack-zip.sh
================================================
#!/usr/bin/env bash
oldwd="$PWD"
cd "$(dirname "$0")"
./packrd-gz.sh
pushd anykernel
cp ../rd-new.cpio.gz .
rm -f "$oldwd/freqbench-installer.zip"
zip -r0 "$oldwd/freqbench-installer.zip" .
popd
================================================
FILE: packrd-gz.sh
================================================
#!/usr/bin/env bash
set -eufo pipefail
cd "$(dirname "$0")"
if command -v pigz > /dev/null 2>&1; then
GZIP="pigz"
else
GZIP="gzip"
fi
cp -af init.sh rd/init
cp -af config.sh usb.sh bench.py dhcpd.conf rd/
mkdir -p rd/{tmp,sys,srv,run,root,proc,opt,mnt,home,dev}
mkdir -p rd/var/{tmp,opt,mail,log,local,empty}
oldwd="$PWD"
cd rd
find . | cpio -o -H newc | "$GZIP" -9c > "$oldwd/rd-new.cpio.gz"
================================================
FILE: postprocess/cross_cpu_cluster_graph.py
================================================
#!/usr/bin/env python3
import json
import csv
import sys
import matplotlib.pyplot as plt
CPU_LABELS = {
1: "Little",
4: "Big",
6: "Big",
7: "Prime"
}
COL_LABELS = {
"power_mean": "Power (mW)",
"coremark_score": "Performance (iter/s)",
"energy_joules": "Energy (J)",
"energy_millijoules": "Energy (mJ)",
"elapsed_sec": "Time (s)",
"coremarks_per_mhz": "CoreMarks/MHz",
"ulpmark_cm_score": "ULPMark-CM (iter/mJ)",
}
flags = set()
socs = {}
freq_load = "active"
col_name = None
for i, arg in enumerate(sys.argv[1:]):
if ":" in arg:
name, path = arg.split(":")
with open(path, "r") as f:
socs[name] = json.loads(f.read())
elif "+" in arg:
flag = arg[1:]
flags.add(flag)
elif "/" in arg:
freq_load, col_name = arg.split("/")
else:
col_name = arg
col_label = COL_LABELS[col_name] if col_name in COL_LABELS else col_name
plt.ylabel(col_label)
plt.xlabel("Frequency (MHz)")
plt.title(col_label)
for soc_i, (soc, soc_data) in enumerate(socs.items()):
cpus_data = soc_data["cpus"]
for cpu, cpu_data in cpus_data.items():
cpu = int(cpu)
freqs = [int(freq) / 1000 for freq in cpu_data["freqs"].keys()]
raw_values = [freq_data[freq_load][col_name] for freq_data in cpu_data["freqs"].values()]
values = []
for freq, freq_data in cpu_data["freqs"].items():
if "minscl" in flags:
curv = freq_data[freq_load][col_name]
minv = min(raw_values)
values.append(curv - minv)
else:
values.append(freq_data[freq_load][col_name])
cpu_label = CPU_LABELS[cpu] if cpu in CPU_LABELS else f"CPU {cpu}"
val_label = f"{soc} {cpu_label}"
color = f"C{soc_i}"
if "soccolor" in flags:
plt.plot(freqs, values, color, label=val_label)
else:
plt.plot(freqs, values, label=val_label)
plt.legend()
plt.show()
================================================
FILE: postprocess/cross_cpu_voltage_graph.py
================================================
#!/usr/bin/env python3
import sys
import matplotlib.pyplot as plt
import re
import collections
CPU_LABELS = {
1: "Little",
4: "Big",
6: "Big",
7: "Prime"
}
flags = set()
socs = {}
freq_load = "active"
col_name = None
for i, arg in enumerate(sys.argv[1:]):
if ":" in arg:
name, path = arg.split(":")
with open(path, "r") as f:
socs[name] = [[int(v) for v in re.split(r"[\.=]", opp)] for opp in f.read().strip().split(" ")]
elif "+" in arg:
flag = arg[1:]
flags.add(flag)
plt.ylabel("Voltage (mV)")
plt.xlabel("Frequency (MHz)")
plt.title("CPU Voltages")
for soc_i, (soc, soc_data) in enumerate(socs.items()):
cpu_freqs = collections.defaultdict(list)
cpu_volts = collections.defaultdict(list)
for cpu, freq, volt in soc_data:
freq /= 1000
volt /= 1000
cpu_freqs[cpu].append(freq)
cpu_volts[cpu].append(volt)
for cpu, freqs in cpu_freqs.items():
volts = cpu_volts[cpu]
cpu_label = CPU_LABELS[cpu] if cpu in CPU_LABELS else f"CPU {cpu}"
val_label = f"{soc} {cpu_label}"
color = f"C{soc_i}"
if "soccolor" in flags:
plt.plot(freqs, volts, color, label=val_label)
else:
plt.plot(freqs, volts, label=val_label)
plt.legend()
plt.show()
================================================
FILE: postprocess/efficient_freqs.py
================================================
#!/usr/bin/env python3
import json
import sys
with open(sys.argv[1], "r") as f:
json_data = json.loads(f.read())
cpus_data = json_data["cpus"]
for cpu, cpu_data in cpus_data.items():
cpu = int(cpu)
print(f"cpu{cpu}:")
eff_freqs = set()
# Start with the most efficient freq
freqs = cpu_data["freqs"]
max_eff_freq, max_eff = max(
((int(freq), freq_data["active"]["ulpmark_cm_score"]) for freq, freq_data in freqs.items()),
key=lambda opp: opp[1]
)
print((max_eff_freq, max_eff))
eff_freqs.add(max_eff_freq)
# Add the max freq
max_freq = max(int(freq) for freq in freqs.keys())
max_freq_eff = freqs[str(max_freq)]["active"]["ulpmark_cm_score"]
eff_freqs.add(max_freq)
# Add efficient intermediate freqs
last_freq = max_eff_freq
freq_keys = list(map(int, freqs.keys()))
for freq_i, (freq, freq_data) in enumerate(freqs.items()):
freq = int(freq)
eff = freq_data["active"]["ulpmark_cm_score"]
# Clock compensation: if 500 MHz passed with no freq step
if freq - last_freq < 500000:
# Ignore freqs slower than most efficient
if freq < max_eff_freq:
continue
# Less efficient than max freq
if eff < max_freq_eff:
continue
# Less efficient than next freq
#next_freq = freq_keys[min(freq_keys.index(freq) + 1, len(freqs) - 1)]
#if freqs[str(next_freq)]["active"]["ulpmark_cm_score"] >= eff:
# continue
last_freq = freq
eff_freqs.add(freq)
print(freq)
# Remove inefficient freqs
ineff_freqs = freqs.keys() - eff_freqs
for freq in ineff_freqs:
del freqs[str(freq)]
print()
with open(sys.argv[2], "w+") as f:
f.write(json.dumps(json_data))
================================================
FILE: postprocess/filter_freqs.py
================================================
#!/usr/bin/env python3
import json
import sys
with open(sys.argv[1], "r") as f:
json_data = json.loads(f.read())
allowed_opps = set(tuple(int(v) for v in opp.split(".")) for opp in sys.argv[3:])
cpus_data = json_data["cpus"]
for cpu, cpu_data in cpus_data.items():
cpu = int(cpu)
freqs = cpu_data["freqs"]
remove_freqs = freqs.keys() - set(str(freq) for opp_cpu, freq in allowed_opps if opp_cpu == cpu)
for freq in remove_freqs:
del freqs[str(freq)]
with open(sys.argv[2], "w+") as f:
f.write(json.dumps(json_data))
================================================
FILE: postprocess/idle_csv.py
================================================
#!/usr/bin/env python3
import json
import csv
import sys
with open(sys.argv[1], "r") as f:
json_data = json.loads(f.read())
cpus_data = json_data["cpus"]
with open(sys.argv[2], "w+") as f:
fields = [
"CPU",
"Frequency (kHz)",
"Power (mW)",
"Energy (J)"
]
writer = csv.DictWriter(f, fieldnames=fields)
writer.writeheader()
for cpu, cpu_data in cpus_data.items():
for freq, freq_data in cpu_data["freqs"].items():
freq_data = freq_data["idle"]
writer.writerow({
"CPU": cpu,
"Frequency (kHz)": freq,
"Power (mW)": freq_data["power_mean"],
"Energy (J)": freq_data["energy_joules"],
})
================================================
FILE: postprocess/legacy_energy_model.py
================================================
#!/usr/bin/env python3
import json
import sys
import re
import statistics
with open(sys.argv[1], "r") as f:
json_data = json.loads(f.read())
if len(sys.argv) > 2:
key_type, value_type = sys.argv[2].split("/")
else:
key_type = "freq"
value_type = "power"
if len(sys.argv) > 3:
old_model = {"core": [], "cluster": []}
# Example:
# {
# "core": [
# {
# "busy": [1, 2, 3, 4, 5, 6],
# "idle": [3, 2, 1],
# },
# {
# "busy": [10, 20, 30, 40, 50, 60],
# "idle": [5, 3, 2],
# },
# ],
# "cluster": [
# {
# "busy": [1, 1, 1, 2, 3, 3],
# "idle": [2, 2, 1],
# },
# {
# "busy": [2, 2, 3, 4, 4, 5],
# "idle": [4, 2, 1],
# },
# ],
# }
with open(sys.argv[3], "r") as f:
old_dtsi = f.read().split("\n")
# Rudimentary line-by-line DTS parser, will break with unexpected data
cpu_i = -1
data_block = None
cost_block = None
for line in old_dtsi:
match = re.search(r"(core|cluster)-cost(\d+)\s+\{", line)
if match:
new_data_block = match.group(1)
if new_data_block == data_block:
cpu_i += 1
else:
cpu_i = 0
data_block = new_data_block
old_model[data_block].append({})
continue
match = re.search(r"(busy|idle)-cost-data\s+=", line)
if match:
cost_block = match.group(1)
old_model[data_block][cpu_i][cost_block] = []
continue
if cost_block == "busy":
match = re.search(r"^\s*(\d+)\s+(\d+)\s*$", line)
if match:
key = int(match.group(1))
value = int(match.group(2))
# Ignore keys (cap/freq) and use indices instead
# Assumption: all freqs are present in both
old_model[data_block][cpu_i]["busy"].append(value)
elif cost_block == "idle":
if re.match(r"^\s*(?:\d+\s*)+$", line):
# Extend array to accomodate single-line costs, e.g. qcom format
idle_costs = [int(cost) for cost in re.split(r"\s+", line.strip())]
old_model[data_block][cpu_i]["idle"] += idle_costs
if re.match(r"^\s*>;\s*$", line):
cost_block = None
else:
old_model = None
cpus_data = json_data["cpus"]
DTS_HEADER = """/*
* Auto-generated legacy EAS energy model for incorporation in SoC device tree.
* Generated by freqbench postprocessing scripts using freqbench results.
* More info at https://github.com/kdrag0n/freqbench
*/
/ {
\tcpus {"""
print(DTS_HEADER, end="")
# Performance efficiency
unscaled_cpu_cm_mhz = {}
for cpu, cpu_data in cpus_data.items():
last_freq, last_freq_data = max(cpu_data["freqs"].items(), key=lambda f: f[0])
cm_mhz = last_freq_data["active"]["coremarks_per_mhz"]
unscaled_cpu_cm_mhz[int(cpu)] = cm_mhz
# Scale performance efficiency
max_cm_mhz = max(unscaled_cpu_cm_mhz.values())
scaled_cpu_cm_mhz = {
cpu: cm_mhz / max_cm_mhz * 1024
for cpu, cm_mhz in unscaled_cpu_cm_mhz.items()
}
# Pass 1: performance efficiency (for capacity scaling)
for cpu, cpu_data in cpus_data.items():
cpu = int(cpu)
cm_mhz_norm = scaled_cpu_cm_mhz[cpu]
lb = "{"
rb = "}"
print(f"""
\t\tcpu@{0 if cpu == 1 else cpu} {lb}
\t\t\tefficiency = <{cm_mhz_norm:.0f}>;
\t\t\tcapacity-dmips-mhz = <{cm_mhz_norm:.0f}>;
\t\t{rb};""")
print("""\t};
\tenergy_costs: energy-costs {
\t\tcompatible = "sched-energy";""")
max_perf = max(
max(freq["active"]["coremark_score"]
for freq in cpu["freqs"].values()) for cpu in cpus_data.values()
)
# Pass 2: core costs
core_cost_keys = []
for cpu_i, (cpu, cpu_data) in enumerate(cpus_data.items()):
cpu = int(cpu)
core_cost_keys.append([])
lb = "{"
rb = "}"
print(f"""
\t\tCPU_COST_{cpu_i}: core-cost{cpu_i} {lb}
\t\t\tbusy-cost-data = <""")
for freq, freq_data in cpu_data["freqs"].items():
freq = int(freq)
if value_type == "power":
value = freq_data["active"]["power_mean"]
elif value_type == "energy":
value = freq_data["active"]["energy_millijoules"]
if key_type == "freq":
key = freq
print(f"\t\t\t\t{key: 8.0f}{value: 5.0f}")
elif key_type == "cap":
# Floor to match CPU integer math
key = freq_data["active"]["coremark_score"] / max_perf * 1024
print(f"\t\t\t\t{key: 5.0f}{value: 5.0f}")
core_cost_keys[cpu_i].append(key)
if old_model:
idle_costs = " ".join(map(str, old_model["core"][cpu_i]["idle"]))
else:
# Placeholder in lieu of real data
idle_costs = "3 2 1"
print(f"""\t\t\t>;
\t\t\tidle-cost-data = <
\t\t\t\t{idle_costs}
\t\t\t>;
\t\t{rb};""")
# Pass 3: cluster costs
if old_model:
for cpu_i, new_keys in enumerate(core_cost_keys):
lb = "{"
rb = "}"
print(f"""
\t\tCLUSTER_COST_{cpu_i}: cluster-cost{cpu_i} {lb}
\t\t\tbusy-cost-data = <""")
for cost_i, cost in enumerate(old_model["cluster"][cpu_i]["busy"]):
# Ignore silently for now instead of logging to stderr to make copy-pasting easier
# This happens with qcom speed bin differences on newer SoCs
if cost_i >= len(new_keys):
continue
key = new_keys[cost_i]
print(f"\t\t\t\t{key: 5.0f}{cost: 5.0f}")
idle_costs = " ".join(map(str, old_model["cluster"][cpu_i]["idle"]))
print(f"""\t\t\t>;
\t\t\tidle-cost-data = <
\t\t\t\t{idle_costs}
\t\t\t>;
\t\t{rb};""")
print("""\t};
};""")
================================================
FILE: postprocess/requirements.txt
================================================
matplotlib
================================================
FILE: postprocess/simplified_energy_model.py
================================================
#!/usr/bin/env python3
import json
import csv
import sys
import re
import statistics
with open(sys.argv[1], "r") as f:
json_data = json.loads(f.read())
cpus_data = json_data["cpus"]
DTS_HEADER = """/*
* Auto-generated simplified EAS energy model for incorporation in SoC device tree.
* Generated by freqbench postprocessing scripts using freqbench results.
* More info at https://github.com/kdrag0n/freqbench
*/
/ {
\tcpus {"""
print(DTS_HEADER)
mode = "power"
voltages = {}
for arg in sys.argv[2:]:
cluster, freq, voltage = map(int, re.split(r"\.|=", arg))
voltages[(cluster, freq)] = voltage
# Performance efficiency
unscaled_cpu_cm_mhz = {}
for cpu, cpu_data in cpus_data.items():
last_freq, last_freq_data = max(cpu_data["freqs"].items(), key=lambda f: f[0])
cm_mhz = last_freq_data["active"]["coremarks_per_mhz"]
unscaled_cpu_cm_mhz[int(cpu)] = cm_mhz
# Scale performance efficiency
max_cm_mhz = max(unscaled_cpu_cm_mhz.values())
scaled_cpu_cm_mhz = {
cpu: cm_mhz / max_cm_mhz * 1024
for cpu, cm_mhz in unscaled_cpu_cm_mhz.items()
}
for cpu, cpu_data in cpus_data.items():
cpu = int(cpu)
dpcs = []
for freq, freq_data in cpu_data["freqs"].items():
freq = int(freq)
if (cpu, freq) not in voltages:
continue
if mode == "power":
# µW
cost = freq_data["active"]["power_mean"] * 1000
elif mode == "energy":
cost = freq_data["active"]["energy_millijoules"] * 10
mhz = freq / 1000
v = voltages[(cpu, freq)] / 1_000_000
dpc = cost / mhz / v**2
dpcs.append(dpc)
cm_mhz_norm = scaled_cpu_cm_mhz[cpu]
if dpcs:
dpc = statistics.mean(dpcs)
else:
dpc = 0
lb = "{"
rb = "}"
print(f"""\t\tcpu@{0 if cpu == 1 else cpu} {lb}
\t\t\tefficiency = <{cm_mhz_norm:.0f}>;
\t\t\tcapacity-dmips-mhz = <{cm_mhz_norm:.0f}>;
\t\t\tdynamic-power-coefficient = <{dpc:.0f}>;
\t\t{rb};
""")
print("""\t};
};""")
================================================
FILE: postprocess/unified_cluster_col.py
================================================
#!/usr/bin/env python3
import json
import csv
import sys
with open(sys.argv[1], "r") as f:
json_data = json.loads(f.read())
col_name = sys.argv[2]
cpus_data = json_data["cpus"]
with open(sys.argv[3], "w+") as f:
fields = [
"Frequency (kHz)",
*[f"CPU {cpu} {col_name}" for cpu in cpus_data.keys()]
]
writer = csv.DictWriter(f, fieldnames=fields)
writer.writeheader()
freqs = []
for cpu, cpu_data in cpus_data.items():
freqs += cpu_data["freqs"].keys()
freqs.sort(reverse=True)
for freq in freqs:
row = {
"Frequency (kHz)": freq
}
for cpu, cpu_data in cpus_data.items():
if freq in cpu_data["freqs"]:
row[f"CPU {cpu} {col_name}"] = str(cpu_data["freqs"][freq]["active"][col_name])
else:
row[f"CPU {cpu} {col_name}"] = ""
writer.writerow(row)
================================================
FILE: postprocess/unified_cluster_graph.py
================================================
#!/usr/bin/env python3
import json
import csv
import sys
import matplotlib.pyplot as plt
with open(sys.argv[1], "r") as f:
json_data = json.loads(f.read())
CPU_LABELS = {
1: "Little",
4: "Big",
6: "Big",
7: "Prime"
}
COL_LABELS = {
"power_mean": "Power (mW)",
"coremark_score": "Performance (iter/s)",
"energy_joules": "Energy (J)",
"energy_millijoules": "Energy (mJ)",
"elapsed_sec": "Time (s)",
"coremarks_per_mhz": "CoreMarks/MHz",
"ulpmark_cm_score": "ULPMark-CM (iter/mJ)",
}
col_name = sys.argv[2]
cpus_data = json_data["cpus"]
col_label = COL_LABELS[col_name] if col_name in COL_LABELS else col_name
plt.ylabel(col_label)
plt.xlabel("Frequency (MHz)")
if len(sys.argv) > 3:
plt.title(sys.argv[3])
else:
plt.title(col_label)
for cpu, cpu_data in cpus_data.items():
cpu = int(cpu)
freqs = [int(freq) / 1000 for freq in cpu_data["freqs"].keys()]
values = [freq_data["active"][col_name] for freq_data in cpu_data["freqs"].values()]
cpu_label = CPU_LABELS[cpu] if cpu in CPU_LABELS else f"CPU {cpu}"
plt.plot(freqs, values, label=cpu_label)
plt.legend()
plt.show()
================================================
FILE: rd/dev/null
================================================
================================================
FILE: rd/etc/alpine-release
================================================
3.12.0
================================================
FILE: rd/etc/apk/arch
================================================
aarch64
================================================
FILE: rd/etc/apk/keys/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub
================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr8s1q88XpuJWLCZALdKj
lN8wg2ePB2T9aIcaxryYE/Jkmtu+ZQ5zKq6BT3y/udt5jAsMrhHTwroOjIsF9DeG
e8Y3vjz+Hh4L8a7hZDaw8jy3CPag47L7nsZFwQOIo2Cl1SnzUc6/owoyjRU7ab0p
iWG5HK8IfiybRbZxnEbNAfT4R53hyI6z5FhyXGS2Ld8zCoU/R4E1P0CUuXKEN4p0
64dyeUoOLXEWHjgKiU1mElIQj3k/IF02W89gDj285YgwqA49deLUM7QOd53QLnx+
xrIrPv3A+eyXMFgexNwCKQU9ZdmWa00MjjHlegSGK8Y2NPnRoXhzqSP9T9i2HiXL
VQIDAQAB
-----END PUBLIC KEY-----
================================================
FILE: rd/etc/apk/keys/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub
================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3v8/ye/V/t5xf4JiXLXa
hWFRozsnmn3hobON20GdmkrzKzO/eUqPOKTpg2GtvBhK30fu5oY5uN2ORiv2Y2ht
eLiZ9HVz3XP8Fm9frha60B7KNu66FO5P2o3i+E+DWTPqqPcCG6t4Znk2BypILcit
wiPKTsgbBQR2qo/cO01eLLdt6oOzAaF94NH0656kvRewdo6HG4urbO46tCAizvCR
CA7KGFMyad8WdKkTjxh8YLDLoOCtoZmXmQAiwfRe9pKXRH/XXGop8SYptLqyVVQ+
tegOD9wRs2tOlgcLx4F/uMzHN7uoho6okBPiifRX+Pf38Vx+ozXh056tjmdZkCaV
aQIDAQAB
-----END PUBLIC KEY-----
================================================
FILE: rd/etc/apk/repositories
================================================
http://dl-cdn.alpinelinux.org/alpine/v3.12/main
http://dl-cdn.alpinelinux.org/alpine/v3.12/community
================================================
FILE: rd/etc/apk/world
================================================
alpine-baselayout
alpine-keys
apk-tools
bash
busybox
dhcp
dropbear
htop
libc-utils
python3
sgdisk
util-linux
================================================
FILE: rd/etc/crontabs/root
================================================
# do daily/weekly/monthly maintenance
# min hour day month weekday command
*/15 * * * * run-parts /etc/periodic/15min
0 * * * * run-parts /etc/periodic/hourly
0 2 * * * run-parts /etc/periodic/daily
0 3 * * 6 run-parts /etc/periodic/weekly
0 5 1 * * run-parts /etc/periodic/monthly
================================================
FILE: rd/etc/dhcp/dhcpd.conf.example
================================================
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
# Use this to enble / disable dynamic dns updates globally.
#ddns-update-style none;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
subnet 10.152.187.0 netmask 255.255.255.0 {
}
# This is a very basic subnet declaration.
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20;
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.
subnet 10.254.239.32 netmask 255.255.255.224 {
range dynamic-bootp 10.254.239.40 10.254.239.60;
option broadcast-address 10.254.239.31;
option routers rtr-239-32-1.example.org;
}
# A slightly different configuration for an internal subnet.
subnet 10.5.5.0 netmask 255.255.255.224 {
range 10.5.5.26 10.5.5.30;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers 10.5.5.1;
option broadcast-address 10.5.5.31;
default-lease-time 600;
max-lease-time 7200;
}
# Hosts which require special configuration options can be listed in
# host statements. If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.
host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95;
filename "vmunix.passacaglia";
server-name "toccata.example.com";
}
# Fixed IP addresses can also be specified for hosts. These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address fantasia.example.com;
}
# You can declare a class of clients and then do address allocation
# based on that. The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.
class "foo" {
match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}
shared-network 224-29 {
subnet 10.17.224.0 netmask 255.255.255.0 {
option routers rtr-224.example.org;
}
subnet 10.0.29.0 netmask 255.255.255.0 {
option routers rtr-29.example.org;
}
pool {
allow members of "foo";
range 10.17.224.10 10.17.224.250;
}
pool {
deny members of "foo";
range 10.0.29.10 10.0.29.230;
}
}
================================================
FILE: rd/etc/fstab
================================================
/dev/cdrom /media/cdrom iso9660 noauto,ro 0 0
/dev/usbdisk /media/usb vfat noauto,ro 0 0
================================================
FILE: rd/etc/group
================================================
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root,adm
lp:x:7:lp
mem:x:8:
kmem:x:9:
wheel:x:10:root
floppy:x:11:root
mail:x:12:mail
news:x:13:news
uucp:x:14:uucp
man:x:15:man
cron:x:16:cron
console:x:17:
audio:x:18:
cdrom:x:19:
dialout:x:20:root
ftp:x:21:
sshd:x:22:
input:x:23:
at:x:25:at
tape:x:26:root
video:x:27:root
netdev:x:28:
readproc:x:30:
squid:x:31:squid
xfs:x:33:xfs
kvm:x:34:kvm
games:x:35:
shadow:x:42:
cdrw:x:80:
usb:x:85:
vpopmail:x:89:
users:x:100:games
ntp:x:123:
nofiles:x:200:
smmsp:x:209:smmsp
locate:x:245:
abuild:x:300:
utmp:x:406:
ping:x:999:
nogroup:x:65533:
nobody:x:65534:
dhcp:x:101:dhcp
================================================
FILE: rd/etc/group-
================================================
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root,adm
lp:x:7:lp
mem:x:8:
kmem:x:9:
wheel:x:10:root
floppy:x:11:root
mail:x:12:mail
news:x:13:news
uucp:x:14:uucp
man:x:15:man
cron:x:16:cron
console:x:17:
audio:x:18:
cdrom:x:19:
dialout:x:20:root
ftp:x:21:
sshd:x:22:
input:x:23:
at:x:25:at
tape:x:26:root
video:x:27:root
netdev:x:28:
readproc:x:30:
squid:x:31:squid
xfs:x:33:xfs
kvm:x:34:kvm
games:x:35:
shadow:x:42:
cdrw:x:80:
usb:x:85:
vpopmail:x:89:
users:x:100:games
ntp:x:123:
nofiles:x:200:
smmsp:x:209:smmsp
locate:x:245:
abuild:x:300:
utmp:x:406:
ping:x:999:
nogroup:x:65533:
nobody:x:65534:
dhcp:x:101:
================================================
FILE: rd/etc/hostname
================================================
localhost
================================================
FILE: rd/etc/hosts
================================================
127.0.0.1 localhost localhost.localdomain
::1 localhost localhost.localdomain
================================================
FILE: rd/etc/inittab
================================================
# /etc/inittab
::sysinit:/sbin/openrc sysinit
::sysinit:/sbin/openrc boot
::wait:/sbin/openrc default
# Set up a couple of getty's
tty1::respawn:/sbin/getty 38400 tty1
tty2::respawn:/sbin/getty 38400 tty2
tty3::respawn:/sbin/getty 38400 tty3
tty4::respawn:/sbin/getty 38400 tty4
tty5::respawn:/sbin/getty 38400 tty5
tty6::respawn:/sbin/getty 38400 tty6
# Put a getty on the serial port
#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100
# Stuff to do for the 3-finger salute
::ctrlaltdel:/sbin/reboot
# Stuff to do before rebooting
::shutdown:/sbin/openrc shutdown
================================================
FILE: rd/etc/inputrc
================================================
# /etc/inputrc - global inputrc for libreadline
# See readline(3readline) and `info rluserman' for more information.
# Be 8 bit clean.
set input-meta on
set output-meta on
# To allow the use of 8bit-characters like the german umlauts, uncomment
# the line below. However this makes the meta key not work as a meta key,
# which is annoying to those which don't need to type in 8-bit characters.
# set convert-meta off
# try to enable the application keypad when it is called. Some systems
# need this to enable the arrow keys.
# set enable-keypad on
# see /usr/share/doc/bash/inputrc.arrows for other codes of arrow keys
# do not bell on tab-completion
# set bell-style none
# set bell-style visible
# some defaults / modifications for the emacs mode
$if mode=emacs
# allow the use of the Home/End keys
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# allow the use of the Delete/Insert keys
"\e[3~": delete-char
"\e[2~": quoted-insert
# mappings for "page up" and "page down" to step to the beginning/end
# of the history
# "\e[5~": beginning-of-history
# "\e[6~": end-of-history
# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward
# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
$if term=rxvt
"\e[7~": beginning-of-line
"\e[8~": end-of-line
"\eOc": forward-word
"\eOd": backward-word
$endif
# for non RH/Debian xterm, can't hurt for RH/Debian xterm
# "\eOH": beginning-of-line
# "\eOF": end-of-line
# for freebsd console
# "\e[H": beginning-of-line
# "\e[F": end-of-line
$endif
================================================
FILE: rd/etc/issue
================================================
Welcome to Alpine Linux 3.12
Kernel \r on an \m (\l)
================================================
FILE: rd/etc/logrotate.d/acpid
================================================
/var/log/acpid.log {
missingok
notifempty
sharedscripts
postrotate
/etc/init.d/acpid --quiet --ifstarted restart || true
endscript
}
================================================
FILE: rd/etc/modprobe.d/aliases.conf
================================================
# Aliases to tell insmod/modprobe which modules to use
# Uncomment the network protocols you don't want loaded:
# alias net-pf-1 off # Unix
# alias net-pf-2 off # IPv4
# alias net-pf-3 off # Amateur Radio AX.25
# alias net-pf-4 off # IPX
# alias net-pf-5 off # DDP / appletalk
# alias net-pf-6 off # Amateur Radio NET/ROM
# alias net-pf-9 off # X.25
# alias net-pf-10 off # IPv6
# alias net-pf-11 off # ROSE / Amateur Radio X.25 PLP
# alias net-pf-19 off # Acorn Econet
alias char-major-10-175 agpgart
alias char-major-10-200 tun
alias char-major-81 bttv
alias char-major-108 ppp_generic
alias /dev/ppp ppp_generic
alias tty-ldisc-3 ppp_async
alias tty-ldisc-14 ppp_synctty
alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate
# Crypto modules (see http://www.kerneli.org/)
alias loop-xfer-gen-0 loop_gen
alias loop-xfer-3 loop_fish2
alias loop-xfer-gen-10 loop_gen
alias cipher-2 des
alias cipher-3 fish2
alias cipher-4 blowfish
alias cipher-6 idea
alias cipher-7 serp6f
alias cipher-8 mars6
alias cipher-11 rc62
alias cipher-15 dfc2
alias cipher-16 rijndael
alias cipher-17 rc5
# Support for i2c and lm_sensors
alias char-major-89 i2c-dev
# xfrm
alias xfrm-type-2-4 xfrm4_tunnel
alias xfrm-type-2-50 esp4
alias xfrm-type-2-51 ah4
alias xfrm-type-2-108 ipcomp
alias xfrm-type-10-41 xfrm6_tunnel
alias xfrm-type-10-50 esp6
alias xfrm-type-10-51 ah6
alias xfrm-type-10-108 ipcomp6
alias sha1 sha1-generic
# change to aes-i586 to boost performance
alias aes aes-generic
================================================
FILE: rd/etc/modprobe.d/blacklist.conf
================================================
#
# Listing a module here prevents the hotplug scripts from loading it.
# Usually that'd be so that some other driver will bind it instead,
# no matter which driver happens to get probed first. Sometimes user
# mode tools can also control driver binding.
# tulip ... de4x5, xircom_tulip_cb, dmfe (...) handle same devices
blacklist de4x5
# At least 2.4.3 and later xircom_tulip doesn't have that conflict
# xircom_tulip_cb
blacklist dmfe
#evbug is a debug tool and should be loaded explicitly
blacklist evbug
# Alternate 8139 driver. Some 8139 cards need this specific driver,
# though...
# blacklist 8139cp
# Ethernet over IEEE1394 module. In too many cases this will load
# when there's no eth1394 device present (just an IEEE1394 port)
blacklist eth1394
# This module causes many Intel motherboards to crash and reboot.
blacklist i8xx-tco
# The kernel lists this as "experimental", but for now it's "broken"
blacklist via-ircc
# ALSA modules to support sound modems. These should be loaded manually
# if needed. For most people they just break sound support...
blacklist snd-atiixp-modem
blacklist snd-intel8x0m
blacklist snd-via82xx-modem
# we don't want use the pc speaker
blacklist snd-pcsp
# Alternative module to Orinoco Wireless Cards.
blacklist hostap
blacklist hostap_cs
# framebuffer drivers
blacklist aty128fb
blacklist atyfb
blacklist radeonfb
blacklist i810fb
blacklist cirrusfb
blacklist intelfb
blacklist kyrofb
blacklist i2c-matroxfb
blacklist hgafb
blacklist nvidiafb
blacklist rivafb
blacklist savagefb
blacklist sstfb
blacklist neofb
blacklist tridentfb
blacklist tdfxfb
blacklist viafb
blacklist virgefb
blacklist vga16fb
blacklist matroxfb_base
blacklist vt8623fb
# blacklist 1394 drivers
blacklist ohci1394
blacklist video1394
blacklist dv1394
# blacklist mISDN dirver by default as we prefer dahdi drivers
blacklist hfcmulti
blacklist hfcpci
blacklist hfcsusb
# blacklist C7 cpu freq. use acpi-cpufreq instead
blacklist e_powersaver
blacklist microcode
================================================
FILE: rd/etc/modprobe.d/i386.conf
================================================
alias parport_lowlevel parport_pc
alias char-major-10-144 nvram
alias binfmt-0064 binfmt_aout
alias char-major-10-135 rtc
================================================
FILE: rd/etc/modprobe.d/kms.conf
================================================
# enable modeset
options radeon modeset=1
options i915 modeset=1
options nouveau modeset=1
================================================
FILE: rd/etc/modules
================================================
af_packet
ipv6
================================================
FILE: rd/etc/motd
================================================
Welcome to Alpine!
The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org/>.
You can setup the system with the command: setup-alpine
You may change this message by editing /etc/motd.
================================================
FILE: rd/etc/network/if-up.d/dad
================================================
#!/bin/sh
# Block ifup until DAD completion
# Copyright (c) 2016-2018 Kaarle Ritvanen
has_flag() {
ip address show dev $IFACE | grep -q " $1 "
}
while has_flag tentative && ! has_flag dadfailed; do
sleep 0.2
done
================================================
FILE: rd/etc/os-release
================================================
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.12.0
PRETTY_NAME="Alpine Linux v3.12"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
================================================
FILE: rd/etc/passwd
================================================
root:x:0:0:root:/root:/bin/ash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/mail:/sbin/nologin
news:x:9:13:news:/usr/lib/news:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucppublic:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
man:x:13:15:man:/usr/man:/sbin/nologin
postmaster:x:14:12:postmaster:/var/mail:/sbin/nologin
cron:x:16:16:cron:/var/spool/cron:/sbin/nologin
ftp:x:21:21::/var/lib/ftp:/sbin/nologin
sshd:x:22:22:sshd:/dev/null:/sbin/nologin
at:x:25:25:at:/var/spool/cron/atjobs:/sbin/nologin
squid:x:31:31:Squid:/var/cache/squid:/sbin/nologin
xfs:x:33:33:X Font Server:/etc/X11/fs:/sbin/nologin
games:x:35:35:games:/usr/games:/sbin/nologin
cyrus:x:85:12::/usr/cyrus:/sbin/nologin
vpopmail:x:89:89::/var/vpopmail:/sbin/nologin
ntp:x:123:123:NTP:/var/empty:/sbin/nologin
smmsp:x:209:209:smmsp:/var/spool/mqueue:/sbin/nologin
guest:x:405:100:guest:/dev/null:/sbin/nologin
nobody:x:65534:65534:nobody:/:/sbin/nologin
dhcp:x:100:101:dhcp:/var/lib/dhcp:/sbin/nologin
================================================
FILE: rd/etc/passwd-
================================================
root:x:0:0:root:/root:/bin/ash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/mail:/sbin/nologin
news:x:9:13:news:/usr/lib/news:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucppublic:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
man:x:13:15:man:/usr/man:/sbin/nologin
postmaster:x:14:12:postmaster:/var/mail:/sbin/nologin
cron:x:16:16:cron:/var/spool/cron:/sbin/nologin
ftp:x:21:21::/var/lib/ftp:/sbin/nologin
sshd:x:22:22:sshd:/dev/null:/sbin/nologin
at:x:25:25:at:/var/spool/cron/atjobs:/sbin/nologin
squid:x:31:31:Squid:/var/cache/squid:/sbin/nologin
xfs:x:33:33:X Font Server:/etc/X11/fs:/sbin/nologin
games:x:35:35:games:/usr/games:/sbin/nologin
cyrus:x:85:12::/usr/cyrus:/sbin/nologin
vpopmail:x:89:89::/var/vpopmail:/sbin/nologin
ntp:x:123:123:NTP:/var/empty:/sbin/nologin
smmsp:x:209:209:smmsp:/var/spool/mqueue:/sbin/nologin
guest:x:405:100:guest:/dev/null:/sbin/nologin
nobody:x:65534:65534:nobody:/:/sbin/nologin
dhcp:x:100:101:dhcp:/var/lib/dhcp:/sbin/nologin
================================================
FILE: rd/etc/profile
================================================
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PAGER=less
export PS1='\h:\w\$ '
umask 022
for script in /etc/profile.d/*.sh ; do
if [ -r $script ] ; then
. $script
fi
done
================================================
FILE: rd/etc/profile.d/color_prompt
================================================
# Setup a red prompt for root and a green one for users.
# rename this file to color_prompt.sh to actually enable it
NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [ "$USER" = root ]; then
PS1="$RED\h [$NORMAL\w$RED]# $NORMAL"
else
PS1="$GREEN\h [$NORMAL\w$GREEN]\$ $NORMAL"
fi
================================================
FILE: rd/etc/profile.d/locale
================================================
CHARSET=UTF-8
LANG=C.UTF-8
LC_COLLATE=C
================================================
FILE: rd/etc/protocols
================================================
# /etc/protocols:
# $Id: protocols,v 1.1 2004/02/04 03:32:40 pebenito Exp $
# $Header: /home/cvsroot/gentoo-projects/embedded/baselayout-lite/protocols,v 1.1 2004/02/04 03:32:40 pebenito Exp $
#
# Internet (IP) protocols
#
# from: @(#)protocols 5.1 (Berkeley) 4/17/89
#
# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).
ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # Internet Group Management
ggp 3 GGP # gateway-gateway protocol
ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
st 5 ST # ST datagram mode
tcp 6 TCP # transmission control protocol
egp 8 EGP # exterior gateway protocol
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # user datagram protocol
hmp 20 HMP # host monitoring protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "reliable datagram" protocol
iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4
xtp 36 XTP # Xpress Tranfer Protocol
ddp 37 DDP # Datagram Delivery Protocol
idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport
ipv6 41 IPv6 # IPv6
ipv6-route 43 IPv6-Route # Routing Header for IPv6
ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6
idrp 45 IDRP # Inter-Domain Routing Protocol
rsvp 46 RSVP # Reservation Protocol
gre 47 GRE # General Routing Encapsulation
esp 50 ESP # Encap Security Payload for IPv6
ah 51 AH # Authentication Header for IPv6
skip 57 SKIP # SKIP
ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6
ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6
ipv6-opts 60 IPv6-Opts # Destination Options for IPv6
rspf 73 RSPF # Radio Shortest Path First.
vmtp 81 VMTP # Versatile Message Transport
ospf 89 OSPFIGP # Open Shortest Path First IGP
ipip 94 IPIP # IP-within-IP Encapsulation Protocol
encap 98 ENCAP # Yet Another IP encapsulation
pim 103 PIM # Protocol Independent Multicast
================================================
FILE: rd/etc/resolv.conf
================================================
nameserver 1.1.1.1
================================================
FILE: rd/etc/securetty
================================================
console
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
================================================
FILE: rd/etc/services
================================================
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, officially ports have two entries
# even if the protocol doesn't support UDP operations.
#
# Updated from https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml .
#
# New ports will be added on request if they have been officially assigned
# by IANA and used in the real-world or are needed by a debian package.
# If you need a huge list of used numbers please install the nmap package.
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
fsp 21/udp fspd
ssh 22/tcp # SSH Remote Login Protocol
telnet 23/tcp
smtp 25/tcp mail
time 37/tcp timserver
time 37/udp timserver
whois 43/tcp nicname
tacacs 49/tcp # Login Host Protocol (TACACS)
tacacs 49/udp
domain 53/tcp # Domain Name Server
domain 53/udp
bootps 67/udp
bootpc 68/udp
tftp 69/udp
gopher 70/tcp # Internet Gopher
finger 79/tcp
http 80/tcp www # WorldWideWeb HTTP
kerberos 88/tcp kerberos5 krb5 kerberos-sec # Kerberos v5
kerberos 88/udp kerberos5 krb5 kerberos-sec # Kerberos v5
iso-tsap 102/tcp tsap # part of ISODE
acr-nema 104/tcp dicom # Digital Imag. & Comm. 300
pop3 110/tcp pop-3 # POP version 3
sunrpc 111/tcp portmapper # RPC 4.0 portmapper
sunrpc 111/udp portmapper
auth 113/tcp authentication tap ident
nntp 119/tcp readnews untp # USENET News Transfer Protocol
ntp 123/udp # Network Time Protocol
epmap 135/tcp loc-srv # DCE endpoint resolution
netbios-ns 137/tcp # NETBIOS Name Service
netbios-ns 137/udp
netbios-dgm 138/tcp # NETBIOS Datagram Service
netbios-dgm 138/udp
netbios-ssn 139/tcp # NETBIOS session service
netbios-ssn 139/udp
imap2 143/tcp imap # Interim Mail Access P 2 and 4
snmp 161/tcp # Simple Net Mgmt Protocol
snmp 161/udp
snmp-trap 162/tcp snmptrap # Traps for SNMP
snmp-trap 162/udp snmptrap
cmip-man 163/tcp # ISO mgmt over IP (CMOT)
cmip-man 163/udp
cmip-agent 164/tcp
cmip-agent 164/udp
mailq 174/tcp # Mailer transport queue for Zmailer
xdmcp 177/udp # X Display Manager Control Protocol
bgp 179/tcp # Border Gateway Protocol
smux 199/tcp # SNMP Unix Multiplexer
qmtp 209/tcp # Quick Mail Transfer Protocol
z3950 210/tcp wais # NISO Z39.50 database
ipx 213/udp # IPX [RFC1234]
ptp-event 319/udp
ptp-general 320/udp
pawserv 345/tcp # Perf Analysis Workbench
zserv 346/tcp # Zebra server
rpc2portmap 369/tcp
rpc2portmap 369/udp # Coda portmapper
codaauth2 370/tcp
codaauth2 370/udp # Coda authentication server
clearcase 371/udp Clearcase
ldap 389/tcp # Lightweight Directory Access Protocol
ldap 389/udp
svrloc 427/tcp # Server Location
svrloc 427/udp
https 443/tcp # http protocol over TLS/SSL
snpp 444/tcp # Simple Network Paging Protocol
microsoft-ds 445/tcp # Microsoft Naked CIFS
microsoft-ds 445/udp
kpasswd 464/tcp
kpasswd 464/udp
submissions 465/tcp ssmtp smtps urd # Submission over TLS [RFC8314]
saft 487/tcp # Simple Asynchronous File Transfer
isakmp 500/udp # IPSEC key management
rtsp 554/tcp # Real Time Stream Control Protocol
rtsp 554/udp
nqs 607/tcp # Network Queuing system
asf-rmcp 623/udp # ASF Remote Management and Control Protocol
qmqp 628/tcp
ipp 631/tcp # Internet Printing Protocol
#
# UNIX specific services
#
exec 512/tcp
biff 512/udp comsat
login 513/tcp
who 513/udp whod
shell 514/tcp cmd syslog # no passwords used
syslog 514/udp
printer 515/tcp spooler # line printer spooler
talk 517/udp
ntalk 518/udp
route 520/udp router routed # RIP
gdomap 538/tcp # GNUstep distributed objects
gdomap 538/udp
uucp 540/tcp uucpd # uucp daemon
klogin 543/tcp # Kerberized `rlogin' (v5)
kshell 544/tcp krcmd # Kerberized `rsh' (v5)
dhcpv6-client 546/udp
dhcpv6-server 547/udp
afpovertcp 548/tcp # AFP over TCP
nntps 563/tcp snntp # NNTP over SSL
submission 587/tcp # Submission [RFC4409]
ldaps 636/tcp # LDAP over SSL
ldaps 636/udp
tinc 655/tcp # tinc control port
tinc 655/udp
silc 706/tcp
kerberos-adm 749/tcp # Kerberos `kadmin' (v5)
#
domain-s 853/tcp # DNS over TLS [RFC7858]
domain-s 853/udp # DNS over DTLS [RFC8094]
rsync 873/tcp
ftps-data 989/tcp # FTP over SSL (data)
ftps 990/tcp
telnets 992/tcp # Telnet over SSL
imaps 993/tcp # IMAP over SSL
pop3s 995/tcp # POP-3 over SSL
#
# From ``Assigned Numbers'':
#
#> The Registered Ports are not controlled by the IANA and on most systems
#> can be used by ordinary user processes or programs executed by ordinary
#> users.
#
#> Ports are used in the TCP [45,106] to name the ends of logical
#> connections which carry long term conversations. For the purpose of
#> providing services to unknown callers, a service contact port is
#> defined. This list specifies the port used by the server process as its
#> contact port. While the IANA can not control uses of these ports it
#> does register or list uses of these ports as a convienence to the
#> community.
#
socks 1080/tcp # socks proxy server
proofd 1093/tcp
rootd 1094/tcp
openvpn 1194/tcp
openvpn 1194/udp
rmiregistry 1099/tcp # Java RMI Registry
lotusnote 1352/tcp lotusnotes # Lotus Note
ms-sql-s 1433/tcp # Microsoft SQL Server
ms-sql-s 1433/udp
ms-sql-m 1434/tcp # Microsoft SQL Monitor
ms-sql-m 1434/udp
ingreslock 1524/tcp
datametrics 1645/tcp old-radius
datametrics 1645/udp old-radius
sa-msg-port 1646/tcp old-radacct
sa-msg-port 1646/udp old-radacct
kermit 1649/tcp
groupwise 1677/tcp
l2f 1701/udp l2tp
radius 1812/tcp
radius 1812/udp
radius-acct 1813/tcp radacct # Radius Accounting
radius-acct 1813/udp radacct
cisco-sccp 2000/tcp # Cisco SCCP
nfs 2049/tcp # Network File System
nfs 2049/udp # Network File System
gnunet 2086/tcp
gnunet 2086/udp
rtcm-sc104 2101/tcp # RTCM SC-104 IANA 1/29/99
rtcm-sc104 2101/udp
gsigatekeeper 2119/tcp
gris 2135/tcp # Grid Resource Information Server
cvspserver 2401/tcp # CVS client/server operations
venus 2430/tcp # codacon port
venus 2430/udp # Venus callback/wbc interface
venus-se 2431/tcp # tcp side effects
venus-se 2431/udp # udp sftp side effect
codasrv 2432/tcp # not used
codasrv 2432/udp # server port
codasrv-se 2433/tcp # tcp side effects
codasrv-se 2433/udp # udp sftp side effect
mon 2583/tcp # MON traps
mon 2583/udp
dict 2628/tcp # Dictionary server
f5-globalsite 2792/tcp
gsiftp 2811/tcp
gpsd 2947/tcp
gds-db 3050/tcp gds_db # InterBase server
icpv2 3130/tcp icp # Internet Cache Protocol
icpv2 3130/udp icp
isns 3205/tcp # iSNS Server Port
isns 3205/udp # iSNS Server Port
iscsi-target 3260/tcp
mysql 3306/tcp
ms-wbt-server 3389/tcp
nut 3493/tcp # Network UPS Tools
nut 3493/udp
distcc 3632/tcp # distributed compiler
distcc 3632/udp
daap 3689/tcp # Digital Audio Access Protocol
daap 3689/udp
svn 3690/tcp subversion # Subversion protocol
svn 3690/udp subversion
suucp 4031/tcp # UUCP over SSL
suucp 4031/udp
sysrqd 4094/tcp # sysrq daemon
sysrqd 4094/udp
sieve 4190/tcp # ManageSieve Protocol
epmd 4369/tcp # Erlang Port Mapper Daemon
epmd 4369/udp
remctl 4373/tcp # Remote Authenticated Command Service
remctl 4373/udp
f5-iquery 4353/tcp # F5 iQuery
f5-iquery 4353/udp
ipsec-nat-t 4500/udp # IPsec NAT-Traversal [RFC3947]
iax 4569/tcp # Inter-Asterisk eXchange
iax 4569/udp
mtn 4691/tcp # monotone Netsync Protocol
mtn 4691/udp
radmin-port 4899/tcp # RAdmin Port
radmin-port 4899/udp
sip 5060/tcp # Session Initiation Protocol
sip 5060/udp
sip-tls 5061/tcp
sip-tls 5061/udp
xmpp-client 5222/tcp jabber-client # Jabber Client Connection
xmpp-server 5269/tcp jabber-server # Jabber Server Connection
cfengine 5308/tcp
mdns 5353/udp # Multicast DNS
postgresql 5432/tcp postgres # PostgreSQL Database
freeciv 5556/tcp rptp # Freeciv gameplay
amqps 5671/tcp # AMQP protocol over TLS/SSL
amqp 5672/tcp
amqp 5672/udp
amqp 5672/sctp
x11 6000/tcp x11-0 # X Window System
x11-1 6001/tcp
x11-2 6002/tcp
x11-3 6003/tcp
x11-4 6004/tcp
x11-5 6005/tcp
x11-6 6006/tcp
x11-7 6007/tcp
gnutella-svc 6346/tcp # gnutella
gnutella-svc 6346/udp
gnutella-rtr 6347/tcp # gnutella
gnutella-rtr 6347/udp
sge-qmaster 6444/tcp sge_qmaster # Grid Engine Qmaster Service
sge-execd 6445/tcp sge_execd # Grid Engine Execution Service
mysql-proxy 6446/tcp # MySQL Proxy
babel 6696/udp # Babel Routing Protocol
ircs-u 6697/tcp # Internet Relay Chat via TLS/SSL
afs3-fileserver 7000/tcp bbs # file server itself
afs3-fileserver 7000/udp bbs
afs3-callback 7001/tcp # callbacks to cache managers
afs3-callback 7001/udp
afs3-prserver 7002/tcp # users & groups database
afs3-prserver 7002/udp
afs3-vlserver 7003/tcp # volume location database
afs3-vlserver 7003/udp
afs3-kaserver 7004/tcp # AFS/Kerberos authentication
afs3-kaserver 7004/udp
afs3-volser 7005/tcp # volume managment server
afs3-volser 7005/udp
afs3-errors 7006/tcp # error interpretation service
afs3-errors 7006/udp
afs3-bos 7007/tcp # basic overseer process
afs3-bos 7007/udp
afs3-update 7008/tcp # server-to-server updater
afs3-update 7008/udp
afs3-rmtsys 7009/tcp # remote cache manager service
afs3-rmtsys 7009/udp
font-service 7100/tcp xfs # X Font Service
http-alt 8080/tcp webcache # WWW caching service
puppet 8140/tcp # The Puppet master service
bacula-dir 9101/tcp # Bacula Director
bacula-fd 9102/tcp # Bacula File Daemon
bacula-sd 9103/tcp # Bacula Storage Daemon
xmms2 9667/tcp # Cross-platform Music Multiplexing System
nbd 10809/tcp # Linux Network Block Device
zabbix-agent 10050/tcp # Zabbix Agent
zabbix-trapper 10051/tcp # Zabbix Trapper
amanda 10080/tcp # amanda backup services
dicom 11112/tcp
hkp 11371/tcp # OpenPGP HTTP Keyserver
db-lsp 17500/tcp # Dropbox LanSync Protocol
dcap 22125/tcp # dCache Access Protocol
gsidcap 22128/tcp # GSI dCache Access Protocol
wnn6 22273/tcp # wnn6
#
# Datagram Delivery Protocol services
#
rtmp 1/ddp # Routing Table Maintenance Protocol
nbp 2/ddp # Name Binding Protocol
echo 4/ddp # AppleTalk Echo Protocol
zip 6/ddp # Zone Information Protocol
#=========================================================================
# The remaining port numbers are not as allocated by IANA.
#=========================================================================
# Kerberos (Project Athena/MIT) services
kerberos4 750/udp kerberos-iv kdc # Kerberos (server)
kerberos4 750/tcp kerberos-iv kdc
kerberos-master 751/udp kerberos_master # Kerberos authentication
kerberos-master 751/tcp
passwd-server 752/udp passwd_server # Kerberos passwd server
krb-prop 754/tcp krb_prop krb5_prop hprop # Kerberos slave propagation
zephyr-srv 2102/udp # Zephyr server
zephyr-clt 2103/udp # Zephyr serv-hm connection
zephyr-hm 2104/udp # Zephyr hostmanager
iprop 2121/tcp # incremental propagation
supfilesrv 871/tcp # Software Upgrade Protocol server
supfiledbg 1127/tcp # Software Upgrade Protocol debugging
#
# Services added for the Debian GNU/Linux distribution
#
poppassd 106/tcp # Eudora
poppassd 106/udp
moira-db 775/tcp moira_db # Moira database
moira-update 777/tcp moira_update # Moira update protocol
moira-ureg 779/udp moira_ureg # Moira user registration
spamd 783/tcp # spamassassin daemon
skkserv 1178/tcp # skk jisho server port
predict 1210/udp # predict -- satellite tracking
rmtcfg 1236/tcp # Gracilis Packeten remote config server
xtel 1313/tcp # french minitel
xtelw 1314/tcp # french minitel
support 1529/tcp # GNATS
cfinger 2003/tcp # GNU Finger
frox 2121/tcp # frox: caching ftp proxy
zebrasrv 2600/tcp # zebra service
zebra 2601/tcp # zebra vty
ripd 2602/tcp # ripd vty (zebra)
ripngd 2603/tcp # ripngd vty (zebra)
ospfd 2604/tcp # ospfd vty (zebra)
bgpd 2605/tcp # bgpd vty (zebra)
ospf6d 2606/tcp # ospf6d vty (zebra)
ospfapi 2607/tcp # OSPF-API
isisd 2608/tcp # ISISd vty (zebra)
afbackup 2988/tcp # Afbackup system
afbackup 2988/udp
afmbackup 2989/tcp # Afmbackup system
afmbackup 2989/udp
fax 4557/tcp # FAX transmission service (old)
hylafax 4559/tcp # HylaFAX client-server protocol (new)
distmp3 4600/tcp # distmp3host daemon
munin 4949/tcp lrrd # Munin
enbd-cstatd 5051/tcp # ENBD client statd
enbd-sstatd 5052/tcp # ENBD server statd
pcrd 5151/tcp # PCR-1000 Daemon
noclog 5354/tcp # noclogd with TCP (nocol)
noclog 5354/udp # noclogd with UDP (nocol)
hostmon 5355/tcp # hostmon uses TCP (nocol)
hostmon 5355/udp # hostmon uses UDP (nocol)
rplay 5555/udp # RPlay audio service
nrpe 5666/tcp # Nagios Remote Plugin Executor
nsca 5667/tcp # Nagios Agent - NSCA
mrtd 5674/tcp # MRT Routing Daemon
bgpsim 5675/tcp # MRT Routing Simulator
canna 5680/tcp # cannaserver
syslog-tls 6514/tcp # Syslog over TLS [RFC5425]
sane-port 6566/tcp sane saned # SANE network scanner daemon
ircd 6667/tcp # Internet Relay Chat
zope-ftp 8021/tcp # zope management by ftp
tproxy 8081/tcp # Transparent Proxy
omniorb 8088/tcp # OmniORB
omniorb 8088/udp
clc-build-daemon 8990/tcp # Common lisp build daemon
xinetd 9098/tcp
mandelspawn 9359/udp mandelbrot # network mandelbrot
git 9418/tcp # Git Version Control System
zope 9673/tcp # zope server
webmin 10000/tcp
kamanda 10081/tcp # amanda backup services (Kerberos)
amandaidx 10082/tcp # amanda backup services
amidxtape 10083/tcp # amanda backup services
smsqp 11201/tcp # Alamin SMS gateway
smsqp 11201/udp
xpilot 15345/tcp # XPilot Contact Port
xpilot 15345/udp
sgi-cmsd 17001/udp # Cluster membership services daemon
sgi-crsd 17002/udp
sgi-gcd 17003/udp # SGI Group membership daemon
sgi-cad 17004/tcp # Cluster Admin daemon
isdnlog 20011/tcp # isdn logging system
isdnlog 20011/udp
vboxd 20012/tcp # voice box system
vboxd 20012/udp
binkp 24554/tcp # binkp fidonet protocol
asp 27374/tcp # Address Search Protocol
asp 27374/udp
csync2 30865/tcp # cluster synchronization tool
dircproxy 57000/tcp # Detachable IRC Proxy
tfido 60177/tcp # fidonet EMSI over telnet
fido 60179/tcp # fidonet EMSI over TCP
# Local services
================================================
FILE: rd/etc/shadow
================================================
root:$6$gCnCIJyGxcPvde2g$pjwJC3FkxXHFXQMMFpd1q43THVEi7IdEh1/rwaJ9LzepagBndmdRFL.UOYHYL9k88rze.f5APeuQU82haHNOV1:18600:0:::::
bin:!::0:::::
daemon:!::0:::::
adm:!::0:::::
lp:!::0:::::
sync:!::0:::::
shutdown:!::0:::::
halt:!::0:::::
mail:!::0:::::
news:!::0:::::
uucp:!::0:::::
operator:!::0:::::
man:!::0:::::
postmaster:!::0:::::
cron:!::0:::::
ftp:!::0:::::
sshd:!::0:::::
at:!::0:::::
squid:!::0:::::
xfs:!::0:::::
games:!::0:::::
cyrus:!::0:::::
vpopmail:!::0:::::
ntp:!::0:::::
smmsp:!::0:::::
guest:!::0:::::
nobody:!::0:::::
dhcp:!:18600:0:99999:7:::
================================================
FILE: rd/etc/shadow-
================================================
root:!::0:::::
bin:!::0:::::
daemon:!::0:::::
adm:!::0:::::
lp:!::0:::::
sync:!::0:::::
shutdown:!::0:::::
halt:!::0:::::
mail:!::0:::::
news:!::0:::::
uucp:!::0:::::
operator:!::0:::::
man:!::0:::::
postmaster:!::0:::::
cron:!::0:::::
ftp:!::0:::::
sshd:!::0:::::
at:!::0:::::
squid:!::0:::::
xfs:!::0:::::
games:!::0:::::
cyrus:!::0:::::
vpopmail:!::0:::::
ntp:!::0:::::
smmsp:!::0:::::
guest:!::0:::::
nobody:!::0:::::
dhcp:!:18600:0:99999:7:::
================================================
FILE: rd/etc/shells
================================================
# valid login shells
/bin/sh
/bin/ash
/bin/bash
================================================
FILE: rd/etc/sysctl.conf
================================================
# content of this file will override /etc/sysctl.d/*
================================================
FILE: rd/etc/udhcpd.conf
================================================
# Sample udhcpd configuration file (/etc/udhcpd.conf)
# Values shown are defaults
# The start and end of the IP lease block
start 192.168.0.20
end 192.168.0.254
# The interface that udhcpd will use
interface eth0
# The maximum number of leases (includes addresses reserved
# by OFFER's, DECLINE's, and ARP conflicts). Will be corrected
# if it's bigger than IP lease block, but it ok to make it
# smaller than lease block.
#max_leases 254
# The amount of time that an IP will be reserved (leased to nobody)
# if a DHCP decline message is received (seconds)
#decline_time 3600
# The amount of time that an IP will be reserved
# if an ARP conflict occurs (seconds)
#conflict_time 3600
# How long an offered address is reserved (seconds)
#offer_time 60
# If client asks for lease below this value, it will be rounded up
# to this value (seconds)
#min_lease 60
# The location of the pid file
#pidfile /var/run/udhcpd.pid
# The location of the leases file
#lease_file /var/lib/misc/udhcpd.leases
# The time period at which udhcpd will write out leases file.
# If this is 0, udhcpd will never automatically write leases file.
# Specified in seconds.
#auto_time 7200
# Every time udhcpd writes a leases file, the below script will be called
#notify_file # default: no script
#notify_file dumpleases # useful for debugging
# The following are BOOTP specific options
# next server to use in bootstrap
#siaddr 192.168.0.22 # default: 0.0.0.0 (none)
# tftp server name
#sname zorak # default: none
# tftp file to download (e.g. kernel image)
#boot_file /var/nfs_root # default: none
# NOTE: "boot_file FILE" and "opt bootfile FILE" are conceptually the same,
# but "boot_file" goes into BOOTP-defined fixed-size field in the packet,
# whereas "opt bootfile" goes into DHCP option 0x43.
# Same for "sname HOST" and "opt tftp HOST".
# Static leases map
#static_lease 00:60:08:11:CE:4E 192.168.0.54
#static_lease 00:60:08:11:CE:3E 192.168.0.44 optional_hostname
# The remainder of options are DHCP options and can be specified with the
# keyword 'opt' or 'option'. If an option can take multiple items, such
# as the dns option, they can be listed on the same line, or multiple
# lines.
# Examples:
opt dns 192.168.10.2 192.168.10.10
option subnet 255.255.255.0
opt router 192.168.10.2
opt wins 192.168.10.10
option dns 129.219.13.81 # appended to above DNS servers for a total of 3
option domain local
option lease 864000 # default: 10 days
option msstaticroutes 10.0.0.0/8 10.127.0.1 # single static route
option staticroutes 10.0.0.0/8 10.127.0.1, 10.11.12.0/24 10.11.12.1
# Arbitrary option in hex or string form:
option 0x08 01020304 # option 8: "cookie server IP addr: 1.2.3.4"
option 14 "dumpfile"
# Currently supported options [hex option value] (for more info, see options.c):
#opt lease NUM # [0x33]
#opt subnet IP # [0x01]
#opt broadcast IP # [0x1c]
#opt router IP_LIST # [0x03]
#opt ipttl NUM # [0x17]
#opt mtu NUM # [0x1a]
#opt hostname STRING # [0x0c] client's hostname
#opt domain STRING # [0x0f] client's domain suffix
#opt search STRING_LIST # [0x77] search domains
#opt nisdomain STRING # [0x28]
#opt timezone NUM # [0x02] (localtime - UTC_time) in seconds. signed
#opt tftp STRING # [0x42] tftp server name
#opt bootfile STRING # [0x43] tftp file to download (e.g. kernel image)
#opt bootsize NUM # [0x0d] size of that file
#opt rootpath STRING # [0x11] (NFS) path to mount as root fs
#opt wpad STRING # [0xfc] Web Proxy Auto Discovery Protocol
#opt serverid IP # [0x36] default: server's IP
#opt message STRING # [0x38] error message (udhcpd sends it on success too)
#opt vlanid NUM # [0x84] 802.1P VLAN ID
#opt vlanpriority NUM # [0x85] 802.1Q VLAN priority
# RFC 5071: PXELINUX Options
#opt 0xd0 F100747E # [0xd0] magic
#opt pxeconffile STRING # [0xd1]
#opt pxepathprefix STRING # [0xd2]
#opt reboottime NUM # [0xd3] bootstrap timeout
# Options specifying server(s)
#opt dns IP_LIST # [0x06]
#opt wins IP_LIST # [0x2c]
#opt nissrv IP_LIST # [0x29]
#opt ntpsrv IP_LIST # [0x2a]
#opt lprsrv IP_LIST # [0x09]
#opt swapsrv IP # [0x10]
# Options specifying routes
#opt routes IP_PAIR_LIST # [0x21]
#opt staticroutes STATIC_ROUTES # [0x79] RFC 3442 classless static route option
#opt msstaticroutes STATIC_ROUTES # [0xf9] same, using MS option number
# Obsolete options, no longer supported
#opt logsrv IP_LIST # [0x07] 704/UDP log server (not syslog!)
#opt namesrv IP_LIST # [0x05] IEN 116 name server, obsolete (August 1979!!!)
#opt cookiesrv IP_LIST # [0x08] RFC 865 "quote of the day" server, rarely (never?) used
#opt timesrv IP_LIST # [0x04] RFC 868 time server, rarely (never?) used
# TODO: in development
#opt userclass STRING # [0x4d] RFC 3004. set of LASCII strings. "I am a printer" etc
#opt sipsrv STRING LIST # [0x78] RFC 3361. flag byte, then: 0: domain names, 1: IP addrs
#opt ip6rd .... # [0xd4] IPv6 rapid deployment
================================================
FILE: rd/lib/firmware/.gitignore
================================================
*
!.gitignore
================================================
FILE: rd/root/.config/htop/htoprc
================================================
# Beware! This file is rewritten by htop when settings are changed in the interface.
# The parser is also very primitive, and not human-friendly.
fields=0 18 39 2 46 49 1
sort_key=46
sort_direction=1
hide_threads=0
hide_kernel_threads=0
hide_userland_threads=0
shadow_other_users=0
show_thread_names=0
show_program_path=1
highlight_base_name=0
highlight_megabytes=1
highlight_threads=1
tree_view=0
header_margin=1
detailed_cpu_time=0
cpu_count_from_zero=0
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=0
delay=15
left_meters=LeftCPUs2 Memory Swap
left_meter_modes=1 1 1
right_meters=RightCPUs2 Tasks LoadAverage Uptime
right_meter_modes=1 2 2 2
================================================
FILE: rd/sbin/ldconfig
================================================
#!/bin/sh
scan_dirs() {
scanelf -qS "$@" | while read SONAME FILE; do
TARGET="${FILE##*/}"
LINK="${FILE%/*}/$SONAME"
case "$FILE" in
/lib/*|/usr/lib/*|/usr/local/lib/*) ;;
*) [ -h "$LINK" -o ! -e "$LINK" ] && ln -sf "$TARGET" "$LINK"
esac
done
return 0
}
# eat ldconfig options
while getopts "nNvXvf:C:r:" opt; do
:
done
shift $(( $OPTIND - 1 ))
[ $# -gt 0 ] && scan_dirs "$@"
================================================
FILE: rd/usr/bin/2to3-3.8
================================================
#!/usr/bin/python3.8
import sys
from lib2to3.main import main
sys.exit(main("lib2to3.fixes"))
================================================
FILE: rd/usr/bin/ldd
================================================
#!/bin/sh
exec /lib/ld-musl-aarch64.so.1 --list "$@"
================================================
FILE: rd/usr/bin/pydoc3.8
================================================
#!/usr/bin/python3.8
import pydoc
if __name__ == '__main__':
pydoc.cli()
================================================
FILE: rd/usr/lib/python3.8/LICENSE.txt
================================================
A. HISTORY OF THE SOFTWARE
==========================
Python was created in the early 1990s by Guido van Rossum at Stichting
Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
as a successor of a language called ABC. Guido remains Python's
principal author, although it includes many contributions from others.
In 1995, Guido continued his work on Python at the Corporation for
National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
in Reston, Virginia where he released several versions of the
software.
In May 2000, Guido and the Python core development team moved to
BeOpen.com to form the BeOpen PythonLabs team. In October of the same
year, the PythonLabs team moved to Digital Creations, which became
Zope Corporation. In 2001, the Python Software Foundation (PSF, see
https://www.python.org/psf/) was formed, a non-profit organization
created specifically to own Python-related Intellectual Property.
Zope Corporation was a sponsoring member of the PSF.
All Python releases are Open Source (see http://www.opensource.org for
the Open Source Definition). Historically, most, but not all, Python
releases have also been GPL-compatible; the table below summarizes
the various releases.
Release Derived Year Owner GPL-
from compatible? (1)
0.9.0 thru 1.2 1991-1995 CWI yes
1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
1.6 1.5.2 2000 CNRI no
2.0 1.6 2000 BeOpen.com no
1.6.1 1.6 2001 CNRI yes (2)
2.1 2.0+1.6.1 2001 PSF no
2.0.1 2.0+1.6.1 2001 PSF yes
2.1.1 2.1+2.0.1 2001 PSF yes
2.1.2 2.1.1 2002 PSF yes
2.1.3 2.1.2 2002 PSF yes
2.2 and above 2.1.1 2001-now PSF yes
Footnotes:
(1) GPL-compatible doesn't mean that we're distributing Python under
the GPL. All Python licenses, unlike the GPL, let you distribute
a modified version without making your changes open source. The
GPL-compatible licenses make it possible to combine Python with
other software that is released under the GPL; the others don't.
(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
because its license has a choice of law clause. According to
CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
is "not incompatible" with the GPL.
Thanks to the many outside volunteers who have worked under Guido's
direction to make these releases possible.
B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
===============================================================
PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
--------------------------------------------
1. This LICENSE AGREEMENT is between the Python Software Foundation
("PSF"), and the Individual or Organization ("Licensee") accessing and
otherwise using this software ("Python") in source or binary form and
its associated documentation.
2. Subject to the terms and conditions of this License Agreement, PSF hereby
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
analyze, test, perform and/or display publicly, prepare derivative works,
distribute, and otherwise use Python alone or in any derivative version,
provided, however, that PSF's License Agreement and PSF's notice of copyright,
i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Python Software Foundation;
All Rights Reserved" are retained in Python alone or in any derivative version
prepared by Licensee.
3. In the event Licensee prepares a derivative work that is based on
or incorporates Python or any part thereof, and wants to make
the derivative work available to others as provided herein, then
Licensee hereby agrees to include in any such work a brief summary of
the changes made to Python.
4. PSF is making Python available to Licensee on an "AS IS"
basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
INFRINGE ANY THIRD PARTY RIGHTS.
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
6. This License Agreement will automatically terminate upon a material
breach of its terms and conditions.
7. Nothing in this License Agreement shall be deemed to create any
relationship of agency, partnership, or joint venture between PSF and
Licensee. This License Agreement does not grant permission to use PSF
trademarks or trade name in a trademark sense to endorse or promote
products or services of Licensee, or any third party.
8. By copying, installing or otherwise using Python, Licensee
agrees to be bound by the terms and conditions of this License
Agreement.
BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
-------------------------------------------
BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
Individual or Organization ("Licensee") accessing and otherwise using
this software in source or binary form and its associated
documentation ("the Software").
2. Subject to the terms and conditions of this BeOpen Python License
Agreement, BeOpen hereby grants Licensee a non-exclusive,
royalty-free, world-wide license to reproduce, analyze, test, perform
and/or display publicly, prepare derivative works, distribute, and
otherwise use the Software alone or in any derivative version,
provided, however, that the BeOpen Python License is retained in the
Software, alone or in any derivative version prepared by Licensee.
3. BeOpen is making the Software available to Licensee on an "AS IS"
basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
INFRINGE ANY THIRD PARTY RIGHTS.
4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
5. This License Agreement will automatically terminate upon a material
breach of its terms and conditions.
6. This License Agreement shall be governed by and interpreted in all
respects by the law of the State of California, excluding conflict of
law provisions. Nothing in this License Agreement shall be deemed to
create any relationship of agency, partnership, or joint venture
between BeOpen and Licensee. This License Agreement does not grant
permission to use BeOpen trademarks or trade names in a trademark
sense to endorse or promote products or services of Licensee, or any
third party. As an exception, the "BeOpen Python" logos available at
http://www.pythonlabs.com/logos.html may be used according to the
permissions granted on that web page.
7. By copying, installing or otherwise using the software, Licensee
agrees to be bound by the terms and conditions of this License
Agreement.
CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
---------------------------------------
1. This LICENSE AGREEMENT is between the Corporation for National
Research Initiatives, having an office at 1895 Preston White Drive,
Reston, VA 20191 ("CNRI"), and the Individual or Organization
("Licensee") accessing and otherwise using Python 1.6.1 software in
source or binary form and its associated documentation.
2. Subject to the terms and conditions of this License Agreement, CNRI
hereby grants Licensee a nonexclusive, royalty-free, world-wide
license to reproduce, analyze, test, perform and/or display publicly,
prepare derivative works, distribute, and otherwise use Python 1.6.1
alone or in any derivative version, provided, however, that CNRI's
License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
1995-2001 Corporation for National Research Initiatives; All Rights
Reserved" are retained in Python 1.6.1 alone or in any derivative
version prepared by Licensee. Alternately, in lieu of CNRI's License
Agreement, Licensee may substitute the following text (omitting the
quotes): "Python 1.6.1 is made available subject to the terms and
conditions in CNRI's License Agreement. This Agreement together with
Python 1.6.1 may be located on the Internet using the following
unique, persistent identifier (known as a handle): 1895.22/1013. This
Agreement may also be obtained from a proxy server on the Internet
using the following URL: http://hdl.handle.net/1895.22/1013".
3. In the event Licensee prepares a derivative work that is based on
or incorporates Python 1.6.1 or any part thereof, and wants to make
the derivative work available to others as provided herein, then
Licensee hereby agrees to include in any such work a brief summary of
the changes made to Python 1.6.1.
4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
INFRINGE ANY THIRD PARTY RIGHTS.
5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
6. This License Agreement will automatically terminate upon a material
breach of its terms and conditions.
7. This License Agreement shall be governed by the federal
intellectual property law of the United States, including without
limitation the federal copyright law, and, to the extent such
U.S. federal law does not apply, by the law of the Commonwealth of
Virginia, excluding Virginia's conflict of law provisions.
Notwithstanding the foregoing, with regard to derivative works based
on Python 1.6.1 that incorporate non-separable material that was
previously distributed under the GNU General Public License (GPL), the
law of the Commonwealth of Virginia shall govern this License
Agreement only as to issues arising under or with respect to
Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
License Agreement shall be deemed to create any relationship of
agency, partnership, or joint venture between CNRI and Licensee. This
License Agreement does not grant permission to use CNRI trademarks or
trade name in a trademark sense to endorse or promote products or
services of Licensee, or any third party.
8. By clicking on the "ACCEPT" button where indicated, or by copying,
installing or otherwise using Python 1.6.1, Licensee agrees to be
bound by the terms and conditions of this License Agreement.
ACCEPT
CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
--------------------------------------------------
Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
The Netherlands. All rights reserved.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the name of Stichting Mathematisch
Centrum or CWI not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission.
STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
================================================
FILE: rd/usr/lib/python3.8/__future__.py
================================================
"""Record of phased-in incompatible language changes.
Each line is of the form:
FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease ","
CompilerFlag ")"
where, normally, OptionalRelease < MandatoryRelease, and both are 5-tuples
of the same form as sys.version_info:
(PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
PY_MINOR_VERSION, # the 1; an int
PY_MICRO_VERSION, # the 0; an int
PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
PY_RELEASE_SERIAL # the 3; an int
)
OptionalRelease records the first release in which
from __future__ import FeatureName
was accepted.
In the case of MandatoryReleases that have not yet occurred,
MandatoryRelease predicts the release in which the feature will become part
of the language.
Else MandatoryRelease records when the feature became part of the language;
in releases at or after that, modules no longer need
from __future__ import FeatureName
to use the feature in question, but may continue to use such imports.
MandatoryRelease may also be None, meaning that a planned feature got
dropped.
Instances of class _Feature have two corresponding methods,
.getOptionalRelease() and .getMandatoryRelease().
CompilerFlag is the (bitfield) flag that should be passed in the fourth
argument to the builtin function compile() to enable the feature in
dynamically compiled code. This flag is stored in the .compiler_flag
attribute on _Future instances. These values must match the appropriate
#defines of CO_xxx flags in Include/compile.h.
No feature line is ever to be deleted from this file.
"""
all_feature_names = [
"nested_scopes",
"generators",
"division",
"absolute_import",
"with_statement",
"print_function",
"unicode_literals",
"barry_as_FLUFL",
"generator_stop",
"annotations",
]
__all__ = ["all_feature_names"] + all_feature_names
# The CO_xxx symbols are defined here under the same names defined in
# code.h and used by compile.h, so that an editor search will find them here.
# However, they're not exported in __all__, because they don't really belong to
# this module.
CO_NESTED = 0x0010 # nested_scopes
CO_GENERATOR_ALLOWED = 0 # generators (obsolete, was 0x1000)
CO_FUTURE_DIVISION = 0x20000 # division
CO_FUTURE_ABSOLUTE_IMPORT = 0x40000 # perform absolute imports by default
CO_FUTURE_WITH_STATEMENT = 0x80000 # with statement
CO_FUTURE_PRINT_FUNCTION = 0x100000 # print function
CO_FUTURE_UNICODE_LITERALS = 0x200000 # unicode string literals
CO_FUTURE_BARRY_AS_BDFL = 0x400000
CO_FUTURE_GENERATOR_STOP = 0x800000 # StopIteration becomes RuntimeError in generators
CO_FUTURE_ANNOTATIONS = 0x1000000 # annotations become strings at runtime
class _Feature:
def __init__(self, optionalRelease, mandatoryRelease, compiler_flag):
self.optional = optionalRelease
self.mandatory = mandatoryRelease
self.compiler_flag = compiler_flag
def getOptionalRelease(self):
"""Return first release in which this feature was recognized.
This is a 5-tuple, of the same form as sys.version_info.
"""
return self.optional
def getMandatoryRelease(self):
"""Return release in which this feature will become mandatory.
This is a 5-tuple, of the same form as sys.version_info, or, if
the feature was dropped, is None.
"""
return self.mandatory
def __repr__(self):
return "_Feature" + repr((self.optional,
self.mandatory,
self.compiler_flag))
nested_scopes = _Feature((2, 1, 0, "beta", 1),
(2, 2, 0, "alpha", 0),
CO_NESTED)
generators = _Feature((2, 2, 0, "alpha", 1),
(2, 3, 0, "final", 0),
CO_GENERATOR_ALLOWED)
division = _Feature((2, 2, 0, "alpha", 2),
(3, 0, 0, "alpha", 0),
CO_FUTURE_DIVISION)
absolute_import = _Feature((2, 5, 0, "alpha", 1),
(3, 0, 0, "alpha", 0),
CO_FUTURE_ABSOLUTE_IMPORT)
with_statement = _Feature((2, 5, 0, "alpha", 1),
(2, 6, 0, "alpha", 0),
CO_FUTURE_WITH_STATEMENT)
print_function = _Feature((2, 6, 0, "alpha", 2),
(3, 0, 0, "alpha", 0),
CO_FUTURE_PRINT_FUNCTION)
unicode_literals = _Feature((2, 6, 0, "alpha", 2),
(3, 0, 0, "alpha", 0),
CO_FUTURE_UNICODE_LITERALS)
barry_as_FLUFL = _Feature((3, 1, 0, "alpha", 2),
(4, 0, 0, "alpha", 0),
CO_FUTURE_BARRY_AS_BDFL)
generator_stop = _Feature((3, 5, 0, "beta", 1),
(3, 7, 0, "alpha", 0),
CO_FUTURE_GENERATOR_STOP)
annotations = _Feature((3, 7, 0, "beta", 1),
(4, 0, 0, "alpha", 0),
CO_FUTURE_ANNOTATIONS)
================================================
FILE: rd/usr/lib/python3.8/__phello__.foo.py
================================================
# This file exists as a helper for the test.test_frozen module.
================================================
FILE: rd/usr/lib/python3.8/_bootlocale.py
================================================
"""A minimal subset of the locale module used at interpreter startup
(imported by the _io module), in order to reduce startup time.
Don't import directly from third-party code; use the `locale` module instead!
"""
import sys
import _locale
if sys.platform.startswith("win"):
def getpreferredencoding(do_setlocale=True):
if sys.flags.utf8_mode:
return 'UTF-8'
return _locale._getdefaultlocale()[1]
else:
try:
_locale.CODESET
except AttributeError:
if hasattr(sys, 'getandroidapilevel'):
# On Android langinfo.h and CODESET are missing, and UTF-8 is
# always used in mbstowcs() and wcstombs().
def getpreferredencoding(do_setlocale=True):
return 'UTF-8'
else:
def getpreferredencoding(do_setlocale=True):
if sys.flags.utf8_mode:
return 'UTF-8'
# This path for legacy systems needs the more complex
# getdefaultlocale() function, import the full locale module.
import locale
return locale.getpreferredencoding(do_setlocale)
else:
def getpreferredencoding(do_setlocale=True):
assert not do_setlocale
if sys.flags.utf8_mode:
return 'UTF-8'
result = _locale.nl_langinfo(_locale.CODESET)
if not result and sys.platform == 'darwin':
# nl_langinfo can return an empty string
# when the setting has an invalid value.
# Default to UTF-8 in that case because
# UTF-8 is the default charset on OSX and
# returning nothing will crash the
# interpreter.
result = 'UTF-8'
return result
================================================
FILE: rd/usr/lib/python3.8/_collections_abc.py
================================================
# Copyright 2007 Google, Inc. All Rights Reserved.
# Licensed to PSF under a Contributor Agreement.
"""Abstract Base Classes (ABCs) for collections, according to PEP 3119.
Unit tests are in test_collections.
"""
from abc import ABCMeta, abstractmethod
import sys
__all__ = ["Awaitable", "Coroutine",
"AsyncIterable", "AsyncIterator", "AsyncGenerator",
"Hashable", "Iterable", "Iterator", "Generator", "Reversible",
"Sized", "Container", "Callable", "Collection",
"Set", "MutableSet",
"Mapping", "MutableMapping",
"MappingView", "KeysView", "ItemsView", "ValuesView",
"Sequence", "MutableSequence",
"ByteString",
]
# This module has been renamed from collections.abc to _collections_abc to
# speed up interpreter startup. Some of the types such as MutableMapping are
# required early but collections module imports a lot of other modules.
# See issue #19218
__name__ = "collections.abc"
# Private list of types that we want to register with the various ABCs
# so that they will pass tests like:
# it = iter(somebytearray)
# assert isinstance(it, Iterable)
# Note: in other implementations, these types might not be distinct
# and they may have their own implementation specific types that
# are not included on this list.
bytes_iterator = type(iter(b''))
bytearray_iterator = type(iter(bytearray()))
#callable_iterator = ???
dict_keyiterator = type(iter({}.keys()))
dict_valueiterator = type(iter({}.values()))
dict_itemiterator = type(iter({}.items()))
list_iterator = type(iter([]))
list_reverseiterator = type(iter(reversed([])))
range_iterator = type(iter(range(0)))
longrange_iterator = type(iter(range(1 << 1000)))
set_iterator = type(iter(set()))
str_iterator = type(iter(""))
tuple_iterator = type(iter(()))
zip_iterator = type(iter(zip()))
## views ##
dict_keys = type({}.keys())
dict_values = type({}.values())
dict_items = type({}.items())
## misc ##
mappingproxy = type(type.__dict__)
generator = type((lambda: (yield))())
## coroutine ##
async def _coro(): pass
_coro = _coro()
coroutine = type(_coro)
_coro.close() # Prevent ResourceWarning
del _coro
## asynchronous generator ##
async def _ag(): yield
_ag = _ag()
async_generator = type(_ag)
del _ag
### ONE-TRICK PONIES ###
def _check_methods(C, *methods):
mro = C.__mro__
for method in methods:
for B in mro:
if method in B.__dict__:
if B.__dict__[method] is None:
return NotImplemented
break
else:
return NotImplemented
return True
class Hashable(metaclass=ABCMeta):
__slots__ = ()
@abstractmethod
def __hash__(self):
return 0
@classmethod
def __subclasshook__(cls, C):
if cls is Hashable:
return _check_methods(C, "__hash__")
return NotImplemented
class Awaitable(metaclass=ABCMeta):
__slots__ = ()
@abstractmethod
def __await__(self):
yield
@classmethod
def __subclasshook__(cls, C):
if cls is Awaitable:
return _check_methods(C, "__await__")
return NotImplemented
class Coroutine(Awaitable):
__slots__ = ()
@abstractmethod
def send(self, value):
"""Send a value into the coroutine.
Return next yielded value or raise StopIteration.
"""
raise StopIteration
@abstractmethod
def throw(self, typ, val=None, tb=None):
"""Raise an exception in the coroutine.
Return next yielded value or raise StopIteration.
"""
if val is None:
if tb is None:
raise typ
val = typ()
if tb is not None:
val = val.with_traceback(tb)
raise val
def close(self):
"""Raise GeneratorExit inside coroutine.
"""
try:
self.throw(GeneratorExit)
except (GeneratorExit, StopIteration):
pass
else:
raise RuntimeError("coroutine ignored GeneratorExit")
@classmethod
def __subclasshook__(cls, C):
if cls is Coroutine:
return _check_methods(C, '__await__', 'send', 'throw', 'close')
return NotImplemented
Coroutine.register(coroutine)
class AsyncIterable(metaclass=ABCMeta):
__slots__ = ()
@abstractmethod
def __aiter__(self):
return AsyncIterator()
@classmethod
def __subclasshook__(cls, C):
if cls is AsyncIterable:
return _check_methods(C, "__aiter__")
return NotImplemented
class AsyncIterator(AsyncIterable):
__slots__ = ()
@abstractmethod
async def __anext__(self):
"""Return the next item or raise StopAsyncIteration when exhausted."""
raise StopAsyncIteration
def __aiter__(self):
return self
@classmethod
def __subclasshook__(cls, C):
if cls is AsyncIterator:
return _check_methods(C, "__anext__", "__aiter__")
return NotImplemented
class AsyncGenerator(AsyncIterator):
__slots__ = ()
async def __anext__(self):
"""Return the next item from the asynchronous generator.
When exhausted, raise StopAsyncIteration.
"""
return await self.asend(None)
@abstractmethod
async def asend(self, value):
"""Send a value into the asynchronous generator.
Return next yielded value or raise StopAsyncIteration.
"""
raise StopAsyncIteration
@abstractmethod
async def athrow(self, typ, val=None, tb=None):
"""Raise an exception in the asynchronous generator.
Return next yielded value or raise StopAsyncIteration.
"""
if val is None:
if tb is None:
raise typ
val = typ()
if tb is not None:
val = val.with_traceback(tb)
raise val
async def aclose(self):
"""Raise GeneratorExit inside coroutine.
"""
try:
await self.athrow(GeneratorExit)
except (GeneratorExit, StopAsyncIteration):
pass
else:
raise RuntimeError("asynchronous generator ignored GeneratorExit")
@classmethod
def __subclasshook__(cls, C):
if cls is AsyncGenerator:
return _check_methods(C, '__aiter__', '__anext__',
'asend', 'athrow', 'aclose')
return NotImplemented
AsyncGenerator.register(async_generator)
class Iterable(metaclass=ABCMeta):
__slots__ = ()
@abstractmethod
def __iter__(self):
while False:
yield None
@classmethod
def __subclasshook__(cls, C):
if cls is Iterable:
return _check_methods(C, "__iter__")
return NotImplemented
class Iterator(Iterable):
__slots__ = ()
@abstractmethod
def __next__(self):
'Return the next item from the iterator. When exhausted, raise StopIteration'
raise StopIteration
def __iter
gitextract_7njipo89/ ├── .gitignore ├── LICENSE ├── README.md ├── anykernel/ │ ├── LICENSE │ ├── META-INF/ │ │ └── com/ │ │ └── google/ │ │ └── android/ │ │ ├── update-binary │ │ └── updater-script │ ├── anykernel.sh │ └── tools/ │ ├── ak3-core.sh │ ├── busybox │ └── magiskboot ├── bench.py ├── boot-v1/ │ ├── .gitignore │ ├── pack.sh │ ├── test.sh │ └── unpack.sh ├── config.sh ├── dhcpd.conf ├── init.sh ├── mkbootimg.py ├── pack-img.sh ├── pack-zip.sh ├── packrd-gz.sh ├── postprocess/ │ ├── cross_cpu_cluster_graph.py │ ├── cross_cpu_voltage_graph.py │ ├── efficient_freqs.py │ ├── filter_freqs.py │ ├── idle_csv.py │ ├── legacy_energy_model.py │ ├── requirements.txt │ ├── simplified_energy_model.py │ ├── unified_cluster_col.py │ └── unified_cluster_graph.py ├── rd/ │ ├── bin/ │ │ ├── bash │ │ ├── busybox │ │ ├── dmesg │ │ ├── more │ │ ├── mount │ │ ├── mountpoint │ │ └── umount │ ├── dev/ │ │ └── null │ ├── etc/ │ │ ├── alpine-release │ │ ├── apk/ │ │ │ ├── arch │ │ │ ├── keys/ │ │ │ │ ├── alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub │ │ │ │ └── alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub │ │ │ ├── repositories │ │ │ └── world │ │ ├── crontabs/ │ │ │ └── root │ │ ├── dhcp/ │ │ │ └── dhcpd.conf.example │ │ ├── dropbear/ │ │ │ └── dropbear_ecdsa_host_key │ │ ├── fstab │ │ ├── group │ │ ├── group- │ │ ├── hostname │ │ ├── hosts │ │ ├── inittab │ │ ├── inputrc │ │ ├── issue │ │ ├── logrotate.d/ │ │ │ └── acpid │ │ ├── modprobe.d/ │ │ │ ├── aliases.conf │ │ │ ├── blacklist.conf │ │ │ ├── i386.conf │ │ │ └── kms.conf │ │ ├── modules │ │ ├── motd │ │ ├── network/ │ │ │ └── if-up.d/ │ │ │ └── dad │ │ ├── os-release │ │ ├── passwd │ │ ├── passwd- │ │ ├── profile │ │ ├── profile.d/ │ │ │ ├── color_prompt │ │ │ └── locale │ │ ├── protocols │ │ ├── resolv.conf │ │ ├── securetty │ │ ├── services │ │ ├── shadow │ │ ├── shadow- │ │ ├── shells │ │ ├── sysctl.conf │ │ ├── terminfo/ │ │ │ ├── a/ │ │ │ │ ├── alacritty │ │ │ │ └── ansi │ │ │ ├── d/ │ │ │ │ └── dumb │ │ │ ├── g/ │ │ │ │ ├── gnome │ │ │ │ └── gnome-256color │ │ │ ├── k/ │ │ │ │ ├── kitty │ │ │ │ ├── konsole │ │ │ │ ├── konsole-256color │ │ │ │ └── konsole-linux │ │ │ ├── l/ │ │ │ │ └── linux │ │ │ ├── p/ │ │ │ │ ├── putty │ │ │ │ └── putty-256color │ │ │ ├── r/ │ │ │ │ ├── rxvt │ │ │ │ └── rxvt-256color │ │ │ ├── s/ │ │ │ │ ├── screen │ │ │ │ ├── screen-256color │ │ │ │ ├── st-0.6 │ │ │ │ ├── st-0.7 │ │ │ │ ├── st-0.8 │ │ │ │ ├── st-16color │ │ │ │ ├── st-256color │ │ │ │ ├── st-direct │ │ │ │ └── sun │ │ │ ├── t/ │ │ │ │ ├── terminator │ │ │ │ ├── terminology │ │ │ │ ├── terminology-0.6.1 │ │ │ │ ├── terminology-1.0.0 │ │ │ │ ├── tmux │ │ │ │ └── tmux-256color │ │ │ ├── v/ │ │ │ │ ├── vt100 │ │ │ │ ├── vt102 │ │ │ │ ├── vt200 │ │ │ │ ├── vt220 │ │ │ │ ├── vt52 │ │ │ │ ├── vte │ │ │ │ └── vte-256color │ │ │ └── x/ │ │ │ ├── xterm │ │ │ ├── xterm-256color │ │ │ ├── xterm-color │ │ │ ├── xterm-kitty │ │ │ └── xterm-xfree86 │ │ └── udhcpd.conf │ ├── lib/ │ │ ├── firmware/ │ │ │ └── .gitignore │ │ ├── ld-musl-aarch64.so.1 │ │ ├── libblkid.so.1.1.0 │ │ ├── libfdisk.so.1.1.0 │ │ ├── libmount.so.1.1.0 │ │ ├── libpopt.so.0.0.0 │ │ ├── libsmartcols.so.1.1.0 │ │ ├── libuuid.so.1.3.0 │ │ └── libz.so.1.2.11 │ ├── root/ │ │ └── .config/ │ │ └── htop/ │ │ └── htoprc │ ├── sbin/ │ │ ├── blkid │ │ ├── fdisk │ │ ├── findfs │ │ ├── fsck │ │ ├── fsfreeze │ │ ├── ldconfig │ │ ├── mkfs │ │ ├── mkmntdirs │ │ └── nologin │ └── usr/ │ ├── bin/ │ │ ├── 2to3-3.8 │ │ ├── chrt │ │ ├── colcrt │ │ ├── coremark │ │ ├── dropbearkey │ │ ├── getopt │ │ ├── hardlink │ │ ├── hexdump │ │ ├── htop │ │ ├── ldd │ │ ├── look │ │ ├── lscpu │ │ ├── mesg │ │ ├── pydoc3.8 │ │ ├── python3.8 │ │ ├── qrtr-ns │ │ ├── reboot_with_cmd │ │ ├── rename │ │ ├── renice │ │ ├── rev │ │ ├── setarch │ │ ├── setsid │ │ ├── ssl_client │ │ ├── taskset │ │ ├── ul │ │ └── uuidgen │ ├── lib/ │ │ ├── bash/ │ │ │ ├── basename │ │ │ ├── dirname │ │ │ ├── fdflags │ │ │ ├── finfo │ │ │ ├── head │ │ │ ├── id │ │ │ ├── ln │ │ │ ├── logname │ │ │ ├── mkdir │ │ │ ├── mypid │ │ │ ├── pathchk │ │ │ ├── print │ │ │ ├── printenv │ │ │ ├── push │ │ │ ├── realpath │ │ │ ├── rmdir │ │ │ ├── seq │ │ │ ├── setpgid │ │ │ ├── sleep │ │ │ ├── strftime │ │ │ ├── sync │ │ │ ├── tee │ │ │ ├── truefalse │ │ │ ├── tty │ │ │ ├── uname │ │ │ ├── unlink │ │ │ └── whoami │ │ ├── libbz2.so.1.0.8 │ │ ├── libcap-ng.so.0.0.0 │ │ ├── libffi.so.7.1.0 │ │ ├── libformw.so.6.2 │ │ ├── libgcc_s.so.1 │ │ ├── libgdbm_compat.so.4.0.0 │ │ ├── liblzma.so.5.2.5 │ │ ├── libmenuw.so.6.2 │ │ ├── libncursesw.so.6.2 │ │ ├── libpanelw.so.6.2 │ │ ├── libpython3.8.so.1.0 │ │ ├── libreadline.so.8.0 │ │ ├── libstdc++.so.6.0.28 │ │ ├── libtls-standalone.so.1.0.0 │ │ └── python3.8/ │ │ ├── LICENSE.txt │ │ ├── __future__.py │ │ ├── __phello__.foo.py │ │ ├── _bootlocale.py │ │ ├── _collections_abc.py │ │ ├── _compat_pickle.py │ │ ├── _compression.py │ │ ├── _dummy_thread.py │ │ ├── _markupbase.py │ │ ├── _osx_support.py │ │ ├── _py_abc.py │ │ ├── _pydecimal.py │ │ ├── _pyio.py │ │ ├── _sitebuiltins.py │ │ ├── _strptime.py │ │ ├── _sysconfigdata__linux_aarch64-linux-gnu.py │ │ ├── _threading_local.py │ │ ├── _weakrefset.py │ │ ├── abc.py │ │ ├── aifc.py │ │ ├── antigravity.py │ │ ├── argparse.py │ │ ├── ast.py │ │ ├── asynchat.py │ │ ├── asyncore.py │ │ ├── base64.py │ │ ├── bdb.py │ │ ├── binhex.py │ │ ├── bisect.py │ │ ├── bz2.py │ │ ├── cProfile.py │ │ ├── calendar.py │ │ ├── cgi.py │ │ ├── cgitb.py │ │ ├── chunk.py │ │ ├── cmd.py │ │ ├── code.py │ │ ├── codecs.py │ │ ├── codeop.py │ │ ├── collections/ │ │ │ ├── __init__.py │ │ │ └── abc.py │ │ ├── colorsys.py │ │ ├── compileall.py │ │ ├── configparser.py │ │ ├── contextlib.py │ │ ├── contextvars.py │ │ ├── copy.py │ │ ├── copyreg.py │ │ ├── crypt.py │ │ ├── csv.py │ │ ├── curses/ │ │ │ ├── __init__.py │ │ │ ├── ascii.py │ │ │ ├── has_key.py │ │ │ ├── panel.py │ │ │ └── textpad.py │ │ ├── dataclasses.py │ │ ├── datetime.py │ │ ├── dbm/ │ │ │ ├── __init__.py │ │ │ ├── dumb.py │ │ │ ├── gnu.py │ │ │ └── ndbm.py │ │ ├── decimal.py │ │ ├── dis.py │ │ ├── dummy_threading.py │ │ ├── encodings/ │ │ │ ├── __init__.py │ │ │ ├── aliases.py │ │ │ ├── ascii.py │ │ │ ├── base64_codec.py │ │ │ ├── big5.py │ │ │ ├── bz2_codec.py │ │ │ ├── charmap.py │ │ │ ├── gbk.py │ │ │ ├── hex_codec.py │ │ │ ├── hz.py │ │ │ ├── idna.py │ │ │ ├── iso8859_1.py │ │ │ ├── latin_1.py │ │ │ ├── mbcs.py │ │ │ ├── oem.py │ │ │ ├── quopri_codec.py │ │ │ ├── raw_unicode_escape.py │ │ │ ├── rot_13.py │ │ │ ├── undefined.py │ │ │ ├── unicode_escape.py │ │ │ ├── utf_16.py │ │ │ ├── utf_16_be.py │ │ │ ├── utf_16_le.py │ │ │ ├── utf_32.py │ │ │ ├── utf_32_be.py │ │ │ ├── utf_32_le.py │ │ │ ├── utf_7.py │ │ │ ├── utf_8.py │ │ │ ├── utf_8_sig.py │ │ │ ├── uu_codec.py │ │ │ └── zlib_codec.py │ │ ├── enum.py │ │ ├── filecmp.py │ │ ├── fileinput.py │ │ ├── fnmatch.py │ │ ├── formatter.py │ │ ├── fractions.py │ │ ├── ftplib.py │ │ ├── functools.py │ │ ├── genericpath.py │ │ ├── getopt.py │ │ ├── getpass.py │ │ ├── gettext.py │ │ ├── glob.py │ │ ├── gzip.py │ │ ├── hashlib.py │ │ ├── heapq.py │ │ ├── hmac.py │ │ ├── imghdr.py │ │ ├── imp.py │ │ ├── importlib/ │ │ │ ├── __init__.py │ │ │ ├── _bootstrap.py │ │ │ ├── _bootstrap_external.py │ │ │ ├── abc.py │ │ │ ├── machinery.py │ │ │ ├── metadata.py │ │ │ ├── resources.py │ │ │ └── util.py │ │ ├── inspect.py │ │ ├── io.py │ │ ├── ipaddress.py │ │ ├── json/ │ │ │ ├── __init__.py │ │ │ ├── decoder.py │ │ │ ├── encoder.py │ │ │ ├── scanner.py │ │ │ └── tool.py │ │ ├── keyword.py │ │ ├── linecache.py │ │ ├── locale.py │ │ ├── lzma.py │ │ ├── mailcap.py │ │ ├── mimetypes.py │ │ ├── modulefinder.py │ │ ├── netrc.py │ │ ├── ntpath.py │ │ ├── nturl2path.py │ │ ├── numbers.py │ │ ├── opcode.py │ │ ├── operator.py │ │ ├── optparse.py │ │ ├── os.py │ │ ├── pathlib.py │ │ ├── pipes.py │ │ ├── pkgutil.py │ │ ├── platform.py │ │ ├── plistlib.py │ │ ├── poplib.py │ │ ├── posixpath.py │ │ ├── pprint.py │ │ ├── profile.py │ │ ├── pstats.py │ │ ├── pty.py │ │ ├── py_compile.py │ │ ├── pyclbr.py │ │ ├── queue.py │ │ ├── quopri.py │ │ ├── random.py │ │ ├── re.py │ │ ├── reprlib.py │ │ ├── rlcompleter.py │ │ ├── runpy.py │ │ ├── sched.py │ │ ├── secrets.py │ │ ├── selectors.py │ │ ├── shelve.py │ │ ├── shlex.py │ │ ├── shutil.py │ │ ├── signal.py │ │ ├── site-packages/ │ │ │ └── README.txt │ │ ├── site.py │ │ ├── smtpd.py │ │ ├── sndhdr.py │ │ ├── socket.py │ │ ├── socketserver.py │ │ ├── sqlite3/ │ │ │ ├── __init__.py │ │ │ ├── dbapi2.py │ │ │ └── dump.py │ │ ├── sre_compile.py │ │ ├── sre_constants.py │ │ ├── sre_parse.py │ │ ├── ssl.py │ │ ├── stat.py │ │ ├── statistics.py │ │ ├── string.py │ │ ├── stringprep.py │ │ ├── struct.py │ │ ├── subprocess.py │ │ ├── sunau.py │ │ ├── symbol.py │ │ ├── symtable.py │ │ ├── sysconfig.py │ │ ├── tabnanny.py │ │ ├── telnetlib.py │ │ ├── tempfile.py │ │ ├── textwrap.py │ │ ├── this.py │ │ ├── threading.py │ │ ├── timeit.py │ │ ├── token.py │ │ ├── tokenize.py │ │ ├── trace.py │ │ ├── traceback.py │ │ ├── tracemalloc.py │ │ ├── tty.py │ │ ├── types.py │ │ ├── typing.py │ │ ├── uu.py │ │ ├── uuid.py │ │ ├── warnings.py │ │ ├── wave.py │ │ ├── weakref.py │ │ ├── webbrowser.py │ │ ├── xdrlib.py │ │ ├── zipapp.py │ │ └── zipimport.py │ ├── sbin/ │ │ ├── dhcpd │ │ └── dropbear │ └── share/ │ ├── applications/ │ │ └── htop.desktop │ └── udhcpc/ │ └── default.script ├── reboot_with_cmd.c ├── results/ │ ├── README.md │ ├── exynos5250/ │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── voltages.txt │ ├── exynos7880/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── exynos7904/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ └── total_trans │ │ │ └── 6/ │ │ │ ├── time_in_state │ │ │ └── total_trans │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── exynos9611/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 4/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── gs101/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── 4/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 6/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── gs201/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── 4/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 6/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── msm8917/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ └── 0/ │ │ │ ├── time_in_state │ │ │ └── total_trans │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── msm8940/ │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ └── total_trans │ │ │ │ └── 4/ │ │ │ │ ├── time_in_state │ │ │ │ └── total_trans │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── old/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ └── total_trans │ │ │ └── 4/ │ │ │ ├── time_in_state │ │ │ └── total_trans │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── msm8953/ │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ └── 0/ │ │ │ │ ├── time_in_state │ │ │ │ └── total_trans │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── second/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ └── 0/ │ │ │ ├── time_in_state │ │ │ └── total_trans │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── msm8996/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── msm8998/ │ │ ├── fts-irq-storm/ │ │ │ ├── cmdline.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ └── versions.txt │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── mt6768/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── mt6853t/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sdm439/ │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── olive/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sdm630/ │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── second/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sdm632/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ └── total_trans │ │ │ └── 4/ │ │ │ ├── time_in_state │ │ │ └── total_trans │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sdm636/ │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ └── total_trans │ │ │ │ └── 4/ │ │ │ │ ├── time_in_state │ │ │ │ └── total_trans │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── second/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sdm660/ │ │ ├── fourth/ │ │ │ ├── cmdline.txt │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── second/ │ │ │ ├── cmdline.txt │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── third/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sdm670/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ └── total_trans │ │ │ └── 6/ │ │ │ ├── time_in_state │ │ │ └── total_trans │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sdm710/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ └── total_trans │ │ │ └── 6/ │ │ │ ├── time_in_state │ │ │ └── total_trans │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sdm712/ │ │ ├── RMX1921/ │ │ │ ├── cmdline.txt │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── RMX1971/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ └── total_trans │ │ │ │ └── 6/ │ │ │ │ ├── time_in_state │ │ │ │ └── total_trans │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ └── total_trans │ │ │ │ └── 6/ │ │ │ │ ├── time_in_state │ │ │ │ └── total_trans │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── second/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ └── total_trans │ │ │ └── 6/ │ │ │ ├── time_in_state │ │ │ └── total_trans │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sdm845/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sm6115/ │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 4/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── second/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 4/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sm6125/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sm6150/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── dev.list │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sm6150ac/ │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ ├── trans_table │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── new/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 6/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sm7125/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 6/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sm7150/ │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 6/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── second/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 6/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── third/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 6/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sm7150ab/ │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── sunfish/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 6/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sm7150ac/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 6/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sm7225/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 6/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── m23xq/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 6/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sm7250ab/ │ │ ├── 250kiter-headless/ │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ └── run.log │ │ ├── dyniter-headless/ │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ └── run.log │ │ ├── efficient_voltages.txt │ │ ├── main/ │ │ │ ├── clusters_coremarks.csv │ │ │ ├── clusters_power.csv │ │ │ ├── idle.csv │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ └── run.log │ │ ├── new/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ ├── 6/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 7/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ └── versions.txt │ │ └── voltages.txt │ ├── sm8150/ │ │ ├── eff_freqs.txt │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ ├── 4/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 7/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── eff_results.json │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ └── versions.txt │ │ ├── new/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ ├── 4/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 7/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── voltages.txt │ ├── sm8150ac/ │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ └── versions.txt │ │ ├── new/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ ├── 4/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 7/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── voltages.txt │ ├── sm8250/ │ │ ├── k30s/ │ │ │ ├── cmdline.txt │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ ├── 4/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 7/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── voltages_k30su.txt │ │ └── voltages_mi10tp.txt │ ├── sm8250ac/ │ │ ├── cmdline.txt │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── sm8350/ │ │ ├── fifth/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ ├── 4/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 7/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── fourth/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ ├── 4/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 7/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── main/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ ├── 4/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 7/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── second/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ ├── 4/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 7/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── third/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── 4/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 7/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── t8103/ │ │ ├── asahi-cpufreq/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 4/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── asahi-cpufreq-max2988/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 4/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── asahi-cpufreq-single-pcore/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 4/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ ├── corellium-cpufreq/ │ │ │ ├── cmdline.txt │ │ │ ├── cpufreq_stats/ │ │ │ │ ├── 0/ │ │ │ │ │ ├── time_in_state │ │ │ │ │ ├── total_trans │ │ │ │ │ └── trans_table │ │ │ │ └── 4/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── cpuinfo.txt │ │ │ ├── device.txt │ │ │ ├── kernel.log │ │ │ ├── post_bench_interrupts.txt │ │ │ ├── pre_bench_interrupts.txt │ │ │ ├── processes.txt │ │ │ ├── results.csv │ │ │ ├── results.json │ │ │ ├── run.log │ │ │ ├── uptime.txt │ │ │ └── versions.txt │ │ └── corellium-cpufreq-max2988/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 4/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ ├── zuma/ │ │ └── main/ │ │ ├── cmdline.txt │ │ ├── cpufreq_stats/ │ │ │ ├── 0/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ ├── 4/ │ │ │ │ ├── time_in_state │ │ │ │ ├── total_trans │ │ │ │ └── trans_table │ │ │ └── 8/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── cpuinfo.txt │ │ ├── device.txt │ │ ├── kernel.log │ │ ├── post_bench_interrupts.txt │ │ ├── pre_bench_interrupts.txt │ │ ├── processes.txt │ │ ├── results.csv │ │ ├── results.json │ │ ├── run.log │ │ ├── uptime.txt │ │ └── versions.txt │ └── zumapro/ │ └── main/ │ ├── cmdline.txt │ ├── cpufreq_stats/ │ │ ├── 0/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ ├── 4/ │ │ │ ├── time_in_state │ │ │ ├── total_trans │ │ │ └── trans_table │ │ └── 7/ │ │ ├── time_in_state │ │ ├── total_trans │ │ └── trans_table │ ├── cpuinfo.txt │ ├── device.txt │ ├── kernel.log │ ├── post_bench_interrupts.txt │ ├── pre_bench_interrupts.txt │ ├── processes.txt │ ├── results.csv │ ├── results.json │ ├── run.log │ ├── uptime.txt │ └── versions.txt ├── test-img.sh └── usb.sh
Showing preview only (457K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6756 symbols across 204 files)
FILE: bench.py
function pr_debug (line 119) | def pr_debug(*args, **kwargs):
function run_cmd (line 124) | def run_cmd(args):
function sample_power (line 133) | def sample_power():
function start_power_thread (line 140) | def start_power_thread(sample_interval=POWER_SAMPLE_INTERVAL):
function stop_power_thread (line 177) | def stop_power_thread(thread):
function write_cpu (line 188) | def write_cpu(cpu, node, content):
function read_file (line 193) | def read_file(node):
function create_power_stats (line 199) | def create_power_stats(time_ns, samples):
function get_cpu_freqs (line 215) | def get_cpu_freqs(cpu):
function init_cpus (line 227) | def init_cpus():
function check_charging (line 263) | def check_charging(node, charging_value, charging_warned):
function init_power (line 279) | def init_power():
function main (line 319) | def main():
FILE: mkbootimg.py
function filesize (line 27) | def filesize(f):
function update_sha (line 36) | def update_sha(sha, f):
function pad_file (line 45) | def pad_file(f, padding):
function get_number_of_pages (line 50) | def get_number_of_pages(image_size, page_size):
function get_recovery_dtbo_offset (line 55) | def get_recovery_dtbo_offset(args):
function write_header_v3 (line 66) | def write_header_v3(args):
function write_vendor_boot_header (line 84) | def write_vendor_boot_header(args):
function write_header (line 106) | def write_header(args):
class ValidateStrLenAction (line 173) | class ValidateStrLenAction(Action):
method __init__ (line 174) | def __init__(self, option_strings, dest, nargs=None, **kwargs):
method __call__ (line 181) | def __call__(self, parser, namespace, values, option_string=None):
function write_padded_file (line 188) | def write_padded_file(f_out, f_in, padding):
function parse_int (line 195) | def parse_int(x):
function parse_os_version (line 199) | def parse_os_version(x):
function parse_os_patch_level (line 216) | def parse_os_patch_level(x):
function parse_cmdline (line 228) | def parse_cmdline():
function write_data (line 273) | def write_data(args, pagesize):
function write_vendor_boot_data (line 284) | def write_vendor_boot_data(args):
function main (line 289) | def main():
FILE: rd/usr/lib/python3.8/__future__.py
class _Feature (line 80) | class _Feature:
method __init__ (line 81) | def __init__(self, optionalRelease, mandatoryRelease, compiler_flag):
method getOptionalRelease (line 86) | def getOptionalRelease(self):
method getMandatoryRelease (line 94) | def getMandatoryRelease(self):
method __repr__ (line 103) | def __repr__(self):
FILE: rd/usr/lib/python3.8/_bootlocale.py
function getpreferredencoding (line 11) | def getpreferredencoding(do_setlocale=True):
function getpreferredencoding (line 22) | def getpreferredencoding(do_setlocale=True):
function getpreferredencoding (line 25) | def getpreferredencoding(do_setlocale=True):
function getpreferredencoding (line 33) | def getpreferredencoding(do_setlocale=True):
FILE: rd/usr/lib/python3.8/_collections_abc.py
function _coro (line 58) | async def _coro(): pass
function _ag (line 64) | async def _ag(): yield
function _check_methods (line 72) | def _check_methods(C, *methods):
class Hashable (line 84) | class Hashable(metaclass=ABCMeta):
method __hash__ (line 89) | def __hash__(self):
method __subclasshook__ (line 93) | def __subclasshook__(cls, C):
class Awaitable (line 99) | class Awaitable(metaclass=ABCMeta):
method __await__ (line 104) | def __await__(self):
method __subclasshook__ (line 108) | def __subclasshook__(cls, C):
class Coroutine (line 114) | class Coroutine(Awaitable):
method send (line 119) | def send(self, value):
method throw (line 126) | def throw(self, typ, val=None, tb=None):
method close (line 138) | def close(self):
method __subclasshook__ (line 149) | def __subclasshook__(cls, C):
class AsyncIterable (line 158) | class AsyncIterable(metaclass=ABCMeta):
method __aiter__ (line 163) | def __aiter__(self):
method __subclasshook__ (line 167) | def __subclasshook__(cls, C):
class AsyncIterator (line 173) | class AsyncIterator(AsyncIterable):
method __anext__ (line 178) | async def __anext__(self):
method __aiter__ (line 182) | def __aiter__(self):
method __subclasshook__ (line 186) | def __subclasshook__(cls, C):
class AsyncGenerator (line 192) | class AsyncGenerator(AsyncIterator):
method __anext__ (line 196) | async def __anext__(self):
method asend (line 203) | async def asend(self, value):
method athrow (line 210) | async def athrow(self, typ, val=None, tb=None):
method aclose (line 222) | async def aclose(self):
method __subclasshook__ (line 233) | def __subclasshook__(cls, C):
class Iterable (line 243) | class Iterable(metaclass=ABCMeta):
method __iter__ (line 248) | def __iter__(self):
method __subclasshook__ (line 253) | def __subclasshook__(cls, C):
class Iterator (line 259) | class Iterator(Iterable):
method __next__ (line 264) | def __next__(self):
method __iter__ (line 268) | def __iter__(self):
method __subclasshook__ (line 272) | def __subclasshook__(cls, C):
class Reversible (line 293) | class Reversible(Iterable):
method __reversed__ (line 298) | def __reversed__(self):
method __subclasshook__ (line 303) | def __subclasshook__(cls, C):
class Generator (line 309) | class Generator(Iterator):
method __next__ (line 313) | def __next__(self):
method send (line 320) | def send(self, value):
method throw (line 327) | def throw(self, typ, val=None, tb=None):
method close (line 339) | def close(self):
method __subclasshook__ (line 350) | def __subclasshook__(cls, C):
class Sized (line 359) | class Sized(metaclass=ABCMeta):
method __len__ (line 364) | def __len__(self):
method __subclasshook__ (line 368) | def __subclasshook__(cls, C):
class Container (line 374) | class Container(metaclass=ABCMeta):
method __contains__ (line 379) | def __contains__(self, x):
method __subclasshook__ (line 383) | def __subclasshook__(cls, C):
class Collection (line 388) | class Collection(Sized, Iterable, Container):
method __subclasshook__ (line 393) | def __subclasshook__(cls, C):
class Callable (line 398) | class Callable(metaclass=ABCMeta):
method __call__ (line 403) | def __call__(self, *args, **kwds):
method __subclasshook__ (line 407) | def __subclasshook__(cls, C):
class Set (line 416) | class Set(Collection):
method __le__ (line 430) | def __le__(self, other):
method __lt__ (line 440) | def __lt__(self, other):
method __gt__ (line 445) | def __gt__(self, other):
method __ge__ (line 450) | def __ge__(self, other):
method __eq__ (line 460) | def __eq__(self, other):
method _from_iterable (line 466) | def _from_iterable(cls, it):
method __and__ (line 474) | def __and__(self, other):
method isdisjoint (line 481) | def isdisjoint(self, other):
method __or__ (line 488) | def __or__(self, other):
method __sub__ (line 496) | def __sub__(self, other):
method __rsub__ (line 504) | def __rsub__(self, other):
method __xor__ (line 512) | def __xor__(self, other):
method _hash (line 521) | def _hash(self):
class MutableSet (line 556) | class MutableSet(Set):
method add (line 571) | def add(self, value):
method discard (line 576) | def discard(self, value):
method remove (line 580) | def remove(self, value):
method pop (line 586) | def pop(self):
method clear (line 596) | def clear(self):
method __ior__ (line 604) | def __ior__(self, it):
method __iand__ (line 609) | def __iand__(self, it):
method __ixor__ (line 614) | def __ixor__(self, it):
method __isub__ (line 627) | def __isub__(self, it):
class Mapping (line 641) | class Mapping(Collection):
method __getitem__ (line 654) | def __getitem__(self, key):
method get (line 657) | def get(self, key, default=None):
method __contains__ (line 664) | def __contains__(self, key):
method keys (line 672) | def keys(self):
method items (line 676) | def items(self):
method values (line 680) | def values(self):
method __eq__ (line 684) | def __eq__(self, other):
class MappingView (line 694) | class MappingView(Sized):
method __init__ (line 698) | def __init__(self, mapping):
method __len__ (line 701) | def __len__(self):
method __repr__ (line 704) | def __repr__(self):
class KeysView (line 708) | class KeysView(MappingView, Set):
method _from_iterable (line 713) | def _from_iterable(self, it):
method __contains__ (line 716) | def __contains__(self, key):
method __iter__ (line 719) | def __iter__(self):
class ItemsView (line 725) | class ItemsView(MappingView, Set):
method _from_iterable (line 730) | def _from_iterable(self, it):
method __contains__ (line 733) | def __contains__(self, item):
method __iter__ (line 742) | def __iter__(self):
class ValuesView (line 749) | class ValuesView(MappingView, Collection):
method __contains__ (line 753) | def __contains__(self, value):
method __iter__ (line 760) | def __iter__(self):
class MutableMapping (line 767) | class MutableMapping(Mapping):
method __setitem__ (line 781) | def __setitem__(self, key, value):
method __delitem__ (line 785) | def __delitem__(self, key):
method pop (line 790) | def pop(self, key, default=__marker):
method popitem (line 804) | def popitem(self):
method clear (line 816) | def clear(self):
method update (line 824) | def update(self, other=(), /, **kwds):
method setdefault (line 842) | def setdefault(self, key, default=None):
class Sequence (line 856) | class Sequence(Reversible, Collection):
method __getitem__ (line 867) | def __getitem__(self, index):
method __iter__ (line 870) | def __iter__(self):
method __contains__ (line 880) | def __contains__(self, value):
method __reversed__ (line 886) | def __reversed__(self):
method index (line 890) | def index(self, value, start=0, stop=None):
method count (line 913) | def count(self, value):
class ByteString (line 923) | class ByteString(Sequence):
class MutableSequence (line 936) | class MutableSequence(Sequence):
method __setitem__ (line 948) | def __setitem__(self, index, value):
method __delitem__ (line 952) | def __delitem__(self, index):
method insert (line 956) | def insert(self, index, value):
method append (line 960) | def append(self, value):
method clear (line 964) | def clear(self):
method reverse (line 972) | def reverse(self):
method extend (line 978) | def extend(self, values):
method pop (line 985) | def pop(self, index=-1):
method remove (line 993) | def remove(self, value):
method __iadd__ (line 999) | def __iadd__(self, values):
FILE: rd/usr/lib/python3.8/_compression.py
class BaseStream (line 9) | class BaseStream(io.BufferedIOBase):
method _check_not_closed (line 12) | def _check_not_closed(self):
method _check_can_read (line 16) | def _check_can_read(self):
method _check_can_write (line 20) | def _check_can_write(self):
method _check_can_seek (line 24) | def _check_can_seek(self):
class DecompressReader (line 33) | class DecompressReader(io.RawIOBase):
method readable (line 36) | def readable(self):
method __init__ (line 39) | def __init__(self, fp, decomp_factory, trailing_error=(), **decomp_args):
method close (line 59) | def close(self):
method seekable (line 63) | def seekable(self):
method readinto (line 66) | def readinto(self, b):
method read (line 72) | def read(self, size=-1):
method _rewind (line 114) | def _rewind(self):
method seek (line 120) | def seek(self, offset, whence=io.SEEK_SET):
method tell (line 150) | def tell(self):
FILE: rd/usr/lib/python3.8/_dummy_thread.py
function start_new_thread (line 29) | def start_new_thread(function, args, kwargs={}):
function exit (line 61) | def exit():
function get_ident (line 65) | def get_ident():
function allocate_lock (line 74) | def allocate_lock():
function stack_size (line 78) | def stack_size(size=None):
function _set_sentinel (line 84) | def _set_sentinel():
class LockType (line 88) | class LockType(object):
method __init__ (line 99) | def __init__(self):
method acquire (line 102) | def acquire(self, waitflag=None, timeout=-1):
method __exit__ (line 128) | def __exit__(self, typ, val, tb):
method release (line 131) | def release(self):
method locked (line 140) | def locked(self):
method __repr__ (line 143) | def __repr__(self):
class RLock (line 152) | class RLock(LockType):
method __init__ (line 160) | def __init__(self):
method acquire (line 164) | def acquire(self, waitflag=None, timeout=-1):
method release (line 172) | def release(self):
function interrupt_main (line 186) | def interrupt_main():
FILE: rd/usr/lib/python3.8/_markupbase.py
class ParserBase (line 23) | class ParserBase:
method __init__ (line 27) | def __init__(self):
method error (line 32) | def error(self, message):
method reset (line 36) | def reset(self):
method getpos (line 40) | def getpos(self):
method updatepos (line 48) | def updatepos(self, i, j):
method parse_declaration (line 64) | def parse_declaration(self, i):
method parse_marked_section (line 146) | def parse_marked_section(self, i, report=1):
method parse_comment (line 168) | def parse_comment(self, i, report=1):
method _parse_doctype_subset (line 182) | def _parse_doctype_subset(self, i, declstartpos):
method _parse_doctype_element (line 249) | def _parse_doctype_element(self, i, declstartpos):
method _parse_doctype_attlist (line 260) | def _parse_doctype_attlist(self, i, declstartpos):
method _parse_doctype_notation (line 317) | def _parse_doctype_notation(self, i, declstartpos):
method _parse_doctype_entity (line 340) | def _parse_doctype_entity(self, i, declstartpos):
method _scan_name (line 376) | def _scan_name(self, i, declstartpos):
method unknown_decl (line 394) | def unknown_decl(self, data):
FILE: rd/usr/lib/python3.8/_osx_support.py
function _find_executable (line 29) | def _find_executable(executable, path=None):
function _read_output (line 55) | def _read_output(commandstring):
function _find_build_tool (line 74) | def _find_build_tool(toolname):
function _get_system_version (line 83) | def _get_system_version():
function _remove_original_values (line 113) | def _remove_original_values(_config_vars):
function _save_modified_value (line 120) | def _save_modified_value(_config_vars, cv, newvalue):
function _supports_universal_builds (line 128) | def _supports_universal_builds():
function _find_appropriate_compiler (line 144) | def _find_appropriate_compiler(_config_vars):
function _remove_universal_flags (line 206) | def _remove_universal_flags(_config_vars):
function _remove_unsupported_archs (line 220) | def _remove_unsupported_archs(_config_vars):
function _override_all_archs (line 260) | def _override_all_archs(_config_vars):
function _check_for_unavailable_sdk (line 277) | def _check_for_unavailable_sdk(_config_vars):
function compiler_fixup (line 304) | def compiler_fixup(compiler_so, cc_args):
function customize_config_vars (line 379) | def customize_config_vars(_config_vars):
function customize_compiler (line 420) | def customize_compiler(_config_vars):
function get_platform_osx (line 440) | def get_platform_osx(_config_vars, osname, release, machine):
FILE: rd/usr/lib/python3.8/_py_abc.py
function get_cache_token (line 4) | def get_cache_token():
class ABCMeta (line 14) | class ABCMeta(type):
method __new__ (line 35) | def __new__(mcls, name, bases, namespace, /, **kwargs):
method register (line 54) | def register(cls, subclass):
method _dump_registry (line 72) | def _dump_registry(cls, file=None):
method _abc_registry_clear (line 83) | def _abc_registry_clear(cls):
method _abc_caches_clear (line 87) | def _abc_caches_clear(cls):
method __instancecheck__ (line 92) | def __instancecheck__(cls, instance):
method __subclasscheck__ (line 108) | def __subclasscheck__(cls, subclass):
FILE: rd/usr/lib/python3.8/_pydecimal.py
class DecimalException (line 192) | class DecimalException(ArithmeticError):
method handle (line 211) | def handle(self, context, *args):
class Clamped (line 215) | class Clamped(DecimalException):
class InvalidOperation (line 227) | class InvalidOperation(DecimalException):
method handle (line 250) | def handle(self, context, *args):
class ConversionSyntax (line 256) | class ConversionSyntax(InvalidOperation):
method handle (line 263) | def handle(self, context, *args):
class DivisionByZero (line 266) | class DivisionByZero(DecimalException, ZeroDivisionError):
method handle (line 279) | def handle(self, context, sign, *args):
class DivisionImpossible (line 282) | class DivisionImpossible(InvalidOperation):
method handle (line 290) | def handle(self, context, *args):
class DivisionUndefined (line 293) | class DivisionUndefined(InvalidOperation, ZeroDivisionError):
method handle (line 301) | def handle(self, context, *args):
class Inexact (line 304) | class Inexact(DecimalException):
class InvalidContext (line 316) | class InvalidContext(InvalidOperation):
method handle (line 327) | def handle(self, context, *args):
class Rounded (line 330) | class Rounded(DecimalException):
class Subnormal (line 342) | class Subnormal(DecimalException):
class Overflow (line 353) | class Overflow(Inexact, Rounded):
method handle (line 375) | def handle(self, context, sign, *args):
class Underflow (line 391) | class Underflow(Inexact, Rounded, Subnormal):
class FloatOperation (line 406) | class FloatOperation(DecimalException, TypeError):
function getcontext (line 444) | def getcontext():
function setcontext (line 458) | def setcontext(context):
function localcontext (line 467) | def localcontext(ctx=None):
class Decimal (line 513) | class Decimal(object):
method __new__ (line 522) | def __new__(cls, value="0", context=None):
method from_float (line 673) | def from_float(cls, f):
method _isnan (line 717) | def _isnan(self):
method _isinfinity (line 732) | def _isinfinity(self):
method _check_nans (line 745) | def _check_nans(self, other=None, context=None):
method _compare_check_nans (line 777) | def _compare_check_nans(self, other, context):
method __bool__ (line 810) | def __bool__(self):
method _cmp (line 817) | def _cmp(self, other):
method __eq__ (line 881) | def __eq__(self, other, context=None):
method __lt__ (line 889) | def __lt__(self, other, context=None):
method __le__ (line 898) | def __le__(self, other, context=None):
method __gt__ (line 907) | def __gt__(self, other, context=None):
method __ge__ (line 916) | def __ge__(self, other, context=None):
method compare (line 925) | def compare(self, other, context=None):
method __hash__ (line 943) | def __hash__(self):
method as_tuple (line 969) | def as_tuple(self):
method as_integer_ratio (line 976) | def as_integer_ratio(self):
method __repr__ (line 1026) | def __repr__(self):
method __str__ (line 1031) | def __str__(self, eng=False, context=None):
method to_eng_string (line 1083) | def to_eng_string(self, context=None):
method __neg__ (line 1092) | def __neg__(self, context=None):
method __pos__ (line 1114) | def __pos__(self, context=None):
method __abs__ (line 1135) | def __abs__(self, round=True, context=None):
method __add__ (line 1157) | def __add__(self, other, context=None):
method __sub__ (line 1245) | def __sub__(self, other, context=None):
method __rsub__ (line 1259) | def __rsub__(self, other, context=None):
method __mul__ (line 1267) | def __mul__(self, other, context=None):
method __truediv__ (line 1324) | def __truediv__(self, other, context=None):
method _divide (line 1383) | def _divide(self, other, context):
method __rtruediv__ (line 1416) | def __rtruediv__(self, other, context=None):
method __divmod__ (line 1423) | def __divmod__(self, other, context=None):
method __rdivmod__ (line 1459) | def __rdivmod__(self, other, context=None):
method __mod__ (line 1466) | def __mod__(self, other, context=None):
method __rmod__ (line 1493) | def __rmod__(self, other, context=None):
method remainder_near (line 1500) | def remainder_near(self, other, context=None):
method __floordiv__ (line 1575) | def __floordiv__(self, other, context=None):
method __rfloordiv__ (line 1603) | def __rfloordiv__(self, other, context=None):
method __float__ (line 1610) | def __float__(self):
method __int__ (line 1620) | def __int__(self):
method real (line 1636) | def real(self):
method imag (line 1640) | def imag(self):
method conjugate (line 1643) | def conjugate(self):
method __complex__ (line 1646) | def __complex__(self):
method _fix_nan (line 1649) | def _fix_nan(self, context):
method _fix (line 1661) | def _fix(self, context):
method _round_down (line 1763) | def _round_down(self, prec):
method _round_up (line 1770) | def _round_up(self, prec):
method _round_half_up (line 1774) | def _round_half_up(self, prec):
method _round_half_down (line 1783) | def _round_half_down(self, prec):
method _round_half_even (line 1790) | def _round_half_even(self, prec):
method _round_ceiling (line 1798) | def _round_ceiling(self, prec):
method _round_floor (line 1805) | def _round_floor(self, prec):
method _round_05up (line 1812) | def _round_05up(self, prec):
method __round__ (line 1830) | def __round__(self, n=None):
method __floor__ (line 1892) | def __floor__(self):
method __ceil__ (line 1907) | def __ceil__(self):
method fma (line 1922) | def fma(self, other, third, context=None):
method _power_modulo (line 1966) | def _power_modulo(self, other, modulo, context=None):
method _power_exact (line 2051) | def _power_exact(self, other, p):
method __pow__ (line 2288) | def __pow__(self, other, modulo=None, context=None):
method __rpow__ (line 2504) | def __rpow__(self, other, context=None):
method normalize (line 2511) | def normalize(self, context=None):
method quantize (line 2536) | def quantize(self, exp, rounding=None, context=None):
method same_quantum (line 2597) | def same_quantum(self, other, context=None):
method _rescale (line 2612) | def _rescale(self, exp, rounding):
method _round (line 2646) | def _round(self, places, rounding):
method to_integral_exact (line 2669) | def to_integral_exact(self, rounding=None, context=None):
method to_integral_value (line 2698) | def to_integral_value(self, rounding=None, context=None):
method sqrt (line 2717) | def sqrt(self, context=None):
method max (line 2816) | def max(self, other, context=None):
method min (line 2858) | def min(self, other, context=None):
method _isinteger (line 2892) | def _isinteger(self):
method _iseven (line 2901) | def _iseven(self):
method adjusted (line 2907) | def adjusted(self):
method canonical (line 2915) | def canonical(self):
method compare_signal (line 2923) | def compare_signal(self, other, context=None):
method compare_total (line 2935) | def compare_total(self, other, context=None):
method compare_total_mag (line 3008) | def compare_total_mag(self, other, context=None):
method copy_abs (line 3019) | def copy_abs(self):
method copy_negate (line 3023) | def copy_negate(self):
method copy_sign (line 3030) | def copy_sign(self, other, context=None):
method exp (line 3036) | def exp(self, context=None):
method is_canonical (line 3111) | def is_canonical(self):
method is_finite (line 3119) | def is_finite(self):
method is_infinite (line 3127) | def is_infinite(self):
method is_nan (line 3131) | def is_nan(self):
method is_normal (line 3135) | def is_normal(self, context=None):
method is_qnan (line 3143) | def is_qnan(self):
method is_signed (line 3147) | def is_signed(self):
method is_snan (line 3151) | def is_snan(self):
method is_subnormal (line 3155) | def is_subnormal(self, context=None):
method is_zero (line 3163) | def is_zero(self):
method _ln_exp_bound (line 3167) | def _ln_exp_bound(self):
method ln (line 3192) | def ln(self, context=None):
method _log10_exp_bound (line 3242) | def _log10_exp_bound(self):
method log10 (line 3272) | def log10(self, context=None):
method logb (line 3323) | def logb(self, context=None):
method _islogical (line 3353) | def _islogical(self):
method _fill_logical (line 3367) | def _fill_logical(self, context, opa, opb):
method logical_and (line 3380) | def logical_and(self, other, context=None):
method logical_invert (line 3397) | def logical_invert(self, context=None):
method logical_or (line 3404) | def logical_or(self, other, context=None):
method logical_xor (line 3421) | def logical_xor(self, other, context=None):
method max_mag (line 3438) | def max_mag(self, other, context=None):
method min_mag (line 3468) | def min_mag(self, other, context=None):
method next_minus (line 3498) | def next_minus(self, context=None):
method next_plus (line 3521) | def next_plus(self, context=None):
method next_toward (line 3544) | def next_toward(self, other, context=None):
method number_class (line 3590) | def number_class(self, context=None):
method radix (line 3632) | def radix(self):
method rotate (line 3636) | def rotate(self, other, context=None):
method scaleb (line 3669) | def scaleb(self, other, context=None):
method shift (line 3694) | def shift(self, other, context=None):
method __reduce__ (line 3733) | def __reduce__(self):
method __copy__ (line 3736) | def __copy__(self):
method __deepcopy__ (line 3741) | def __deepcopy__(self, memo):
method __format__ (line 3748) | def __format__(self, specifier, context=None, _localeconv=None):
function _dec_from_triple (line 3830) | def _dec_from_triple(sign, coefficient, exponent, special=False):
class _ContextManager (line 3854) | class _ContextManager(object):
method __init__ (line 3860) | def __init__(self, new_context):
method __enter__ (line 3862) | def __enter__(self):
method __exit__ (line 3866) | def __exit__(self, t, v, tb):
class Context (line 3869) | class Context(object):
method __init__ (line 3888) | def __init__(self, prec=None, rounding=None, Emin=None, Emax=None,
method _set_integer_check (line 3924) | def _set_integer_check(self, name, value, vmin, vmax):
method _set_signal_dict (line 3938) | def _set_signal_dict(self, name, d):
method __setattr__ (line 3949) | def __setattr__(self, name, value):
method __delattr__ (line 3974) | def __delattr__(self, name):
method __reduce__ (line 3978) | def __reduce__(self):
method __repr__ (line 3985) | def __repr__(self):
method clear_flags (line 3998) | def clear_flags(self):
method clear_traps (line 4003) | def clear_traps(self):
method _shallow_copy (line 4008) | def _shallow_copy(self):
method copy (line 4015) | def copy(self):
method _raise_error (line 4024) | def _raise_error(self, condition, explanation = None, *args):
method _ignore_all_flags (line 4046) | def _ignore_all_flags(self):
method _ignore_flags (line 4050) | def _ignore_flags(self, *flags):
method _regard_flags (line 4057) | def _regard_flags(self, *flags):
method Etiny (line 4067) | def Etiny(self):
method Etop (line 4071) | def Etop(self):
method _set_rounding (line 4075) | def _set_rounding(self, type):
method create_decimal (line 4094) | def create_decimal(self, num='0'):
method create_decimal_from_float (line 4111) | def create_decimal_from_float(self, f):
method abs (line 4129) | def abs(self, a):
method add (line 4150) | def add(self, a, b):
method _apply (line 4171) | def _apply(self, a):
method canonical (line 4174) | def canonical(self, a):
method compare (line 4187) | def compare(self, a, b):
method compare_signal (line 4223) | def compare_signal(self, a, b):
method compare_total (line 4258) | def compare_total(self, a, b):
method compare_total_mag (line 4287) | def compare_total_mag(self, a, b):
method copy_abs (line 4295) | def copy_abs(self, a):
method copy_decimal (line 4308) | def copy_decimal(self, a):
method copy_negate (line 4321) | def copy_negate(self, a):
method copy_sign (line 4334) | def copy_sign(self, a, b):
method divide (line 4358) | def divide(self, a, b):
method divide_int (line 4395) | def divide_int(self, a, b):
method divmod (line 4418) | def divmod(self, a, b):
method exp (line 4439) | def exp(self, a):
method fma (line 4463) | def fma(self, a, b, c):
method is_canonical (line 4486) | def is_canonical(self, a):
method is_finite (line 4499) | def is_finite(self, a):
method is_infinite (line 4521) | def is_infinite(self, a):
method is_nan (line 4536) | def is_nan(self, a):
method is_normal (line 4552) | def is_normal(self, a):
method is_qnan (line 4575) | def is_qnan(self, a):
method is_signed (line 4590) | def is_signed(self, a):
method is_snan (line 4607) | def is_snan(self, a):
method is_subnormal (line 4623) | def is_subnormal(self, a):
method is_zero (line 4645) | def is_zero(self, a):
method ln (line 4662) | def ln(self, a):
method log10 (line 4684) | def log10(self, a):
method logb (line 4712) | def logb(self, a):
method logical_and (line 4738) | def logical_and(self, a, b):
method logical_invert (line 4765) | def logical_invert(self, a):
method logical_or (line 4784) | def logical_or(self, a, b):
method logical_xor (line 4811) | def logical_xor(self, a, b):
method max (line 4838) | def max(self, a, b):
method max_mag (line 4865) | def max_mag(self, a, b):
method min (line 4882) | def min(self, a, b):
method min_mag (line 4909) | def min_mag(self, a, b):
method minus (line 4926) | def minus(self, a):
method multiply (line 4943) | def multiply(self, a, b):
method next_minus (line 4975) | def next_minus(self, a):
method next_plus (line 4995) | def next_plus(self, a):
method next_toward (line 5015) | def next_toward(self, a, b):
method normalize (line 5050) | def normalize(self, a):
method number_class (line 5074) | def number_class(self, a):
method plus (line 5124) | def plus(self, a):
method power (line 5141) | def power(self, a, b, modulo=None):
method quantize (line 5221) | def quantize(self, a, b):
method radix (line 5279) | def radix(self):
method remainder (line 5287) | def remainder(self, a, b):
method remainder_near (line 5325) | def remainder_near(self, a, b):
method rotate (line 5359) | def rotate(self, a, b):
method same_quantum (line 5388) | def same_quantum(self, a, b):
method scaleb (line 5412) | def scaleb (self, a, b):
method shift (line 5431) | def shift(self, a, b):
method sqrt (line 5461) | def sqrt(self, a):
method subtract (line 5493) | def subtract(self, a, b):
method to_eng_string (line 5516) | def to_eng_string(self, a):
method to_sci_string (line 5544) | def to_sci_string(self, a):
method to_integral_exact (line 5552) | def to_integral_exact(self, a):
method to_integral_value (line 5582) | def to_integral_value(self, a):
class _WorkRep (line 5614) | class _WorkRep(object):
method __init__ (line 5620) | def __init__(self, value=None):
method __repr__ (line 5635) | def __repr__(self):
function _normalize (line 5640) | def _normalize(op1, op2, prec = 0):
function _decimal_lshift_exact (line 5672) | def _decimal_lshift_exact(n, e):
function _sqrt_nearest (line 5693) | def _sqrt_nearest(n, a):
function _rshift_nearest (line 5708) | def _rshift_nearest(x, shift):
function _div_nearest (line 5716) | def _div_nearest(a, b):
function _ilog (line 5724) | def _ilog(x, M, L = 8):
function _dlog10 (line 5772) | def _dlog10(c, e, p):
function _dlog (line 5806) | def _dlog(c, e, p):
class _Log10Memoize (line 5850) | class _Log10Memoize(object):
method __init__ (line 5854) | def __init__(self):
method getdigits (line 5857) | def getdigits(self, p):
function _iexp (line 5887) | def _iexp(x, M, L=8):
function _dexp (line 5924) | def _dexp(c, e, p):
function _dpower (line 5960) | def _dpower(xc, xe, yc, ye, p):
function _log10_lb (line 6002) | def _log10_lb(c, correction = {
function _convert_other (line 6013) | def _convert_other(other, raiseit=False, allow_float=False):
function _convert_for_comparison (line 6032) | def _convert_for_comparison(self, other, equality_op=False):
function _parse_format_specifier (line 6173) | def _parse_format_specifier(format_spec, _localeconv=None):
function _format_align (line 6253) | def _format_align(sign, body, spec):
function _group_lengths (line 6280) | def _group_lengths(grouping):
function _insert_thousands_sep (line 6303) | def _insert_thousands_sep(digits, spec, min_width=1):
function _format_sign (line 6340) | def _format_sign(is_negative, spec):
function _format_number (line 6350) | def _format_number(is_negative, intpart, fracpart, exp, spec):
FILE: rd/usr/lib/python3.8/_pyio.py
function open (line 41) | def open(file, mode="r", buffering=-1, encoding=None, errors=None,
function _open_code_with_warning (line 259) | def _open_code_with_warning(path):
class DocDescriptor (line 281) | class DocDescriptor:
method __get__ (line 284) | def __get__(self, obj, typ=None):
class OpenWrapper (line 290) | class OpenWrapper:
method __new__ (line 300) | def __new__(cls, *args, **kwargs):
class UnsupportedOperation (line 309) | class UnsupportedOperation(OSError, ValueError):
class IOBase (line 313) | class IOBase(metaclass=abc.ABCMeta):
method _unsupported (line 348) | def _unsupported(self, name):
method seek (line 355) | def seek(self, pos, whence=0):
method tell (line 371) | def tell(self):
method truncate (line 375) | def truncate(self, pos=None):
method flush (line 385) | def flush(self):
method close (line 395) | def close(self):
method __del__ (line 406) | def __del__(self):
method seekable (line 433) | def seekable(self):
method _checkSeekable (line 441) | def _checkSeekable(self, msg=None):
method readable (line 448) | def readable(self):
method _checkReadable (line 455) | def _checkReadable(self, msg=None):
method writable (line 462) | def writable(self):
method _checkWritable (line 469) | def _checkWritable(self, msg=None):
method closed (line 477) | def closed(self):
method _checkClosed (line 484) | def _checkClosed(self, msg=None):
method __enter__ (line 493) | def __enter__(self): # That's a forward reference
method __exit__ (line 498) | def __exit__(self, *args):
method fileno (line 506) | def fileno(self):
method isatty (line 513) | def isatty(self):
method readline (line 523) | def readline(self, size=-1):
method __iter__ (line 565) | def __iter__(self):
method __next__ (line 569) | def __next__(self):
method readlines (line 575) | def readlines(self, hint=None):
method writelines (line 593) | def writelines(self, lines):
class RawIOBase (line 606) | class RawIOBase(IOBase):
method read (line 620) | def read(self, size=-1):
method readall (line 637) | def readall(self):
method readinto (line 651) | def readinto(self, b):
method write (line 659) | def write(self, b):
class BufferedIOBase (line 672) | class BufferedIOBase(IOBase):
method read (line 689) | def read(self, size=-1):
method read1 (line 709) | def read1(self, size=-1):
method readinto (line 715) | def readinto(self, b):
method readinto1 (line 729) | def readinto1(self, b):
method _readinto (line 740) | def _readinto(self, b, read1):
method write (line 755) | def write(self, b):
method detach (line 766) | def detach(self):
class _BufferedIOMixin (line 778) | class _BufferedIOMixin(BufferedIOBase):
method __init__ (line 787) | def __init__(self, raw):
method seek (line 792) | def seek(self, pos, whence=0):
method tell (line 798) | def tell(self):
method truncate (line 804) | def truncate(self, pos=None):
method flush (line 818) | def flush(self):
method close (line 823) | def close(self):
method detach (line 831) | def detach(self):
method seekable (line 841) | def seekable(self):
method raw (line 845) | def raw(self):
method closed (line 849) | def closed(self):
method name (line 853) | def name(self):
method mode (line 857) | def mode(self):
method __getstate__ (line 860) | def __getstate__(self):
method __repr__ (line 863) | def __repr__(self):
method fileno (line 875) | def fileno(self):
method isatty (line 878) | def isatty(self):
class BytesIO (line 882) | class BytesIO(BufferedIOBase):
method __init__ (line 890) | def __init__(self, initial_bytes=None):
method __getstate__ (line 897) | def __getstate__(self):
method getvalue (line 902) | def getvalue(self):
method getbuffer (line 909) | def getbuffer(self):
method close (line 916) | def close(self):
method read (line 921) | def read(self, size=-1):
method read1 (line 942) | def read1(self, size=-1):
method write (line 947) | def write(self, b):
method seek (line 966) | def seek(self, pos, whence=0):
method tell (line 987) | def tell(self):
method truncate (line 992) | def truncate(self, pos=None):
method readable (line 1009) | def readable(self):
method writable (line 1014) | def writable(self):
method seekable (line 1019) | def seekable(self):
class BufferedReader (line 1025) | class BufferedReader(_BufferedIOMixin):
method __init__ (line 1036) | def __init__(self, raw, buffer_size=DEFAULT_BUFFER_SIZE):
method readable (line 1049) | def readable(self):
method _reset_read_buf (line 1052) | def _reset_read_buf(self):
method read (line 1056) | def read(self, size=None):
method _read_unlocked (line 1069) | def _read_unlocked(self, n=None):
method peek (line 1121) | def peek(self, size=0):
method _peek_unlocked (line 1131) | def _peek_unlocked(self, n=0):
method read1 (line 1142) | def read1(self, size=-1):
method _readinto (line 1160) | def _readinto(self, buf, read1):
method tell (line 1206) | def tell(self):
method seek (line 1209) | def seek(self, pos, whence=0):
class BufferedWriter (line 1219) | class BufferedWriter(_BufferedIOMixin):
method __init__ (line 1228) | def __init__(self, raw, buffer_size=DEFAULT_BUFFER_SIZE):
method writable (line 1239) | def writable(self):
method write (line 1242) | def write(self, b):
method truncate (line 1270) | def truncate(self, pos=None):
method flush (line 1277) | def flush(self):
method _flush_unlocked (line 1281) | def _flush_unlocked(self):
method tell (line 1298) | def tell(self):
method seek (line 1301) | def seek(self, pos, whence=0):
method close (line 1308) | def close(self):
class BufferedRWPair (line 1324) | class BufferedRWPair(BufferedIOBase):
method __init__ (line 1340) | def __init__(self, reader, writer, buffer_size=DEFAULT_BUFFER_SIZE):
method read (line 1354) | def read(self, size=-1):
method readinto (line 1359) | def readinto(self, b):
method write (line 1362) | def write(self, b):
method peek (line 1365) | def peek(self, size=0):
method read1 (line 1368) | def read1(self, size=-1):
method readinto1 (line 1371) | def readinto1(self, b):
method readable (line 1374) | def readable(self):
method writable (line 1377) | def writable(self):
method flush (line 1380) | def flush(self):
method close (line 1383) | def close(self):
method isatty (line 1389) | def isatty(self):
method closed (line 1393) | def closed(self):
class BufferedRandom (line 1397) | class BufferedRandom(BufferedWriter, BufferedReader):
method __init__ (line 1406) | def __init__(self, raw, buffer_size=DEFAULT_BUFFER_SIZE):
method seek (line 1411) | def seek(self, pos, whence=0):
method tell (line 1428) | def tell(self):
method truncate (line 1434) | def truncate(self, pos=None):
method read (line 1440) | def read(self, size=None):
method readinto (line 1446) | def readinto(self, b):
method peek (line 1450) | def peek(self, size=0):
method read1 (line 1454) | def read1(self, size=-1):
method readinto1 (line 1458) | def readinto1(self, b):
method write (line 1462) | def write(self, b):
class FileIO (line 1471) | class FileIO(RawIOBase):
method __init__ (line 1480) | def __init__(self, file, mode='r', closefd=True, opener=None):
method __del__ (line 1601) | def __del__(self):
method __getstate__ (line 1608) | def __getstate__(self):
method __repr__ (line 1611) | def __repr__(self):
method _checkReadable (line 1625) | def _checkReadable(self):
method _checkWritable (line 1629) | def _checkWritable(self, msg=None):
method read (line 1633) | def read(self, size=None):
method readall (line 1649) | def readall(self):
method readinto (line 1684) | def readinto(self, b):
method write (line 1692) | def write(self, b):
method seek (line 1706) | def seek(self, pos, whence=SEEK_SET):
method tell (line 1722) | def tell(self):
method truncate (line 1729) | def truncate(self, size=None):
method close (line 1742) | def close(self):
method seekable (line 1755) | def seekable(self):
method readable (line 1767) | def readable(self):
method writable (line 1772) | def writable(self):
method fileno (line 1777) | def fileno(self):
method isatty (line 1782) | def isatty(self):
method closefd (line 1788) | def closefd(self):
method mode (line 1793) | def mode(self):
class TextIOBase (line 1814) | class TextIOBase(IOBase):
method read (line 1822) | def read(self, size=-1):
method write (line 1832) | def write(self, s):
method truncate (line 1836) | def truncate(self, pos=None):
method readline (line 1840) | def readline(self):
method detach (line 1847) | def detach(self):
method encoding (line 1857) | def encoding(self):
method newlines (line 1862) | def newlines(self):
method errors (line 1872) | def errors(self):
class IncrementalNewlineDecoder (line 1881) | class IncrementalNewlineDecoder(codecs.IncrementalDecoder):
method __init__ (line 1888) | def __init__(self, decoder, translate, errors='strict'):
method decode (line 1895) | def decode(self, input, final=False):
method getstate (line 1926) | def getstate(self):
method setstate (line 1937) | def setstate(self, state):
method reset (line 1943) | def reset(self):
method newlines (line 1954) | def newlines(self):
class TextIOWrapper (line 1966) | class TextIOWrapper(TextIOBase):
method __init__ (line 1999) | def __init__(self, buffer, encoding=None, errors=None, newline=None,
method _check_newline (line 2039) | def _check_newline(self, newline):
method _configure (line 2045) | def _configure(self, encoding=None, errors=None, newline=None,
method __repr__ (line 2081) | def __repr__(self):
method encoding (line 2099) | def encoding(self):
method errors (line 2103) | def errors(self):
method line_buffering (line 2107) | def line_buffering(self):
method write_through (line 2111) | def write_through(self):
method buffer (line 2115) | def buffer(self):
method reconfigure (line 2118) | def reconfigure(self, *,
method seekable (line 2159) | def seekable(self):
method readable (line 2164) | def readable(self):
method writable (line 2167) | def writable(self):
method flush (line 2170) | def flush(self):
method close (line 2174) | def close(self):
method closed (line 2182) | def closed(self):
method name (line 2186) | def name(self):
method fileno (line 2189) | def fileno(self):
method isatty (line 2192) | def isatty(self):
method write (line 2195) | def write(self, s):
method _get_encoder (line 2218) | def _get_encoder(self):
method _get_decoder (line 2223) | def _get_decoder(self):
method _set_decoded_chars (line 2234) | def _set_decoded_chars(self, chars):
method _get_decoded_chars (line 2239) | def _get_decoded_chars(self, n=None):
method _rewind_decoded_chars (line 2249) | def _rewind_decoded_chars(self, n):
method _read_chunk (line 2255) | def _read_chunk(self):
method _pack_cookie (line 2297) | def _pack_cookie(self, position, dec_flags=0,
method _unpack_cookie (line 2307) | def _unpack_cookie(self, bigint):
method tell (line 2314) | def tell(self):
method truncate (line 2413) | def truncate(self, pos=None):
method detach (line 2419) | def detach(self):
method seek (line 2427) | def seek(self, cookie, whence=0):
method read (line 2502) | def read(self, size=None):
method __next__ (line 2530) | def __next__(self):
method readline (line 2539) | def readline(self, size=None):
method newlines (line 2633) | def newlines(self):
class StringIO (line 2637) | class StringIO(TextIOWrapper):
method __init__ (line 2644) | def __init__(self, initial_value="", newline="\n"):
method getvalue (line 2660) | def getvalue(self):
method __repr__ (line 2670) | def __repr__(self):
method errors (line 2676) | def errors(self):
method encoding (line 2680) | def encoding(self):
method detach (line 2683) | def detach(self):
FILE: rd/usr/lib/python3.8/_sitebuiltins.py
class Quitter (line 13) | class Quitter(object):
method __init__ (line 14) | def __init__(self, name, eof):
method __repr__ (line 17) | def __repr__(self):
method __call__ (line 19) | def __call__(self, code=None):
class _Printer (line 29) | class _Printer(object):
method __init__ (line 35) | def __init__(self, name, data, files=(), dirs=()):
method __setup (line 44) | def __setup(self):
method __repr__ (line 60) | def __repr__(self):
method __call__ (line 67) | def __call__(self):
class _Helper (line 88) | class _Helper(object):
method __repr__ (line 98) | def __repr__(self):
method __call__ (line 101) | def __call__(self, *args, **kwds):
FILE: rd/usr/lib/python3.8/_strptime.py
function _getlang (line 26) | def _getlang():
class LocaleTime (line 30) | class LocaleTime(object):
method __init__ (line 49) | def __init__(self):
method __calc_weekday (line 80) | def __calc_weekday(self):
method __calc_month (line 88) | def __calc_month(self):
method __calc_am_pm (line 95) | def __calc_am_pm(self):
method __calc_date_time (line 107) | def __calc_date_time(self):
method __calc_timezone (line 152) | def __calc_timezone(self):
class TimeRE (line 170) | class TimeRE(dict):
method __init__ (line 173) | def __init__(self, locale_time=None):
method __seqToRE (line 219) | def __seqToRE(self, to_convert, directive):
method pattern (line 238) | def pattern(self, format):
method compile (line 261) | def compile(self, format):
function _calc_julian_from_U_or_W (line 272) | def _calc_julian_from_U_or_W(year, week_of_year, day_of_week, week_start...
function _calc_julian_from_V (line 293) | def _calc_julian_from_V(iso_year, iso_week, iso_weekday):
function _strptime (line 309) | def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"):
function _strptime_time (line 559) | def _strptime_time(data_string, format="%a %b %d %H:%M:%S %Y"):
function _strptime_datetime (line 565) | def _strptime_datetime(cls, data_string, format="%a %b %d %H:%M:%S %Y"):
FILE: rd/usr/lib/python3.8/_threading_local.py
class _localimpl (line 146) | class _localimpl:
method __init__ (line 150) | def __init__(self):
method get_dict (line 158) | def get_dict(self):
method create_dict (line 164) | def create_dict(self):
function _patch (line 191) | def _patch(self):
class local (line 204) | class local:
method __new__ (line 207) | def __new__(cls, /, *args, **kw):
method __getattribute__ (line 221) | def __getattribute__(self, name):
method __setattr__ (line 225) | def __setattr__(self, name, value):
method __delattr__ (line 233) | def __delattr__(self, name):
FILE: rd/usr/lib/python3.8/_weakrefset.py
class _IterationGuard (line 10) | class _IterationGuard:
method __init__ (line 16) | def __init__(self, weakcontainer):
method __enter__ (line 20) | def __enter__(self):
method __exit__ (line 26) | def __exit__(self, e, t, b):
class WeakSet (line 35) | class WeakSet:
method __init__ (line 36) | def __init__(self, data=None):
method _commit_removals (line 52) | def _commit_removals(self):
method __iter__ (line 58) | def __iter__(self):
method __len__ (line 67) | def __len__(self):
method __contains__ (line 70) | def __contains__(self, item):
method __reduce__ (line 77) | def __reduce__(self):
method add (line 81) | def add(self, item):
method clear (line 86) | def clear(self):
method copy (line 91) | def copy(self):
method pop (line 94) | def pop(self):
method remove (line 106) | def remove(self, item):
method discard (line 111) | def discard(self, item):
method update (line 116) | def update(self, other):
method __ior__ (line 122) | def __ior__(self, other):
method difference (line 126) | def difference(self, other):
method difference_update (line 132) | def difference_update(self, other):
method __isub__ (line 134) | def __isub__(self, other):
method intersection (line 143) | def intersection(self, other):
method intersection_update (line 147) | def intersection_update(self, other):
method __iand__ (line 149) | def __iand__(self, other):
method issubset (line 155) | def issubset(self, other):
method __lt__ (line 159) | def __lt__(self, other):
method issuperset (line 162) | def issuperset(self, other):
method __gt__ (line 166) | def __gt__(self, other):
method __eq__ (line 169) | def __eq__(self, other):
method symmetric_difference (line 174) | def symmetric_difference(self, other):
method symmetric_difference_update (line 180) | def symmetric_difference_update(self, other):
method __ixor__ (line 182) | def __ixor__(self, other):
method union (line 191) | def union(self, other):
method isdisjoint (line 195) | def isdisjoint(self, other):
method __repr__ (line 198) | def __repr__(self):
FILE: rd/usr/lib/python3.8/abc.py
function abstractmethod (line 7) | def abstractmethod(funcobj):
class abstractclassmethod (line 28) | class abstractclassmethod(classmethod):
method __init__ (line 36) | def __init__(self, callable):
class abstractstaticmethod (line 41) | class abstractstaticmethod(staticmethod):
method __init__ (line 49) | def __init__(self, callable):
class abstractproperty (line 54) | class abstractproperty(property):
class ABCMeta (line 71) | class ABCMeta(type):
method __new__ (line 84) | def __new__(mcls, name, bases, namespace, **kwargs):
method register (line 89) | def register(cls, subclass):
method __instancecheck__ (line 96) | def __instancecheck__(cls, instance):
method __subclasscheck__ (line 100) | def __subclasscheck__(cls, subclass):
method _dump_registry (line 104) | def _dump_registry(cls, file=None):
method _abc_registry_clear (line 116) | def _abc_registry_clear(cls):
method _abc_caches_clear (line 120) | def _abc_caches_clear(cls):
class ABC (line 125) | class ABC(metaclass=ABCMeta):
FILE: rd/usr/lib/python3.8/aifc.py
class Error (line 143) | class Error(Exception):
function _read_long (line 148) | def _read_long(file):
function _read_ulong (line 154) | def _read_ulong(file):
function _read_short (line 160) | def _read_short(file):
function _read_ushort (line 166) | def _read_ushort(file):
function _read_string (line 172) | def _read_string(file):
function _read_float (line 184) | def _read_float(f): # 10 bytes
function _write_short (line 201) | def _write_short(f, x):
function _write_ushort (line 204) | def _write_ushort(f, x):
function _write_long (line 207) | def _write_long(f, x):
function _write_ulong (line 210) | def _write_ulong(f, x):
function _write_string (line 213) | def _write_string(f, s):
function _write_float (line 221) | def _write_float(f, x):
class Aifc_read (line 270) | class Aifc_read:
method initfp (line 308) | def initfp(self, file):
method __init__ (line 348) | def __init__(self, f):
method __enter__ (line 360) | def __enter__(self):
method __exit__ (line 363) | def __exit__(self, *args):
method getfp (line 369) | def getfp(self):
method rewind (line 372) | def rewind(self):
method close (line 376) | def close(self):
method tell (line 382) | def tell(self):
method getnchannels (line 385) | def getnchannels(self):
method getnframes (line 388) | def getnframes(self):
method getsampwidth (line 391) | def getsampwidth(self):
method getframerate (line 394) | def getframerate(self):
method getcomptype (line 397) | def getcomptype(self):
method getcompname (line 400) | def getcompname(self):
method getparams (line 406) | def getparams(self):
method getmarkers (line 411) | def getmarkers(self):
method getmark (line 416) | def getmark(self, id):
method setpos (line 422) | def setpos(self, pos):
method readframes (line 428) | def readframes(self, nframes):
method _alaw2lin (line 449) | def _alaw2lin(self, data):
method _ulaw2lin (line 453) | def _ulaw2lin(self, data):
method _adpcm2lin (line 457) | def _adpcm2lin(self, data):
method _read_comm_chunk (line 465) | def _read_comm_chunk(self, chunk):
method _readmark (line 507) | def _readmark(self, chunk):
class Aifc_write (line 527) | class Aifc_write:
method __init__ (line 559) | def __init__(self, f):
method initfp (line 575) | def initfp(self, file):
method __del__ (line 592) | def __del__(self):
method __enter__ (line 595) | def __enter__(self):
method __exit__ (line 598) | def __exit__(self, *args):
method aiff (line 604) | def aiff(self):
method aifc (line 609) | def aifc(self):
method setnchannels (line 614) | def setnchannels(self, nchannels):
method getnchannels (line 621) | def getnchannels(self):
method setsampwidth (line 626) | def setsampwidth(self, sampwidth):
method getsampwidth (line 633) | def getsampwidth(self):
method setframerate (line 638) | def setframerate(self, framerate):
method getframerate (line 645) | def getframerate(self):
method setnframes (line 650) | def setnframes(self, nframes):
method getnframes (line 655) | def getnframes(self):
method setcomptype (line 658) | def setcomptype(self, comptype, compname):
method getcomptype (line 667) | def getcomptype(self):
method getcompname (line 670) | def getcompname(self):
method setparams (line 678) | def setparams(self, params):
method getparams (line 691) | def getparams(self):
method setmark (line 697) | def setmark(self, id, pos, name):
method getmark (line 710) | def getmark(self, id):
method getmarkers (line 716) | def getmarkers(self):
method tell (line 721) | def tell(self):
method writeframesraw (line 724) | def writeframesraw(self, data):
method writeframes (line 735) | def writeframes(self, data):
method close (line 741) | def close(self):
method _lin2alaw (line 766) | def _lin2alaw(self, data):
method _lin2ulaw (line 770) | def _lin2ulaw(self, data):
method _lin2adpcm (line 774) | def _lin2adpcm(self, data):
method _ensure_header_written (line 781) | def _ensure_header_written(self, datasize):
method _init_compression (line 797) | def _init_compression(self):
method _write_header (line 805) | def _write_header(self, initlength):
method _write_form_length (line 856) | def _write_form_length(self, datalength):
method _patchheader (line 869) | def _patchheader(self):
method _writemarkers (line 891) | def _writemarkers(self):
function open (line 910) | def open(f, mode=None):
function openfp (line 923) | def openfp(f, mode=None):
FILE: rd/usr/lib/python3.8/antigravity.py
function geohash (line 7) | def geohash(latitude, longitude, datedow):
FILE: rd/usr/lib/python3.8/argparse.py
class _AttributeHolder (line 107) | class _AttributeHolder(object):
method __repr__ (line 116) | def __repr__(self):
method _get_kwargs (line 131) | def _get_kwargs(self):
method _get_args (line 134) | def _get_args(self):
function _copy_items (line 138) | def _copy_items(items):
class HelpFormatter (line 154) | class HelpFormatter(object):
method __init__ (line 161) | def __init__(self,
method _indent (line 191) | def _indent(self):
method _dedent (line 195) | def _dedent(self):
class _Section (line 200) | class _Section(object):
method __init__ (line 202) | def __init__(self, formatter, parent, heading=None):
method format_help (line 208) | def format_help(self):
method _add_item (line 231) | def _add_item(self, func, args):
method start_section (line 237) | def start_section(self, heading):
method end_section (line 243) | def end_section(self):
method add_text (line 247) | def add_text(self, text):
method add_usage (line 251) | def add_usage(self, usage, actions, groups, prefix=None):
method add_argument (line 256) | def add_argument(self, action):
method add_arguments (line 274) | def add_arguments(self, actions):
method format_help (line 281) | def format_help(self):
method _join_parts (line 288) | def _join_parts(self, part_strings):
method _format_usage (line 293) | def _format_usage(self, usage, actions, groups, prefix):
method _format_actions_usage (line 389) | def _format_actions_usage(self, actions, groups):
method _format_text (line 492) | def _format_text(self, text):
method _format_action (line 499) | def _format_action(self, action):
method _format_action_invocation (line 546) | def _format_action_invocation(self, action):
method _metavar_formatter (line 570) | def _metavar_formatter(self, action, default_metavar):
method _format_args (line 586) | def _format_args(self, action, default_metavar):
method _expand_help (line 610) | def _expand_help(self, action):
method _iter_indented_subactions (line 623) | def _iter_indented_subactions(self, action):
method _split_lines (line 633) | def _split_lines(self, text, width):
method _fill_text (line 640) | def _fill_text(self, text, width, indent):
method _get_help_string (line 647) | def _get_help_string(self, action):
method _get_default_metavar_for_optional (line 650) | def _get_default_metavar_for_optional(self, action):
method _get_default_metavar_for_positional (line 653) | def _get_default_metavar_for_positional(self, action):
class RawDescriptionHelpFormatter (line 657) | class RawDescriptionHelpFormatter(HelpFormatter):
method _fill_text (line 664) | def _fill_text(self, text, width, indent):
class RawTextHelpFormatter (line 668) | class RawTextHelpFormatter(RawDescriptionHelpFormatter):
method _split_lines (line 675) | def _split_lines(self, text, width):
class ArgumentDefaultsHelpFormatter (line 679) | class ArgumentDefaultsHelpFormatter(HelpFormatter):
method _get_help_string (line 686) | def _get_help_string(self, action):
class MetavarTypeHelpFormatter (line 696) | class MetavarTypeHelpFormatter(HelpFormatter):
method _get_default_metavar_for_optional (line 704) | def _get_default_metavar_for_optional(self, action):
method _get_default_metavar_for_positional (line 707) | def _get_default_metavar_for_positional(self, action):
function _get_action_name (line 716) | def _get_action_name(argument):
class ArgumentError (line 729) | class ArgumentError(Exception):
method __init__ (line 736) | def __init__(self, argument, message):
method __str__ (line 740) | def __str__(self):
class ArgumentTypeError (line 749) | class ArgumentTypeError(Exception):
class Action (line 758) | class Action(_AttributeHolder):
method __init__ (line 809) | def __init__(self,
method _get_kwargs (line 831) | def _get_kwargs(self):
method __call__ (line 845) | def __call__(self, parser, namespace, values, option_string=None):
class _StoreAction (line 849) | class _StoreAction(Action):
method __init__ (line 851) | def __init__(self,
method __call__ (line 880) | def __call__(self, parser, namespace, values, option_string=None):
class _StoreConstAction (line 884) | class _StoreConstAction(Action):
method __init__ (line 886) | def __init__(self,
method __call__ (line 903) | def __call__(self, parser, namespace, values, option_string=None):
class _StoreTrueAction (line 907) | class _StoreTrueAction(_StoreConstAction):
method __init__ (line 909) | def __init__(self,
class _StoreFalseAction (line 924) | class _StoreFalseAction(_StoreConstAction):
method __init__ (line 926) | def __init__(self,
class _AppendAction (line 941) | class _AppendAction(Action):
method __init__ (line 943) | def __init__(self,
method __call__ (line 972) | def __call__(self, parser, namespace, values, option_string=None):
class _AppendConstAction (line 979) | class _AppendConstAction(Action):
method __init__ (line 981) | def __init__(self,
method __call__ (line 999) | def __call__(self, parser, namespace, values, option_string=None):
class _CountAction (line 1006) | class _CountAction(Action):
method __init__ (line 1008) | def __init__(self,
method __call__ (line 1022) | def __call__(self, parser, namespace, values, option_string=None):
class _HelpAction (line 1029) | class _HelpAction(Action):
method __init__ (line 1031) | def __init__(self,
method __call__ (line 1043) | def __call__(self, parser, namespace, values, option_string=None):
class _VersionAction (line 1048) | class _VersionAction(Action):
method __init__ (line 1050) | def __init__(self,
method __call__ (line 1064) | def __call__(self, parser, namespace, values, option_string=None):
class _SubParsersAction (line 1074) | class _SubParsersAction(Action):
class _ChoicesPseudoAction (line 1076) | class _ChoicesPseudoAction(Action):
method __init__ (line 1078) | def __init__(self, name, aliases, help):
method __init__ (line 1086) | def __init__(self,
method add_parser (line 1109) | def add_parser(self, name, **kwargs):
method _get_subactions (line 1132) | def _get_subactions(self):
method __call__ (line 1135) | def __call__(self, parser, namespace, values, option_string=None):
class _ExtendAction (line 1167) | class _ExtendAction(_AppendAction):
method __call__ (line 1168) | def __call__(self, parser, namespace, values, option_string=None):
class FileType (line 1178) | class FileType(object):
method __init__ (line 1195) | def __init__(self, mode='r', bufsize=-1, encoding=None, errors=None):
method __call__ (line 1201) | def __call__(self, string):
method __repr__ (line 1221) | def __repr__(self):
class Namespace (line 1233) | class Namespace(_AttributeHolder):
method __init__ (line 1240) | def __init__(self, **kwargs):
method __eq__ (line 1244) | def __eq__(self, other):
method __contains__ (line 1249) | def __contains__(self, key):
class _ActionsContainer (line 1253) | class _ActionsContainer(object):
method __init__ (line 1255) | def __init__(self,
method register (line 1308) | def register(self, registry_name, value, object):
method _registry_get (line 1312) | def _registry_get(self, registry_name, value, default=None):
method set_defaults (line 1318) | def set_defaults(self, **kwargs):
method get_default (line 1327) | def get_default(self, dest):
method add_argument (line 1337) | def add_argument(self, *args, **kwargs):
method add_argument_group (line 1388) | def add_argument_group(self, *args, **kwargs):
method add_mutually_exclusive_group (line 1393) | def add_mutually_exclusive_group(self, **kwargs):
method _add_action (line 1398) | def _add_action(self, action):
method _remove_action (line 1419) | def _remove_action(self, action):
method _add_container_actions (line 1422) | def _add_container_actions(self, container):
method _get_positional_kwargs (line 1462) | def _get_positional_kwargs(self, dest, **kwargs):
method _get_optional_kwargs (line 1478) | def _get_optional_kwargs(self, *args, **kwargs):
method _pop_action_class (line 1514) | def _pop_action_class(self, kwargs, default=None):
method _get_handler (line 1518) | def _get_handler(self):
method _check_conflict (line 1527) | def _check_conflict(self, action):
method _handle_conflict_error (line 1541) | def _handle_conflict_error(self, action, conflicting_actions):
method _handle_conflict_resolve (line 1550) | def _handle_conflict_resolve(self, action, conflicting_actions):
class _ArgumentGroup (line 1565) | class _ArgumentGroup(_ActionsContainer):
method __init__ (line 1567) | def __init__(self, container, title=None, description=None, **kwargs):
method _add_action (line 1589) | def _add_action(self, action):
method _remove_action (line 1594) | def _remove_action(self, action):
class _MutuallyExclusiveGroup (line 1599) | class _MutuallyExclusiveGroup(_ArgumentGroup):
method __init__ (line 1601) | def __init__(self, container, required=False):
method _add_action (line 1606) | def _add_action(self, action):
method _remove_action (line 1614) | def _remove_action(self, action):
class ArgumentParser (line 1619) | class ArgumentParser(_AttributeHolder, _ActionsContainer):
method __init__ (line 1638) | def __init__(self,
method _get_kwargs (line 1702) | def _get_kwargs(self):
method add_subparsers (line 1716) | def add_subparsers(self, **kwargs):
method _add_action (line 1747) | def _add_action(self, action):
method _get_optional_actions (line 1754) | def _get_optional_actions(self):
method _get_positional_actions (line 1759) | def _get_positional_actions(self):
method parse_args (line 1767) | def parse_args(self, args=None, namespace=None):
method parse_known_args (line 1774) | def parse_known_args(self, args=None, namespace=None):
method _parse_known_args (line 1809) | def _parse_known_args(self, arg_strings, namespace):
method _read_args_from_files (line 2055) | def _read_args_from_files(self, arg_strings):
method convert_arg_line_to_args (line 2081) | def convert_arg_line_to_args(self, arg_line):
method _match_argument (line 2084) | def _match_argument(self, action, arg_strings_pattern):
method _match_arguments_partial (line 2106) | def _match_arguments_partial(self, actions, arg_strings_pattern):
method _parse_optional (line 2122) | def _parse_optional(self, arg_string):
method _get_option_tuples (line 2180) | def _get_option_tuples(self, option_string):
method _get_nargs_pattern (line 2225) | def _get_nargs_pattern(self, action):
method parse_intermixed_args (line 2274) | def parse_intermixed_args(self, args=None, namespace=None):
method parse_known_intermixed_args (line 2281) | def parse_known_intermixed_args(self, args=None, namespace=None):
method _get_values (line 2358) | def _get_values(self, action, arg_strings):
method _get_value (line 2414) | def _get_value(self, action, arg_string):
method _check_value (line 2440) | def _check_value(self, action, value):
method format_usage (line 2451) | def format_usage(self):
method format_help (line 2457) | def format_help(self):
method _get_formatter (line 2480) | def _get_formatter(self):
method print_usage (line 2486) | def print_usage(self, file=None):
method print_help (line 2491) | def print_help(self, file=None):
method _print_message (line 2496) | def _print_message(self, message, file=None):
method exit (line 2505) | def exit(self, status=0, message=None):
method error (line 2510) | def error(self, message):
FILE: rd/usr/lib/python3.8/ast.py
function parse (line 30) | def parse(source, filename='<unknown>', mode='exec', *,
function literal_eval (line 51) | def literal_eval(node_or_string):
function dump (line 102) | def dump(node, annotate_fields=True, include_attributes=False):
function copy_location (line 141) | def copy_location(new_node, old_node):
function fix_missing_locations (line 153) | def fix_missing_locations(node):
function increment_lineno (line 188) | def increment_lineno(node, n=1):
function iter_fields (line 202) | def iter_fields(node):
function iter_child_nodes (line 214) | def iter_child_nodes(node):
function get_docstring (line 228) | def get_docstring(node, clean=True):
function _splitlines_no_ff (line 254) | def _splitlines_no_ff(source):
function _pad_whitespace (line 279) | def _pad_whitespace(source):
function get_source_segment (line 290) | def get_source_segment(source, node, *, padded=False):
function walk (line 325) | def walk(node):
class NodeVisitor (line 339) | class NodeVisitor(object):
method visit (line 359) | def visit(self, node):
method generic_visit (line 365) | def generic_visit(self, node):
method visit_Constant (line 375) | def visit_Constant(self, node):
class NodeTransformer (line 397) | class NodeTransformer(NodeVisitor):
method generic_visit (line 433) | def generic_visit(self, node):
function _getter (line 459) | def _getter(self):
function _setter (line 462) | def _setter(self, value):
class _ABC (line 468) | class _ABC(type):
method __instancecheck__ (line 470) | def __instancecheck__(cls, inst):
function _new (line 485) | def _new(cls, *args, **kwargs):
class Num (line 497) | class Num(Constant, metaclass=_ABC):
class Str (line 501) | class Str(Constant, metaclass=_ABC):
class Bytes (line 505) | class Bytes(Constant, metaclass=_ABC):
class NameConstant (line 509) | class NameConstant(Constant, metaclass=_ABC):
class Ellipsis (line 512) | class Ellipsis(Constant, metaclass=_ABC):
method __new__ (line 515) | def __new__(cls, *args, **kwargs):
FILE: rd/usr/lib/python3.8/asynchat.py
class async_chat (line 52) | class async_chat(asyncore.dispatcher):
method __init__ (line 67) | def __init__(self, sock=None, map=None):
method collect_incoming_data (line 81) | def collect_incoming_data(self, data):
method _collect_incoming_data (line 84) | def _collect_incoming_data(self, data):
method _get_data (line 87) | def _get_data(self):
method found_terminator (line 92) | def found_terminator(self):
method set_terminator (line 95) | def set_terminator(self, term):
method get_terminator (line 106) | def get_terminator(self):
method handle_read (line 114) | def handle_read(self):
method handle_write (line 186) | def handle_write(self):
method handle_close (line 189) | def handle_close(self):
method push (line 192) | def push(self, data):
method push_with_producer (line 204) | def push_with_producer(self, producer):
method readable (line 208) | def readable(self):
method writable (line 216) | def writable(self):
method close_when_done (line 220) | def close_when_done(self):
method initiate_send (line 224) | def initiate_send(self):
method discard_buffers (line 264) | def discard_buffers(self):
class simple_producer (line 271) | class simple_producer:
method __init__ (line 273) | def __init__(self, data, buffer_size=512):
method more (line 277) | def more(self):
function find_prefix_at_end (line 303) | def find_prefix_at_end(haystack, needle):
FILE: rd/usr/lib/python3.8/asyncore.py
function _strerror (line 68) | def _strerror(err):
class ExitNow (line 76) | class ExitNow(Exception):
function read (line 81) | def read(obj):
function write (line 89) | def write(obj):
function _exception (line 97) | def _exception(obj):
function readwrite (line 105) | def readwrite(obj, flags):
function poll (line 125) | def poll(timeout=0.0, map=None):
function poll2 (line 164) | def poll2(timeout=0.0, map=None):
function loop (line 192) | def loop(timeout=30.0, use_poll=False, map=None, count=None):
class dispatcher (line 210) | class dispatcher:
method __init__ (line 220) | def __init__(self, sock=None, map=None):
method __repr__ (line 252) | def __repr__(self):
method add_channel (line 265) | def add_channel(self, map=None):
method del_channel (line 271) | def del_channel(self, map=None):
method create_socket (line 280) | def create_socket(self, family=socket.AF_INET, type=socket.SOCK_STREAM):
method set_socket (line 286) | def set_socket(self, sock, map=None):
method set_reuse_addr (line 291) | def set_reuse_addr(self):
method readable (line 308) | def readable(self):
method writable (line 311) | def writable(self):
method listen (line 318) | def listen(self, num):
method bind (line 324) | def bind(self, addr):
method connect (line 328) | def connect(self, address):
method accept (line 342) | def accept(self):
method send (line 356) | def send(self, data):
method recv (line 369) | def recv(self, buffer_size):
method close (line 387) | def close(self):
method log (line 403) | def log(self, message):
method log_info (line 406) | def log_info(self, message, type='info'):
method handle_read_event (line 410) | def handle_read_event(self):
method handle_connect_event (line 422) | def handle_connect_event(self):
method handle_write_event (line 430) | def handle_write_event(self):
method handle_expt_event (line 441) | def handle_expt_event(self):
method handle_error (line 456) | def handle_error(self):
method handle_expt (line 476) | def handle_expt(self):
method handle_read (line 479) | def handle_read(self):
method handle_write (line 482) | def handle_write(self):
method handle_connect (line 485) | def handle_connect(self):
method handle_accept (line 488) | def handle_accept(self):
method handle_accepted (line 493) | def handle_accepted(self, sock, addr):
method handle_close (line 497) | def handle_close(self):
class dispatcher_with_send (line 506) | class dispatcher_with_send(dispatcher):
method __init__ (line 508) | def __init__(self, sock=None, map=None):
method initiate_send (line 512) | def initiate_send(self):
method handle_write (line 517) | def handle_write(self):
method writable (line 520) | def writable(self):
method send (line 523) | def send(self, data):
function compact_traceback (line 533) | def compact_traceback():
function close_all (line 553) | def close_all(map=None, ignore_all=False):
class file_wrapper (line 585) | class file_wrapper:
method __init__ (line 590) | def __init__(self, fd):
method __del__ (line 593) | def __del__(self):
method recv (line 599) | def recv(self, *args):
method send (line 602) | def send(self, *args):
method getsockopt (line 605) | def getsockopt(self, level, optname, buflen=None):
method close (line 616) | def close(self):
method fileno (line 623) | def fileno(self):
class file_dispatcher (line 626) | class file_dispatcher(dispatcher):
method __init__ (line 628) | def __init__(self, fd, map=None):
method set_file (line 639) | def set_file(self, fd):
FILE: rd/usr/lib/python3.8/base64.py
function _bytes_from_decode_data (line 34) | def _bytes_from_decode_data(s):
function b64encode (line 51) | def b64encode(s, altchars=None):
function b64decode (line 65) | def b64decode(s, altchars=None, validate=False):
function standard_b64encode (line 90) | def standard_b64encode(s):
function standard_b64decode (line 97) | def standard_b64decode(s):
function urlsafe_b64encode (line 111) | def urlsafe_b64encode(s):
function urlsafe_b64decode (line 120) | def urlsafe_b64decode(s):
function b32encode (line 142) | def b32encode(s):
function b32decode (line 180) | def b32decode(s, casefold=False, map01=None):
function b16encode (line 247) | def b16encode(s):
function b16decode (line 253) | def b16decode(s, casefold=False):
function _85encode (line 279) | def _85encode(b, chars, chars2, pad=False, foldnuls=False, foldspaces=Fa...
function a85encode (line 303) | def a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False):
function a85decode (line 344) | def a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r...
function b85encode (line 422) | def b85encode(b, pad=False):
function b85decode (line 436) | def b85decode(b):
function encode (line 484) | def encode(input, output):
function decode (line 499) | def decode(input, output):
function _input_type_check (line 508) | def _input_type_check(s):
function encodebytes (line 524) | def encodebytes(s):
function encodestring (line 534) | def encodestring(s):
function decodebytes (line 543) | def decodebytes(s):
function decodestring (line 548) | def decodestring(s):
function main (line 558) | def main():
function test (line 584) | def test():
FILE: rd/usr/lib/python3.8/bdb.py
class BdbQuit (line 13) | class BdbQuit(Exception):
class Bdb (line 17) | class Bdb:
method __init__ (line 31) | def __init__(self, skip=None):
method canonic (line 37) | def canonic(self, filename):
method reset (line 54) | def reset(self):
method trace_dispatch (line 61) | def trace_dispatch(self, frame, event, arg):
method dispatch_line (line 104) | def dispatch_line(self, frame):
method dispatch_call (line 116) | def dispatch_call(self, frame, arg):
method dispatch_return (line 138) | def dispatch_return(self, frame, arg):
method dispatch_exception (line 160) | def dispatch_exception(self, frame, arg):
method is_skipped_module (line 191) | def is_skipped_module(self, module_name):
method stop_here (line 200) | def stop_here(self, frame):
method break_here (line 215) | def break_here(self, frame):
method do_clear (line 242) | def do_clear(self, arg):
method break_anywhere (line 249) | def break_anywhere(self, frame):
method user_call (line 257) | def user_call(self, frame, argument_list):
method user_line (line 261) | def user_line(self, frame):
method user_return (line 265) | def user_return(self, frame, return_value):
method user_exception (line 269) | def user_exception(self, frame, exc_info):
method _set_stopinfo (line 273) | def _set_stopinfo(self, stopframe, returnframe, stoplineno=0):
method set_until (line 290) | def set_until(self, frame, lineno=None):
method set_step (line 298) | def set_step(self):
method set_next (line 310) | def set_next(self, frame):
method set_return (line 314) | def set_return(self, frame):
method set_trace (line 321) | def set_trace(self, frame=None):
method set_continue (line 336) | def set_continue(self):
method set_quit (line 351) | def set_quit(self):
method set_break (line 368) | def set_break(self, filename, lineno, temporary=False, cond=None,
method _prune_breaks (line 386) | def _prune_breaks(self, filename, lineno):
method clear_break (line 399) | def clear_break(self, filename, lineno):
method clear_bpbynumber (line 416) | def clear_bpbynumber(self, arg):
method clear_all_file_breaks (line 429) | def clear_all_file_breaks(self, filename):
method clear_all_breaks (line 444) | def clear_all_breaks(self):
method get_bpbynumber (line 457) | def get_bpbynumber(self, arg):
method get_break (line 477) | def get_break(self, filename, lineno):
method get_breaks (line 483) | def get_breaks(self, filename, lineno):
method get_file_breaks (line 493) | def get_file_breaks(self, filename):
method get_all_breaks (line 504) | def get_all_breaks(self):
method get_stack (line 511) | def get_stack(self, f, t):
method format_stack_entry (line 534) | def format_stack_entry(self, frame_lineno, lprefix=': '):
method run (line 565) | def run(self, cmd, globals=None, locals=None):
method runeval (line 587) | def runeval(self, expr, globals=None, locals=None):
method runctx (line 607) | def runctx(self, cmd, globals, locals):
method runcall (line 614) | def runcall(*args, **kwds):
function set_trace (line 648) | def set_trace():
class Breakpoint (line 653) | class Breakpoint:
method __init__ (line 680) | def __init__(self, file, line, temporary=False, cond=None, funcname=No...
method deleteMe (line 700) | def deleteMe(self):
method enable (line 714) | def enable(self):
method disable (line 718) | def disable(self):
method bpprint (line 722) | def bpprint(self, out=None):
method bpformat (line 732) | def bpformat(self):
method __str__ (line 762) | def __str__(self):
function checkfuncname (line 769) | def checkfuncname(b, frame):
function effective (line 803) | def effective(file, line, frame):
class Tdb (line 851) | class Tdb(Bdb):
method user_call (line 852) | def user_call(self, frame, args):
method user_line (line 856) | def user_line(self, frame):
method user_return (line 863) | def user_return(self, frame, retval):
method user_exception (line 865) | def user_exception(self, frame, exc_stuff):
function foo (line 869) | def foo(n):
function bar (line 874) | def bar(a):
function test (line 878) | def test():
FILE: rd/usr/lib/python3.8/binhex.py
class Error (line 31) | class Error(Exception):
class FInfo (line 47) | class FInfo:
method __init__ (line 48) | def __init__(self):
function getfileinfo (line 53) | def getfileinfo(name):
class openrsrc (line 66) | class openrsrc:
method __init__ (line 67) | def __init__(self, *args):
method read (line 70) | def read(self, *args):
method write (line 73) | def write(self, *args):
method close (line 76) | def close(self):
class _Hqxcoderengine (line 79) | class _Hqxcoderengine:
method __init__ (line 82) | def __init__(self, ofp):
method write (line 88) | def write(self, data):
method _flush (line 99) | def _flush(self, force):
method close (line 110) | def close(self):
class _Rlecoderengine (line 117) | class _Rlecoderengine:
method __init__ (line 120) | def __init__(self, ofp):
method write (line 124) | def write(self, data):
method close (line 132) | def close(self):
class BinHex (line 139) | class BinHex:
method __init__ (line 140) | def __init__(self, name_finfo_dlen_rlen, ofp):
method _writeinfo (line 163) | def _writeinfo(self, name, finfo):
method _write (line 182) | def _write(self, data):
method _writecrc (line 186) | def _writecrc(self):
method write (line 196) | def write(self, data):
method close_data (line 202) | def close_data(self):
method write_rsrc (line 208) | def write_rsrc(self, data):
method close (line 216) | def close(self):
function binhex (line 233) | def binhex(inp, out):
class _Hqxdecoderengine (line 254) | class _Hqxdecoderengine:
method __init__ (line 257) | def __init__(self, ifp):
method read (line 261) | def read(self, totalwtd):
method close (line 293) | def close(self):
class _Rledecoderengine (line 296) | class _Rledecoderengine:
method __init__ (line 299) | def __init__(self, ifp):
method read (line 305) | def read(self, wtd):
method _fill (line 312) | def _fill(self, wtd):
method close (line 347) | def close(self):
class HexBin (line 350) | class HexBin:
method __init__ (line 351) | def __init__(self, ifp):
method _read (line 373) | def _read(self, len):
method _checkcrc (line 378) | def _checkcrc(self):
method _readheader (line 388) | def _readheader(self):
method read (line 408) | def read(self, *n):
method close_data (line 422) | def close_data(self):
method read_rsrc (line 430) | def read_rsrc(self, *n):
method close (line 443) | def close(self):
function hexbin (line 454) | def hexbin(inp, out):
FILE: rd/usr/lib/python3.8/bisect.py
function insort_right (line 3) | def insort_right(a, x, lo=0, hi=None):
function bisect_right (line 15) | def bisect_right(a, x, lo=0, hi=None):
function insort_left (line 36) | def insort_left(a, x, lo=0, hi=None):
function bisect_left (line 49) | def bisect_left(a, x, lo=0, hi=None):
FILE: rd/usr/lib/python3.8/bz2.py
class BZ2File (line 30) | class BZ2File(_compression.BaseStream):
method __init__ (line 41) | def __init__(self, filename, mode="r", buffering=_sentinel, compressle...
method close (line 112) | def close(self):
method closed (line 138) | def closed(self):
method fileno (line 142) | def fileno(self):
method seekable (line 147) | def seekable(self):
method readable (line 151) | def readable(self):
method writable (line 156) | def writable(self):
method peek (line 161) | def peek(self, n=0):
method read (line 174) | def read(self, size=-1):
method read1 (line 184) | def read1(self, size=-1):
method readinto (line 197) | def readinto(self, b):
method readline (line 206) | def readline(self, size=-1):
method readlines (line 221) | def readlines(self, size=-1):
method write (line 236) | def write(self, data):
method writelines (line 250) | def writelines(self, seq):
method seek (line 261) | def seek(self, offset, whence=io.SEEK_SET):
method tell (line 280) | def tell(self):
function open (line 289) | def open(filename, mode="rb", compresslevel=9,
function compress (line 330) | def compress(data, compresslevel=9):
function decompress (line 341) | def decompress(data):
FILE: rd/usr/lib/python3.8/cProfile.py
function run (line 15) | def run(statement, filename=None, sort=-1):
function runctx (line 18) | def runctx(statement, globals, locals, filename=None, sort=-1):
class Profile (line 27) | class Profile(_lsprof.Profiler):
method print_stats (line 40) | def print_stats(self, sort=-1):
method dump_stats (line 44) | def dump_stats(self, file):
method create_stats (line 50) | def create_stats(self):
method snapshot_stats (line 54) | def snapshot_stats(self):
method run (line 92) | def run(self, cmd):
method runctx (line 97) | def runctx(self, cmd, globals, locals):
method runcall (line 106) | def runcall(*args, **kw):
method __enter__ (line 129) | def __enter__(self):
method __exit__ (line 133) | def __exit__(self, *exc_info):
function label (line 138) | def label(code):
function main (line 146) | def main():
FILE: rd/usr/lib/python3.8/calendar.py
class IllegalMonthError (line 24) | class IllegalMonthError(ValueError):
method __init__ (line 25) | def __init__(self, month):
method __str__ (line 27) | def __str__(self):
class IllegalWeekdayError (line 31) | class IllegalWeekdayError(ValueError):
method __init__ (line 32) | def __init__(self, weekday):
method __str__ (line 34) | def __str__(self):
class _localized_month (line 50) | class _localized_month:
method __init__ (line 55) | def __init__(self, format):
method __getitem__ (line 58) | def __getitem__(self, i):
method __len__ (line 65) | def __len__(self):
class _localized_day (line 69) | class _localized_day:
method __init__ (line 74) | def __init__(self, format):
method __getitem__ (line 77) | def __getitem__(self, i):
method __len__ (line 84) | def __len__(self):
function isleap (line 100) | def isleap(year):
function leapdays (line 105) | def leapdays(y1, y2):
function weekday (line 113) | def weekday(year, month, day):
function monthrange (line 120) | def monthrange(year, month):
function _monthlen (line 130) | def _monthlen(year, month):
function _prevmonth (line 134) | def _prevmonth(year, month):
function _nextmonth (line 141) | def _nextmonth(year, month):
class Calendar (line 148) | class Calendar(object):
method __init__ (line 154) | def __init__(self, firstweekday=0):
method getfirstweekday (line 157) | def getfirstweekday(self):
method setfirstweekday (line 160) | def setfirstweekday(self, firstweekday):
method iterweekdays (line 165) | def iterweekdays(self):
method itermonthdates (line 173) | def itermonthdates(self, year, month):
method itermonthdays (line 182) | def itermonthdays(self, year, month):
method itermonthdays2 (line 194) | def itermonthdays2(self, year, month):
method itermonthdays3 (line 202) | def itermonthdays3(self, year, month):
method itermonthdays4 (line 220) | def itermonthdays4(self, year, month):
method monthdatescalendar (line 228) | def monthdatescalendar(self, year, month):
method monthdays2calendar (line 236) | def monthdays2calendar(self, year, month):
method monthdayscalendar (line 246) | def monthdayscalendar(self, year, month):
method yeardatescalendar (line 254) | def yeardatescalendar(self, year, width=3):
method yeardays2calendar (line 267) | def yeardays2calendar(self, year, width=3):
method yeardayscalendar (line 280) | def yeardayscalendar(self, year, width=3):
class TextCalendar (line 293) | class TextCalendar(Calendar):
method prweek (line 299) | def prweek(self, theweek, width):
method formatday (line 305) | def formatday(self, day, weekday, width):
method formatweek (line 315) | def formatweek(self, theweek, width):
method formatweekday (line 321) | def formatweekday(self, day, width):
method formatweekheader (line 331) | def formatweekheader(self, width):
method formatmonthname (line 337) | def formatmonthname(self, theyear, themonth, width, withyear=True):
method prmonth (line 346) | def prmonth(self, theyear, themonth, w=0, l=0):
method formatmonth (line 352) | def formatmonth(self, theyear, themonth, w=0, l=0):
method formatyear (line 368) | def formatyear(self, theyear, w=2, l=1, c=6, m=3):
method pryear (line 405) | def pryear(self, theyear, w=0, l=0, c=6, m=3):
class HTMLCalendar (line 410) | class HTMLCalendar(Calendar):
method formatday (line 436) | def formatday(self, day, weekday):
method formatweek (line 446) | def formatweek(self, theweek):
method formatweekday (line 453) | def formatweekday(self, day):
method formatweekheader (line 460) | def formatweekheader(self):
method formatmonthname (line 467) | def formatmonthname(self, theyear, themonth, withyear=True):
method formatmonth (line 478) | def formatmonth(self, theyear, themonth, withyear=True):
method formatyear (line 498) | def formatyear(self, theyear, width=3):
method formatyearpage (line 522) | def formatyearpage(self, theyear, width=3, css='calendar.css', encodin...
class different_locale (line 546) | class different_locale:
method __init__ (line 547) | def __init__(self, locale):
method __enter__ (line 550) | def __enter__(self):
method __exit__ (line 554) | def __exit__(self, *args):
class LocaleTextCalendar (line 558) | class LocaleTextCalendar(TextCalendar):
method __init__ (line 566) | def __init__(self, firstweekday=0, locale=None):
method formatweekday (line 572) | def formatweekday(self, day, width):
method formatmonthname (line 581) | def formatmonthname(self, theyear, themonth, width, withyear=True):
class LocaleHTMLCalendar (line 589) | class LocaleHTMLCalendar(HTMLCalendar):
method __init__ (line 596) | def __init__(self, firstweekday=0, locale=None):
method formatweekday (line 602) | def formatweekday(self, day):
method formatmonthname (line 607) | def formatmonthname(self, theyear, themonth, withyear=True):
function setfirstweekday (line 620) | def setfirstweekday(firstweekday):
function format (line 640) | def format(cols, colwidth=_colwidth, spacing=_spacing):
function formatstring (line 645) | def formatstring(cols, colwidth=_colwidth, spacing=_spacing):
function timegm (line 655) | def timegm(tuple):
function main (line 665) | def main(args):
FILE: rd/usr/lib/python3.8/cgi.py
function initlog (line 56) | def initlog(*allargs):
function dolog (line 91) | def dolog(fmt, *args):
function nolog (line 95) | def nolog(*allargs):
function closelog (line 99) | def closelog():
function parse (line 118) | def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsi...
function parse_multipart (line 184) | def parse_multipart(fp, pdict, encoding="utf-8", errors="replace"):
function _parseparam (line 211) | def _parseparam(s):
function parse_header (line 223) | def parse_header(line):
class MiniFieldStorage (line 247) | class MiniFieldStorage:
method __init__ (line 261) | def __init__(self, name, value):
method __repr__ (line 267) | def __repr__(self):
class FieldStorage (line 272) | class FieldStorage:
method __init__ (line 315) | def __init__(self, fp=None, headers=None, outerboundary=b'',
method __del__ (line 479) | def __del__(self):
method __enter__ (line 485) | def __enter__(self):
method __exit__ (line 488) | def __exit__(self, *args):
method __repr__ (line 491) | def __repr__(self):
method __iter__ (line 496) | def __iter__(self):
method __getattr__ (line 499) | def __getattr__(self, name):
method __getitem__ (line 512) | def __getitem__(self, key):
method getvalue (line 526) | def getvalue(self, key, default=None):
method getfirst (line 537) | def getfirst(self, key, default=None):
method getlist (line 548) | def getlist(self, key):
method keys (line 559) | def keys(self):
method __contains__ (line 565) | def __contains__(self, key):
method __len__ (line 571) | def __len__(self):
method __bool__ (line 575) | def __bool__(self):
method read_urlencoded (line 580) | def read_urlencoded(self):
method read_multi (line 598) | def read_multi(self, environ, keep_blank_values, strict_parsing):
method read_single (line 667) | def read_single(self):
method read_binary (line 678) | def read_binary(self):
method read_lines (line 695) | def read_lines(self):
method __write (line 706) | def __write(self, line):
method read_lines_to_eof (line 721) | def read_lines_to_eof(self):
method read_lines_to_outerboundary (line 731) | def read_lines_to_outerboundary(self):
method skip_lines (line 781) | def skip_lines(self):
method make_file (line 803) | def make_file(self):
function test (line 837) | def test(environ=os.environ):
function print_exception (line 876) | def print_exception(type=None, value=None, tb=None, limit=None):
function print_environ (line 890) | def print_environ(environ=os.environ):
function print_form (line 901) | def print_form(form):
function print_directory (line 917) | def print_directory():
function print_arguments (line 929) | def print_arguments():
function print_environ_usage (line 936) | def print_environ_usage():
function valid_boundary (line 983) | def valid_boundary(s):
FILE: rd/usr/lib/python3.8/cgitb.py
function reset (line 35) | def reset():
function small (line 46) | def small(text):
function strong (line 52) | def strong(text):
function grey (line 58) | def grey(text):
function lookup (line 64) | def lookup(name, frame, locals):
function scanvars (line 80) | def scanvars(reader, frame, locals):
function html (line 101) | def html(einfo, context=5):
function text (line 192) | def text(einfo, context=5):
class Hook (line 258) | class Hook:
method __init__ (line 261) | def __init__(self, display=1, logdir=None, context=5, file=None,
method __call__ (line 269) | def __call__(self, etype, evalue, etb):
method handle (line 272) | def handle(self, info=None):
function enable (line 314) | def enable(display=1, logdir=None, context=5, format="html"):
FILE: rd/usr/lib/python3.8/chunk.py
class Chunk (line 51) | class Chunk:
method __init__ (line 52) | def __init__(self, file, align=True, bigendian=True, inclheader=False):
method getname (line 78) | def getname(self):
method getsize (line 82) | def getsize(self):
method close (line 86) | def close(self):
method isatty (line 93) | def isatty(self):
method seek (line 98) | def seek(self, pos, whence=0):
method tell (line 117) | def tell(self):
method read (line 122) | def read(self, size=-1):
method skip (line 145) | def skip(self):
FILE: rd/usr/lib/python3.8/cmd.py
class Cmd (line 52) | class Cmd:
method __init__ (line 76) | def __init__(self, completekey='tab', stdin=None, stdout=None):
method cmdloop (line 98) | def cmdloop(self, intro=None):
method precmd (line 150) | def precmd(self, line):
method postcmd (line 157) | def postcmd(self, stop, line):
method preloop (line 161) | def preloop(self):
method postloop (line 165) | def postloop(self):
method parseline (line 172) | def parseline(self, line):
method onecmd (line 192) | def onecmd(self, line):
method emptyline (line 219) | def emptyline(self):
method default (line 229) | def default(self, line):
method completedefault (line 238) | def completedefault(self, *ignored):
method completenames (line 247) | def completenames(self, text, *ignored):
method complete (line 251) | def complete(self, text, state):
method get_names (line 281) | def get_names(self):
method complete_help (line 286) | def complete_help(self, *args):
method do_help (line 292) | def do_help(self, arg):
method print_topics (line 338) | def print_topics(self, header, cmds, cmdlen, maxcol):
method columnize (line 346) | def columnize(self, list, displaywidth=80):
FILE: rd/usr/lib/python3.8/code.py
class InteractiveInterpreter (line 15) | class InteractiveInterpreter:
method __init__ (line 24) | def __init__(self, locals=None):
method runsource (line 38) | def runsource(self, source, filename="<input>", symbol="single"):
method runcode (line 77) | def runcode(self, code):
method showsyntaxerror (line 96) | def showsyntaxerror(self, filename=None):
method showtraceback (line 131) | def showtraceback(self):
method write (line 152) | def write(self, data):
class InteractiveConsole (line 162) | class InteractiveConsole(InteractiveInterpreter):
method __init__ (line 170) | def __init__(self, locals=None, filename="<console>"):
method resetbuffer (line 184) | def resetbuffer(self):
method interact (line 188) | def interact(self, banner=None, exitmsg=None):
method push (line 242) | def push(self, line):
method raw_input (line 263) | def raw_input(self, prompt=""):
function interact (line 278) | def interact(banner=None, readfunc=None, local=None, exitmsg=None):
FILE: rd/usr/lib/python3.8/codecs.py
class CodecInfo (line 83) | class CodecInfo(tuple):
method __new__ (line 94) | def __new__(cls, encode, decode, streamreader=None, streamwriter=None,
method __repr__ (line 109) | def __repr__(self):
class Codec (line 114) | class Codec:
method encode (line 138) | def encode(self, input, errors='strict'):
method decode (line 157) | def decode(self, input, errors='strict'):
class IncrementalEncoder (line 180) | class IncrementalEncoder(object):
method __init__ (line 186) | def __init__(self, errors='strict'):
method encode (line 197) | def encode(self, input, final=False):
method reset (line 203) | def reset(self):
method getstate (line 208) | def getstate(self):
method setstate (line 214) | def setstate(self, state):
class BufferedIncrementalEncoder (line 220) | class BufferedIncrementalEncoder(IncrementalEncoder):
method __init__ (line 226) | def __init__(self, errors='strict'):
method _buffer_encode (line 231) | def _buffer_encode(self, input, errors, final):
method encode (line 236) | def encode(self, input, final=False):
method reset (line 244) | def reset(self):
method getstate (line 248) | def getstate(self):
method setstate (line 251) | def setstate(self, state):
class IncrementalDecoder (line 254) | class IncrementalDecoder(object):
method __init__ (line 260) | def __init__(self, errors='strict'):
method decode (line 270) | def decode(self, input, final=False):
method reset (line 276) | def reset(self):
method getstate (line 281) | def getstate(self):
method setstate (line 295) | def setstate(self, state):
class BufferedIncrementalDecoder (line 303) | class BufferedIncrementalDecoder(IncrementalDecoder):
method __init__ (line 309) | def __init__(self, errors='strict'):
method _buffer_decode (line 314) | def _buffer_decode(self, input, errors, final):
method decode (line 319) | def decode(self, input, final=False):
method reset (line 327) | def reset(self):
method getstate (line 331) | def getstate(self):
method setstate (line 335) | def setstate(self, state):
class StreamWriter (line 346) | class StreamWriter(Codec):
method __init__ (line 348) | def __init__(self, stream, errors='strict'):
method write (line 373) | def write(self, object):
method writelines (line 380) | def writelines(self, list):
method reset (line 387) | def reset(self):
method seek (line 399) | def seek(self, offset, whence=0):
method __getattr__ (line 404) | def __getattr__(self, name,
method __enter__ (line 411) | def __enter__(self):
method __exit__ (line 414) | def __exit__(self, type, value, tb):
class StreamReader (line 419) | class StreamReader(Codec):
method __init__ (line 423) | def __init__(self, stream, errors='strict'):
method decode (line 448) | def decode(self, input, errors='strict'):
method read (line 451) | def read(self, size=-1, chars=-1, firstline=False):
method readline (line 531) | def readline(self, size=None, keepends=True):
method readlines (line 606) | def readlines(self, sizehint=None, keepends=True):
method reset (line 621) | def reset(self):
method seek (line 634) | def seek(self, offset, whence=0):
method __next__ (line 642) | def __next__(self):
method __iter__ (line 650) | def __iter__(self):
method __getattr__ (line 653) | def __getattr__(self, name,
method __enter__ (line 660) | def __enter__(self):
method __exit__ (line 663) | def __exit__(self, type, value, tb):
class StreamReaderWriter (line 668) | class StreamReaderWriter:
method __init__ (line 681) | def __init__(self, stream, Reader, Writer, errors='strict'):
method read (line 699) | def read(self, size=-1):
method readline (line 703) | def readline(self, size=None):
method readlines (line 707) | def readlines(self, sizehint=None):
method __next__ (line 711) | def __next__(self):
method __iter__ (line 716) | def __iter__(self):
method write (line 719) | def write(self, data):
method writelines (line 723) | def writelines(self, list):
method reset (line 727) | def reset(self):
method seek (line 732) | def seek(self, offset, whence=0):
method __getattr__ (line 738) | def __getattr__(self, name,
method __enter__ (line 747) | def __enter__(self):
method __exit__ (line 750) | def __exit__(self, type, value, tb):
class StreamRecoder (line 755) | class StreamRecoder:
method __init__ (line 775) | def __init__(self, stream, encode, decode, Reader, Writer,
method read (line 803) | def read(self, size=-1):
method readline (line 809) | def readline(self, size=None):
method readlines (line 818) | def readlines(self, sizehint=None):
method __next__ (line 824) | def __next__(self):
method __iter__ (line 831) | def __iter__(self):
method write (line 834) | def write(self, data):
method writelines (line 839) | def writelines(self, list):
method reset (line 845) | def reset(self):
method seek (line 850) | def seek(self, offset, whence=0):
method __getattr__ (line 856) | def __getattr__(self, name,
method __enter__ (line 863) | def __enter__(self):
method __exit__ (line 866) | def __exit__(self, type, value, tb):
function open (line 871) | def open(filename, mode='r', encoding=None, errors='strict', buffering=-1):
function EncodedFile (line 919) | def EncodedFile(file, data_encoding, file_encoding=None, errors='strict'):
function getencoder (line 957) | def getencoder(encoding):
function getdecoder (line 967) | def getdecoder(encoding):
function getincrementalencoder (line 977) | def getincrementalencoder(encoding):
function getincrementaldecoder (line 991) | def getincrementaldecoder(encoding):
function getreader (line 1005) | def getreader(encoding):
function getwriter (line 1015) | def getwriter(encoding):
function iterencode (line 1025) | def iterencode(iterator, encoding, errors='strict', **kwargs):
function iterdecode (line 1043) | def iterdecode(iterator, encoding, errors='strict', **kwargs):
function make_identity_dict (line 1063) | def make_identity_dict(rng):
function make_encoding_map (line 1073) | def make_encoding_map(decoding_map):
FILE: rd/usr/lib/python3.8/codeop.py
function _maybe_compile (line 69) | def _maybe_compile(compiler, source, filename, symbol):
function _compile (line 108) | def _compile(source, filename, symbol):
function compile_command (line 111) | def compile_command(source, filename="<input>", symbol="single"):
class Compile (line 132) | class Compile:
method __init__ (line 137) | def __init__(self):
method __call__ (line 140) | def __call__(self, source, filename, symbol):
class CommandCompiler (line 147) | class CommandCompiler:
method __init__ (line 154) | def __init__(self,):
method __call__ (line 157) | def __call__(self, source, filename="<input>", symbol="single"):
FILE: rd/usr/lib/python3.8/collections/__init__.py
function __getattr__ (line 42) | def __getattr__(name):
class _OrderedDictKeysView (line 61) | class _OrderedDictKeysView(_collections_abc.KeysView):
method __reversed__ (line 63) | def __reversed__(self):
class _OrderedDictItemsView (line 66) | class _OrderedDictItemsView(_collections_abc.ItemsView):
method __reversed__ (line 68) | def __reversed__(self):
class _OrderedDictValuesView (line 72) | class _OrderedDictValuesView(_collections_abc.ValuesView):
method __reversed__ (line 74) | def __reversed__(self):
class _Link (line 78) | class _Link(object):
class OrderedDict (line 81) | class OrderedDict(dict):
method __init__ (line 96) | def __init__(self, other=(), /, **kwds):
method __setitem__ (line 109) | def __setitem__(self, key, value,
method __delitem__ (line 123) | def __delitem__(self, key, dict_delitem=dict.__delitem__):
method __iter__ (line 136) | def __iter__(self):
method __reversed__ (line 145) | def __reversed__(self):
method clear (line 154) | def clear(self):
method popitem (line 161) | def popitem(self, last=True):
method move_to_end (line 184) | def move_to_end(self, key, last=True):
method __sizeof__ (line 209) | def __sizeof__(self):
method keys (line 220) | def keys(self):
method items (line 224) | def items(self):
method values (line 228) | def values(self):
method pop (line 236) | def pop(self, key, default=__marker):
method setdefault (line 250) | def setdefault(self, key, default=None):
method __repr__ (line 261) | def __repr__(self):
method __reduce__ (line 267) | def __reduce__(self):
method copy (line 274) | def copy(self):
method fromkeys (line 279) | def fromkeys(cls, iterable, value=None):
method __eq__ (line 287) | def __eq__(self, other):
function namedtuple (line 313) | def namedtuple(typename, field_names, *, rename=False, defaults=None, mo...
function _count_elements (line 478) | def _count_elements(mapping, iterable):
class Counter (line 489) | class Counter(dict):
method __init__ (line 540) | def __init__(self, iterable=None, /, **kwds):
method __missing__ (line 554) | def __missing__(self, key):
method most_common (line 559) | def most_common(self, n=None):
method elements (line 572) | def elements(self):
method fromkeys (line 597) | def fromkeys(cls, iterable, v=None):
method update (line 608) | def update(self, iterable=None, /, **kwds):
method subtract (line 641) | def subtract(self, iterable=None, /, **kwds):
method copy (line 668) | def copy(self):
method __reduce__ (line 672) | def __reduce__(self):
method __delitem__ (line 675) | def __delitem__(self, elem):
method __repr__ (line 680) | def __repr__(self):
method __add__ (line 706) | def __add__(self, other):
method __sub__ (line 725) | def __sub__(self, other):
method __or__ (line 744) | def __or__(self, other):
method __and__ (line 764) | def __and__(self, other):
method __pos__ (line 781) | def __pos__(self):
method __neg__ (line 789) | def __neg__(self):
method _keep_positive (line 800) | def _keep_positive(self):
method __iadd__ (line 807) | def __iadd__(self, other):
method __isub__ (line 820) | def __isub__(self, other):
method __ior__ (line 833) | def __ior__(self, other):
method __iand__ (line 848) | def __iand__(self, other):
class ChainMap (line 868) | class ChainMap(_collections_abc.MutableMapping):
method __init__ (line 882) | def __init__(self, *maps):
method __missing__ (line 889) | def __missing__(self, key):
method __getitem__ (line 892) | def __getitem__(self, key):
method get (line 900) | def get(self, key, default=None):
method __len__ (line 903) | def __len__(self):
method __iter__ (line 906) | def __iter__(self):
method __contains__ (line 912) | def __contains__(self, key):
method __bool__ (line 915) | def __bool__(self):
method __repr__ (line 919) | def __repr__(self):
method fromkeys (line 923) | def fromkeys(cls, iterable, *args):
method copy (line 927) | def copy(self):
method new_child (line 933) | def new_child(self, m=None): # like Django's Context.pu...
method parents (line 942) | def parents(self): # like Django's Context.pop()
method __setitem__ (line 946) | def __setitem__(self, key, value):
method __delitem__ (line 949) | def __delitem__(self, key):
method popitem (line 955) | def popitem(self):
method pop (line 962) | def pop(self, key, *args):
method clear (line 969) | def clear(self):
class UserDict (line 978) | class UserDict(_collections_abc.MutableMapping):
method __init__ (line 981) | def __init__(*args, **kwargs):
method __len__ (line 1004) | def __len__(self): return len(self.data)
method __getitem__ (line 1005) | def __getitem__(self, key):
method __setitem__ (line 1011) | def __setitem__(self, key, item): self.data[key] = item
method __delitem__ (line 1012) | def __delitem__(self, key): del self.data[key]
method __iter__ (line 1013) | def __iter__(self):
method __contains__ (line 1017) | def __contains__(self, key):
method __repr__ (line 1021) | def __repr__(self): return repr(self.data)
method __copy__ (line 1022) | def __copy__(self):
method copy (line 1029) | def copy(self):
method fromkeys (line 1043) | def fromkeys(cls, iterable, value=None):
class UserList (line 1055) | class UserList(_collections_abc.MutableSequence):
method __init__ (line 1057) | def __init__(self, initlist=None):
method __repr__ (line 1067) | def __repr__(self): return repr(self.data)
method __lt__ (line 1068) | def __lt__(self, other): return self.data < self.__cast(other)
method __le__ (line 1069) | def __le__(self, other): return self.data <= self.__cast(other)
method __eq__ (line 1070) | def __eq__(self, other): return self.data == self.__cast(other)
method __gt__ (line 1071) | def __gt__(self, other): return self.data > self.__cast(other)
method __ge__ (line 1072) | def __ge__(self, other): return self.data >= self.__cast(other)
method __cast (line 1073) | def __cast(self, other):
method __contains__ (line 1075) | def __contains__(self, item): return item in self.data
method __len__ (line 1076) | def __len__(self): return len(self.data)
method __getitem__ (line 1077) | def __getitem__(self, i):
method __setitem__ (line 1082) | def __setitem__(self, i, item): self.data[i] = item
method __delitem__ (line 1083) | def __delitem__(self, i): del self.data[i]
method __add__ (line 1084) | def __add__(self, other):
method __radd__ (line 1090) | def __radd__(self, other):
method __iadd__ (line 1096) | def __iadd__(self, other):
method __mul__ (line 1104) | def __mul__(self, n):
method __imul__ (line 1107) | def __imul__(self, n):
method __copy__ (line 1110) | def __copy__(self):
method append (line 1116) | def append(self, item): self.data.append(item)
method insert (line 1117) | def insert(self, i, item): self.data.insert(i, item)
method pop (line 1118) | def pop(self, i=-1): return self.data.pop(i)
method remove (line 1119) | def remove(self, item): self.data.remove(item)
method clear (line 1120) | def clear(self): self.data.clear()
method copy (line 1121) | def copy(self): return self.__class__(self)
method count (line 1122) | def count(self, item): return self.data.count(item)
method index (line 1123) | def index(self, item, *args): return self.data.index(item, *args)
method reverse (line 1124) | def reverse(self): self.data.reverse()
method sort (line 1125) | def sort(self, /, *args, **kwds): self.data.sort(*args, **kwds)
method extend (line 1126) | def extend(self, other):
class UserString (line 1138) | class UserString(_collections_abc.Sequence):
method __init__ (line 1139) | def __init__(self, seq):
method __str__ (line 1146) | def __str__(self): return str(self.data)
method __repr__ (line 1147) | def __repr__(self): return repr(self.data)
method __int__ (line 1148) | def __int__(self): return int(self.data)
method __float__ (line 1149) | def __float__(self): return float(self.data)
method __complex__ (line 1150) | def __complex__(self): return complex(self.data)
method __hash__ (line 1151) | def __hash__(self): return hash(self.data)
method __getnewargs__ (line 1152) | def __getnewargs__(self):
method __eq__ (line 1155) | def __eq__(self, string):
method __lt__ (line 1159) | def __lt__(self, string):
method __le__ (line 1163) | def __le__(self, string):
method __gt__ (line 1167) | def __gt__(self, string):
method __ge__ (line 1171) | def __ge__(self, string):
method __contains__ (line 1176) | def __contains__(self, char):
method __len__ (line 1181) | def __len__(self): return len(self.data)
method __getitem__ (line 1182) | def __getitem__(self, index): return self.__class__(self.data[index])
method __add__ (line 1183) | def __add__(self, other):
method __radd__ (line 1189) | def __radd__(self, other):
method __mul__ (line 1193) | def __mul__(self, n):
method __mod__ (line 1196) | def __mod__(self, args):
method __rmod__ (line 1198) | def __rmod__(self, template):
method capitalize (line 1201) | def capitalize(self): return self.__class__(self.data.capitalize())
method casefold (line 1202) | def casefold(self):
method center (line 1204) | def center(self, width, *args):
method count (line 1206) | def count(self, sub, start=0, end=_sys.maxsize):
method encode (line 1210) | def encode(self, encoding='utf-8', errors='strict'):
method endswith (line 1214) | def endswith(self, suffix, start=0, end=_sys.maxsize):
method expandtabs (line 1216) | def expandtabs(self, tabsize=8):
method find (line 1218) | def find(self, sub, start=0, end=_sys.maxsize):
method format (line 1222) | def format(self, /, *args, **kwds):
method format_map (line 1224) | def format_map(self, mapping):
method index (line 1226) | def index(self, sub, start=0, end=_sys.maxsize):
method isalpha (line 1228) | def isalpha(self): return self.data.isalpha()
method isalnum (line 1229) | def isalnum(self): return self.data.isalnum()
method isascii (line 1230) | def isascii(self): return self.data.isascii()
method isdecimal (line 1231) | def isdecimal(self): return self.data.isdecimal()
method isdigit (line 1232) | def isdigit(self): return self.data.isdigit()
method isidentifier (line 1233) | def isidentifier(self): return self.data.isidentifier()
method islower (line 1234) | def islower(self): return self.data.islower()
method isnumeric (line 1235) | def isnumeric(self): return self.data.isnumeric()
method isprintable (line 1236) | def isprintable(self): return self.data.isprintable()
method isspace (line 1237) | def isspace(self): return self.data.isspace()
method istitle (line 1238) | def istitle(self): return self.data.istitle()
method isupper (line 1239) | def isupper(self): return self.data.isupper()
method join (line 1240) | def join(self, seq): return self.data.join(seq)
method ljust (line 1241) | def ljust(self, width, *args):
method lower (line 1243) | def lower(self): return self.__class__(self.data.lower())
method lstrip (line 1244) | def lstrip(self, chars=None): return self.__class__(self.data.lstrip(c...
method partition (line 1246) | def partition(self, sep):
method replace (line 1248) | def replace(self, old, new, maxsplit=-1):
method rfind (line 1254) | def rfind(self, sub, start=0, end=_sys.maxsize):
method rindex (line 1258) | def rindex(self, sub, start=0, end=_sys.maxsize):
method rjust (line 1260) | def rjust(self, width, *args):
method rpartition (line 1262) | def rpartition(self, sep):
method rstrip (line 1264) | def rstrip(self, chars=None):
method split (line 1266) | def split(self, sep=None, maxsplit=-1):
method rsplit (line 1268) | def rsplit(self, sep=None, maxsplit=-1):
method splitlines (line 1270) | def splitlines(self, keepends=False): return self.data.splitlines(keep...
method startswith (line 1271) | def startswith(self, prefix, start=0, end=_sys.maxsize):
method strip (line 1273) | def strip(self, chars=None): return self.__class__(self.data.strip(cha...
method swapcase (line 1274) | def swapcase(self): return self.__class__(self.data.swapcase())
method title (line 1275) | def title(self): return self.__class__(self.data.title())
method translate (line 1276) | def translate(self, *args):
method upper (line 1278) | def upper(self): return self.__class__(self.data.upper())
method zfill (line 1279) | def zfill(self, width): return self.__class__(self.data.zfill(width))
FILE: rd/usr/lib/python3.8/colorsys.py
function rgb_to_yiq (line 40) | def rgb_to_yiq(r, g, b):
function yiq_to_rgb (line 46) | def yiq_to_rgb(y, i, q):
function rgb_to_hls (line 75) | def rgb_to_hls(r, g, b):
function hls_to_rgb (line 98) | def hls_to_rgb(h, l, s):
function _v (line 108) | def _v(m1, m2, hue):
function rgb_to_hsv (line 124) | def rgb_to_hsv(r, g, b):
function hsv_to_rgb (line 143) | def hsv_to_rgb(h, s, v):
FILE: rd/usr/lib/python3.8/compileall.py
function _walk_dir (line 23) | def _walk_dir(dir, ddir=None, maxlevels=10, quiet=0):
function compile_dir (line 50) | def compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None,
function _compile_file_tuple (line 101) | def _compile_file_tuple(file_and_dfile, **kwargs):
function compile_file (line 106) | def compile_file(fullname, ddir=None, force=False, rx=None, quiet=0,
function compile_path (line 192) | def compile_path(skip_curdir=1, maxlevels=0, force=False, quiet=0,
function main (line 226) | def main():
FILE: rd/usr/lib/python3.8/configparser.py
class Error (line 168) | class Error(Exception):
method __init__ (line 171) | def __init__(self, msg=''):
method __repr__ (line 175) | def __repr__(self):
class NoSectionError (line 181) | class NoSectionError(Error):
method __init__ (line 184) | def __init__(self, section):
class DuplicateSectionError (line 190) | class DuplicateSectionError(Error):
method __init__ (line 198) | def __init__(self, section, source=None, lineno=None):
class DuplicateOptionError (line 216) | class DuplicateOptionError(Error):
method __init__ (line 223) | def __init__(self, section, option, source=None, lineno=None):
class NoOptionError (line 243) | class NoOptionError(Error):
method __init__ (line 246) | def __init__(self, option, section):
class InterpolationError (line 254) | class InterpolationError(Error):
method __init__ (line 257) | def __init__(self, option, section, msg):
class InterpolationMissingOptionError (line 264) | class InterpolationMissingOptionError(InterpolationError):
method __init__ (line 267) | def __init__(self, option, section, rawval, reference):
class InterpolationSyntaxError (line 276) | class InterpolationSyntaxError(InterpolationError):
class InterpolationDepthError (line 284) | class InterpolationDepthError(InterpolationError):
method __init__ (line 287) | def __init__(self, option, section, rawval):
class ParsingError (line 297) | class ParsingError(Error):
method __init__ (line 300) | def __init__(self, source=None, filename=None):
method filename (line 316) | def filename(self):
method filename (line 326) | def filename(self, value):
method append (line 335) | def append(self, lineno, line):
class MissingSectionHeaderError (line 340) | class MissingSectionHeaderError(ParsingError):
method __init__ (line 343) | def __init__(self, filename, lineno, line):
class Interpolation (line 360) | class Interpolation:
method before_get (line 363) | def before_get(self, parser, section, option, value, defaults):
method before_set (line 366) | def before_set(self, parser, section, option, value):
method before_read (line 369) | def before_read(self, parser, section, option, value):
method before_write (line 372) | def before_write(self, parser, section, option, value):
class BasicInterpolation (line 376) | class BasicInterpolation(Interpolation):
method before_get (line 393) | def before_get(self, parser, section, option, value, defaults):
method before_set (line 398) | def before_set(self, parser, section, option, value):
method _interpolate_some (line 406) | def _interpolate_some(self, parser, option, accum, rest, section, map,
class ExtendedInterpolation (line 448) | class ExtendedInterpolation(Interpolation):
method before_get (line 454) | def before_get(self, parser, section, option, value, defaults):
method before_set (line 459) | def before_set(self, parser, section, option, value):
method _interpolate_some (line 467) | def _interpolate_some(self, parser, option, accum, rest, section, map,
class LegacyInterpolation (line 522) | class LegacyInterpolation(Interpolation):
method before_get (line 528) | def before_get(self, parser, section, option, value, vars):
method before_set (line 548) | def before_set(self, parser, section, option, value):
method _interpolation_replace (line 552) | def _interpolation_replace(match, parser):
class RawConfigParser (line 560) | class RawConfigParser(MutableMapping):
method __init__ (line 601) | def __init__(self, defaults=None, dict_type=_default_dict,
method defaults (line 641) | def defaults(self):
method sections (line 644) | def sections(self):
method add_section (line 649) | def add_section(self, section):
method has_section (line 663) | def has_section(self, section):
method options (line 670) | def options(self, section):
method read (line 679) | def read(self, filenames, encoding=None):
method read_file (line 705) | def read_file(self, f, source=None):
method read_string (line 720) | def read_string(self, string, source='<string>'):
method read_dict (line 725) | def read_dict(self, dictionary, source='<dict>'):
method readfp (line 756) | def readfp(self, fp, filename=None):
method get (line 765) | def get(self, section, option, *, raw=False, vars=None, fallback=_UNSET):
method _get (line 802) | def _get(self, section, conv, option, **kwargs):
method _get_conv (line 805) | def _get_conv(self, section, option, conv, *, raw=False, vars=None,
method getint (line 816) | def getint(self, section, option, *, raw=False, vars=None,
method getfloat (line 821) | def getfloat(self, section, option, *, raw=False, vars=None,
method getboolean (line 826) | def getboolean(self, section, option, *, raw=False, vars=None,
method items (line 831) | def items(self, section=_UNSET, raw=False, vars=None):
method popitem (line 861) | def popitem(self):
method optionxform (line 874) | def optionxform(self, optionstr):
method has_option (line 877) | def has_option(self, section, option):
method set (line 891) | def set(self, section, option, value=None):
method write (line 905) | def write(self, fp, space_around_delimiters=True):
method _write_section (line 922) | def _write_section(self, fp, section_name, section_items, delimiter):
method remove_option (line 935) | def remove_option(self, section, option):
method remove_section (line 950) | def remove_section(self, section):
method __getitem__ (line 958) | def __getitem__(self, key):
method __setitem__ (line 963) | def __setitem__(self, key, value):
method __delitem__ (line 976) | def __delitem__(self, key):
method __contains__ (line 983) | def __contains__(self, key):
method __len__ (line 986) | def __len__(self):
method __iter__ (line 989) | def __iter__(self):
method _read (line 993) | def _read(self, fp, fpname):
method _join_multiline_values (line 1115) | def _join_multiline_values(self):
method _read_defaults (line 1127) | def _read_defaults(self, defaults):
method _handle_error (line 1133) | def _handle_error(self, exc, fpname, lineno, line):
method _unify_values (line 1139) | def _unify_values(self, section, vars):
method _convert_to_boolean (line 1159) | def _convert_to_boolean(self, value):
method _validate_value_types (line 1166) | def _validate_value_types(self, *, section="", option="", value=""):
method converters (line 1188) | def converters(self):
class ConfigParser (line 1192) | class ConfigParser(RawConfigParser):
method set (line 1197) | def set(self, section, option, value=None):
method add_section (line 1203) | def add_section(self, section):
method _read_defaults (line 1210) | def _read_defaults(self, defaults):
class SafeConfigParser (line 1224) | class SafeConfigParser(ConfigParser):
method __init__ (line 1227) | def __init__(self, *args, **kwargs):
class SectionProxy (line 1237) | class SectionProxy(MutableMapping):
method __init__ (line 1240) | def __init__(self, parser, name):
method __repr__ (line 1249) | def __repr__(self):
method __getitem__ (line 1252) | def __getitem__(self, key):
method __setitem__ (line 1257) | def __setitem__(self, key, value):
method __delitem__ (line 1261) | def __delitem__(self, key):
method __contains__ (line 1266) | def __contains__(self, key):
method __len__ (line 1269) | def __len__(self):
method __iter__ (line 1272) | def __iter__(self):
method _options (line 1275) | def _options(self):
method parser (line 1282) | def parser(self):
method name (line 1287) | def name(self):
method get (line 1291) | def get(self, option, fallback=None, *, raw=False, vars=None,
class ConverterMapping (line 1307) | class ConverterMapping(MutableMapping):
method __init__ (line 1317) | def __init__(self, parser):
method __getitem__ (line 1326) | def __getitem__(self, key):
method __setitem__ (line 1329) | def __setitem__(self, key, value):
method __delitem__ (line 1345) | def __delitem__(self, key):
method __iter__ (line 1359) | def __iter__(self):
method __len__ (line 1362) | def __len__(self):
FILE: rd/usr/lib/python3.8/contextlib.py
class AbstractContextManager (line 15) | class AbstractContextManager(abc.ABC):
method __enter__ (line 19) | def __enter__(self):
method __exit__ (line 24) | def __exit__(self, exc_type, exc_value, traceback):
method __subclasshook__ (line 29) | def __subclasshook__(cls, C):
class AbstractAsyncContextManager (line 35) | class AbstractAsyncContextManager(abc.ABC):
method __aenter__ (line 39) | async def __aenter__(self):
method __aexit__ (line 44) | async def __aexit__(self, exc_type, exc_value, traceback):
method __subclasshook__ (line 49) | def __subclasshook__(cls, C):
class ContextDecorator (line 56) | class ContextDecorator(object):
method _recreate_cm (line 59) | def _recreate_cm(self):
method __call__ (line 71) | def __call__(self, func):
class _GeneratorContextManagerBase (line 79) | class _GeneratorContextManagerBase:
method __init__ (line 82) | def __init__(self, func, args, kwds):
class _GeneratorContextManager (line 97) | class _GeneratorContextManager(_GeneratorContextManagerBase,
method _recreate_cm (line 102) | def _recreate_cm(self):
method __enter__ (line 108) | def __enter__(self):
method __exit__ (line 117) | def __exit__(self, type, value, traceback):
class _AsyncGeneratorContextManager (line 165) | class _AsyncGeneratorContextManager(_GeneratorContextManagerBase,
method __aenter__ (line 169) | async def __aenter__(self):
method __aexit__ (line 175) | async def __aexit__(self, typ, value, traceback):
function contextmanager (line 211) | def contextmanager(func):
function asynccontextmanager (line 244) | def asynccontextmanager(func):
class closing (line 277) | class closing(AbstractContextManager):
method __init__ (line 294) | def __init__(self, thing):
method __enter__ (line 296) | def __enter__(self):
method __exit__ (line 298) | def __exit__(self, *exc_info):
class _RedirectStream (line 302) | class _RedirectStream(AbstractContextManager):
method __init__ (line 306) | def __init__(self, new_target):
method __enter__ (line 311) | def __enter__(self):
method __exit__ (line 316) | def __exit__(self, exctype, excinst, exctb):
class redirect_stdout (line 320) | class redirect_stdout(_RedirectStream):
class redirect_stderr (line 336) | class redirect_stderr(_RedirectStream):
class suppress (line 342) | class suppress(AbstractContextManager):
method __init__ (line 353) | def __init__(self, *exceptions):
method __enter__ (line 356) | def __enter__(self):
method __exit__ (line 359) | def __exit__(self, exctype, excinst, exctb):
class _BaseExitStack (line 372) | class _BaseExitStack:
method _create_exit_wrapper (line 376) | def _create_exit_wrapper(cm, cm_exit):
method _create_cb_wrapper (line 380) | def _create_cb_wrapper(callback, /, *args, **kwds):
method __init__ (line 385) | def __init__(self):
method pop_all (line 388) | def pop_all(self):
method push (line 395) | def push(self, exit):
method enter_context (line 415) | def enter_context(self, cm):
method callback (line 429) | def callback(*args, **kwds):
method _push_cm_exit (line 458) | def _push_cm_exit(self, cm, cm_exit):
method _push_exit_callback (line 463) | def _push_exit_callback(self, callback, is_sync=True):
class ExitStack (line 468) | class ExitStack(_BaseExitStack, AbstractContextManager):
method __enter__ (line 479) | def __enter__(self):
method __exit__ (line 482) | def __exit__(self, *exc_details):
method close (line 531) | def close(self):
class AsyncExitStack (line 537) | class AsyncExitStack(_BaseExitStack, AbstractAsyncContextManager):
method _create_async_exit_wrapper (line 551) | def _create_async_exit_wrapper(cm, cm_exit):
method _create_async_cb_wrapper (line 555) | def _create_async_cb_wrapper(callback, /, *args, **kwds):
method enter_async_context (line 560) | async def enter_async_context(self, cm):
method push_async_exit (line 572) | def push_async_exit(self, exit):
method push_async_callback (line 590) | def push_async_callback(*args, **kwds):
method aclose (line 619) | async def aclose(self):
method _push_async_cm_exit (line 623) | def _push_async_cm_exit(self, cm, cm_exit):
method __aenter__ (line 629) | async def __aenter__(self):
method __aexit__ (line 632) | async def __aexit__(self, *exc_details):
class nullcontext (line 686) | class nullcontext(AbstractContextManager):
method __init__ (line 697) | def __init__(self, enter_result=None):
method __enter__ (line 700) | def __enter__(self):
method __exit__ (line 703) | def __exit__(self, *excinfo):
FILE: rd/usr/lib/python3.8/copy.py
class Error (line 55) | class Error(Exception):
function copy (line 66) | def copy(x):
function _copy_immutable (line 107) | def _copy_immutable(x):
function deepcopy (line 128) | def deepcopy(x, memo=None, _nil=[]):
function _deepcopy_atomic (line 182) | def _deepcopy_atomic(x, memo):
function _deepcopy_list (line 200) | def _deepcopy_list(x, memo, deepcopy=deepcopy):
function _deepcopy_tuple (line 209) | def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
function _deepcopy_dict (line 226) | def _deepcopy_dict(x, memo, deepcopy=deepcopy):
function _deepcopy_method (line 236) | def _deepcopy_method(x, memo): # Copy instance methods
function _keep_alive (line 242) | def _keep_alive(x, memo):
function _reconstruct (line 258) | def _reconstruct(x, memo, func, args,
FILE: rd/usr/lib/python3.8/copyreg.py
function pickle (line 12) | def pickle(ob_type, pickle_function, constructor_ob=None):
function constructor (line 22) | def constructor(object):
function pickle_complex (line 34) | def pickle_complex(c):
function _reconstructor (line 41) | def _reconstructor(cls, base, state):
function _reduce_ex (line 54) | def _reduce_ex(self, proto):
function __newobj__ (line 90) | def __newobj__(cls, *args):
function __newobj_ex__ (line 93) | def __newobj_ex__(cls, args, kwargs):
function _slotnames (line 99) | def _slotnames(cls):
function add_extension (line 165) | def add_extension(module, name, code):
function remove_extension (line 183) | def remove_extension(module, name, code):
function clear_extension_cache (line 195) | def clear_extension_cache():
FILE: rd/usr/lib/python3.8/crypt.py
class _Method (line 22) | class _Method(_namedtuple('_Method', 'name ident salt_chars total_size')):
method __repr__ (line 27) | def __repr__(self):
function mksalt (line 31) | def mksalt(method=None, *, rounds=None):
function crypt (line 69) | def crypt(word, salt=None):
function _add_method (line 87) | def _add_method(name, *args, rounds=None):
FILE: rd/usr/lib/python3.8/csv.py
class Dialect (line 23) | class Dialect:
method __init__ (line 42) | def __init__(self):
method _validate (line 47) | def _validate(self):
class excel (line 54) | class excel(Dialect):
class excel_tab (line 64) | class excel_tab(excel):
class unix_dialect (line 69) | class unix_dialect(Dialect):
class DictReader (line 80) | class DictReader:
method __init__ (line 81) | def __init__(self, f, fieldnames=None, restkey=None, restval=None,
method __iter__ (line 90) | def __iter__(self):
method fieldnames (line 94) | def fieldnames(self):
method fieldnames (line 104) | def fieldnames(self, value):
method __next__ (line 107) | def __next__(self):
class DictWriter (line 130) | class DictWriter:
method __init__ (line 131) | def __init__(self, f, fieldnames, restval="", extrasaction="raise",
method writeheader (line 141) | def writeheader(self):
method _dict_to_list (line 145) | def _dict_to_list(self, rowdict):
method writerow (line 153) | def writerow(self, rowdict):
method writerows (line 156) | def writerows(self, rowdicts):
class Sniffer (line 165) | class Sniffer:
method __init__ (line 170) | def __init__(self):
method sniff (line 175) | def sniff(self, sample, delimiters=None):
method _guess_quote_and_delimiter (line 204) | def _guess_quote_and_delimiter(self, data, delimiters):
method _guess_delimiter (line 280) | def _guess_delimiter(self, data, delimiters):
method has_header (line 383) | def has_header(self, sample):
FILE: rd/usr/lib/python3.8/curses/__init__.py
function initscr (line 25) | def initscr():
function start_color (line 42) | def start_color():
function wrapper (line 63) | def wrapper(*args, **kwds):
FILE: rd/usr/lib/python3.8/curses/ascii.py
function _ctoi (line 48) | def _ctoi(c):
function isalnum (line 54) | def isalnum(c): return isalpha(c) or isdigit(c)
function isalpha (line 55) | def isalpha(c): return isupper(c) or islower(c)
function isascii (line 56) | def isascii(c): return 0 <= _ctoi(c) <= 127 # ?
function isblank (line 57) | def isblank(c): return _ctoi(c) in (9, 32)
function iscntrl (line 58) | def iscntrl(c): return 0 <= _ctoi(c) <= 31 or _ctoi(c) == 127
function isdigit (line 59) | def isdigit(c): return 48 <= _ctoi(c) <= 57
function isgraph (line 60) | def isgraph(c): return 33 <= _ctoi(c) <= 126
function islower (line 61) | def islower(c): return 97 <= _ctoi(c) <= 122
function isprint (line 62) | def isprint(c): return 32 <= _ctoi(c) <= 126
function ispunct (line 63) | def ispunct(c): return isgraph(c) and not isalnum(c)
function isspace (line 64) | def isspace(c): return _ctoi(c) in (9, 10, 11, 12, 13, 32)
function isupper (line 65) | def isupper(c): return 65 <= _ctoi(c) <= 90
function isxdigit (line 66) | def isxdigit(c): return isdigit(c) or \
function isctrl (line 68) | def isctrl(c): return 0 <= _ctoi(c) < 32
function ismeta (line 69) | def ismeta(c): return _ctoi(c) > 127
function ascii (line 71) | def ascii(c):
function ctrl (line 77) | def ctrl(c):
function alt (line 83) | def alt(c):
function unctrl (line 89) | def unctrl(c):
FILE: rd/usr/lib/python3.8/curses/has_key.py
function has_key (line 162) | def has_key(ch):
FILE: rd/usr/lib/python3.8/curses/textpad.py
function rectangle (line 6) | def rectangle(win, uly, ulx, lry, lrx):
class Textbox (line 19) | class Textbox:
method __init__ (line 43) | def __init__(self, win, insert_mode=False):
method _update_max_yx (line 51) | def _update_max_yx(self):
method _end_of_line (line 56) | def _end_of_line(self, y):
method _insert_printable_char (line 70) | def _insert_printable_char(self, ch):
method do_command (line 95) | def do_command(self, ch):
method gather (line 160) | def gather(self):
method edit (line 177) | def edit(self, validate=None):
function test_editbox (line 191) | def test_editbox(stdscr):
FILE: rd/usr/lib/python3.8/dataclasses.py
class FrozenInstanceError (line 155) | class FrozenInstanceError(AttributeError): pass
class _HAS_DEFAULT_FACTORY_CLASS (line 160) | class _HAS_DEFAULT_FACTORY_CLASS:
method __repr__ (line 161) | def __repr__(self):
class _MISSING_TYPE (line 167) | class _MISSING_TYPE:
class _FIELD_BASE (line 176) | class _FIELD_BASE:
method __init__ (line 177) | def __init__(self, name):
method __repr__ (line 179) | def __repr__(self):
class _InitVarMeta (line 202) | class _InitVarMeta(type):
method __getitem__ (line 203) | def __getitem__(self, params):
class InitVar (line 206) | class InitVar(metaclass=_InitVarMeta):
method __init__ (line 209) | def __init__(self, type):
method __repr__ (line 212) | def __repr__(self):
class Field (line 231) | class Field:
method __init__ (line 244) | def __init__(self, default, default_factory, init, repr, hash, compare,
method __repr__ (line 259) | def __repr__(self):
method __set_name__ (line 281) | def __set_name__(self, owner, name):
class _DataclassParams (line 289) | class _DataclassParams:
method __init__ (line 298) | def __init__(self, init, repr, eq, order, unsafe_hash, frozen):
method __repr__ (line 306) | def __repr__(self):
function field (line 320) | def field(*, default=MISSING, default_factory=MISSING, init=True, repr=T...
function _tuple_str (line 342) | def _tuple_str(obj_name, fields):
function _recursive_repr (line 356) | def _recursive_repr(user_function):
function _create_fn (line 375) | def _create_fn(name, args, body, *, globals=None, locals=None,
function _field_assign (line 402) | def _field_assign(frozen, name, value, self_name):
function _field_init (line 414) | def _field_init(f, frozen, globals, self_name):
function _init_param (line 468) | def _init_param(f):
function _init_fn (line 487) | def _init_fn(fields, frozen, has_post_init, self_name, globals):
function _repr_fn (line 537) | def _repr_fn(fields, globals):
function _frozen_get_del_attr (line 548) | def _frozen_get_del_attr(cls, fields, globals):
function _cmp_fn (line 573) | def _cmp_fn(name, op, self_tuple, other_tuple, globals):
function _hash_fn (line 587) | def _hash_fn(fields, globals):
function _is_classvar (line 595) | def _is_classvar(a_type, typing):
function _is_initvar (line 603) | def _is_initvar(a_type, dataclasses):
function _is_type (line 610) | def _is_type(annotation, cls, a_module, a_type, is_type_predicate):
function _get_field (line 669) | def _get_field(cls, a_name, a_type):
function _set_new_attribute (line 751) | def _set_new_attribute(cls, name, value):
function _hash_set_none (line 765) | def _hash_set_none(cls, fields, globals):
function _hash_add (line 768) | def _hash_add(cls, fields, globals):
function _hash_exception (line 772) | def _hash_exception(cls, fields, globals):
function _process_class (line 807) | def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen):
function dataclass (line 996) | def dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False,
function fields (line 1022) | def fields(class_or_instance):
function _is_dataclass_instance (line 1040) | def _is_dataclass_instance(obj):
function is_dataclass (line 1045) | def is_dataclass(obj):
function asdict (line 1052) | def asdict(obj, *, dict_factory=dict):
function _asdict_inner (line 1076) | def _asdict_inner(obj, dict_factory):
function astuple (line 1117) | def astuple(obj, *, tuple_factory=tuple):
function _astuple_inner (line 1141) | def _astuple_inner(obj, tuple_factory):
function make_dataclass (line 1168) | def make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=T...
function replace (line 1234) | def replace(*args, **changes):
FILE: rd/usr/lib/python3.8/datetime.py
function _cmp (line 11) | def _cmp(x, y):
function _is_leap (line 37) | def _is_leap(year):
function _days_before_year (line 41) | def _days_before_year(year):
function _days_in_month (line 46) | def _days_in_month(year, month):
function _days_before_month (line 53) | def _days_before_month(year, month):
function _ymd2ord (line 58) | def _ymd2ord(year, month, day):
function _ord2ymd (line 83) | def _ord2ymd(n):
function _build_struct_time (line 151) | def _build_struct_time(y, m, d, hh, mm, ss, dstflag):
function _format_time (line 156) | def _format_time(hh, mm, ss, us, timespec='auto'):
function _format_offset (line 177) | def _format_offset(off):
function _wrap_strftime (line 196) | def _wrap_strftime(object, format, timetuple):
function _parse_isoformat_date (line 260) | def _parse_isoformat_date(dtstr):
function _parse_hh_mm_ss_ff (line 276) | def _parse_hh_mm_ss_ff(tstr):
function _parse_isoformat_time (line 315) | def _parse_isoformat_time(tstr):
function _check_tzname (line 356) | def _check_tzname(name):
function _check_utc_offset (line 367) | def _check_utc_offset(name, offset):
function _check_int_field (line 379) | def _check_int_field(value):
function _check_date_fields (line 411) | def _check_date_fields(year, month, day):
function _check_time_fields (line 424) | def _check_time_fields(hour, minute, second, microsecond, fold):
function _check_tzinfo_arg (line 441) | def _check_tzinfo_arg(tz):
function _cmperror (line 445) | def _cmperror(x, y):
function _divide_and_round (line 449) | def _divide_and_round(a, b):
class timedelta (line 469) | class timedelta:
method __new__ (line 488) | def __new__(cls, days=0, seconds=0, microseconds=0,
method __repr__ (line 589) | def __repr__(self):
method __str__ (line 603) | def __str__(self):
method total_seconds (line 615) | def total_seconds(self):
method days (line 622) | def days(self):
method seconds (line 627) | def seconds(self):
method microseconds (line 632) | def microseconds(self):
method __add__ (line 636) | def __add__(self, other):
method __sub__ (line 647) | def __sub__(self, other):
method __rsub__ (line 656) | def __rsub__(self, other):
method __neg__ (line 661) | def __neg__(self):
method __pos__ (line 668) | def __pos__(self):
method __abs__ (line 671) | def __abs__(self):
method __mul__ (line 677) | def __mul__(self, other):
method _to_microseconds (line 692) | def _to_microseconds(self):
method __floordiv__ (line 696) | def __floordiv__(self, other):
method __truediv__ (line 705) | def __truediv__(self, other):
method __mod__ (line 717) | def __mod__(self, other):
method __divmod__ (line 723) | def __divmod__(self, other):
method __eq__ (line 732) | def __eq__(self, other):
method __le__ (line 738) | def __le__(self, other):
method __lt__ (line 744) | def __lt__(self, other):
method __ge__ (line 750) | def __ge__(self, other):
method __gt__ (line 756) | def __gt__(self, other):
method _cmp (line 762) | def _cmp(self, other):
method __hash__ (line 766) | def __hash__(self):
method __bool__ (line 771) | def __bool__(self):
method _getstate (line 778) | def _getstate(self):
method __reduce__ (line 781) | def __reduce__(self):
class date (line 789) | class date:
method __new__ (line 819) | def __new__(cls, year, month=None, day=None):
method fromtimestamp (line 854) | def fromtimestamp(cls, t):
method today (line 860) | def today(cls):
method fromordinal (line 866) | def fromordinal(cls, n):
method fromisoformat (line 876) | def fromisoformat(cls, date_string):
method fromisocalendar (line 888) | def fromisocalendar(cls, year, week, day):
method __repr__ (line 924) | def __repr__(self):
method ctime (line 946) | def ctime(self):
method strftime (line 954) | def strftime(self, fmt):
method __format__ (line 958) | def __format__(self, fmt):
method isoformat (line 965) | def isoformat(self):
method year (line 980) | def year(self):
method month (line 985) | def month(self):
method day (line 990) | def day(self):
method timetuple (line 997) | def timetuple(self):
method toordinal (line 1002) | def toordinal(self):
method replace (line 1010) | def replace(self, year=None, month=None, day=None):
method __eq__ (line 1022) | def __eq__(self, other):
method __le__ (line 1027) | def __le__(self, other):
method __lt__ (line 1032) | def __lt__(self, other):
method __ge__ (line 1037) | def __ge__(self, other):
method __gt__ (line 1042) | def __gt__(self, other):
method _cmp (line 1047) | def _cmp(self, other):
method __hash__ (line 1053) | def __hash__(self):
method __add__ (line 1061) | def __add__(self, other):
method __sub__ (line 1072) | def __sub__(self, other):
method weekday (line 1082) | def weekday(self):
method isoweekday (line 1088) | def isoweekday(self):
method isocalendar (line 1093) | def isocalendar(self):
method _getstate (line 1123) | def _getstate(self):
method __setstate (line 1127) | def __setstate(self, string):
method __reduce__ (line 1131) | def __reduce__(self):
class tzinfo (line 1141) | class tzinfo:
method tzname (line 1148) | def tzname(self, dt):
method utcoffset (line 1152) | def utcoffset(self, dt):
method dst (line 1156) | def dst(self, dt):
method fromutc (line 1164) | def fromutc(self, dt):
method __reduce__ (line 1193) | def __reduce__(self):
class time (line 1211) | class time:
method __new__ (line 1236) | def __new__(cls, hour=0, minute=0, second=0, microsecond=0, tzinfo=Non...
method hour (line 1277) | def hour(self):
method minute (line 1282) | def minute(self):
method second (line 1287) | def second(self):
method microsecond (line 1292) | def microsecond(self):
method tzinfo (line 1297) | def tzinfo(self):
method fold (line 1302) | def fold(self):
method __eq__ (line 1309) | def __eq__(self, other):
method __le__ (line 1315) | def __le__(self, other):
method __lt__ (line 1321) | def __lt__(self, other):
method __ge__ (line 1327) | def __ge__(self, other):
method __gt__ (line 1333) | def __gt__(self, other):
method _cmp (line 1339) | def _cmp(self, other, allow_mixed=False):
method __hash__ (line 1367) | def __hash__(self):
method _tzstr (line 1390) | def _tzstr(self):
method __repr__ (line 1395) | def __repr__(self):
method isoformat (line 1414) | def isoformat(self, timespec='auto'):
method fromisoformat (line 1433) | def fromisoformat(cls, time_string):
method strftime (line 1444) | def strftime(self, fmt):
method __format__ (line 1455) | def __format__(self, fmt):
method utcoffset (line 1464) | def utcoffset(self):
method tzname (line 1473) | def tzname(self):
method dst (line 1486) | def dst(self):
method replace (line 1501) | def replace(self, hour=None, minute=None, second=None, microsecond=None,
method _getstate (line 1520) | def _getstate(self, protocol=3):
method __setstate (line 1533) | def __setstate(self, string, tzinfo):
method __reduce_ex__ (line 1546) | def __reduce_ex__(self, protocol):
method __reduce__ (line 1549) | def __reduce__(self):
class datetime (line 1558) | class datetime(date):
method __new__ (line 1566) | def __new__(cls, year, month=None, day=None, hour=0, minute=0, second=0,
method hour (line 1603) | def hour(self):
method minute (line 1608) | def minute(self):
method second (line 1613) | def second(self):
method microsecond (line 1618) | def microsecond(self):
method tzinfo (line 1623) | def tzinfo(self):
method fold (line 1628) | def fold(self):
method _fromtimestamp (line 1632) | def _fromtimestamp(cls, t, utc, tz):
method fromtimestamp (line 1676) | def fromtimestamp(cls, t, tz=None):
method utcfromtimestamp (line 1686) | def utcfromtimestamp(cls, t):
method now (line 1691) | def now(cls, tz=None):
method utcnow (line 1697) | def utcnow(cls):
method combine (line 1703) | def combine(cls, date, time, tzinfo=True):
method fromisoformat (line 1716) | def fromisoformat(cls, date_string):
method timetuple (line 1740) | def timetuple(self):
method _mktime (line 1753) | def _mktime(self):
method timestamp (line 1788) | def timestamp(self):
method utctimetuple (line 1796) | def utctimetuple(self):
method date (line 1805) | def date(self):
method time (line 1809) | def time(self):
method timetz (line 1813) | def timetz(self):
method replace (line 1818) | def replace(self, year=None, month=None, day=None, hour=None,
method _local_timezone (line 1843) | def _local_timezone(self):
method astimezone (line 1855) | def astimezone(self, tz=None):
method ctime (line 1882) | def ctime(self):
method isoformat (line 1892) | def isoformat(self, sep='T', timespec='auto'):
method __repr__ (line 1918) | def __repr__(self):
method __str__ (line 1937) | def __str__(self):
method strptime (line 1942) | def strptime(cls, date_string, format):
method utcoffset (line 1947) | def utcoffset(self):
method tzname (line 1956) | def tzname(self):
method dst (line 1969) | def dst(self):
method __eq__ (line 1986) | def __eq__(self, other):
method __le__ (line 1994) | def __le__(self, other):
method __lt__ (line 2002) | def __lt__(self, other):
method __ge__ (line 2010) | def __ge__(self, other):
method __gt__ (line 2018) | def __gt__(self, other):
method _cmp (line 2026) | def _cmp(self, other, allow_mixed=False):
method __add__ (line 2063) | def __add__(self, other):
method __sub__ (line 2084) | def __sub__(self, other):
method __hash__ (line 2108) | def __hash__(self):
method _getstate (line 2125) | def _getstate(self, protocol=3):
method __setstate (line 2140) | def __setstate(self, string, tzinfo):
method __reduce_ex__ (line 2155) | def __reduce_ex__(self, protocol):
method __reduce__ (line 2158) | def __reduce__(self):
function _isoweek1monday (line 2167) | def _isoweek1monday(year):
class timezone (line 2179) | class timezone(tzinfo):
method __new__ (line 2184) | def __new__(cls, offset, name=_Omitted):
method _create (line 2200) | def _create(cls, offset, name=None):
method __getinitargs__ (line 2206) | def __getinitargs__(self):
method __eq__ (line 2212) | def __eq__(self, other):
method __hash__ (line 2217) | def __hash__(self):
method __repr__ (line 2220) | def __repr__(self):
method __str__ (line 2240) | def __str__(self):
method utcoffset (line 2243) | def utcoffset(self, dt):
method tzname (line 2249) | def tzname(self, dt):
method dst (line 2257) | def dst(self, dt):
method fromutc (line 2263) | def fromutc(self, dt):
method _name_from_offset (line 2276) | def _name_from_offset(delta):
FILE: rd/usr/lib/python3.8/dbm/__init__.py
class error (line 38) | class error(Exception):
function open (line 53) | def open(file, flag='r', mode=0o666):
function whichdb (line 98) | def whichdb(filename):
FILE: rd/usr/lib/python3.8/dbm/dumb.py
class _Database (line 35) | class _Database(collections.abc.MutableMapping):
method __init__ (line 48) | def __init__(self, filebasename, mode, flag='c'):
method _create (line 73) | def _create(self, flag):
method _update (line 92) | def _update(self, flag):
method _commit (line 112) | def _commit(self):
method _verify_open (line 139) | def _verify_open(self):
method __getitem__ (line 143) | def __getitem__(self, key):
method _addval (line 157) | def _addval(self, val):
method _setval (line 171) | def _setval(self, pos, val):
method _addkey (line 180) | def _addkey(self, key, pos_and_siz_pair):
method __setitem__ (line 186) | def __setitem__(self, key, val):
method __delitem__ (line 223) | def __delitem__(self, key):
method keys (line 238) | def keys(self):
method items (line 244) | def items(self):
method __contains__ (line 248) | def __contains__(self, key):
method iterkeys (line 259) | def iterkeys(self):
method __len__ (line 266) | def __len__(self):
method close (line 272) | def close(self):
method _chmod (line 280) | def _chmod(self, file):
method __enter__ (line 283) | def __enter__(self):
method __exit__ (line 286) | def __exit__(self, *args):
function open (line 290) | def open(file, flag='c', mode=0o666):
FILE: rd/usr/lib/python3.8/dis.py
function _try_compile (line 30) | def _try_compile(source, name):
function dis (line 43) | def dis(x=None, *, file=None, depth=None):
function distb (line 88) | def distb(tb=None, *, file=None):
function pretty_flags (line 114) | def pretty_flags(flags):
function _get_code_object (line 128) | def _get_code_object(x):
function code_info (line 151) | def code_info(x):
function _format_code_info (line 155) | def _format_code_info(co):
function show_code (line 187) | def show_code(co, *, file=None):
class Instruction (line 209) | class Instruction(_Instruction):
method _disassemble (line 223) | def _disassemble(self, lineno_width=3, mark_as_current=False, offset_w...
function get_instructions (line 261) | def get_instructions(x, *, first_line=None):
function _get_const_info (line 283) | def _get_const_info(const_index, const_list):
function _get_name_info (line 295) | def _get_name_info(name_index, name_list):
function _get_instructions_bytes (line 311) | def _get_instructions_bytes(code, varnames=None, names=None, constants=N...
function disassemble (line 365) | def disassemble(co, lasti=-1, *, file=None):
function _disassemble_recursive (line 372) | def _disassemble_recursive(co, *, file=None, depth=None):
function _disassemble_bytes (line 383) | def _disassemble_bytes(code, lasti=-1, varnames=None, names=None,
function _disassemble_str (line 413) | def _disassemble_str(source, **kwargs):
function _unpack_opargs (line 419) | def _unpack_opargs(code):
function findlabels (line 430) | def findlabels(code):
function findlinestarts (line 449) | def findlinestarts(code):
class Bytecode (line 479) | class Bytecode:
method __init__ (line 487) | def __init__(self, x, *, first_line=None, current_offset=None):
method __iter__ (line 500) | def __iter__(self):
method __repr__ (line 507) | def __repr__(self):
method from_traceback (line 512) | def from_traceback(cls, tb):
method info (line 518) | def info(self):
method dis (line 522) | def dis(self):
function _test (line 540) | def _test():
FILE: rd/usr/lib/python3.8/encodings/__init__.py
class CodecRegistryError (line 40) | class CodecRegistryError(LookupError, SystemError):
function normalize_encoding (line 43) | def normalize_encoding(encoding):
function search_function (line 70) | def search_function(encoding):
function _alias_mbcs (line 158) | def _alias_mbcs(encoding):
FILE: rd/usr/lib/python3.8/encodings/ascii.py
class Codec (line 13) | class Codec(codecs.Codec):
class IncrementalEncoder (line 20) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 21) | def encode(self, input, final=False):
class IncrementalDecoder (line 24) | class IncrementalDecoder(codecs.IncrementalDecoder):
method decode (line 25) | def decode(self, input, final=False):
class StreamWriter (line 28) | class StreamWriter(Codec,codecs.StreamWriter):
class StreamReader (line 31) | class StreamReader(Codec,codecs.StreamReader):
class StreamConverter (line 34) | class StreamConverter(StreamWriter,StreamReader):
function getregentry (line 41) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/base64_codec.py
function base64_encode (line 13) | def base64_encode(input, errors='strict'):
function base64_decode (line 17) | def base64_decode(input, errors='strict'):
class Codec (line 21) | class Codec(codecs.Codec):
method encode (line 22) | def encode(self, input, errors='strict'):
method decode (line 24) | def decode(self, input, errors='strict'):
class IncrementalEncoder (line 27) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 28) | def encode(self, input, final=False):
class IncrementalDecoder (line 32) | class IncrementalDecoder(codecs.IncrementalDecoder):
method decode (line 33) | def decode(self, input, final=False):
class StreamWriter (line 37) | class StreamWriter(Codec, codecs.StreamWriter):
class StreamReader (line 40) | class StreamReader(Codec, codecs.StreamReader):
function getregentry (line 45) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/big5.py
class Codec (line 12) | class Codec(codecs.Codec):
class IncrementalEncoder (line 16) | class IncrementalEncoder(mbc.MultibyteIncrementalEncoder,
class IncrementalDecoder (line 20) | class IncrementalDecoder(mbc.MultibyteIncrementalDecoder,
class StreamReader (line 24) | class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader):
class StreamWriter (line 27) | class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter):
function getregentry (line 30) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/bz2_codec.py
function bz2_encode (line 15) | def bz2_encode(input, errors='strict'):
function bz2_decode (line 19) | def bz2_decode(input, errors='strict'):
class Codec (line 23) | class Codec(codecs.Codec):
method encode (line 24) | def encode(self, input, errors='strict'):
method decode (line 26) | def decode(self, input, errors='strict'):
class IncrementalEncoder (line 29) | class IncrementalEncoder(codecs.IncrementalEncoder):
method __init__ (line 30) | def __init__(self, errors='strict'):
method encode (line 35) | def encode(self, input, final=False):
method reset (line 42) | def reset(self):
class IncrementalDecoder (line 45) | class IncrementalDecoder(codecs.IncrementalDecoder):
method __init__ (line 46) | def __init__(self, errors='strict'):
method decode (line 51) | def decode(self, input, final=False):
method reset (line 57) | def reset(self):
class StreamWriter (line 60) | class StreamWriter(Codec, codecs.StreamWriter):
class StreamReader (line 63) | class StreamReader(Codec, codecs.StreamReader):
function getregentry (line 68) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/charmap.py
class Codec (line 17) | class Codec(codecs.Codec):
class IncrementalEncoder (line 24) | class IncrementalEncoder(codecs.IncrementalEncoder):
method __init__ (line 25) | def __init__(self, errors='strict', mapping=None):
method encode (line 29) | def encode(self, input, final=False):
class IncrementalDecoder (line 32) | class IncrementalDecoder(codecs.IncrementalDecoder):
method __init__ (line 33) | def __init__(self, errors='strict', mapping=None):
method decode (line 37) | def decode(self, input, final=False):
class StreamWriter (line 40) | class StreamWriter(Codec,codecs.StreamWriter):
method __init__ (line 42) | def __init__(self,stream,errors='strict',mapping=None):
method encode (line 46) | def encode(self,input,errors='strict'):
class StreamReader (line 49) | class StreamReader(Codec,codecs.StreamReader):
method __init__ (line 51) | def __init__(self,stream,errors='strict',mapping=None):
method decode (line 55) | def decode(self,input,errors='strict'):
function getregentry (line 60) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/gbk.py
class Codec (line 12) | class Codec(codecs.Codec):
class IncrementalEncoder (line 16) | class IncrementalEncoder(mbc.MultibyteIncrementalEncoder,
class IncrementalDecoder (line 20) | class IncrementalDecoder(mbc.MultibyteIncrementalDecoder,
class StreamReader (line 24) | class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader):
class StreamWriter (line 27) | class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter):
function getregentry (line 30) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/hex_codec.py
function hex_encode (line 13) | def hex_encode(input, errors='strict'):
function hex_decode (line 17) | def hex_decode(input, errors='strict'):
class Codec (line 21) | class Codec(codecs.Codec):
method encode (line 22) | def encode(self, input, errors='strict'):
method decode (line 24) | def decode(self, input, errors='strict'):
class IncrementalEncoder (line 27) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 28) | def encode(self, input, final=False):
class IncrementalDecoder (line 32) | class IncrementalDecoder(codecs.IncrementalDecoder):
method decode (line 33) | def decode(self, input, final=False):
class StreamWriter (line 37) | class StreamWriter(Codec, codecs.StreamWriter):
class StreamReader (line 40) | class StreamReader(Codec, codecs.StreamReader):
function getregentry (line 45) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/hz.py
class Codec (line 12) | class Codec(codecs.Codec):
class IncrementalEncoder (line 16) | class IncrementalEncoder(mbc.MultibyteIncrementalEncoder,
class IncrementalDecoder (line 20) | class IncrementalDecoder(mbc.MultibyteIncrementalDecoder,
class StreamReader (line 24) | class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader):
class StreamWriter (line 27) | class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter):
function getregentry (line 30) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/idna.py
function nameprep (line 14) | def nameprep(label):
function ToASCII (line 62) | def ToASCII(label):
function ToUnicode (line 105) | def ToUnicode(label):
class Codec (line 146) | class Codec(codecs.Codec):
method encode (line 147) | def encode(self, input, errors='strict'):
method decode (line 184) | def decode(self, input, errors='strict'):
class IncrementalEncoder (line 218) | class IncrementalEncoder(codecs.BufferedIncrementalEncoder):
method _buffer_encode (line 219) | def _buffer_encode(self, input, errors, final):
class IncrementalDecoder (line 253) | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
method _buffer_decode (line 254) | def _buffer_decode(self, input, errors, final):
class StreamWriter (line 292) | class StreamWriter(Codec,codecs.StreamWriter):
class StreamReader (line 295) | class StreamReader(Codec,codecs.StreamReader):
function getregentry (line 300) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/iso8859_1.py
class Codec (line 9) | class Codec(codecs.Codec):
method encode (line 11) | def encode(self,input,errors='strict'):
method decode (line 14) | def decode(self,input,errors='strict'):
class IncrementalEncoder (line 17) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 18) | def encode(self, input, final=False):
class IncrementalDecoder (line 21) | class IncrementalDecoder(codecs.IncrementalDecoder):
method decode (line 22) | def decode(self, input, final=False):
class StreamWriter (line 25) | class StreamWriter(Codec,codecs.StreamWriter):
class StreamReader (line 28) | class StreamReader(Codec,codecs.StreamReader):
function getregentry (line 33) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/latin_1.py
class Codec (line 13) | class Codec(codecs.Codec):
class IncrementalEncoder (line 20) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 21) | def encode(self, input, final=False):
class IncrementalDecoder (line 24) | class IncrementalDecoder(codecs.IncrementalDecoder):
method decode (line 25) | def decode(self, input, final=False):
class StreamWriter (line 28) | class StreamWriter(Codec,codecs.StreamWriter):
class StreamReader (line 31) | class StreamReader(Codec,codecs.StreamReader):
class StreamConverter (line 34) | class StreamConverter(StreamWriter,StreamReader):
function getregentry (line 41) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/mbcs.py
function decode (line 20) | def decode(input, errors='strict'):
class IncrementalEncoder (line 23) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 24) | def encode(self, input, final=False):
class IncrementalDecoder (line 27) | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
class StreamWriter (line 30) | class StreamWriter(codecs.StreamWriter):
class StreamReader (line 33) | class StreamReader(codecs.StreamReader):
function getregentry (line 38) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/oem.py
function decode (line 14) | def decode(input, errors='strict'):
class IncrementalEncoder (line 17) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 18) | def encode(self, input, final=False):
class IncrementalDecoder (line 21) | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
class StreamWriter (line 24) | class StreamWriter(codecs.StreamWriter):
class StreamReader (line 27) | class StreamReader(codecs.StreamReader):
function getregentry (line 32) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/quopri_codec.py
function quopri_encode (line 10) | def quopri_encode(input, errors='strict'):
function quopri_decode (line 17) | def quopri_decode(input, errors='strict'):
class Codec (line 24) | class Codec(codecs.Codec):
method encode (line 25) | def encode(self, input, errors='strict'):
method decode (line 27) | def decode(self, input, errors='strict'):
class IncrementalEncoder (line 30) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 31) | def encode(self, input, final=False):
class IncrementalDecoder (line 34) | class IncrementalDecoder(codecs.IncrementalDecoder):
method decode (line 35) | def decode(self, input, final=False):
class StreamWriter (line 38) | class StreamWriter(Codec, codecs.StreamWriter):
class StreamReader (line 41) | class StreamReader(Codec, codecs.StreamReader):
function getregentry (line 46) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/raw_unicode_escape.py
class Codec (line 13) | class Codec(codecs.Codec):
class IncrementalEncoder (line 20) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 21) | def encode(self, input, final=False):
class IncrementalDecoder (line 24) | class IncrementalDecoder(codecs.IncrementalDecoder):
method decode (line 25) | def decode(self, input, final=False):
class StreamWriter (line 28) | class StreamWriter(Codec,codecs.StreamWriter):
class StreamReader (line 31) | class StreamReader(Codec,codecs.StreamReader):
function getregentry (line 36) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/rot_13.py
class Codec (line 13) | class Codec(codecs.Codec):
method encode (line 14) | def encode(self, input, errors='strict'):
method decode (line 17) | def decode(self, input, errors='strict'):
class IncrementalEncoder (line 20) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 21) | def encode(self, input, final=False):
class IncrementalDecoder (line 24) | class IncrementalDecoder(codecs.IncrementalDecoder):
method decode (line 25) | def decode(self, input, final=False):
class StreamWriter (line 28) | class StreamWriter(Codec,codecs.StreamWriter):
class StreamReader (line 31) | class StreamReader(Codec,codecs.StreamReader):
function getregentry (line 36) | def getregentry():
function rot13 (line 108) | def rot13(infile, outfile):
FILE: rd/usr/lib/python3.8/encodings/undefined.py
class Codec (line 16) | class Codec(codecs.Codec):
method encode (line 18) | def encode(self,input,errors='strict'):
method decode (line 21) | def decode(self,input,errors='strict'):
class IncrementalEncoder (line 24) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 25) | def encode(self, input, final=False):
class IncrementalDecoder (line 28) | class IncrementalDecoder(codecs.IncrementalDecoder):
method decode (line 29) | def decode(self, input, final=False):
class StreamWriter (line 32) | class StreamWriter(Codec,codecs.StreamWriter):
class StreamReader (line 35) | class StreamReader(Codec,codecs.StreamReader):
function getregentry (line 40) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/unicode_escape.py
class Codec (line 13) | class Codec(codecs.Codec):
class IncrementalEncoder (line 20) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 21) | def encode(self, input, final=False):
class IncrementalDecoder (line 24) | class IncrementalDecoder(codecs.IncrementalDecoder):
method decode (line 25) | def decode(self, input, final=False):
class StreamWriter (line 28) | class StreamWriter(Codec,codecs.StreamWriter):
class StreamReader (line 31) | class StreamReader(Codec,codecs.StreamReader):
function getregentry (line 36) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/utf_16.py
function decode (line 15) | def decode(input, errors='strict'):
class IncrementalEncoder (line 18) | class IncrementalEncoder(codecs.IncrementalEncoder):
method __init__ (line 19) | def __init__(self, errors='strict'):
method encode (line 23) | def encode(self, input, final=False):
method reset (line 33) | def reset(self):
method getstate (line 37) | def getstate(self):
method setstate (line 44) | def setstate(self, state):
class IncrementalDecoder (line 53) | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
method __init__ (line 54) | def __init__(self, errors='strict'):
method _buffer_decode (line 58) | def _buffer_decode(self, input, errors, final):
method reset (line 71) | def reset(self):
method getstate (line 75) | def getstate(self):
method setstate (line 89) | def setstate(self, state):
class StreamWriter (line 104) | class StreamWriter(codecs.StreamWriter):
method __init__ (line 105) | def __init__(self, stream, errors='strict'):
method reset (line 109) | def reset(self):
method encode (line 113) | def encode(self, input, errors='strict'):
class StreamReader (line 124) | class StreamReader(codecs.StreamReader):
method reset (line 126) | def reset(self):
method decode (line 133) | def decode(self, input, errors='strict'):
function getregentry (line 146) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/utf_16_be.py
function decode (line 15) | def decode(input, errors='strict'):
class IncrementalEncoder (line 18) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 19) | def encode(self, input, final=False):
class IncrementalDecoder (line 22) | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
class StreamWriter (line 25) | class StreamWriter(codecs.StreamWriter):
class StreamReader (line 28) | class StreamReader(codecs.StreamReader):
function getregentry (line 33) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/utf_16_le.py
function decode (line 15) | def decode(input, errors='strict'):
class IncrementalEncoder (line 18) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 19) | def encode(self, input, final=False):
class IncrementalDecoder (line 22) | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
class StreamWriter (line 25) | class StreamWriter(codecs.StreamWriter):
class StreamReader (line 28) | class StreamReader(codecs.StreamReader):
function getregentry (line 33) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/utf_32.py
function decode (line 10) | def decode(input, errors='strict'):
class IncrementalEncoder (line 13) | class IncrementalEncoder(codecs.IncrementalEncoder):
method __init__ (line 14) | def __init__(self, errors='strict'):
method encode (line 18) | def encode(self, input, final=False):
method reset (line 28) | def reset(self):
method getstate (line 32) | def getstate(self):
method setstate (line 39) | def setstate(self, state):
class IncrementalDecoder (line 48) | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
method __init__ (line 49) | def __init__(self, errors='strict'):
method _buffer_decode (line 53) | def _buffer_decode(self, input, errors, final):
method reset (line 66) | def reset(self):
method getstate (line 70) | def getstate(self):
method setstate (line 84) | def setstate(self, state):
class StreamWriter (line 99) | class StreamWriter(codecs.StreamWriter):
method __init__ (line 100) | def __init__(self, stream, errors='strict'):
method reset (line 104) | def reset(self):
method encode (line 108) | def encode(self, input, errors='strict'):
class StreamReader (line 119) | class StreamReader(codecs.StreamReader):
method reset (line 121) | def reset(self):
method decode (line 128) | def decode(self, input, errors='strict'):
function getregentry (line 141) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/utf_32_be.py
function decode (line 10) | def decode(input, errors='strict'):
class IncrementalEncoder (line 13) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 14) | def encode(self, input, final=False):
class IncrementalDecoder (line 17) | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
class StreamWriter (line 20) | class StreamWriter(codecs.StreamWriter):
class StreamReader (line 23) | class StreamReader(codecs.StreamReader):
function getregentry (line 28) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/utf_32_le.py
function decode (line 10) | def decode(input, errors='strict'):
class IncrementalEncoder (line 13) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 14) | def encode(self, input, final=False):
class IncrementalDecoder (line 17) | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
class StreamWriter (line 20) | class StreamWriter(codecs.StreamWriter):
class StreamReader (line 23) | class StreamReader(codecs.StreamReader):
function getregentry (line 28) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/utf_7.py
function decode (line 11) | def decode(input, errors='strict'):
class IncrementalEncoder (line 14) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 15) | def encode(self, input, final=False):
class IncrementalDecoder (line 18) | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
class StreamWriter (line 21) | class StreamWriter(codecs.StreamWriter):
class StreamReader (line 24) | class StreamReader(codecs.StreamReader):
function getregentry (line 29) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/utf_8.py
function decode (line 15) | def decode(input, errors='strict'):
class IncrementalEncoder (line 18) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 19) | def encode(self, input, final=False):
class IncrementalDecoder (line 22) | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
class StreamWriter (line 25) | class StreamWriter(codecs.StreamWriter):
class StreamReader (line 28) | class StreamReader(codecs.StreamReader):
function getregentry (line 33) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/utf_8_sig.py
function encode (line 14) | def encode(input, errors='strict'):
function decode (line 18) | def decode(input, errors='strict'):
class IncrementalEncoder (line 26) | class IncrementalEncoder(codecs.IncrementalEncoder):
method __init__ (line 27) | def __init__(self, errors='strict'):
method encode (line 31) | def encode(self, input, final=False):
method reset (line 39) | def reset(self):
method getstate (line 43) | def getstate(self):
method setstate (line 46) | def setstate(self, state):
class IncrementalDecoder (line 49) | class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
method __init__ (line 50) | def __init__(self, errors='strict'):
method _buffer_decode (line 54) | def _buffer_decode(self, input, errors, final):
method reset (line 71) | def reset(self):
method getstate (line 75) | def getstate(self):
method setstate (line 80) | def setstate(self, state):
class StreamWriter (line 85) | class StreamWriter(codecs.StreamWriter):
method reset (line 86) | def reset(self):
method encode (line 93) | def encode(self, input, errors='strict'):
class StreamReader (line 97) | class StreamReader(codecs.StreamReader):
method reset (line 98) | def reset(self):
method decode (line 105) | def decode(self, input, errors='strict'):
function getregentry (line 121) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/uu_codec.py
function uu_encode (line 16) | def uu_encode(input, errors='strict', filename='<data>', mode=0o666):
function uu_decode (line 37) | def uu_decode(input, errors='strict'):
class Codec (line 70) | class Codec(codecs.Codec):
method encode (line 71) | def encode(self, input, errors='strict'):
method decode (line 74) | def decode(self, input, errors='strict'):
class IncrementalEncoder (line 77) | class IncrementalEncoder(codecs.IncrementalEncoder):
method encode (line 78) | def encode(self, input, final=False):
class IncrementalDecoder (line 81) | class IncrementalDecoder(codecs.IncrementalDecoder):
method decode (line 82) | def decode(self, input, final=False):
class StreamWriter (line 85) | class StreamWriter(Codec, codecs.StreamWriter):
class StreamReader (line 88) | class StreamReader(Codec, codecs.StreamReader):
function getregentry (line 93) | def getregentry():
FILE: rd/usr/lib/python3.8/encodings/zlib_codec.py
function zlib_encode (line 13) | def zlib_encode(input, errors='strict'):
function zlib_decode (line 17) | def zlib_decode(input, errors='strict'):
class Codec (line 21) | class Codec(codecs.Codec):
method encode (line 22) | def encode(self, input, errors='strict'):
method decode (line 24) | def decode(self, input, errors='strict'):
class IncrementalEncoder (line 27) | class IncrementalEncoder(codecs.IncrementalEncoder):
method __init__ (line 28) | def __init__(self, errors='strict'):
method encode (line 33) | def encode(self, input, final=False):
method reset (line 40) | def reset(self):
class IncrementalDecoder (line 43) | class IncrementalDecoder(codecs.IncrementalDecoder):
method __init__ (line 44) | def __init__(self, errors='strict'):
method decode (line 49) | def decode(self, input, final=False):
method reset (line 56) | def reset(self):
class StreamWriter (line 59) | class StreamWriter(Codec, codecs.StreamWriter):
class StreamReader (line 62) | class StreamReader(Codec, codecs.StreamReader):
function getregentry (line 67) | def getregentry():
FILE: rd/usr/lib/python3.8/enum.py
function _is_descriptor (line 12) | def _is_descriptor(obj):
function _is_dunder (line 20) | def _is_dunder(name):
function _is_sunder (line 28) | def _is_sunder(name):
function _make_class_unpicklable (line 36) | def _make_class_unpicklable(cls):
class auto (line 44) | class auto:
class _EnumDict (line 51) | class _EnumDict(dict):
method __init__ (line 58) | def __init__(self):
method __setitem__ (line 65) | def __setitem__(self, key, value):
class EnumMeta (line 122) | class EnumMeta(type):
method __prepare__ (line 125) | def __prepare__(metacls, cls, bases):
method __new__ (line 134) | def __new__(metacls, cls, bases, classdict):
method __bool__ (line 277) | def __bool__(self):
method __call__ (line 283) | def __call__(cls, value, names=None, *, module=None, qualname=None, ty...
method __contains__ (line 313) | def __contains__(cls, member):
method __delattr__ (line 320) | def __delattr__(cls, attr):
method __dir__ (line 328) | def __dir__(self):
method __getattr__ (line 332) | def __getattr__(cls, name):
method __getitem__ (line 348) | def __getitem__(cls, name):
method __iter__ (line 351) | def __iter__(cls):
method __len__ (line 354) | def __len__(cls):
method __members__ (line 358) | def __members__(cls):
method __repr__ (line 367) | def __repr__(cls):
method __reversed__ (line 370) | def __reversed__(cls):
method __setattr__ (line 373) | def __setattr__(cls, name, value):
method _create_ (line 386) | def _create_(cls, class_name, names, *, module=None, qualname=None, ty...
method _convert_ (line 439) | def _convert_(cls, name, module, filter, source=None):
method _convert (line 472) | def _convert(cls, *args, **kwargs):
method _get_mixins_ (line 479) | def _get_mixins_(bases):
method _find_new_ (line 511) | def _find_new_(classdict, member_type, first_enum):
class Enum (line 556) | class Enum(metaclass=EnumMeta):
method __new__ (line 562) | def __new__(cls, value):
method _generate_next_value_ (line 602) | def _generate_next_value_(name, start, count, last_values):
method _missing_ (line 612) | def _missing_(cls, value):
method __repr__ (line 615) | def __repr__(self):
method __str__ (line 619) | def __str__(self):
method __dir__ (line 622) | def __dir__(self):
method __format__ (line 631) | def __format__(self, format_spec):
method __hash__ (line 646) | def __hash__(self):
method __reduce_ex__ (line 649) | def __reduce_ex__(self, proto):
method name (line 660) | def name(self):
method value (line 665) | def value(self):
class IntEnum (line 670) | class IntEnum(int, Enum):
function _reduce_ex_by_name (line 674) | def _reduce_ex_by_name(self, proto):
class Flag (line 677) | class Flag(Enum):
method _generate_next_value_ (line 680) | def _generate_next_value_(name, start, count, last_values):
method _missing_ (line 700) | def _missing_(cls, value):
method _create_pseudo_member_ (line 710) | def _create_pseudo_member_(cls, value):
method __contains__ (line 729) | def __contains__(self, other):
method __repr__ (line 736) | def __repr__(self):
method __str__ (line 747) | def __str__(self):
method __bool__ (line 760) | def __bool__(self):
method __or__ (line 763) | def __or__(self, other):
method __and__ (line 768) | def __and__(self, other):
method __xor__ (line 773) | def __xor__(self, other):
method __invert__ (line 778) | def __invert__(self):
class IntFlag (line 787) | class IntFlag(int, Flag):
method _missing_ (line 791) | def _missing_(cls, value):
method _create_pseudo_member_ (line 798) | def _create_pseudo_member_(cls, value):
method __or__ (line 827) | def __or__(self, other):
method __and__ (line 833) | def __and__(self, other):
method __xor__ (line 838) | def __xor__(self, other):
method __invert__ (line 847) | def __invert__(self):
function _high_bit (line 852) | def _high_bit(value):
function unique (line 856) | def unique(enumeration):
function _decompose (line 869) | def _decompose(flag, value):
function _power_of_two (line 904) | def _power_of_two(value):
FILE: rd/usr/lib/python3.8/filecmp.py
function clear_cache (line 25) | def clear_cache():
function cmp (line 29) | def cmp(f1, f2, shallow=True):
function _sig (line 68) | def _sig(st):
function _do_cmp (line 73) | def _do_cmp(f1, f2):
class dircmp (line 86) | class dircmp:
method __init__ (line 120) | def __init__(self, a, b, ignore=None, hide=None): # Initialize
method phase0 (line 132) | def phase0(self): # Compare everything except common subdirectories
method phase1 (line 140) | def phase1(self): # Compute common names
method phase2 (line 147) | def phase2(self): # Distinguish files, directories, funnies
method phase3 (line 182) | def phase3(self): # Find out differences between common files
method phase4 (line 186) | def phase4(self): # Find out differences between common subdirectories
method phase4_closure (line 196) | def phase4_closure(self): # Recursively call phase4() on subdirectories
method report (line 201) | def report(self): # Print a report on the differences between a and b
method report_partial_closure (line 226) | def report_partial_closure(self): # Print reports on self and on subdirs
method report_full_closure (line 232) | def report_full_closure(self): # Report on self and subdirs recursively
method __getattr__ (line 244) | def __getattr__(self, attr):
function cmpfiles (line 250) | def cmpfiles(a, b, common, shallow=True):
function _cmp (line 277) | def _cmp(a, b, sh, abs=abs, cmp=cmp):
function _filter (line 286) | def _filter(flist, skip):
function demo (line 292) | def demo():
FILE: rd/usr/lib/python3.8/fileinput.py
function input (line 83) | def input(files=None, inplace=False, backup="", *, mode="r", openhook=No...
function close (line 96) | def close():
function nextfile (line 104) | def nextfile():
function filename (line 118) | def filename():
function lineno (line 127) | def lineno():
function filelineno (line 137) | def filelineno():
function fileno (line 147) | def fileno():
function isfirstline (line 156) | def isfirstline():
function isstdin (line 165) | def isstdin():
class FileInput (line 174) | class FileInput:
method __init__ (line 187) | def __init__(self, files=None, inplace=False, backup="", *,
method __del__ (line 228) | def __del__(self):
method close (line 231) | def close(self):
method __enter__ (line 237) | def __enter__(self):
method __exit__ (line 240) | def __exit__(self, type, value, traceback):
method __iter__ (line 243) | def __iter__(self):
method __next__ (line 246) | def __next__(self):
method __getitem__ (line 257) | def __getitem__(self, i):
method nextfile (line 272) | def nextfile(self):
method readline (line 302) | def readline(self):
method _readline (line 313) | def _readline(self):
method filename (line 370) | def filename(self):
method lineno (line 373) | def lineno(self):
method filelineno (line 376) | def filelineno(self):
method fileno (line 379) | def fileno(self):
method isfirstline (line 388) | def isfirstline(self):
method isstdin (line 391) | def isstdin(self):
function hook_compressed (line 395) | def hook_compressed(filename, mode):
function hook_encoded (line 407) | def hook_encoded(encoding, errors=None):
function _test (line 413) | def _test():
FILE: rd/usr/lib/python3.8/fnmatch.py
function fnmatch (line 19) | def fnmatch(name, pat):
function _compile_pattern (line 39) | def _compile_pattern(pat):
function filter (line 48) | def filter(names, pat):
function fnmatchcase (line 64) | def fnmatchcase(name, pat):
function translate (line 74) | def translate(pat):
FILE: rd/usr/lib/python3.8/formatter.py
class NullFormatter (line 30) | class NullFormatter:
method __init__ (line 41) | def __init__(self, writer=None):
method end_paragraph (line 45) | def end_paragraph(self, blankline): pass
method add_line_break (line 46) | def add_line_break(self): pass
method add_hor_rule (line 47) | def add_hor_rule(self, *args, **kw): pass
method add_label_data (line 48) | def add_label_data(self, format, counter, blankline=None): pass
method add_flowing_data (line 49) | def add_flowing_data(self, data): pass
method add_literal_data (line 50) | def add_literal_data(self, data): pass
method flush_softspace (line 51) | def flush_softspace(self): pass
method push_alignment (line 52) | def push_alignment(self, align): pass
method pop_alignment (line 53) | def pop_alignment(self): pass
method push_font (line 54) | def push_font(self, x): pass
method pop_font (line 55) | def pop_font(self): pass
method push_margin (line 56) | def push_margin(self, margin): pass
method pop_margin (line 57) | def pop_margin(self): pass
method set_spacing (line 58) | def set_spacing(self, spacing): pass
method push_style (line 59) | def push_style(self, *styles): pass
method pop_style (line 60) | def pop_style(self, n=1): pass
method assert_line_data (line 61) | def assert_line_data(self, flag=1): pass
class AbstractFormatter (line 64) | class AbstractFormatter:
method __init__ (line 78) | def __init__(self, writer):
method end_paragraph (line 93) | def end_paragraph(self, blankline):
method add_line_break (line 104) | def add_line_break(self):
method add_hor_rule (line 111) | def add_hor_rule(self, *args, **kw):
method add_label_data (line 118) | def add_label_data(self, format, counter, blankline = None):
method format_counter (line 130) | def format_counter(self, format, counter):
method format_letter (line 145) | def format_letter(self, case, counter):
method format_roman (line 156) | def format_roman(self, case, counter):
method add_flowing_data (line 180) | def add_flowing_data(self, data):
method add_literal_data (line 200) | def add_literal_data(self, data):
method flush_softspace (line 209) | def flush_softspace(self):
method push_alignment (line 216) | def push_alignment(self, align):
method pop_alignment (line 224) | def pop_alignment(self):
method push_font (line 234) | def push_font(self, font):
method pop_font (line 250) | def pop_font(self):
method push_margin (line 259) | def push_margin(self, margin):
method pop_margin (line 266) | def pop_margin(self):
method set_spacing (line 276) | def set_spacing(self, spacing):
method push_style (line 280) | def push_style(self, *styles):
method pop_style (line 289) | def pop_style(self, n=1):
method assert_line_data (line 293) | def assert_line_data(self, flag=1):
class NullWriter (line 298) | class NullWriter:
method __init__ (line 306) | def __init__(self): pass
method flush (line 307) | def flush(self): pass
method new_alignment (line 308) | def new_alignment(self, align): pass
method new_font (line 309) | def new_font(self, font): pass
method new_margin (line 310) | def new_margin(self, margin, level): pass
method new_spacing (line 311) | def new_spacing(self, spacing): pass
method new_styles (line 312) | def new_styles(self, styles): pass
method send_paragraph (line 313) | def send_paragraph(self, blankline): pass
method send_line_break (line 314) | def send_line_break(self): pass
method send_hor_rule (line 315) | def send_hor_rule(self, *args, **kw): pass
method send_label_data (line 316) | def send_label_data(self, data): pass
method send_flowing_data (line 317) | def send_flowing_data(self, data): pass
method send_literal_data (line 318) | def send_literal_data(self, data): pass
class AbstractWriter (line 321) | class AbstractWriter(NullWriter):
method new_alignment (line 329) | def new_alignment(self, align):
method new_font (line 332) | def new_font(self, font):
method new_margin (line 335) | def new_margin(self, margin, level):
method new_spacing (line 338) | def new_spacing(self, spacing):
method new_styles (line 341) | def new_styles(self, styles):
method send_paragraph (line 344) | def send_paragraph(self, blankline):
method send_line_break (line 347) | def send_line_break(self):
method send_hor_rule (line 350) | def send_hor_rule(self, *args, **kw):
method send_label_data (line 353) | def send_label_data(self, data):
method send_flowing_data (line 356) | def send_flowing_data(self, data):
method send_literal_data (line 359) | def send_literal_data(self, data):
class DumbWriter (line 363) | class DumbWriter(NullWriter):
method __init__ (line 372) | def __init__(self, file=None, maxcol=72):
method reset (line 378) | def reset(self):
method send_paragraph (line 382) | def send_paragraph(self, blankline):
method send_line_break (line 387) | def send_line_break(self):
method send_hor_rule (line 392) | def send_hor_rule(self, *args, **kw):
method send_literal_data (line 399) | def send_literal_data(self, data):
method send_flowing_data (line 409) | def send_flowing_data(self, data):
function test (line 430) | def test(file = None):
FILE: rd/usr/lib/python3.8/fractions.py
function gcd (line 17) | def gcd(a, b):
function _gcd (line 32) | def _gcd(a, b):
class Fraction (line 60) | class Fraction(numbers.Rational):
method __new__ (line 84) | def __new__(cls, numerator=0, denominator=None, *, _normalize=True):
method from_float (line 194) | def from_float(cls, f):
method from_decimal (line 208) | def from_decimal(cls, dec):
method as_integer_ratio (line 219) | def as_integer_ratio(self):
method limit_denominator (line 227) | def limit_denominator(self, max_denominator=1000000):
method numerator (line 283) | def numerator(a):
method denominator (line 287) | def denominator(a):
method __repr__ (line 290) | def __repr__(self):
method __str__ (line 295) | def __str__(self):
method _operator_fallbacks (line 302) | def _operator_fallbacks(monomorphic_operator, fallback_operator):
method _add (line 409) | def _add(a, b):
method _sub (line 417) | def _sub(a, b):
method _mul (line 425) | def _mul(a, b):
method _div (line 431) | def _div(a, b):
method _floordiv (line 438) | def _floordiv(a, b):
method _divmod (line 444) | def _divmod(a, b):
method _mod (line 452) | def _mod(a, b):
method __pow__ (line 459) | def __pow__(a, b):
method __rpow__ (line 489) | def __rpow__(b, a):
method __pos__ (line 503) | def __pos__(a):
method __neg__ (line 507) | def __neg__(a):
method __abs__ (line 511) | def __abs__(a):
method __trunc__ (line 515) | def __trunc__(a):
method __floor__ (line 522) | def __floor__(a):
method __ceil__ (line 526) | def __ceil__(a):
method __round__ (line 531) | def __round__(self, ndigits=None):
method __hash__ (line 556) | def __hash__(self):
method __eq__ (line 578) | def __eq__(a, b):
method _richcmp (line 599) | def _richcmp(self, other, op):
method __lt__ (line 621) | def __lt__(a, b):
method __gt__ (line 625) | def __gt__(a, b):
method __le__ (line 629) | def __le__(a, b):
method __ge__ (line 633) | def __ge__(a, b):
method __bool__ (line 637) | def __bool__(a):
method __reduce__ (line 645) | def __reduce__(self):
method __copy__ (line 648) | def __copy__(self):
method __deepcopy__ (line 653) | def __deepcopy__(self, memo):
FILE: rd/usr/lib/python3.8/ftplib.py
class Error (line 57) | class Error(Exception): pass
class error_reply (line 58) | class error_reply(Error): pass # unexpected [123]xx reply
class error_temp (line 59) | class error_temp(Error): pass # 4xx errors
class error_perm (line 60) | class error_perm(Error): pass # 5xx errors
class error_proto (line 61) | class error_proto(Error): pass # response does not begin with [...
class FTP (line 74) | class FTP:
method __init__ (line 112) | def __init__(self, host='', user='', passwd='', acct='',
method __enter__ (line 121) | def __enter__(self):
method __exit__ (line 125) | def __exit__(self, *args):
method connect (line 135) | def connect(self, host='', port=0, timeout=-999, source_address=None):
method getwelcome (line 159) | def getwelcome(self):
method set_debuglevel (line 166) | def set_debuglevel(self, level):
method set_pasv (line 175) | def set_pasv(self, val):
method sanitize (line 182) | def sanitize(self, s):
method putline (line 189) | def putline(self, line):
method putcmd (line 199) | def putcmd(self, line):
method getline (line 205) | def getline(self):
method getmultiline (line 223) | def getmultiline(self):
method getresp (line 237) | def getresp(self):
method voidresp (line 251) | def voidresp(self):
method abort (line 258) | def abort(self):
method sendcmd (line 272) | def sendcmd(self, cmd):
method voidcmd (line 277) | def voidcmd(self, cmd):
method sendport (line 282) | def sendport(self, host, port):
method sendeprt (line 292) | def sendeprt(self, host, port):
method makeport (line 305) | def makeport(self):
method makepasv (line 318) | def makepasv(self):
method ntransfercmd (line 325) | def ntransfercmd(self, cmd, rest=None):
method transfercmd (line 380) | def transfercmd(self, cmd, rest=None):
method login (line 384) | def login(self, user = '', passwd = '', acct = ''):
method retrbinary (line 410) | def retrbinary(self, cmd, callback, blocksize=8192, rest=None):
method retrlines (line 436) | def retrlines(self, cmd, callback = None):
method storbinary (line 471) | def storbinary(self, cmd, fp, blocksize=8192, callback=None, rest=None):
method storlines (line 500) | def storlines(self, cmd, fp, callback=None):
method acct (line 531) | def acct(self, password):
method nlst (line 536) | def nlst(self, *args):
method dir (line 545) | def dir(self, *args):
method mlsd (line 560) | def mlsd(self, path="", facts=[]):
method rename (line 588) | def rename(self, fromname, toname):
method delete (line 595) | def delete(self, filename):
method cwd (line 603) | def cwd(self, dirname):
method size (line 616) | def size(self, filename):
method mkd (li
Copy disabled (too large)
Download .json
Condensed preview — 1549 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (24,316K chars).
[
{
"path": ".gitignore",
"chars": 94,
"preview": "*.img\n*.dtb\n*.lz4\n*.cpio\n*.zip\n*.pyc\nrd/bench.py\nrd/dhcpd.conf\nrd/init\nrd/usb.sh\nrd/config.sh\n"
},
{
"path": "LICENSE",
"chars": 1096,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2020 Danny Lin <danny@kdrag0n.dev>\n\nPermission is hereby granted, free of charge, t"
},
{
"path": "README.md",
"chars": 14502,
"preview": "# freqbench\n\n, and AnyKernel2/AnyKernel 2.0 (AK2) Scripts License:\n\n AnyKernel (versions 2.0/2 and later) Andro"
},
{
"path": "anykernel/META-INF/com/google/android/update-binary",
"chars": 15692,
"preview": "#!/sbin/sh\n# AnyKernel3 Backend (DO NOT CHANGE)\n# osm0sis @ xda-developers\n\nOUTFD=/proc/self/fd/$2;\nZIPFILE=\"$3\";\n\nBOOTM"
},
{
"path": "anykernel/META-INF/com/google/android/updater-script",
"chars": 67,
"preview": "#FLASHAFTERUPDATEV2\n# Dummy file; update-binary is a shell script.\n"
},
{
"path": "anykernel/anykernel.sh",
"chars": 969,
"preview": "# AnyKernel3 Ramdisk Mod Script\n# osm0sis @ xda-developers\n\n## AnyKernel setup\n# begin properties\nproperties() { '\nkerne"
},
{
"path": "anykernel/tools/ak3-core.sh",
"chars": 24469,
"preview": "### AnyKernel methods (DO NOT CHANGE)\n## osm0sis @ xda-developers\n\nOUTFD=$1;\n\n# set up working directory variables\n[ \"$h"
},
{
"path": "bench.py",
"chars": 18035,
"preview": "#!/usr/bin/env python3\n\nimport os\nimport sys\nimport time\nimport subprocess\nimport gc\nimport statistics\nimport json\nimpor"
},
{
"path": "boot-v1/.gitignore",
"chars": 172,
"preview": "*.img\nbase\nboard\ncmdline\ndtb\ndtb_offset\nhashtype\nheader_version\nkernel_offset\nos_patch_level\nos_version\npagesize\nramdisk"
},
{
"path": "boot-v1/pack.sh",
"chars": 554,
"preview": "#!/usr/bin/env sh\n\ncd \"$(dirname \"$0\")\"\n\n../packrd-gz.sh\ncp ../rd-new.cpio.gz ramdisk.gz\n\nmkbootimg \\\n --kernel zImag"
},
{
"path": "boot-v1/test.sh",
"chars": 200,
"preview": "#!/usr/bin/env sh\n\nset -eufo pipefail\n\ncd \"$(dirname \"$0\")\"\n\ncp ~/code/android/devices/zf6/proton/out/arch/arm64/boot/Im"
},
{
"path": "boot-v1/unpack.sh",
"chars": 86,
"preview": "#!/usr/bin/env sh\n\ncd \"$(dirname \"$0\")\"\n\nunpackbootimg -i \"$1\"\nrename \"$1-\" \"\" \"$1-\"*\n"
},
{
"path": "config.sh",
"chars": 499,
"preview": "# Common config options for freqbench\n\n# Whether to enable verbose debug logging during the benchmark\n# DO NOT ENABLE fo"
},
{
"path": "dhcpd.conf",
"chars": 158,
"preview": "option domain-name-servers 8.8.8.8, 8.8.4.4;\noption subnet-mask 255.255.255.0;\nsubnet 10.15.19.0 netmask 255.255.255.0 {"
},
{
"path": "init.sh",
"chars": 5226,
"preview": "#!/usr/bin/env bash\n\nset -euo pipefail\n\n# Populate PATH and other basic env\nsource /etc/profile\n# For htop config\nexport"
},
{
"path": "mkbootimg.py",
"chars": 13371,
"preview": "#!/usr/bin/env python\n# Copyright 2015, The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2"
},
{
"path": "pack-img.sh",
"chars": 948,
"preview": "#!/usr/bin/env bash\n\noldwd=\"$PWD\"\ncd \"$(dirname \"$0\")\"\n\n./packrd-gz.sh\n\npython mkbootimg.py \\\n --header_version 2 \\\n "
},
{
"path": "pack-zip.sh",
"chars": 198,
"preview": "#!/usr/bin/env bash\n\noldwd=\"$PWD\"\ncd \"$(dirname \"$0\")\"\n\n./packrd-gz.sh\n\npushd anykernel\ncp ../rd-new.cpio.gz .\nrm -f \"$o"
},
{
"path": "packrd-gz.sh",
"chars": 406,
"preview": "#!/usr/bin/env bash\n\nset -eufo pipefail\n\ncd \"$(dirname \"$0\")\"\n\nif command -v pigz > /dev/null 2>&1; then\n GZIP=\"pigz\""
},
{
"path": "postprocess/cross_cpu_cluster_graph.py",
"chars": 1997,
"preview": "#!/usr/bin/env python3\n\nimport json\nimport csv\nimport sys\nimport matplotlib.pyplot as plt\n\nCPU_LABELS = {\n 1: \"Little"
},
{
"path": "postprocess/cross_cpu_voltage_graph.py",
"chars": 1327,
"preview": "#!/usr/bin/env python3\n\nimport sys\nimport matplotlib.pyplot as plt\nimport re\nimport collections\n\nCPU_LABELS = {\n 1: \""
},
{
"path": "postprocess/efficient_freqs.py",
"chars": 1844,
"preview": "#!/usr/bin/env python3\n\nimport json\nimport sys\n\nwith open(sys.argv[1], \"r\") as f:\n json_data = json.loads(f.read())\n\n"
},
{
"path": "postprocess/filter_freqs.py",
"chars": 553,
"preview": "#!/usr/bin/env python3\n\nimport json\nimport sys\n\nwith open(sys.argv[1], \"r\") as f:\n json_data = json.loads(f.read())\n\n"
},
{
"path": "postprocess/idle_csv.py",
"chars": 752,
"preview": "#!/usr/bin/env python3\n\nimport json\nimport csv\nimport sys\n\nwith open(sys.argv[1], \"r\") as f:\n json_data = json.loads("
},
{
"path": "postprocess/legacy_energy_model.py",
"chars": 5827,
"preview": "#!/usr/bin/env python3\n\nimport json\nimport sys\nimport re\nimport statistics\n\nwith open(sys.argv[1], \"r\") as f:\n json_d"
},
{
"path": "postprocess/requirements.txt",
"chars": 11,
"preview": "matplotlib\n"
},
{
"path": "postprocess/simplified_energy_model.py",
"chars": 2000,
"preview": "#!/usr/bin/env python3\n\nimport json\nimport csv\nimport sys\nimport re\nimport statistics\n\nwith open(sys.argv[1], \"r\") as f:"
},
{
"path": "postprocess/unified_cluster_col.py",
"chars": 910,
"preview": "#!/usr/bin/env python3\n\nimport json\nimport csv\nimport sys\n\nwith open(sys.argv[1], \"r\") as f:\n json_data = json.loads("
},
{
"path": "postprocess/unified_cluster_graph.py",
"chars": 1153,
"preview": "#!/usr/bin/env python3\n\nimport json\nimport csv\nimport sys\nimport matplotlib.pyplot as plt\n\nwith open(sys.argv[1], \"r\") a"
},
{
"path": "rd/dev/null",
"chars": 0,
"preview": ""
},
{
"path": "rd/etc/alpine-release",
"chars": 7,
"preview": "3.12.0\n"
},
{
"path": "rd/etc/apk/arch",
"chars": 8,
"preview": "aarch64\n"
},
{
"path": "rd/etc/apk/keys/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub",
"chars": 451,
"preview": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr8s1q88XpuJWLCZALdKj\nlN8wg2ePB2T9aIcaxryYE/Jkmtu+"
},
{
"path": "rd/etc/apk/keys/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub",
"chars": 451,
"preview": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3v8/ye/V/t5xf4JiXLXa\nhWFRozsnmn3hobON20GdmkrzKzO/"
},
{
"path": "rd/etc/apk/repositories",
"chars": 101,
"preview": "http://dl-cdn.alpinelinux.org/alpine/v3.12/main\nhttp://dl-cdn.alpinelinux.org/alpine/v3.12/community\n"
},
{
"path": "rd/etc/apk/world",
"chars": 109,
"preview": "alpine-baselayout\nalpine-keys\napk-tools\nbash\nbusybox\ndhcp\ndropbear\nhtop\nlibc-utils\npython3\nsgdisk\nutil-linux\n"
},
{
"path": "rd/etc/crontabs/root",
"chars": 283,
"preview": "# do daily/weekly/monthly maintenance\n# min\thour\tday\tmonth\tweekday\tcommand\n*/15\t*\t*\t*\t*\trun-parts /etc/periodic/15min\n0\t"
},
{
"path": "rd/etc/dhcp/dhcpd.conf.example",
"chars": 3266,
"preview": "# dhcpd.conf\n#\n# Sample configuration file for ISC dhcpd\n#\n\n# option definitions common to all supported networks...\nopt"
},
{
"path": "rd/etc/fstab",
"chars": 89,
"preview": "/dev/cdrom\t/media/cdrom\tiso9660\tnoauto,ro 0 0\n/dev/usbdisk\t/media/usb\tvfat\tnoauto,ro 0 0\n"
},
{
"path": "rd/etc/group",
"chars": 698,
"preview": "root:x:0:root\nbin:x:1:root,bin,daemon\ndaemon:x:2:root,bin,daemon\nsys:x:3:root,bin,adm\nadm:x:4:root,adm,daemon\ntty:x:5:\nd"
},
{
"path": "rd/etc/group-",
"chars": 694,
"preview": "root:x:0:root\nbin:x:1:root,bin,daemon\ndaemon:x:2:root,bin,daemon\nsys:x:3:root,bin,adm\nadm:x:4:root,adm,daemon\ntty:x:5:\nd"
},
{
"path": "rd/etc/hostname",
"chars": 10,
"preview": "localhost\n"
},
{
"path": "rd/etc/hosts",
"chars": 79,
"preview": "127.0.0.1\tlocalhost localhost.localdomain\n::1\t\tlocalhost localhost.localdomain\n"
},
{
"path": "rd/etc/inittab",
"chars": 570,
"preview": "# /etc/inittab\n\n::sysinit:/sbin/openrc sysinit\n::sysinit:/sbin/openrc boot\n::wait:/sbin/openrc default\n\n# Set up a coupl"
},
{
"path": "rd/etc/inputrc",
"chars": 1748,
"preview": "# /etc/inputrc - global inputrc for libreadline\n# See readline(3readline) and `info rluserman' for more information.\n\n# "
},
{
"path": "rd/etc/issue",
"chars": 54,
"preview": "Welcome to Alpine Linux 3.12\nKernel \\r on an \\m (\\l)\n\n"
},
{
"path": "rd/etc/logrotate.d/acpid",
"chars": 140,
"preview": "/var/log/acpid.log {\n\tmissingok\n\tnotifempty\n\tsharedscripts\n\tpostrotate\n\t\t/etc/init.d/acpid --quiet --ifstarted restart |"
},
{
"path": "rd/etc/modprobe.d/aliases.conf",
"chars": 1545,
"preview": "# Aliases to tell insmod/modprobe which modules to use\n\n# Uncomment the network protocols you don't want loaded:\n# alias"
},
{
"path": "rd/etc/modprobe.d/blacklist.conf",
"chars": 1998,
"preview": "#\n# Listing a module here prevents the hotplug scripts from loading it.\n# Usually that'd be so that some other driver wi"
},
{
"path": "rd/etc/modprobe.d/i386.conf",
"chars": 122,
"preview": "alias parport_lowlevel parport_pc\nalias char-major-10-144 nvram\nalias binfmt-0064 binfmt_aout\nalias char-major-10-135 rt"
},
{
"path": "rd/etc/modprobe.d/kms.conf",
"chars": 91,
"preview": "# enable modeset\noptions radeon modeset=1\noptions i915 modeset=1\noptions nouveau modeset=1\n"
},
{
"path": "rd/etc/modules",
"chars": 15,
"preview": "af_packet\nipv6\n"
},
{
"path": "rd/etc/motd",
"chars": 283,
"preview": "Welcome to Alpine!\n\nThe Alpine Wiki contains a large amount of how-to guides and general\ninformation about administratin"
},
{
"path": "rd/etc/network/if-up.d/dad",
"chars": 218,
"preview": "#!/bin/sh\n\n# Block ifup until DAD completion\n# Copyright (c) 2016-2018 Kaarle Ritvanen\n\nhas_flag() {\n\tip address show de"
},
{
"path": "rd/etc/os-release",
"chars": 164,
"preview": "NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.12.0\nPRETTY_NAME=\"Alpine Linux v3.12\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG"
},
{
"path": "rd/etc/passwd",
"chars": 1220,
"preview": "root:x:0:0:root:/root:/bin/ash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nologin\nadm:x:3:4:adm:/v"
},
{
"path": "rd/etc/passwd-",
"chars": 1220,
"preview": "root:x:0:0:root:/root:/bin/ash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nologin\nadm:x:3:4:adm:/v"
},
{
"path": "rd/etc/profile",
"chars": 238,
"preview": "export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\nexport PAGER=less\nexport PS1='\\h:\\w\\$ '\numask 0"
},
{
"path": "rd/etc/profile.d/color_prompt",
"chars": 295,
"preview": "# Setup a red prompt for root and a green one for users.\n# rename this file to color_prompt.sh to actually enable it\nNOR"
},
{
"path": "rd/etc/profile.d/locale",
"chars": 40,
"preview": "CHARSET=UTF-8\nLANG=C.UTF-8\nLC_COLLATE=C\n"
},
{
"path": "rd/etc/protocols",
"chars": 1865,
"preview": "# /etc/protocols:\n# $Id: protocols,v 1.1 2004/02/04 03:32:40 pebenito Exp $\n# $Header: /home/cvsroot/gentoo-projects/emb"
},
{
"path": "rd/etc/resolv.conf",
"chars": 19,
"preview": "nameserver 1.1.1.1\n"
},
{
"path": "rd/etc/securetty",
"chars": 65,
"preview": "console\ntty1\ntty2\ntty3\ntty4\ntty5\ntty6\ntty7\ntty8\ntty9\ntty10\ntty11\n"
},
{
"path": "rd/etc/services",
"chars": 14464,
"preview": "# Network services, Internet style\n#\n# Note that it is presently the policy of IANA to assign a single well-known\n# port"
},
{
"path": "rd/etc/shadow",
"chars": 558,
"preview": "root:$6$gCnCIJyGxcPvde2g$pjwJC3FkxXHFXQMMFpd1q43THVEi7IdEh1/rwaJ9LzepagBndmdRFL.UOYHYL9k88rze.f5APeuQU82haHNOV1:18600:0:"
},
{
"path": "rd/etc/shadow-",
"chars": 448,
"preview": "root:!::0:::::\nbin:!::0:::::\ndaemon:!::0:::::\nadm:!::0:::::\nlp:!::0:::::\nsync:!::0:::::\nshutdown:!::0:::::\nhalt:!::0::::"
},
{
"path": "rd/etc/shells",
"chars": 48,
"preview": "# valid login shells\n/bin/sh\n/bin/ash\n/bin/bash\n"
},
{
"path": "rd/etc/sysctl.conf",
"chars": 53,
"preview": "# content of this file will override /etc/sysctl.d/*\n"
},
{
"path": "rd/etc/udhcpd.conf",
"chars": 5306,
"preview": "# Sample udhcpd configuration file (/etc/udhcpd.conf)\n# Values shown are defaults\n\n# The start and end of the IP lease b"
},
{
"path": "rd/lib/firmware/.gitignore",
"chars": 14,
"preview": "*\n!.gitignore\n"
},
{
"path": "rd/root/.config/htop/htoprc",
"chars": 664,
"preview": "# Beware! This file is rewritten by htop when settings are changed in the interface.\n# The parser is also very primitive"
},
{
"path": "rd/sbin/ldconfig",
"chars": 393,
"preview": "#!/bin/sh\nscan_dirs() {\n\tscanelf -qS \"$@\" | while read SONAME FILE; do\n\t\tTARGET=\"${FILE##*/}\"\n\t\tLINK=\"${FILE%/*}/$SONAME"
},
{
"path": "rd/usr/bin/2to3-3.8",
"chars": 95,
"preview": "#!/usr/bin/python3.8\nimport sys\nfrom lib2to3.main import main\n\nsys.exit(main(\"lib2to3.fixes\"))\n"
},
{
"path": "rd/usr/bin/ldd",
"chars": 53,
"preview": "#!/bin/sh\nexec /lib/ld-musl-aarch64.so.1 --list \"$@\"\n"
},
{
"path": "rd/usr/bin/pydoc3.8",
"chars": 78,
"preview": "#!/usr/bin/python3.8\n\nimport pydoc\nif __name__ == '__main__':\n pydoc.cli()\n"
},
{
"path": "rd/usr/lib/python3.8/LICENSE.txt",
"chars": 12775,
"preview": "A. HISTORY OF THE SOFTWARE\n==========================\n\nPython was created in the early 1990s by Guido van Rossum at Stic"
},
{
"path": "rd/usr/lib/python3.8/__future__.py",
"chars": 5109,
"preview": "\"\"\"Record of phased-in incompatible language changes.\n\nEach line is of the form:\n\n FeatureName = \"_Feature(\" Optional"
},
{
"path": "rd/usr/lib/python3.8/__phello__.foo.py",
"chars": 64,
"preview": "# This file exists as a helper for the test.test_frozen module.\n"
},
{
"path": "rd/usr/lib/python3.8/_bootlocale.py",
"chars": 1801,
"preview": "\"\"\"A minimal subset of the locale module used at interpreter startup\n(imported by the _io module), in order to reduce st"
},
{
"path": "rd/usr/lib/python3.8/_collections_abc.py",
"chars": 26100,
"preview": "# Copyright 2007 Google, Inc. All Rights Reserved.\n# Licensed to PSF under a Contributor Agreement.\n\n\"\"\"Abstract Base Cl"
},
{
"path": "rd/usr/lib/python3.8/_compat_pickle.py",
"chars": 8749,
"preview": "# This module is used to map the old Python 2 names to the new names used in\n# Python 3 for the pickle module. This nee"
},
{
"path": "rd/usr/lib/python3.8/_compression.py",
"chars": 5340,
"preview": "\"\"\"Internal classes used by the gzip, lzma and bz2 modules\"\"\"\n\nimport io\n\n\nBUFFER_SIZE = io.DEFAULT_BUFFER_SIZE # Compr"
},
{
"path": "rd/usr/lib/python3.8/_dummy_thread.py",
"chars": 6027,
"preview": "\"\"\"Drop-in replacement for the thread module.\n\nMeant to be used as a brain-dead substitute so that threaded code does\nno"
},
{
"path": "rd/usr/lib/python3.8/_markupbase.py",
"chars": 14598,
"preview": "\"\"\"Shared support for scanning document type declarations in HTML and XHTML.\n\nThis module is used as a foundation for th"
},
{
"path": "rd/usr/lib/python3.8/_osx_support.py",
"chars": 19600,
"preview": "\"\"\"Shared OS X support functions.\"\"\"\n\nimport os\nimport re\nimport sys\n\n__all__ = [\n 'compiler_fixup',\n 'customize_c"
},
{
"path": "rd/usr/lib/python3.8/_py_abc.py",
"chars": 6189,
"preview": "from _weakrefset import WeakSet\n\n\ndef get_cache_token():\n \"\"\"Returns the current ABC cache token.\n\n The token is a"
},
{
"path": "rd/usr/lib/python3.8/_pydecimal.py",
"chars": 228666,
"preview": "# Copyright (c) 2004 Python Software Foundation.\n# All rights reserved.\n\n# Written by Eric Price <eprice at tjhsst.edu>\n"
},
{
"path": "rd/usr/lib/python3.8/_pyio.py",
"chars": 93177,
"preview": "\"\"\"\nPython implementation of the io module.\n\"\"\"\n\nimport os\nimport abc\nimport codecs\nimport errno\nimport stat\nimport sys\n"
},
{
"path": "rd/usr/lib/python3.8/_sitebuiltins.py",
"chars": 3115,
"preview": "\"\"\"\nThe objects used by the site module to add custom builtins.\n\"\"\"\n\n# Those objects are almost immortal and they keep a"
},
{
"path": "rd/usr/lib/python3.8/_strptime.py",
"chars": 25268,
"preview": "\"\"\"Strptime-related classes and functions.\n\nCLASSES:\n LocaleTime -- Discovers and stores locale-specific time informa"
},
{
"path": "rd/usr/lib/python3.8/_sysconfigdata__linux_aarch64-linux-gnu.py",
"chars": 23442,
"preview": "# system configuration generated and used by the sysconfig module\nbuild_time_vars = {'ABIFLAGS': '',\n 'AC_APPLE_UNIVERSA"
},
{
"path": "rd/usr/lib/python3.8/_threading_local.py",
"chars": 7220,
"preview": "\"\"\"Thread-local objects.\n\n(Note that this module provides a Python version of the threading.local\n class. Depending on "
},
{
"path": "rd/usr/lib/python3.8/_weakrefset.py",
"chars": 5735,
"preview": "# Access WeakSet through the weakref module.\n# This code is separated-out because it is needed\n# by abc.py to load every"
},
{
"path": "rd/usr/lib/python3.8/abc.py",
"chars": 4489,
"preview": "# Copyright 2007 Google, Inc. All Rights Reserved.\n# Licensed to PSF under a Contributor Agreement.\n\n\"\"\"Abstract Base Cl"
},
{
"path": "rd/usr/lib/python3.8/aifc.py",
"chars": 32814,
"preview": "\"\"\"Stuff to parse AIFF-C and AIFF files.\n\nUnless explicitly stated otherwise, the description below is true\nboth for AIF"
},
{
"path": "rd/usr/lib/python3.8/antigravity.py",
"chars": 477,
"preview": "\nimport webbrowser\nimport hashlib\n\nwebbrowser.open(\"https://xkcd.com/353/\")\n\ndef geohash(latitude, longitude, datedow):\n"
},
{
"path": "rd/usr/lib/python3.8/argparse.py",
"chars": 96015,
"preview": "# Author: Steven J. Bethard <steven.bethard@gmail.com>.\n# New maintainer as of 29 August 2019: Raymond Hettinger <raymo"
},
{
"path": "rd/usr/lib/python3.8/ast.py",
"chars": 18895,
"preview": "\"\"\"\n ast\n ~~~\n\n The `ast` module helps Python applications to process trees of the Python\n abstract syntax g"
},
{
"path": "rd/usr/lib/python3.8/asynchat.py",
"chars": 11328,
"preview": "# -*- Mode: Python; tab-width: 4 -*-\n# Id: asynchat.py,v 2.26 2000/09/07 22:29:26 rushing Exp\n# Author: Sam "
},
{
"path": "rd/usr/lib/python3.8/asyncore.py",
"chars": 20094,
"preview": "# -*- Mode: Python -*-\n# Id: asyncore.py,v 2.51 2000/09/07 22:29:26 rushing Exp\n# Author: Sam Rushing <rushing@night"
},
{
"path": "rd/usr/lib/python3.8/base64.py",
"chars": 20382,
"preview": "#! /usr/bin/env python3\n\n\"\"\"Base16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data encodings\"\"\"\n\n# Modified 04-Oct-1"
},
{
"path": "rd/usr/lib/python3.8/bdb.py",
"chars": 32056,
"preview": "\"\"\"Debugger basics\"\"\"\n\nimport fnmatch\nimport sys\nimport os\nfrom inspect import CO_GENERATOR, CO_COROUTINE, CO_ASYNC_GENE"
},
{
"path": "rd/usr/lib/python3.8/binhex.py",
"chars": 13954,
"preview": "\"\"\"Macintosh binhex compression/decompression.\n\neasy interface:\nbinhex(inputfilename, outputfilename)\nhexbin(inputfilena"
},
{
"path": "rd/usr/lib/python3.8/bisect.py",
"chars": 2214,
"preview": "\"\"\"Bisection algorithms.\"\"\"\n\ndef insort_right(a, x, lo=0, hi=None):\n \"\"\"Insert item x in list a, and keep it sorted a"
},
{
"path": "rd/usr/lib/python3.8/bz2.py",
"chars": 12558,
"preview": "\"\"\"Interface to the libbzip2 compression library.\n\nThis module provides a file interface, classes for incremental\n(de)co"
},
{
"path": "rd/usr/lib/python3.8/cProfile.py",
"chars": 6600,
"preview": "#! /usr/bin/env python3\n\n\"\"\"Python interface for the 'lsprof' profiler.\n Compatible with the 'profile' module.\n\"\"\"\n\n__"
},
{
"path": "rd/usr/lib/python3.8/calendar.py",
"chars": 24832,
"preview": "\"\"\"Calendar printing functions\n\nNote when comparing these calendars to the ones printed by cal(1): By\ndefault, these cal"
},
{
"path": "rd/usr/lib/python3.8/cgi.py",
"chars": 33608,
"preview": "#! /usr/local/bin/python\n\n# NOTE: the above \"/usr/local/bin/python\" is NOT a mistake. It is\n# intentionally NOT \"/usr/b"
},
{
"path": "rd/usr/lib/python3.8/cgitb.py",
"chars": 12096,
"preview": "\"\"\"More comprehensive traceback formatting for Python scripts.\n\nTo enable this module, do:\n\n import cgitb; cgitb.enab"
},
{
"path": "rd/usr/lib/python3.8/chunk.py",
"chars": 5435,
"preview": "\"\"\"Simple class to read IFF chunks.\n\nAn IFF chunk (used in formats such as AIFF, TIFF, RMFF (RealMedia File\nFormat)) has"
},
{
"path": "rd/usr/lib/python3.8/cmd.py",
"chars": 14860,
"preview": "\"\"\"A generic class to build line-oriented command interpreters.\n\nInterpreters constructed with this class obey the follo"
},
{
"path": "rd/usr/lib/python3.8/code.py",
"chars": 10622,
"preview": "\"\"\"Utilities needed to emulate Python's interactive interpreter.\n\n\"\"\"\n\n# Inspired by similar code by Jeff Epler and Fred"
},
{
"path": "rd/usr/lib/python3.8/codecs.py",
"chars": 36667,
"preview": "\"\"\" codecs -- Python Codec Registry, API and helpers.\n\n\nWritten by Marc-Andre Lemburg (mal@lemburg.com).\n\n(c) Copyright "
},
{
"path": "rd/usr/lib/python3.8/codeop.py",
"chars": 6275,
"preview": "r\"\"\"Utilities to compile possibly incomplete Python source code.\n\nThis module provides two interfaces, broadly similar t"
},
{
"path": "rd/usr/lib/python3.8/collections/__init__.py",
"chars": 47930,
"preview": "'''This module implements specialized container datatypes providing\nalternatives to Python's general purpose built-in co"
},
{
"path": "rd/usr/lib/python3.8/collections/abc.py",
"chars": 68,
"preview": "from _collections_abc import *\nfrom _collections_abc import __all__\n"
},
{
"path": "rd/usr/lib/python3.8/colorsys.py",
"chars": 4064,
"preview": "\"\"\"Conversion functions between RGB and other color systems.\n\nThis modules provides two functions for each color system "
},
{
"path": "rd/usr/lib/python3.8/compileall.py",
"chars": 13678,
"preview": "\"\"\"Module/script to byte-compile all .py files to .pyc files.\n\nWhen called as a script with arguments, this compiles the"
},
{
"path": "rd/usr/lib/python3.8/configparser.py",
"chars": 54374,
"preview": "\"\"\"Configuration file parser.\n\nA configuration file consists of sections, lead by a \"[section]\" header,\nand followed by "
},
{
"path": "rd/usr/lib/python3.8/contextlib.py",
"chars": 24995,
"preview": "\"\"\"Utilities for with-statement contexts. See PEP 343.\"\"\"\nimport abc\nimport sys\nimport _collections_abc\nfrom collection"
},
{
"path": "rd/usr/lib/python3.8/contextvars.py",
"chars": 129,
"preview": "from _contextvars import Context, ContextVar, Token, copy_context\n\n\n__all__ = ('Context', 'ContextVar', 'Token', 'copy_c"
},
{
"path": "rd/usr/lib/python3.8/copy.py",
"chars": 8661,
"preview": "\"\"\"Generic (shallow and deep) copying operations.\n\nInterface summary:\n\n import copy\n\n x = copy.copy(y) "
},
{
"path": "rd/usr/lib/python3.8/copyreg.py",
"chars": 7135,
"preview": "\"\"\"Helper to provide extensibility for pickle.\n\nThis is only useful to add pickle support for extension types defined in"
},
{
"path": "rd/usr/lib/python3.8/crypt.py",
"chars": 3610,
"preview": "\"\"\"Wrapper to the POSIX crypt library call and associated functionality.\"\"\"\n\nimport sys as _sys\n\ntry:\n import _crypt\n"
},
{
"path": "rd/usr/lib/python3.8/csv.py",
"chars": 16144,
"preview": "\n\"\"\"\ncsv.py - read/write/investigate CSV files\n\"\"\"\n\nimport re\nfrom _csv import Error, __version__, writer, reader, regis"
},
{
"path": "rd/usr/lib/python3.8/curses/__init__.py",
"chars": 3800,
"preview": "\"\"\"curses\n\nThe main package for curses support for Python. Normally used by importing\nthe package, and perhaps a partic"
},
{
"path": "rd/usr/lib/python3.8/curses/ascii.py",
"chars": 2547,
"preview": "\"\"\"Constants and membership tests for ASCII characters\"\"\"\n\nNUL = 0x00 # ^@\nSOH = 0x01 # ^A\nSTX = 0x02 # ^"
},
{
"path": "rd/usr/lib/python3.8/curses/has_key.py",
"chars": 5634,
"preview": "\n#\n# Emulation of has_key() function for platforms that don't use ncurses\n#\n\nimport _curses\n\n# Table mapping curses keys"
},
{
"path": "rd/usr/lib/python3.8/curses/panel.py",
"chars": 87,
"preview": "\"\"\"curses.panel\n\nModule for using panels with curses.\n\"\"\"\n\nfrom _curses_panel import *\n"
},
{
"path": "rd/usr/lib/python3.8/curses/textpad.py",
"chars": 7657,
"preview": "\"\"\"Simple textbox editing widget with Emacs-like keybindings.\"\"\"\n\nimport curses\nimport curses.ascii\n\ndef rectangle(win, "
},
{
"path": "rd/usr/lib/python3.8/dataclasses.py",
"chars": 49936,
"preview": "import re\nimport sys\nimport copy\nimport types\nimport inspect\nimport keyword\nimport builtins\nimport functools\nimport _thr"
},
{
"path": "rd/usr/lib/python3.8/datetime.py",
"chars": 88074,
"preview": "\"\"\"Concrete date/time and related types.\n\nSee http://www.iana.org/time-zones/repository/tz-link.html for\ntime zone and D"
},
{
"path": "rd/usr/lib/python3.8/dbm/__init__.py",
"chars": 5839,
"preview": "\"\"\"Generic interface to all dbm clones.\n\nUse\n\n import dbm\n d = dbm.open(file, 'w', 0o666)\n\nThe returned ob"
},
{
"path": "rd/usr/lib/python3.8/dbm/dumb.py",
"chars": 11536,
"preview": "\"\"\"A dumb and slow but simple dbm clone.\n\nFor database spam, spam.dir contains the index (a text file),\nspam.bak *may* c"
},
{
"path": "rd/usr/lib/python3.8/dbm/gnu.py",
"chars": 72,
"preview": "\"\"\"Provide the _gdbm module as a dbm submodule.\"\"\"\n\nfrom _gdbm import *\n"
},
{
"path": "rd/usr/lib/python3.8/dbm/ndbm.py",
"chars": 70,
"preview": "\"\"\"Provide the _dbm module as a dbm submodule.\"\"\"\n\nfrom _dbm import *\n"
},
{
"path": "rd/usr/lib/python3.8/decimal.py",
"chars": 320,
"preview": "\ntry:\n from _decimal import *\n from _decimal import __doc__\n from _decimal import __version__\n from _decimal"
},
{
"path": "rd/usr/lib/python3.8/dis.py",
"chars": 20566,
"preview": "\"\"\"Disassembler of Python byte code into mnemonics.\"\"\"\n\nimport sys\nimport types\nimport collections\nimport io\n\nfrom opcod"
},
{
"path": "rd/usr/lib/python3.8/dummy_threading.py",
"chars": 2815,
"preview": "\"\"\"Faux ``threading`` version using ``dummy_thread`` instead of ``thread``.\n\nThe module ``_dummy_threading`` is added to"
},
{
"path": "rd/usr/lib/python3.8/encodings/__init__.py",
"chars": 5588,
"preview": "\"\"\" Standard \"encodings\" Package\n\n Standard Python encoding modules are stored in this package\n directory.\n\n Co"
},
{
"path": "rd/usr/lib/python3.8/encodings/aliases.py",
"chars": 15693,
"preview": "\"\"\" Encoding Aliases Support\n\n This module is used by the encodings package search function to\n map encodings name"
},
{
"path": "rd/usr/lib/python3.8/encodings/ascii.py",
"chars": 1248,
"preview": "\"\"\" Python 'ascii' Codec\n\n\nWritten by Marc-Andre Lemburg (mal@lemburg.com).\n\n(c) Copyright CNRI, All Rights Reserved. NO"
},
{
"path": "rd/usr/lib/python3.8/encodings/base64_codec.py",
"chars": 1533,
"preview": "\"\"\"Python 'base64_codec' Codec - base64 content transfer encoding.\n\nThis codec de/encodes from bytes to bytes.\n\nWritten "
},
{
"path": "rd/usr/lib/python3.8/encodings/big5.py",
"chars": 1019,
"preview": "#\n# big5.py: Python Unicode Codec for BIG5\n#\n# Written by Hye-Shik Chang <perky@FreeBSD.org>\n#\n\nimport _codecs_tw, codec"
},
{
"path": "rd/usr/lib/python3.8/encodings/bz2_codec.py",
"chars": 2249,
"preview": "\"\"\"Python 'bz2_codec' Codec - bz2 compression encoding.\n\nThis codec de/encodes from bytes to bytes and is therefore usab"
},
{
"path": "rd/usr/lib/python3.8/encodings/charmap.py",
"chars": 2084,
"preview": "\"\"\" Generic Python Character Mapping Codec.\n\n Use this codec directly rather than through the automatic\n conversio"
},
{
"path": "rd/usr/lib/python3.8/encodings/gbk.py",
"chars": 1015,
"preview": "#\n# gbk.py: Python Unicode Codec for GBK\n#\n# Written by Hye-Shik Chang <perky@FreeBSD.org>\n#\n\nimport _codecs_cn, codecs\n"
},
{
"path": "rd/usr/lib/python3.8/encodings/hex_codec.py",
"chars": 1508,
"preview": "\"\"\"Python 'hex_codec' Codec - 2-digit hex content transfer encoding.\n\nThis codec de/encodes from bytes to bytes.\n\nWritte"
},
{
"path": "rd/usr/lib/python3.8/encodings/hz.py",
"chars": 1011,
"preview": "#\n# hz.py: Python Unicode Codec for HZ\n#\n# Written by Hye-Shik Chang <perky@FreeBSD.org>\n#\n\nimport _codecs_cn, codecs\nim"
},
{
"path": "rd/usr/lib/python3.8/encodings/idna.py",
"chars": 9170,
"preview": "# This module implements the RFCs 3490 (IDNA) and 3491 (Nameprep)\n\nimport stringprep, re, codecs\nfrom unicodedata import"
},
{
"path": "rd/usr/lib/python3.8/encodings/iso8859_1.py",
"chars": 13176,
"preview": "\"\"\" Python Character Mapping Codec iso8859_1 generated from 'MAPPINGS/ISO8859/8859-1.TXT' with gencodec.py.\n\n\"\"\"#\"\n\nimpo"
},
{
"path": "rd/usr/lib/python3.8/encodings/latin_1.py",
"chars": 1264,
"preview": "\"\"\" Python 'latin-1' Codec\n\n\nWritten by Marc-Andre Lemburg (mal@lemburg.com).\n\n(c) Copyright CNRI, All Rights Reserved. "
},
{
"path": "rd/usr/lib/python3.8/encodings/mbcs.py",
"chars": 1211,
"preview": "\"\"\" Python 'mbcs' Codec for Windows\n\n\nCloned by Mark Hammond (mhammond@skippinet.com.au) from ascii.py,\nwhich was writte"
},
{
"path": "rd/usr/lib/python3.8/encodings/oem.py",
"chars": 1019,
"preview": "\"\"\" Python 'oem' Codec for Windows\n\n\"\"\"\n# Import them explicitly to cause an ImportError\n# on non-Windows systems\nfrom c"
},
{
"path": "rd/usr/lib/python3.8/encodings/quopri_codec.py",
"chars": 1525,
"preview": "\"\"\"Codec for quoted-printable encoding.\n\nThis codec de/encodes from bytes to bytes.\n\"\"\"\n\nimport codecs\nimport quopri\nfro"
},
{
"path": "rd/usr/lib/python3.8/encodings/raw_unicode_escape.py",
"chars": 1208,
"preview": "\"\"\" Python 'raw-unicode-escape' Codec\n\n\nWritten by Marc-Andre Lemburg (mal@lemburg.com).\n\n(c) Copyright CNRI, All Rights"
},
{
"path": "rd/usr/lib/python3.8/encodings/rot_13.py",
"chars": 2448,
"preview": "#!/usr/bin/env python\n\"\"\" Python Character Mapping Codec for ROT13.\n\nThis codec de/encodes from str to str.\n\nWritten by "
},
{
"path": "rd/usr/lib/python3.8/encodings/undefined.py",
"chars": 1299,
"preview": "\"\"\" Python 'undefined' Codec\n\n This codec will always raise a ValueError exception when being\n used. It is intende"
},
{
"path": "rd/usr/lib/python3.8/encodings/unicode_escape.py",
"chars": 1184,
"preview": "\"\"\" Python 'unicode-escape' Codec\n\n\nWritten by Marc-Andre Lemburg (mal@lemburg.com).\n\n(c) Copyright CNRI, All Rights Res"
},
{
"path": "rd/usr/lib/python3.8/encodings/utf_16.py",
"chars": 5236,
"preview": "\"\"\" Python 'utf-16' Codec\n\n\nWritten by Marc-Andre Lemburg (mal@lemburg.com).\n\n(c) Copyright CNRI, All Rights Reserved. N"
},
{
"path": "rd/usr/lib/python3.8/encodings/utf_16_be.py",
"chars": 1037,
"preview": "\"\"\" Python 'utf-16-be' Codec\n\n\nWritten by Marc-Andre Lemburg (mal@lemburg.com).\n\n(c) Copyright CNRI, All Rights Reserved"
},
{
"path": "rd/usr/lib/python3.8/encodings/utf_16_le.py",
"chars": 1037,
"preview": "\"\"\" Python 'utf-16-le' Codec\n\n\nWritten by Marc-Andre Lemburg (mal@lemburg.com).\n\n(c) Copyright CNRI, All Rights Reserved"
},
{
"path": "rd/usr/lib/python3.8/encodings/utf_32.py",
"chars": 5129,
"preview": "\"\"\"\nPython 'utf-32' Codec\n\"\"\"\nimport codecs, sys\n\n### Codec APIs\n\nencode = codecs.utf_32_encode\n\ndef decode(input, error"
},
{
"path": "rd/usr/lib/python3.8/encodings/utf_32_be.py",
"chars": 930,
"preview": "\"\"\"\nPython 'utf-32-be' Codec\n\"\"\"\nimport codecs\n\n### Codec APIs\n\nencode = codecs.utf_32_be_encode\n\ndef decode(input, erro"
},
{
"path": "rd/usr/lib/python3.8/encodings/utf_32_le.py",
"chars": 930,
"preview": "\"\"\"\nPython 'utf-32-le' Codec\n\"\"\"\nimport codecs\n\n### Codec APIs\n\nencode = codecs.utf_32_le_encode\n\ndef decode(input, erro"
},
{
"path": "rd/usr/lib/python3.8/encodings/utf_7.py",
"chars": 946,
"preview": "\"\"\" Python 'utf-7' Codec\n\nWritten by Brian Quinlan (brian@sweetapp.com).\n\"\"\"\nimport codecs\n\n### Codec APIs\n\nencode = cod"
},
{
"path": "rd/usr/lib/python3.8/encodings/utf_8.py",
"chars": 1005,
"preview": "\"\"\" Python 'utf-8' Codec\n\n\nWritten by Marc-Andre Lemburg (mal@lemburg.com).\n\n(c) Copyright CNRI, All Rights Reserved. NO"
},
{
"path": "rd/usr/lib/python3.8/encodings/utf_8_sig.py",
"chars": 4133,
"preview": "\"\"\" Python 'utf-8-sig' Codec\nThis work similar to UTF-8 with the following changes:\n\n* On encoding/writing a UTF-8 encod"
},
{
"path": "rd/usr/lib/python3.8/encodings/uu_codec.py",
"chars": 2851,
"preview": "\"\"\"Python 'uu_codec' Codec - UU content transfer encoding.\n\nThis codec de/encodes from bytes to bytes.\n\nWritten by Marc-"
},
{
"path": "rd/usr/lib/python3.8/encodings/zlib_codec.py",
"chars": 2204,
"preview": "\"\"\"Python 'zlib_codec' Codec - zlib compression encoding.\n\nThis codec de/encodes from bytes to bytes.\n\nWritten by Marc-A"
},
{
"path": "rd/usr/lib/python3.8/enum.py",
"chars": 34882,
"preview": "import sys\nfrom types import MappingProxyType, DynamicClassAttribute\n\n\n__all__ = [\n 'EnumMeta',\n 'Enum', '"
},
{
"path": "rd/usr/lib/python3.8/filecmp.py",
"chars": 9830,
"preview": "\"\"\"Utilities for comparing files and directories.\n\nClasses:\n dircmp\n\nFunctions:\n cmp(f1, f2, shallow=True) -> int\n"
},
{
"path": "rd/usr/lib/python3.8/fileinput.py",
"chars": 14709,
"preview": "\"\"\"Helper class to quickly write a loop over all standard input files.\n\nTypical use is:\n\n import fileinput\n for li"
},
{
"path": "rd/usr/lib/python3.8/fnmatch.py",
"chars": 4056,
"preview": "\"\"\"Filename matching with shell patterns.\n\nfnmatch(FILENAME, PATTERN) matches according to the local convention.\nfnmatch"
},
{
"path": "rd/usr/lib/python3.8/formatter.py",
"chars": 15143,
"preview": "\"\"\"Generic output formatting.\n\nFormatter objects transform an abstract flow of formatting events into\nspecific output ev"
},
{
"path": "rd/usr/lib/python3.8/fractions.py",
"chars": 24329,
"preview": "# Originally contributed by Sjoerd Mullender.\n# Significantly modified by Jeffrey Yasskin <jyasskin at gmail.com>.\n\n\"\"\"F"
},
{
"path": "rd/usr/lib/python3.8/ftplib.py",
"chars": 34768,
"preview": "\"\"\"An FTP client class and some helper functions.\n\nBased on RFC 959: File Transfer Protocol (FTP), by J. Postel and J. R"
},
{
"path": "rd/usr/lib/python3.8/functools.py",
"chars": 37405,
"preview": "\"\"\"functools.py - Tools for working with functions and callable objects\n\"\"\"\n# Python module wrapper for _functools C mod"
},
{
"path": "rd/usr/lib/python3.8/genericpath.py",
"chars": 4975,
"preview": "\"\"\"\nPath operations common to more than one OS\nDo not use directly. The OS specific modules import the appropriate\nfunc"
},
{
"path": "rd/usr/lib/python3.8/getopt.py",
"chars": 7488,
"preview": "\"\"\"Parser for command line options.\n\nThis module helps scripts to parse the command line arguments in\nsys.argv. It supp"
},
{
"path": "rd/usr/lib/python3.8/getpass.py",
"chars": 5994,
"preview": "\"\"\"Utilities to get a password and/or the current user name.\n\ngetpass(prompt[, stream]) - Prompt for a password, with ec"
},
{
"path": "rd/usr/lib/python3.8/gettext.py",
"chars": 27138,
"preview": "\"\"\"Internationalization and localization support.\n\nThis module provides internationalization (I18N) and localization (L1"
},
{
"path": "rd/usr/lib/python3.8/glob.py",
"chars": 5697,
"preview": "\"\"\"Filename globbing utility.\"\"\"\n\nimport os\nimport re\nimport fnmatch\nimport sys\n\n__all__ = [\"glob\", \"iglob\", \"escape\"]\n\n"
},
{
"path": "rd/usr/lib/python3.8/gzip.py",
"chars": 21441,
"preview": "\"\"\"Functions that read and write gzipped files.\n\nThe user of the file doesn't have to worry about the compression,\nbut r"
},
{
"path": "rd/usr/lib/python3.8/hashlib.py",
"chars": 9730,
"preview": "#. Copyright (C) 2005-2010 Gregory P. Smith (greg@krypto.org)\n# Licensed to PSF under a Contributor Agreement.\n#\n\n__"
},
{
"path": "rd/usr/lib/python3.8/heapq.py",
"chars": 22876,
"preview": "\"\"\"Heap queue algorithm (a.k.a. priority queue).\n\nHeaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for\na"
},
{
"path": "rd/usr/lib/python3.8/hmac.py",
"chars": 6629,
"preview": "\"\"\"HMAC (Keyed-Hashing for Message Authentication) module.\n\nImplements the HMAC algorithm as described by RFC 2104.\n\"\"\"\n"
},
{
"path": "rd/usr/lib/python3.8/imghdr.py",
"chars": 3808,
"preview": "\"\"\"Recognize image file formats based on their first few bytes.\"\"\"\n\nfrom os import PathLike\n\n__all__ = [\"what\"]\n\n#------"
},
{
"path": "rd/usr/lib/python3.8/imp.py",
"chars": 10536,
"preview": "\"\"\"This module provides the components needed to build your own __import__\nfunction. Undocumented functions are obsolet"
},
{
"path": "rd/usr/lib/python3.8/importlib/__init__.py",
"chars": 6061,
"preview": "\"\"\"A pure Python implementation of import.\"\"\"\n__all__ = ['__import__', 'import_module', 'invalidate_caches', 'reload']\n\n"
},
{
"path": "rd/usr/lib/python3.8/importlib/_bootstrap.py",
"chars": 39644,
"preview": "\"\"\"Core implementation of import.\n\nThis module is NOT meant to be directly imported! It has been designed such\nthat it c"
},
{
"path": "rd/usr/lib/python3.8/importlib/_bootstrap_external.py",
"chars": 62357,
"preview": "\"\"\"Core implementation of path-based import.\n\nThis module is NOT meant to be directly imported! It has been designed suc"
},
{
"path": "rd/usr/lib/python3.8/importlib/abc.py",
"chars": 12873,
"preview": "\"\"\"Abstract base classes related to import.\"\"\"\nfrom . import _bootstrap\nfrom . import _bootstrap_external\nfrom . import "
},
{
"path": "rd/usr/lib/python3.8/importlib/machinery.py",
"chars": 844,
"preview": "\"\"\"The machinery of importlib: finders, loaders, hooks, etc.\"\"\"\n\nimport _imp\n\nfrom ._bootstrap import ModuleSpec\nfrom ._"
},
{
"path": "rd/usr/lib/python3.8/importlib/metadata.py",
"chars": 17607,
"preview": "import io\nimport os\nimport re\nimport abc\nimport csv\nimport sys\nimport email\nimport pathlib\nimport zipfile\nimport operato"
},
{
"path": "rd/usr/lib/python3.8/importlib/resources.py",
"chars": 9437,
"preview": "import os\nimport tempfile\n\nfrom . import abc as resources_abc\nfrom contextlib import contextmanager, suppress\nfrom impor"
},
{
"path": "rd/usr/lib/python3.8/importlib/util.py",
"chars": 11319,
"preview": "\"\"\"Utility code for constructing importers, etc.\"\"\"\nfrom . import abc\nfrom ._bootstrap import module_from_spec\nfrom ._bo"
},
{
"path": "rd/usr/lib/python3.8/inspect.py",
"chars": 118040,
"preview": "\"\"\"Get useful information from live Python objects.\n\nThis module encapsulates the interface provided by the internal spe"
},
{
"path": "rd/usr/lib/python3.8/io.py",
"chars": 3541,
"preview": "\"\"\"The io module provides the Python interfaces to stream handling. The\nbuiltin open function is defined in this module."
}
]
// ... and 1349 more files (download for full content)
About this extraction
This page contains the full source code of the kdrag0n/freqbench GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1549 files (22.7 MB), approximately 6.0M tokens, and a symbol index with 6756 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.