Browse code

pass SiteArrays directly to _make_onsite_terms and _make_hopping_terms

These will be needed later when verifying that constant values have
the correct shape.

Joseph Weston authored on 11/12/2019 13:41:48
Showing 1 changed files
... ...
@@ -2387,7 +2387,7 @@ def _sort_hopping_term(term, value):
2387 2387
     return term, value
2388 2388
 
2389 2389
 
2390
-def _make_onsite_terms(builder, sites, site_offsets, term_offset):
2390
+def _make_onsite_terms(builder, sites, site_arrays, term_offset):
2391 2391
     # Construct onsite terms.
2392 2392
     #
2393 2393
     # onsite_subgraphs
... ...
@@ -2409,6 +2409,8 @@ def _make_onsite_terms(builder, sites, site_offsets, term_offset):
2409 2409
     #   Hamiltonian term associated with each site/hopping. For
2410 2410
     #   Hermitian conjugate hoppings "-term - 1" is stored instead.
2411 2411
 
2412
+    site_offsets = np.cumsum([0] + [len(sa) for sa in site_arrays])
2413
+
2412 2414
     onsite_subgraphs = []
2413 2415
     onsite_term_values = []
2414 2416
     onsite_term_parameters = []
... ...
@@ -2479,7 +2481,7 @@ def _make_onsite_terms(builder, sites, site_offsets, term_offset):
2479 2481
             onsite_term_errors, _onsite_term_by_site_id)
2480 2482
 
2481 2483
 
2482
-def _make_hopping_terms(builder, graph, sites, site_offsets, cell_size, term_offset):
2484
+def _make_hopping_terms(builder, graph, sites, site_arrays, cell_size, term_offset):
2483 2485
     # Construct the hopping terms
2484 2486
     #
2485 2487
     # The logic is the same as for the onsite terms, with the following
... ...
@@ -2490,6 +2492,8 @@ def _make_hopping_terms(builder, graph, sites, site_offsets, cell_size, term_off
2490 2492
     #   is a part of. For Hermitian conjugate hoppings "-term_number -1"
2491 2493
     #   is stored instead.
2492 2494
 
2495
+    site_offsets = np.cumsum([0] + [len(sa) for sa in site_arrays])
2496
+
2493 2497
     hopping_subgraphs = []
2494 2498
     hopping_term_values = []
2495 2499
     hopping_term_parameters = []
... ...
@@ -2628,17 +2632,14 @@ class FiniteVectorizedSystem(_VectorizedFinalizedBuilderMixin, system.FiniteVect
2628 2632
         del id_by_site  # cleanup due to large size
2629 2633
 
2630 2634
         site_arrays = _make_site_arrays(builder.H)
2631
-        # We need this to efficiently find which array a given
2632
-        # site belongs to
2633
-        site_offsets = np.cumsum([0] + [len(arr) for arr in site_arrays])
2634 2635
 
2635 2636
         (onsite_subgraphs, onsite_terms, onsite_term_values,
2636 2637
          onsite_term_errors, _onsite_term_by_site_id) =\
2637
-            _make_onsite_terms(builder, sites, site_offsets, term_offset=0)
2638
+            _make_onsite_terms(builder, sites, site_arrays, term_offset=0)
2638 2639
 
2639 2640
         (hopping_subgraphs, hopping_terms, hopping_term_values,
2640 2641
          hopping_term_errors, _hopping_term_by_edge_id) =\
2641
-            _make_hopping_terms(builder, graph, sites, site_offsets,
2642
+            _make_hopping_terms(builder, graph, sites, site_arrays,
2642 2643
                                 len(sites), term_offset=len(onsite_terms))
2643 2644
 
2644 2645
         # Construct the combined onsite/hopping term datastructures
... ...
@@ -2941,15 +2942,13 @@ class InfiniteVectorizedSystem(_VectorizedFinalizedBuilderMixin, system.Infinite
2941 2942
             + _make_site_arrays(interface)
2942 2943
         )
2943 2944
 
2944
-        site_offsets = np.cumsum([0] + [len(arr) for arr in site_arrays])
2945
-
2946 2945
         (onsite_subgraphs, onsite_terms, onsite_term_values,
2947 2946
          onsite_term_errors, _onsite_term_by_site_id) =\
2948
-            _make_onsite_terms(builder, sites, site_offsets, term_offset=0)
2947
+            _make_onsite_terms(builder, sites, site_arrays, term_offset=0)
2949 2948
 
2950 2949
         (hopping_subgraphs, hopping_terms, hopping_term_values,
2951 2950
          hopping_term_errors, _hopping_term_by_edge_id) =\
2952
-            _make_hopping_terms(builder, graph, sites, site_offsets,
2951
+            _make_hopping_terms(builder, graph, sites, site_arrays,
2953 2952
                                 cell_size, term_offset=len(onsite_terms))
2954 2953
 
2955 2954
         # Construct the combined onsite/hopping term datastructures