Python scripts for simulating QM, part 1: Time evolution of a particle in the infinite potential box

A Special note for the Potential Employers from the Data Science field:

Recently, in April 2020, I achieved a World Rank # 5 on the MNIST problem. The initial announcement can be found here [^], and a further status update, here [^].

All my data science-related posts can always be found here [^].


What’s been happening?

OK, with that special note done, let me now turn my attention to the two of you who regularly read this blog.

… After the MNIST classification problem, I turned my attention to using LSTM’s for time-series predictions, simply because I hadn’t tried much on this topic any time earlier. … So, I implemented a few models. I even seemed to get good accuracy levels.

However, after having continuously worked on Data Science straight for about 2.5 months, I began feeling like taking a little break from it.

I had grown tired a bit though I had not realized it while actually going through all those tedious trials. (The fact of my not earning any money might have added to some draining of the energy too.) In fact, I didn’t have the energy to pick up something on the reading side either.

Basically, after a lot of intense effort, I wanted something that was light but engaging.

In the end, I decided to look into Python code for QM.

Earlier, in late 2018, I had written a few scripts on QM. I had also blogged about it; see the “part 0” of this series [^]. (Somehow, it has received unusually greater number of hits after I announced my MNIST result.) However, after a gap of 1.5 years, I could not easily locate those scripts. … So, like any self-respecting programmer, I decided to code them again!

Below is the first result, a movie. … Though a movie, it should be boring to any one who is not interested in QM.


Movie of the wavefunction of an electron inside an infinite potential box:

 

An electron in an infinite potential box.

An electron inside a 3 cm long 1D box with infinite potentials on the sides. Time evolution of the second excited state (n = 3). In the standard QM, such states are supposed to be“stationary”.

 


The Python code: Main file:

Now, the code. It should be boring to any one who is not a Python programmer.

Update on 2020.05.30 16:00 IST: The code below has been updated to fix a bug in the square-normalization procedure. Earlier, the code was performing the Simpson integration over
the interior lattice points alone, which was incorrect. Now, the Simpson integration is performed over the entire domain, which is the correct procedure. Now, numerical and analytical solutions
are truly close.

"""
01.AJ_PIB_1D_Class.py

Written by and copyright (c) Ajit R. Jadhav. All rights reserved.

Particle in a Box.

Solves the Time-Independent Schrodinger Equation in 1D,
using the Finite Difference Method. Eigenvalues are found using
the direct matrix method.

Also shows the changes in the total wavefunction with time.
[The stationarity in the TISE is not static. In the mainstream 
QM, the stationarity is kinematical. In my new approach, it 
has been proposed to be kinetic. However, this simulation concerns
itself only with the standard, mainstream, QM.]

Environment: Developed and tested using:
Python 3.7.6 64-bit. All packages as in Anaconda 4.8.3 
on Ubuntu-MATE 20.04 (focal fossa) LTS of the date (below).

TBD: It would be nice to use sparse matrices, and to use 
eigenvalue functions from scipy (instead of those from numpy).

History:
0. This file begun: Friday 2020 May 22 19:50:26 IST 
1. Initially posted on the blog: Saturday 2020 May 23 16:07:52 IST 
2. This version: Saturday 2020 May 30 15:53:13 IST 
    -- Corrected a bug in ComputeNormalizedStationaryStates() 
    Earlier, the code was performing the Simpson integration over 
    the *interior* lattice points alone, which was incorrect. Now, the 
    Simpson integration is performed over the entire domain, which is 
    the correct procedure. Now, numerical and analytical solutions 
    are truly close.
"""

import numpy as np 
from scipy.integrate import simps
import matplotlib.pyplot as plt 
from matplotlib.animation import ImageMagickFileWriter

# SEE THE ACCOMPANYING FILE. THE NUMERICAL VALUES OF CONSTANTS 
# ARE DEFINED IN IT.
from FundaConstants import h, hbar, me, mP, eV2J

################################################################################
# THE MAIN CLASS 

