Scientific Computing

Git clone a specific branch

“git clone” clones the default branch of the remote repository as determined by the Git server. The default Git branch is typically “main”, but the repository owner can change it to any other branch. To Git clone a specific branch, use the –branch option:

git clone --branch <branch-name> <repository-url>

This can help workaround problems like a default branch that is very large or is broken in some way.

Windows symbolic links and reparse points

Symbolic links are useful in any operating system to shorten long, complicated path names like C:/user/foo/data to just C:/data. If encountering problems with user permission, set user permission to create symbolic links on Windows.

Powershell symbolic link creation syntax:

New-Item -ItemType SymbolicLink -Path "Link" -Target "Target"

# for example:
New-Item -ItemType SymbolicLink -Path "my_program.exe" -Target "path/to/my_program.123.exe"

# also for directories:
New-Item -ItemType SymbolicLink -Path "my_fun_dir" -Target "path/to/my_dir"

For clarity, specify the full path to the target file or directory. Especially avoid target “.” or “..” as these can be confusing.

Symbolic links on Windows are a type of Reparse Points. fsutil can tell the type of reparse point:

fsutil reparsepoint query "my_fun_dir"

Reparse Tag Value : 0xa000000c

The reparse tag value corresponds to a symbolic link IO_REPARSE_TAG_SYMLINK.

Python test_symlink.py shows symlinks using Python standard library pathlib.

App Execution Alias

fsutil reparsepoint query $Env:LOCALAPPDATA/Microsoft/WindowsApps/wt.exe

Reparse Tag Value : 0x8000001b

The reparse tag value 0x8000001b is a Windows App Execution Alias IO_REPARSE_TAG_APPEXECLINK. App Execution Aliases are not symbolic links, but are a way for Windows CreateProcess to find the correct executable to run from a user-friendly name like “wt.exe” or “bash.exe”.

Not every language works with App Execution Aliases at this time–Java io and nio don’t work with App Execution Aliases currently. Python does work with App Execution Aliases, for example:

python -c "import shutil; print(shutil.which('wt.exe'))"

Unix-like shell

On a Unix-like shell including WSL, softlinks are created like:

ln -s target link

Fortran test frameworks

Unit test frameworks should be lightweight to setup and maintain. End users should be able to easily run the unit and integration tests themselves as part of a typical end-user install.

The simplest approach is to write several small test programs and execute them using CMake or Meson. This method can also be an appropriate choice where the program uses complex library interactions that may not mix well with a generic test framework.

The Veggies Fortran test framework is an example of a Fortran unit testing framework. Check the Fortran-lang group for a contemporary discussion on Fortran test frameworks.

Git autocorrect commands

Git commands can be lengthy, but Git autocorrect can help with command typos.

git config --global help.autocorrect prompt

This prompts with a suggestion for a mistyped Git command.

Matlab filesystem matlab.io.filesystem

Matlab cross-platform capabilities involve cross-platform factors dealing with filesystem and system calls. The standard library for Matlab matlab-stdlib provides several features on top of factory Matlab. Filesystem functions including canonicalized paths, finding executable programs, and retrieving filesystem type are among key capabilities of Matlab-stdlib.

Matlab R2025a makes public the internal functionality introduced in Matlab R2024b. The filePermissions function returns an object like matlab.io.UnixPermissions according to the operating platform.

As this functionality and classes are officially released, Matlab-stdlib is planned to incorporate them for new-enough Matlab releases, while continuing to work for older Matlab releases–currently back to R2019b.

When is sudo needed?

Needless use of administrator “sudo” privileges during install of a library or program is generally undesirable. Admin / superuser privileges are typically invoked for a single command by sudo, including on Windows. Casual use of “sudo” can goof up the operating system itself, create cybersecurity risks, and mess up the desired program installation. The install might do undesirable things like put itself under “/root” directory or make paths non-readable by the non-privileged user.

In general we write procedures without invoking sudo, to avoid careless sudo invocation. We assume the user knows when it’s appropriate to invoke sudo. sudo is commonly used with commands installing from repositories like “apt install”.

Python “pip install” defaults to PEP 370 --user if needed. In general, don’t install with sudo pip or sudo conda to avoid wrecking the system configuration.

Dropbox shared link

Dropbox shared link URLs can be readily used in scripts and programs including curl, Wget, Matlab, Python, CMake, …. Dropbox treats non-web browser user agents distinctively. It may be necessary to set the URL options manually. Dropbox share URLs commonly end in “dl=0”, which will result in a webpage download instead of the intended file. We suggest changing the link to end in “dl=1”.

Get HDF5 library version

Computing platforms may have multiple version of the HDF5 library installed. The HDF5 library version currently being used can be determined by the program as in the following examples by language. The HDF5 library can write backward-compatible HDF5 files by HDF5 version bounds. At the time of writing, there is no way to introspect the HDF5 library version required to read a specific HDF5 file.

Matlab

Matlab release vs. HDF5 library version:

Matlab HDF5
R2024b (Update 3) 1.14.4.3
R2024a 1.10.11
R2023b 1.10.10
R2022a 1.10.8
R2021b 1.10.7
R2015a 1.8.12

Check Matlab HDF5 library version:

[major, minor, rel] = H5.get_libversion()

Python

Check Python h5py HDF5 library version:

import h5py

print(h5py.h5.get_libversion())

C, C++, Fortran

In C, C++, Fortran, check HDF5 library version with H5get_libversion().


Related: get NetCDF library version