Skip to content

Instantly share code, notes, and snippets.

View oxinabox's full-sized avatar
🐂

Frames White oxinabox

🐂
View GitHub Profile
@oxinabox
oxinabox / example.jl
Last active January 9, 2024 16:02
Running the Julia Compiler pipeline manually
#Helpers:
"Given some IR generates a MethodInstance suitable for passing to infer_ir!, if you don't already have one with the right argument types"
function get_toplevel_mi_from_ir(ir, _module::Module)
mi = ccall(:jl_new_method_instance_uninit, Ref{Core.MethodInstance}, ());
mi.specTypes = Tuple{ir.argtypes...}
mi.def = _module
return mi
end
"run type inference and constant propagation on the ir"
@oxinabox
oxinabox / vectorprism.jl
Created August 9, 2023 11:19
VectorPrisms -- a way of viewing any simple nested struct as a vector
module VectorPrisms
function check_compatible(::Type{T}) where T
isconcretetype(T) || error("Type is not fully concrete")
for ft in fieldtypes(T)
check_compatible(ft)
end
end
check_compatible(::Type{<:Array}) = error("Type contains an array")
check_compatible(::Type{Nothing}) = error("Nothing is not supporting.")
@oxinabox
oxinabox / active_rrule.jl
Created August 10, 2021 12:16
Sketch: Extension of rrule to take in the activity (i.e. if your want to get the derivative wrt this)
abstract type ActivityMarked{T} end
struct Active{T} <: ActivityMarked{T}
val::T
end
struct Dead{T} <: ActivityMarked{T}
val::T
end
@oxinabox
oxinabox / thomas_tests.jl
Last active May 23, 2021 12:16
Why are so many implementations of the Thomas algorithm wrong?
using LinearAlgebra
# Wikipedia non-preserving version (transcribed from VB)
# https://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm
# this one is wrong (found this in use in the wild 😢)
function thomas_algorithm!(a, b, c, r, ::Val{1})
n = length(b)
for i in 2:(n-1)
m = a[i]/b[i-1];
b[i] = b[i] - m * c[i - 1];
@oxinabox
oxinabox / day1.dx
Last active December 14, 2020 22:37
Advent of Code 2020, in DexLang
'# Advent of Code 2020. Day 1
DexLang, [Lyndon White](http://oxinabox.net)
## part 1
From the list find two entries that sum to 2020, and compute their product.
list = [1567, 1223, 1758, 1842, 1933, 1898, 1409, 1058, 1533, 1417, 1032, 1634, 1477, 1394, 1888, 1972, 1237, 1390, 1677, 1546, 1302, 1070, 1369, 1455, 1065, 1924, 1593, 1131, 1064, 1346, 1914, 1129, 1830, 1450, 1278, 1740, 1809, 1176, 1734, 1102, 1807, 1982, 1603, 1736, 2008, 1980, 1905, 1633, 1732, 1350, 1865, 1988, 1805, 1998, 1152, 1046, 1870, 1557, 1789, 1766, 1945, 1359, 1002, 1126, 1719, 1497, 1296, 1560, 1936, 1929, 1464, 2005, 1281, 618, 1257, 1107, 1632, 1688, 1964, 1803, 1360, 1384, 1889, 1411, 1328, 1452, 1868, 1515, 1586, 1631, 1618, 1087, 1710, 1094, 1774, 1295, 1700, 1636, 1230, 1421, 1910, 1522, 1366, 1144, 1757, 1493, 1316, 1103, 687, 1371, 1720, 1155, 1559, 1900, 989, 1367, 1999, 1066, 1773, 1787, 1402, 1047, 1806, 1956, 1219, 1555, 1307, 1419, 1706, 1884, 1109, 1181, 2010, 1298, 1730, 1078, 1848, 1398, 1687, 2007, 1550, 1664, 1225
@oxinabox
oxinabox / demo.jl
Last active October 11, 2020 20:01
Conditionally setting a column in dataframes.jl
using DataFrames, BenchmarkTools, DataFramesMeta
eg_df(n=100_000) = DataFrame(a=rand(1:10, n), b=rand('a':'z', n), c=rand('A':'Z', n))
# for eachrow loop
# 7.132 ms (239156 allocations: 4.10 MiB)
@btime let
df = $(eg_df())
for row in eachrow(df)
if row.a == 1
@oxinabox
oxinabox / isbits.jl
Created September 28, 2020 12:20
Decomposes til isbits
function print_isbits(f)
seen = Set()
MAX_ELE = 3
function print_isbits(fname, fval::FTYPE, indent) where FTYPE
ftext = "$fname - $FTYPE\n"
print(" "^indent)
fbits = isbitstype(FTYPE)
if fbits
@oxinabox
oxinabox / download.jl
Created July 6, 2018 13:10
Pure julia download function for julia 0.7 using HTTP.jl
module Download
using HTTP
using Random
using Dates
function try_get_filename_from_headers(headers)
content_disp = HTTP.getkv(headers, "Content-Disposition")
if content_disp != nothing
# extract out of Content-Disposition line
# rough version of what is needed in https://github.com/JuliaWeb/HTTP.jl/issues/179
@oxinabox
oxinabox / convexbased.ipynb
Created May 18, 2020 20:55
Autoschedualling
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@oxinabox
oxinabox / NNMF.ipynb
Created March 11, 2020 11:52
NonNegative Matrix Factorization
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.