class AJ_PIB_1D( object ):

    def __init__( self, nInteriorNodes, dMass, dh ):
        self.nInteriorNodes = nInteriorNodes
        self.nDomainNodes = nInteriorNodes + 2
        self.dMass = dMass # Mass associated with the QM particle
        self.dh = dh # cell-size ( \Delta x ).

        # The following numpy ndarray's get allocated 
        # during computations.
        self.aaT = None 
        self.aaV = None 
        self.aaH = None 

        self.aaPsi = None 
        self.aE_n = None 

        self.A_ana = None 
        self.ak_ana = None 
        self.aE_ana = None 
        self.aPsi_ana = None 
        return 

    # Creates the kinetic energy matrix for the interior points of the
    # domain.
    def ComputeKE( self ):
        self.aaT = np.zeros( (self.nInteriorNodes, self.nInteriorNodes) )
        for i in range( self.nInteriorNodes ):
            self.aaT[ i, i ] = -2.0
        for i in range( self.nInteriorNodes-1 ):
            self.aaT[ i, i+1 ] = 1.0
        for i in range( 1, self.nInteriorNodes ):
            self.aaT[ i, i-1 ] = 1.0 
        dFactorKE = - hbar**2 / ( 2.0 * self.dMass * self.dh**2 )
        self.aaT *= dFactorKE
        return

    # Creates the potential energy matrix for the interior points of the
    # domain. You can supply an arbitrary potential function via the array
    # aV of size = interior points count, and values in joule.
    def ComputePE( self, aV= None ):
        self.aaV = np.zeros( (self.nInteriorNodes, self.nInteriorNodes) )
        if None != aV:
            for i in range( self.nInteriorNodes ):
                self.aaV[ i, i ] = aV[ i ]
        return

    def ComputeHamiltonian( self, aV= None ):
        self.ComputeKE() 
        self.ComputePE( aV )
        self.aaH = self.aaT + self.aaV 
        return 

    # Note, the argument aX has the size = the count of domain points, not 
    # the count of interior points.
    # QM operators are Hermitian. We exploit this fact by using the 
    # numpy.linalg.eigh function here. It is faster than numpy.linalg.eig, 
    # and, unlike the latter, also returns results sorted in the ascending 
    # order. 
    # HOWEVER, NOTE, the eigenvectors returned can have signs opposite 
    # of what the analytial solution gives. The eigh (or eig)-returned 
    # vectors still *are* *eigen* vectors. However, for easier comparison 
    # with the analytical solution, we here provide a quick fix. 
    # See below in this function.
    def ComputeNormalizedStationaryStates( self, aX, bQuickFixForSigns= False ):
        assert( self.nDomainNodes == len( aX ) )
        
        # Use the LAPACK library to compute the eigenvalues
        aEigVals, aaEigVecs = np.linalg.eigh( self.aaH )
        
        # SQUARE-NORMALIZE THE EIGENVECTORS

        # Note:
        # The eigenvectors were found on the interior part of the domain, 
        # i.e., after dropping the boundary points at extreme ends. But the 
        # wavefunctions are defined over the entire domain (with the 
        # Dirichlet condition of 0.0 specified at the boundary points).
        
        nCntVecs = aaEigVecs.shape[ 1 ]
        assert( nCntVecs == self.nInteriorNodes )

        # eigh returns vectors in *columns*. We prefer to store the 
        # normalized vectors in *rows*.
        aaPsi = np.zeros( (nCntVecs, self.nDomainNodes) )
        for c in range( nCntVecs ):
            aPsi = aaPsi[ c ] # For ease of readability
            aPsi[ 1 : self.nDomainNodes-1 ] = aaEigVecs[ :, c ]
            # Find the area under the prob. curve
            aPsiSq = aPsi * aPsi
            dArea = simps( aPsiSq, aX )
            # Use it to normalize the wavefunction
            aPsi /= np.sqrt( dArea )
            # The analytical solution always has the curve going up 
            # (with a +ve gradient) at the left end of the domain. 
            # We exploit this fact to have a quick fix for the signs.
            if bQuickFixForSigns is True:
                d0, d1 = aPsi[ 0 ], aPsi[ 1 ]
                if d1 < d0:
                    aPsi *= -1
            aaPsi[ c ] = aPsi
        self.aaPsi = aaPsi
        self.aE_n = aEigVals
        return 

    # Standard analytical solution. See, e.g., the Wiki article: 
    # "Particle in a box"
    def ComputeAnalyticalSolutions( self, aX ):

        xl = aX[ 0 ]
        xr = aX[ self.nDomainNodes-1 ]
        L = xr - xl 
        A = np.sqrt( 2.0 / L )
        self.A_ana = A 

        # There are as many eigenvalues as there are interior points
        self.ak_ana = np.zeros( self.nInteriorNodes )
        self.aE_ana = np.zeros( self.nInteriorNodes )
        self.aPsi_ana = np.zeros( (self.nInteriorNodes, self.nDomainNodes) )
        for n in range( self.nInteriorNodes ):
            # The wavevector. (Notice the absence of the factor of '2'. 
            # Realize, the 'L' here refers to half of the wavelength of 
            # the two travelling waves which make up the standing wave. 
            # That's why.)
            k_n = n * np.pi / L 
            # The energy.
            E_n = n**2 * h**2 / (8.0 * self.dMass * L**2)

            # A simplest coordinate transformation:
            # For x in [0,L], phase angle is given as
            # Phase angle = n \pi x / L = k_n x. 
            # We have arbitrary coordinates for the left- and 
            # right-boundary point. So, 
            # Phase angle = k_n (x - xl)
            ap = k_n * (aX - xl)
            
            aPsiAna = A * np.sin( ap )
            self.ak_ana[ n ] = k_n 
            self.aE_ana[ n ] = E_n 
            # We prefer to store the normalized wavefunction 
            # in rows. (Contrast: linalg.eigh and eig store the 
            # eigen vectors in columns.)
            self.aPsi_ana[ n, : ] = aPsiAna
        return 
        
    # This function gets the value that is the numerical equivalent to the 
    # max wave amplitude 'A', i.e., sqrt(2/L) in the analytical solution. 
    def GetMaxAmplNum( self ):
        dMax = np.max( np.abs(self.aaPsi) )
        return dMax


