Skip to content

Instantly share code, notes, and snippets.

@lshifr
lshifr / Unflatten.m
Created October 6, 2015 22:22
Creating nested structure from flat, for Mathematica expressions
BeginPackage["Unflatten`"]
Unflatten::usage = "Unflatten[h[elems], posints, heads] creates a nested structure by wrapping
the elements in positions intervals posints in heads heads";
UnflattenNested::usage = "UnflattenNested[expr, {startposlist, endposlist}, head] wraps elements
of expr at positions starting at startposlist_i and ending at endposlist_i in head head";
Begin["`Private`"]
@lshifr
lshifr / Defines.m
Last active March 18, 2016 15:43
Static code analyzer for Mathematica code
ClearAll[shead];
SetAttributes[shead, HoldAllComplete];
shead[f_Symbol[___]] := HoldComplete[f];
shead[f_[___]] := shead[f];
shead[f_ /; AtomQ[Unevaluated[f]]] := Head[f];
(* TODO:This is a bit too simplisitc,since some pattern symbols might \
be localized by inner rules inside expr,and should not be \
counted.We might miss some extra dependencies this way *)
@lshifr
lshifr / filemodtime.c
Created June 19, 2015 15:41
List file modification times
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
#include <time.h>
#include <sys/stat.h>
@lshifr
lshifr / LazyTuples.m
Last active November 3, 2017 13:06
Implementation of lazy tuple list, for Streaming framework
BeginPackage["LazyTuples`"]
LazyTuples::usage = "LazyTuples[lists, opts] create a LazyList of the specified chunk size (\"ChunkSize\" option), containing tuples of the original lists";
Begin["`Private`"]
Needs["Streaming`"];
ClearAll[next];
next[{left_, _}, dim_] :=
@lshifr
lshifr / CellTimeTrack.m
Last active August 29, 2015 14:17
Tracking cell execution time in Mathematica
BeginPackage["CellTimeTrack`"]
CellTimeTrack::usage = "CellTimeTrack[True|False] switches on or off the cell time-tracking mode";
Begin["`Private`"]
$style = Function[
arg,
StyleBox[arg, FontSize -> 16, FontWeight -> Bold, FontColor -> Darker[Green, 0.5]]
];
@lshifr
lshifr / debug.m
Created March 26, 2015 18:37
Simple debugging utility for Mathematica programs
ClearAll[openerDress];
SetAttributes[openerDress, HoldAll];
openerDress[f_[args___]]:=
OpenerView[{
HoldForm[f],
HoldForm[f]@@Map[openerDress,Unevaluated[{args}]]
}];
openerDress[x_]:=HoldForm[x];
ClearAll[stackPrettify];
@lshifr
lshifr / SmartLet.m
Created November 7, 2014 20:14
Smart Let in Mathematica
ClearAll[Let, let, symbolOrListQ, inSetDelayed];
SetAttributes[{Let, let, symbolOrListQ}, HoldAll];
symbolOrListQ[_Symbol] = True;
symbolOrListQ[{___?symbolOrListQ}] = True;
symbolOrListQ[_] = False;
Let::lvset = "Local variable specification `1` is not valid.";
ClearAll[csub];
csub[expr_Hold, rules_List, limitCount_] :=
With[{newrule =
Replace[If[# =!= {} && #[[-1, -1]] > 1, #[[-1, 1]], {}] &@
SortBy[Tally[
Cases[expr,
x_ /; Depth[Unevaluated[x]] > 2 &&
LeafCount[Unevaluated[x]] > limitCount :> Hold[x],
Infinity]], Last],
Hold[x_] :> (HoldPattern[x] -> Unique[])]},
@lshifr
lshifr / SimpleJavaReloader.m
Created November 4, 2013 19:25
A package to enable compiling Java classes from within Mathematica
(* ::Package:: *)
BeginPackage["SimpleJavaReloader`", {"JLink`"}];
JCompileLoad::usage =
"JCompileLoad[javacode_,addToClassPath_] attempts to compile a Java \
class defined by a string javacode, optionally adding to Java compiler classpath \
files and folders from addToClassPath, and load the resulting class into \
Mathematica";
@lshifr
lshifr / SEFormatter.m
Last active December 18, 2015 15:59
Code formatter palette for mathematica.stackexchange.com
(* Mathematica Package *)
(* :Title: SEFormatter *)
(* :Author: Leonid B. Shifrin *)
(* :Summary: Code formatting palette for mathematica.stackexchange.com
(but can be useful also for other formatting purposes) *)
(* :Context: SEFormatter` *)