################################################################################
# Utility functions

# NOTE: SAVING MOVIES CAN TAKE A LOT MORE TIME (7--10 MINUTES).
def Plot( model, n, nTimeSteps, bSaveMovie= False, sMovieFileName= None ):
    # The class computes and stores only the space-dependent part.
    aPsiSpace = model.aaPsi[ n-1 ]

    # Period = 2 \pi / \omega = 1 / \nu
    # Since E = h \nu, \nu = E/h, and so, Period = h/E
    nu = model.aE_n[ n-1 ] / h 
    dPeriod = 1.0 / nu 

    dt = dPeriod / (nTimeSteps-1) 

    # Plotting...

    plt.style.use( 'ggplot' )
    # Plot size is 9 inches X 6 inches. Reduce if you have smaller 
    # screen size.
    fig = plt.figure( figsize=(9,6) ) 

    if bSaveMovie is True:
        movieWriter = ImageMagickFileWriter()
        movieWriter.setup( fig, sMovieFileName )

    dMaxAmpl = model.GetMaxAmplNum() # Required for setting the plot limits.
    dTime = 0.0 # How much time has elapsed in the model?
    for t in range( nTimeSteps ):
        # TIME-DEPENDENT PART: 
        # \psi_t = e^{-i E_n/\hbar t} = e^{-i \omega_n t} = e^{-i 2 \pi nu t}
        # Compute the phase factor (which appears in the exponent).
        dTheta = 2.0 * np.pi * nu * dTime 
        # The Euler identity. Compute the *complete* wavefunction (space and time)
        # at this instant.
        aPsi_R_t = aPsiSpace * np.cos( dTheta )
        aPsi_I_t = - aPsiSpace * np.sin( dTheta )
        
        plt.clf()
        sTitle = "Particle in an infinite-potential box (n = %d)\n" % (n)
        sTitle += "Domain size: %7.4lf m. Oscillation period: %7.4lf s.\n" % (L, dPeriod)
        sTitle += "Time step: %3d/%3d. Time elapsed in simulation: %7.4lf s." % (t+1, nTimeSteps, dTime) 
        plt.title( sTitle )

        plt.xlabel( "Distance, m" )
        plt.ylabel( "Wavefunction amplitude, $m^{-1/2}$" )

        plt.grid( True )

        plt.xlim( (xl - L/10), (xr + L/10) )
        plt.ylim( -1.1*dMaxAmpl, 1.1*dMaxAmpl )

        plt.plot( aX, aPsi_R_t , color= 'darkcyan', label= r'Re($\Psi$)' )
        plt.plot( aX, aPsi_I_t , color= 'purple', label= r'Im($\Psi$)' )

        plt.legend( loc= 'upper right', shadow= True, fontsize= 'small' ) 
        
        if bSaveMovie is True:
            movieWriter.grab_frame()
        else:
            plt.pause( 0.001 )

        dTime += dt

    if bSaveMovie is True:
        movieWriter.finish()
    else:
        plt.show()


################################################################################
# MAIN DRIVER CODE
# We use the SI system throughout. [This is a program. It runs on a computer.]

# DOMAIN GEOMETRY

xl = -1.0e-02 # Left end (min. x)
xr = 2.0e-02 # Right end (max. x)
L = xr - xl # Length of the domain
xc = (xl + xr )/ 2.0 # Center point

# MESH
# Count of cells = Count of nodes in the domain - 1. 
# It's best to take an odd number for the count of domain nodes. This way, 
# the peak(s) of the wavefunction will not be missed.
nDomainNodes = 101
aX, dh = np.linspace(   start= xl, stop= xr, num= nDomainNodes, 
                        endpoint= True, retstep= True, dtype= np.float )

# In the PIB model, infinite potential exists at either ends. So, we apply 
# the Dirichlet BC of \Psi(x,t) = 0 at all times. Even if the discretized 
# Laplacian were to be computed for the entire domain, in handling the 
# homogeneous BC, both the boundary-points would get dropped during the
# matrix partitioning. Similarly, V(x) would be infinite there. That's why,
# we allocate the Laplacian and Potential Energy matrices only for the
# interior points. 
nInteriorNodes = nDomainNodes - 2 

# We model the electron here. 
# Constants are defined in a separate file: 'FundaConstants.py'
# Suggestion: Try mP for the proton, and check the \Psi amplitudes.
dMass = me 

# Instantiate the main model class.
model = AJ_PIB_1D( nInteriorNodes, dMass, dh )

# Compute the system Hamiltonian.

# If you want, supply a custom-made potential function as an ndarray of 
# size nInteriorNodes, as an argument. Values should be in joules.
# 'None' means 0 joules everywhere inside the box.
model.ComputeHamiltonian( None )

# Compute the stationary states. For the second argument, see the 
# note in the function implementation.
model.ComputeNormalizedStationaryStates( aX, True )

# You can also have the analytical solution computed. Uncomment the 
# line below. The numerical and analytical solutions are kept in 
# completely different arrays inside the class. However, the plotting
# code has to be careful.
### model.ComputeAnalyticalSolutions( aX )


# PLOT THE STATIONARY STATES, AND SHOW THEIR OSCILLATIONS WITH TIME.
# (TISE *is* dynamic; the stationarity is dynamical.) 

# Note, here, we choose n to be a 1-based index, as is the practice
# in physics. Thus, the ground state is given by n = 1, and not n = 0.
# However, NOTE, the computed arrays of wavefunctions have 0-based 
# indices. If such dual-usage for the indices gets confusing, simple! 
# Just change the code!

n = 3 
# No. of frames to be plotted for a single period of oscillations
# The 0-th and the (nTimeSteps-1)th state is identical because the 
# Hamiltonian here is time-independent. 
nTimeSteps = 200 

# You can save a movie, but note, animated GIFs take a lot more time, even 
# ~10 minutes or more, depending on the screen-size and dpi.
# Note, ImageMagickFileWriter will write the temp .png files in the current 
# directory (i.e. the same directory where this Python file resides). 
# In case the program crashes (or you stop the program before it finishes), 
# you will have to manually delete the temporary .png files from the 
# program directory! (Even if you specify a separate directory for the 
# movie, the *temporary* files still get generated in the program directory.)
### Plot( model, n, nTimeSteps, True, './AJ_PIB_e_%d.gif' % (n) )

Plot( model, n, nTimeSteps, False, None )

################################################################################
# EOF
################################################################################


The ancillary file:

The main file imports the following file. It has nothing but the values of fundamental physical constants noted in it (together with the sources). Here it is:

"""
FundaConstants.py

Written by and copyright (c) Ajit R. Jadhav. All rights reserved.

Begun: Thursday 2020 May 21 20:55:37 IST 
This version: Saturday 2020 May 23 20:39:22 IST 
"""

import numpy as np 

"""
Planck's constant
https://en.wikipedia.org/wiki/Planck_constant 
``The Planck constant is defined to have the exact value h = 6.62607015×10−34 J⋅s in SI units.'' 
"""
h = 6.62607015e-34 # J⋅s. Exact value.
hbar = h / (2.0 * np.pi) # J⋅s. 

"""
Electron rest mass
https://en.wikipedia.org/wiki/Electron_rest_mass
``9.1093837015(28)×10−31'' 2018 CODATA value. NIST
"""
me = 9.1093837015e-31 # kg. 


"""
Proton rest mass
https://en.wikipedia.org/wiki/Proton 
1.67262192369(51)×10−27 kg
"""
mP = 1.67262192369e-27 # kg

"""
eV to Joule
https://en.wikipedia.org/wiki/Electronvolt 
1 eV = 1.602176634×10−19 J
"""
eV2J = 1.602176634e-19 # Conversion factor

And, that’s about it, folks! No documentation. But I have added a lot of (otherwise unnecessary) comments.

Take care, and bye for now.


A song I like:

(Marathi) सावली उन्हामध्ये (“saavali unaamadhe”)
Music: Chinar Mahesh
Lyrics: Chandrashekhar Sanekar
Singer: Swapnil Bandodkar

A question regarding the coronavirus

Update: Do read the big “Caution” section too!


Regarding the coronavirus:

It’s well known by now that soap kills the corona-virus. The science of it has been explained at many places, e.g., a tweet here [^], and a news article here [^].

The operative words here are: the lipid bi-layer, and the absence of covalent bond.

If I get the mechanism right (and please do correct me if I am going wrong in any detail), the virus carries a protective membrane of lipid bi-layer on the outside. This membrane is not monolithic. It consists of many smaller fragments loosely held together (may be like what happens with van der Waal’s forces). When a coronavirus is surrounded by soapy water, the lipid particles from the soap compete with the lipid-fragments of the virus’ membrane. So, essentially, the loosely held pieces of the virus’ membrane get preferentially stuck with the lipid particles of the soap, and they remain more strongly stuck with the soap particles. Therefore, when the soap’s lipid particles move away (at the nano-level, may be like in the Brownian motion), the virus membrane falls apart. In short, the lipid particles in the soap literally tear apart the virus’ outer cover.

Now, lipids are basically fats. There are fats in many substances other than in soap, e.g., in vegetable oils like the coconut oil.

There seem to be a lot of naive articles on the Internet about the health benefits of the coconut oil. (“Alternative medicine” etc.) However, no hard or well established facts. The best I could get to was this news article: [^].

No, I am certainly not jumping to any conclusions. More important, I am not recommending anything to any one. Not right away, anyway.

All that I am doing is to ask this specific question: Are there any peer-reviewed and replicated results regarding destruction of the viruses belonging to the coronavirus family, by coconut oil?

Realize, I am not asking for reports on the health benefits/hazards of eating coconut oil.

What I am asking for are some in-vitro trials in which a certain viral load is mixed with some small quantity of coconut oil, and the growth or otherwise of the virus is observed over a passage of time.

If such trials are encouraging enough, then the implication is obvious. After washing your hands periodically, apply coconut oil. (This way, the skin wouldn’t turn too dry either.) Other possibilities exist. Apply a mild (non-irritating) oil like a somewhat diluted eucalyptus oil to your nose. Etc. Even a mild—but well-established—improvement would only be too welcome, given the potential magnitude of this global pandemic.

But, of course, first, there have to be well done trials following some strict protocol. I wanted to know if there have been any such in the past, for the other corona-viruses, and if some are being planned for the current one (covid-19).

I wrote this post just for this one purpose.


Addendum after publication:

I had noticed just one link to some Filipino study in my initial Google search (before writing this post). However, I didn’t put the link here when I wrote the post. The tone of that particular link was not very clear, and frankly, in pursuing many different links, I came to gloss over this study. I just kept the general sense that the coconut oil could be fitting.

Anyway, looks like they in The Philippines are seriously considering such trials. See a university research announcement here [^], and a news article about it, here [^].

…Initially, when I read Ash Joglekar’s tweet [^] some 8–10 days ago, I had begun wondering about the lipids in oils and spices. But I thought that people would sure be pursuing such ideas anyway, and so didn’t write anything about it. I was also busy with my data science trials, and so was mostly away from the ‘net (see the section below).

After waiting for a while, when I didn’t notice any one talking about oils (like the eucalyptus oil), I decided to do a search on this topic today. There were quite a few blog posts or write-up about using essential oils and all. Various google searches throw up links to them. But I think that those ideas are not on the target (and may in fact introduce skin irritation!).

But the Filipino study seems to be different. I would like to see how their trials are progressing. Benefits of ingesting (eating) coconut oil was also a new thing to me.

I also think that others (say Indian scientists) could easily take up the necessary in-vitro observations, regardless of how the clinical trials in The Philippines progress. In fact, they should. The study won’t be very expensive, I think.


Further addition:

Come to think of it, my suggestion might look ludicrous. “Coconut oil? stopping viruses? Hah! Coconut oil has been in use for thousands of years. Why didn’t it help in all those plagues of the past?”

Ummm… My point is simple. Today, we understand the roles that different measures have to play in public health systems. We do advise frequently washing hands with soap water. We do acknowledge that the lowly soap-water works better than the much more costly hand sanitizers. The mechanism for the effectiveness of soap is known. The knowledge naturally leads to searching for other materials that might perhaps offer a similar mechanism, and are otherwise safe and suitable for adoption.

Yes, using coconut oil does look like a nutty idea, on the face of it. But then, come to think of it, soap was available in 1918 too, when the Spanish flu struck. Should we therefore have refused testing soap-water against the coronavirus? …

… All that I am saying is what holds for the simple soap can perhaps also hold for other suitable materials, which are otherwise quite safe on us. Coconut is known to be one of the safest “material” there is. Also other fatty substances.

Here, Indians might perhaps think of घी i.e. “ghee”, the clarified butter. The clarified butter obtained from cow’s milk, when seasoned for several years (simply by letting sit on the shelf) is known to be an effective remedy. It can be applied directly even to open wounds, and it does help wounds, scars, scabs, etc. heal. When I was young, people in the villages would use it. I was told by the elders that in the olden days, soldiers relied on precisely such things. And, even after seasoning, it still remains safe enough to be ingested too.

If such materials can help, not as anti-viral agents at par with, say Remdesivir or so, but at least as mild but provably effective preventive measures, well and good. If not, keep them aside. (I have no hidden agenda whatsoever about it all, one way or the other.)

But we should at least be willing to test their efficacy, if any. At least in the in-vitro trials. I am not even suggesting the in-vivo trials. The medical community will have to take that call—provided the in-vitro trials do show something promising. But I do suggest the in-vitro trials. These could be done very fast, wouldn’t cost a lot, and perhaps may throw up something really valuable. That’s my point.

So, there.


CAUTION!

DO NOT START APPLYING COCONUT OIL ON YOUR BODY RIGHT AWAY!

This post is not at all meant for advising application of coconut oil! Understand this part well!

Oils are sticky. This can fact can make for a huge risk factor if the coconut oil / similar substances do not show any anti-viral activity. In fact, in such a case, begin sticky, they may perhaps make a bad situation worse by accumulating bacteria/viruses!

So, don’t make worse of an already bad situation. Don’t interpret this post as advising any practice. This post is meant only to suggest undertaking the kind of research that has been outlined. It is only if (and when) that the suggested research shows any promising results that further actions, such as developing the right kind of a protocol for usage, will have to be developed. That’s the job for the medical research community.

Research is not the same as a well established and safe technique

So, for now, in practice, stick with only the tried and true: Wash your hands with soap frequently, for at least 20 seconds at a time, as has been advised. Do not start applying the coconut oil/etc. on hands.


An aside:

These days, I am busy conducting trials for testing some of my data science-related ideas.

I have only one machine. It’s a CPU-only machine. (There is a GPU in it, but it’s Radeon. I couldn’t get TF to run on top of it). So, even for relatively smaller tasks, the trials go on for very long times (2–5 hours is common, sometimes even more).

When a trial is in progress, all the 8 virtual cores are boosted to 100% load. So, it’s not possible to do anything else, such as blogging or checking emails. (FireFox in fact sometimes crashes the machine, and I don’t want to lose data or compromise the integrity of the trials.) That’s why, these days, I am mostly not available on the Internet.

These trials should go on for quite some time (at least a couple of weeks if not more). Therefore, my blogging and Internet presence is going to be minimal. Just to let you know.

I deliberately took an interruption today, just to write this post, because of its obvious topical importance.


A song I like:

(Western, pop) “Looking alive”
Singer: Madison Cunningham

[I happened to listen to the “Live from here” version first [^]. I like it better than the “Warehouse” version [^].

Anyway, see if you enjoy the song, take care, and by for now…may be for days or a couple of weeks or so—I have my data science trials to run.]


History:
— First published: 2020.03.15 16:36 IST
— Added the “addendum” section: 2020.03.15 18:41 IST
— Added the songs section: 2020.03.16 14:17 IST
— Added the “Further addition” section: 2020.03.16 19:28 IST
— Added the “Caution” section: 2020.03.16 21:31 IST

 

“shoonya. … shoonyaatoon he jag utpanna zaale.”

(Marathi) “shoonya. …shoonyaatoon he jag utpanna zaale.”

That’s what our (retard/retarded/idiotic/idiot/moronic/cretin-some/even worse, but mostly more European-looking, e.g., “goraa”-looking by skin-color (etc.) than otherwise) Brahmins have always told us—all of them. And, our casteist-Brahmins have always taken the fullest advantage of the same. Especially if they went to an IIT to get a JPBTI. (What makes you think that attending IIT is enough to eradicate caste-ism out of one?)

An English translation of “shoonya”: the Zero/the Naught.

An English translation of the full statement: “The world [actually, thereby meaning, the entire universe] came into being from the Zero / the Naught.”

Always pick this one up for your meditation, even just for deep thought (and not a systematically trained meditation), whenever you think of the casteist-Brahmins, especially those from Pune, India (my birth-place and home-town).

… And you will do that, won’t you? [And, don’t say back: “But I don’t think of them!”]


Here is one of the zillion references to the position. (Pune casteist-Brahmins (rich and all) are emphatically not alone.): [^].


Update on 2019.06.12 14:59

Turns out that this post has come out to be a bit too rant-some for my liking. Also, when I wrote it last night, I thought that the philosophic position from which I wrote it would be clear enough! Yes, I really did think so, last night! But this morning, I figured out that it wasn’t so. Further, the issue is also is of a great philosophic importance. So, today, let me note at least the bare essentials of the philosophic analysis which had gone before I wrote the above post.

The quote actually commits only one error, but it also paves a way for another, grave, error. They in turn lead to a lot of other errors, including legitimizing the pure evil of casteism. Let me explain how.

Consider the quote again: The universe came into being from the Zero / the Naught.

The first error—one that is more easy to pick out—is that some precondition is being prescribed for the entire universe, i.e., for Existence as such. That’s all that the quote by itself states.

Since this is a metaphysical statement, and not mathematical, The Zero here means Non-Existence. So, no, the Zero here does not by itself mean some supposed Mystical Consciousness that created the Existence.

But note the context here. Since the concept of Existence is the most fundamental one of all, since it encompasses literally everything that ever exists, has ever existed or will ever exist, even just the simple device of importing into an argument a contra to Existence, an alternative to it, and according this alternative the same epistemological status as that of Existence, by itself leads to horrible consequences. The act is horrendous only because the concept of Existence is so fundamental—it’s the most fundamental concept. Given the proper hierarchical place of the concept of Existence, positing something—anything—alternative it, therefore, by itself has the effect of making the entire knowledge-hierarchy superfluous, with an alternative being thereby being made to lie at an even more fundamental level.

So, the issue subtly shifts, without the speaker having to explicitly name it, to a question of figuring out what this alternative could possibly be.

Given the nature of the things, the only alternative that could possibly make any sense to anyone would be: some or the other consciousness. The road is therefore paved for legitimizing the primacy of consciousness—a hallmark of mysticism.

Since men do sense, through a direct grasp, that their consciousness is not so capable that they could make Existence dance in accordance to their wishes, and since the proceedings now are being conducted firmly in the abstract terms, and since the layman is unable to counter it at the same level of abstraction, a further road now gets paved, viz., that for welcoming some mystical, Super-etc.-Consciousness.

All that the quoted formulation seeks to do is for you to grant legitimacy to this mystical formulation, viz., there is some mystical Super-Consciousness that preceded, and thus produced, Existence.

Got the trick?

Study the method of the Brahmins. They don’t name the issues directly. And especially if are like the irrational Brahmins of India, they also ensure that the entire proceedings occurs at an abstract level. And that makes it worse.

A mystic is always bad. But he could be as lacking of consequences as some random trickster who performs road-side shows. The mystic becomes bad, horrendous, only when he practices his art in the intellectual, abstract terms, in this world. A “sanyaasee” who retires to Himalayas doesn’t usually engage in abstract intellectual matters, and anyway is removed from the mundane world. So, any mysticism that he carries too doesn’t matter to the rest of us.

But a Brahmin who stays in the mainstream society, and intellectualizes, does matter. Afterall, in India, traditionally, the only men who were charged with (and allowed) dealing with abstractions were Brahmins.

The membership to this group was, for at least a couple of millenia if not more, on the basis of birth alone. … Sure, not all people born into a given caste are bad. But that is besides the point. The premises and the fact of abstract intellectualizations, and their consequences, is what we are concerned with, here.

So, once again carefully observe the role of abstractions—and the consequences of making, and keeping, mysticism abstract.

The Indian term for the aforementioned kind of a mystical Super-Consciousness—one that precedes Existence—was (and is): “bramha” (and not “bramhaa”). A “braamhaNa” was one who had a knowledge of (and therefore had a special access to) the Super-Consciousness that is the “bramha”. That’s what the literal meaning of the Sanskrit term is. “Brahmin” is just an Anglicization of “braamhaNa”.

If everything in existence is produced by “bramha”, so is every living being—including every human being.

Since all the proceedings are conducted without physical violence, and purely and perfectly at an intellectual plane alone, one “desirable” side-effect it produces is that the layman does not come to doubt that the intellectualizations being offered are not part of rationally acquired and valid knowledge.

It is an objective fact that reason is man’s fundamental means of survival. It therefore is an objective fact that knowledge does mean efficacy, a mastery over the matters it subsumes. In any demonstrable hierarchy of skills, knowledge—properly including also its application—is the most valuable one. It’s a crown skill. (Aristotle called rationality the crown-virtue.)

However, in India, it always was only a Brahmin who was charged with all matters concerning knowledge. And, membership to the class of intellectuals was via birth. That’s what casteism basically boils down to.

Therefore, any random guy, so long as he was born into the Brahmin caste, would necessarily have access to “bramha”. If all stars and mountains and rivers and trees and cats… are produced by “brahma”, and if all people too are produced by “brahma”, and if only a caste-Brahmins has access to “bramha”, and if a caste-Brahmin still was a human being too, then, given the fact that the position of knowledge as a crown-virtue is not being directly challenged at all, is it any surprise that every random caste-Brahmin guy would have to be taken as having “come” from the head of the Super-Consciousness that is the “bramha”?

(Don’t ask me what the term “head—a bodily organ—of a Super Consciousness” mean. I don’t know. Chances are, they might locate the actual living bodies of all caste-Brahmins to constitute the supposed head of that Super Consciousness, too. Who knows. But they certainly are that capable.)

While writing this update, I had said that there were several errors implicit in that statement. The one easiest to make out was: Denying the primacy of Existence. The consequent error, I said, was not as easy to make out. The reason it is difficult to figure out is that it is not directly named in that quote (i.e. the title of this post). But the second error becomes easy to grasp once you figure out that it is Brahmins who have always repeated this quote. The second error actually is a transformation of the first error. It is: the Primacy of “bramha”’s Consciousness. Introduce the third error: That only caste-Brahmin has access to “bramha”, and the lethal weapon is completed.

And what is “brahma”, you still ask? Easy enough. In practical terms, it means whatever it is that happens to constitute the contents of consciousness of any of the caste-Brahmins—including casteist-Brahmins.

And yes, there is ample evidence—for those willing to see it—that caste-Brahminism is not only wide-spread in Indian IT industry (especially that in Pune), but also that it has in fact been on the upswing for quite some time by now. I, for one, certainly do believe that if I were a Brahmin, I would have progressed much more rapidly, far more easily, in the Indian IT industry. At any rate, I wouldn’t go jobless even as irrational Brahmins in Pune kept on amassing money.

To conclude: Yes, it was a rant. But no, it wasn’t just a rant.


No songs section for this time around. I go jobless.

BTW, for cross-reference, cf. an American poem from (I guess) the mid-20th century: “The world began when I was born…”